<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Abhishek Amralkar on Medium]]></title>
        <description><![CDATA[Stories by Abhishek Amralkar on Medium]]></description>
        <link>https://medium.com/@abhishekamralkar?source=rss-26504703b9ff------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/2*FnUlumBTfoGDiNLc-eH5nA.jpeg</url>
            <title>Stories by Abhishek Amralkar on Medium</title>
            <link>https://medium.com/@abhishekamralkar?source=rss-26504703b9ff------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 20:21:06 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@abhishekamralkar/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Meet Argus: Local AI Vulnerability Scanner]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-snippet">How a RAG pipeline, DuckDB, and a local LLM turned dependency scanning into something I actually enjoy running</p><p class="medium-feed-link"><a href="https://abhishekamralkar.medium.com/meet-argus-local-ai-vulnerability-scanner-bed6ac579c55?source=rss-26504703b9ff------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://abhishekamralkar.medium.com/meet-argus-local-ai-vulnerability-scanner-bed6ac579c55?source=rss-26504703b9ff------2</link>
            <guid isPermaLink="false">https://medium.com/p/bed6ac579c55</guid>
            <category><![CDATA[nvd]]></category>
            <category><![CDATA[vulnerability]]></category>
            <category><![CDATA[cve]]></category>
            <category><![CDATA[rags]]></category>
            <dc:creator><![CDATA[Abhishek Amralkar]]></dc:creator>
            <pubDate>Thu, 14 May 2026 05:59:42 GMT</pubDate>
            <atom:updated>2026-05-14T05:59:42.567Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[How to Fine-Tune and Run a Local LLM with Ollama on a CPU-Only Machine]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://abhishekamralkar.medium.com/how-to-fine-tune-and-run-a-local-llm-with-ollama-on-a-cpu-only-machine-8b73b181e973?source=rss-26504703b9ff------2"><img src="https://cdn-images-1.medium.com/max/1400/1*b3ajaJ6JW45Ktj8Qm2RhLg.png" width="1400"></a></p><p class="medium-feed-snippet">Why This Matters</p><p class="medium-feed-link"><a href="https://abhishekamralkar.medium.com/how-to-fine-tune-and-run-a-local-llm-with-ollama-on-a-cpu-only-machine-8b73b181e973?source=rss-26504703b9ff------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://abhishekamralkar.medium.com/how-to-fine-tune-and-run-a-local-llm-with-ollama-on-a-cpu-only-machine-8b73b181e973?source=rss-26504703b9ff------2</link>
            <guid isPermaLink="false">https://medium.com/p/8b73b181e973</guid>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[llm]]></category>
            <category><![CDATA[ollama]]></category>
            <dc:creator><![CDATA[Abhishek Amralkar]]></dc:creator>
            <pubDate>Sun, 26 Apr 2026 05:26:01 GMT</pubDate>
            <atom:updated>2026-04-26T05:26:01.276Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Run LLMs on Your Laptop]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://abhishekamralkar.medium.com/run-llms-on-your-laptop-66ced5957cf2?source=rss-26504703b9ff------2"><img src="https://cdn-images-1.medium.com/max/1024/1*r22t3MEkkcZ0nMK3i-Fh2w.png" width="1024"></a></p><p class="medium-feed-snippet">Three commands. That&#x2019;s all it takes to have a fully capable large language model running locally on your machine &#x2014; no internet connection&#x2026;</p><p class="medium-feed-link"><a href="https://abhishekamralkar.medium.com/run-llms-on-your-laptop-66ced5957cf2?source=rss-26504703b9ff------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://abhishekamralkar.medium.com/run-llms-on-your-laptop-66ced5957cf2?source=rss-26504703b9ff------2</link>
            <guid isPermaLink="false">https://medium.com/p/66ced5957cf2</guid>
            <category><![CDATA[cli]]></category>
            <category><![CDATA[rags]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[ollama]]></category>
            <category><![CDATA[llm]]></category>
            <dc:creator><![CDATA[Abhishek Amralkar]]></dc:creator>
            <pubDate>Wed, 15 Apr 2026 04:31:28 GMT</pubDate>
            <atom:updated>2026-04-15T04:31:28.257Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Building a CLI Todo App (Part 3 — Upgrading to a Database)]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-snippet">In Part 1, we built a todo app that lived entirely in memory &#x2014; fast, but forgetful. In Part 2, we fixed that by saving tasks to a db.json&#x2026;</p><p class="medium-feed-link"><a href="https://abhishekamralkar.medium.com/building-a-cli-todo-app-part-3-upgrading-to-a-database-71e0c27e2119?source=rss-26504703b9ff------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://abhishekamralkar.medium.com/building-a-cli-todo-app-part-3-upgrading-to-a-database-71e0c27e2119?source=rss-26504703b9ff------2</link>
            <guid isPermaLink="false">https://medium.com/p/71e0c27e2119</guid>
            <dc:creator><![CDATA[Abhishek Amralkar]]></dc:creator>
            <pubDate>Mon, 09 Mar 2026 05:57:13 GMT</pubDate>
            <atom:updated>2026-03-09T05:57:13.462Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Building a CLI Todo App (Part 2 — File-Based Persistence)]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-snippet">In Part 1, we built a simple CLI todo application using in-memory storage with Go slices. It worked great&#x2026; until we closed the terminal&#x2026;</p><p class="medium-feed-link"><a href="https://abhishekamralkar.medium.com/building-a-cli-todo-app-part-2-file-based-persistence-9b6df7b18b1e?source=rss-26504703b9ff------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://abhishekamralkar.medium.com/building-a-cli-todo-app-part-2-file-based-persistence-9b6df7b18b1e?source=rss-26504703b9ff------2</link>
            <guid isPermaLink="false">https://medium.com/p/9b6df7b18b1e</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[linux]]></category>
            <category><![CDATA[learning]]></category>
            <category><![CDATA[golang]]></category>
            <category><![CDATA[command-line-interface]]></category>
            <dc:creator><![CDATA[Abhishek Amralkar]]></dc:creator>
            <pubDate>Wed, 11 Feb 2026 07:22:00 GMT</pubDate>
            <atom:updated>2026-02-14T05:09:07.931Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Building a CLI Todo App (Part 1 — In-Memory Storage)]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-snippet">Let&apos;s build a real-world CLI application in Go, starting from the basics and progressively making it better. By the end of this series&#x2026;</p><p class="medium-feed-link"><a href="https://abhishekamralkar.medium.com/building-a-cli-todo-app-part-1-in-memory-storage-6c3e9119b871?source=rss-26504703b9ff------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://abhishekamralkar.medium.com/building-a-cli-todo-app-part-1-in-memory-storage-6c3e9119b871?source=rss-26504703b9ff------2</link>
            <guid isPermaLink="false">https://medium.com/p/6c3e9119b871</guid>
            <category><![CDATA[golang]]></category>
            <category><![CDATA[trivy]]></category>
            <category><![CDATA[command-line]]></category>
            <category><![CDATA[docker]]></category>
            <category><![CDATA[cloud]]></category>
            <dc:creator><![CDATA[Abhishek Amralkar]]></dc:creator>
            <pubDate>Mon, 09 Feb 2026 06:17:14 GMT</pubDate>
            <atom:updated>2026-02-11T07:23:49.754Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[My Terminal Setup: A Deep Dive into My Zsh Configuration]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://abhishekamralkar.medium.com/my-terminal-setup-a-deep-dive-into-my-zsh-configuration-e36eeb46535b?source=rss-26504703b9ff------2"><img src="https://cdn-images-1.medium.com/max/1920/1*3pSLVe3KlYmH-zNwri1btw.png" width="1920"></a></p><p class="medium-feed-snippet">Moving from Oh-My-Zsh after 10 years</p><p class="medium-feed-link"><a href="https://abhishekamralkar.medium.com/my-terminal-setup-a-deep-dive-into-my-zsh-configuration-e36eeb46535b?source=rss-26504703b9ff------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://abhishekamralkar.medium.com/my-terminal-setup-a-deep-dive-into-my-zsh-configuration-e36eeb46535b?source=rss-26504703b9ff------2</link>
            <guid isPermaLink="false">https://medium.com/p/e36eeb46535b</guid>
            <category><![CDATA[linux]]></category>
            <category><![CDATA[zsh]]></category>
            <category><![CDATA[terminal]]></category>
            <category><![CDATA[zshrc]]></category>
            <dc:creator><![CDATA[Abhishek Amralkar]]></dc:creator>
            <pubDate>Sat, 31 Jan 2026 06:52:35 GMT</pubDate>
            <atom:updated>2026-01-31T06:52:35.940Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Modern CLI Tools to Supercharge Your Workflow]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-snippet">Rust is a systems programming language that has been gaining popularity due to its emphasis on safety, speed, and concurrency. It&#x2019;s a&#x2026;</p><p class="medium-feed-link"><a href="https://abhishekamralkar.medium.com/modern-cli-tools-to-supercharge-your-workflow-36f95d37efa3?source=rss-26504703b9ff------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://abhishekamralkar.medium.com/modern-cli-tools-to-supercharge-your-workflow-36f95d37efa3?source=rss-26504703b9ff------2</link>
            <guid isPermaLink="false">https://medium.com/p/36f95d37efa3</guid>
            <category><![CDATA[terminal]]></category>
            <category><![CDATA[linux]]></category>
            <category><![CDATA[tools]]></category>
            <category><![CDATA[zsh]]></category>
            <category><![CDATA[rust]]></category>
            <dc:creator><![CDATA[Abhishek Amralkar]]></dc:creator>
            <pubDate>Wed, 28 Jan 2026 07:03:24 GMT</pubDate>
            <atom:updated>2026-01-28T07:03:24.590Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[My Zig with Ghostty]]></title>
            <link>https://abhishekamralkar.medium.com/my-zig-with-ghostty-dcd42194bcf4?source=rss-26504703b9ff------2</link>
            <guid isPermaLink="false">https://medium.com/p/dcd42194bcf4</guid>
            <category><![CDATA[tmux]]></category>
            <category><![CDATA[ghostty]]></category>
            <category><![CDATA[linux]]></category>
            <category><![CDATA[productivity]]></category>
            <category><![CDATA[terminal]]></category>
            <dc:creator><![CDATA[Abhishek Amralkar]]></dc:creator>
            <pubDate>Thu, 09 Jan 2025 04:25:55 GMT</pubDate>
            <atom:updated>2025-01-09T04:25:55.623Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FY9TXNnsHaaI4UgELBi6yw.png" /></figure><p>Ghostty is a fast, feature-rich, and cross-platform terminal emulator that uses platform-native UI and GPU acceleration. Ghostty is written in Zig.</p><h4>Install:-</h4><p>To install in MacOS</p><pre># update formulae<br>brew update<br><br># stable<br>brew install --cask ghostty<br><br># tip<br>brew install --cask ghostty@tip</pre><p><a href="https://ghostty.org/docs">Ghostty Docs</a></p><p>Ghostty needs zero configuration. But to customize the use and feel its good to have the config created. Below is my config and its still learning phase</p><p><a href="https://github.com/abhishekamralkar/dotfiles/blob/main/Library/Application%20Support/com.mitchellh.ghostty/config">dotfiles/Library/Application Support/com.mitchellh.ghostty/config at main · abhishekamralkar/dotfiles</a></p><h4>Actions:-</h4><p>Ghostty supports below actions</p><p>Available actions:</p><pre>Available actions:<br><br>  +version<br>  +help<br>  +list-fonts<br>  +list-keybinds<br>  +list-themes<br>  +list-colors<br>  +list-actions<br>  +show-config<br>  +validate-config<br>  +crash-report<br>  +show-face</pre><ul><li>see all available themes</li></ul><pre>ghostty +list-themes</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*F0ch3_7ou90IgbRCqQVAmA.png" /></figure><ul><li>see all keybindings</li></ul><pre>ghostty +list-keybinds</pre><pre><br>super + alt   + shift + j               write_scrollback_file:open<br>super + alt   + shift + w               close_all_windows<br>super + alt   + i                       inspector:toggle<br>super + alt   + right                   goto_split:right<br>super + alt   + down                    goto_split:bottom<br>super + alt   + left                    goto_split:left<br>super + alt   + up                      goto_split:top<br>super + ctrl  + equal                   equalize_splits<br>super + ctrl  + down                    resize_split:down,10<br>super + ctrl  + left                    resize_split:left,10<br>super + ctrl  + up                      resize_split:up,10<br>super + ctrl  + f                       toggle_fullscreen<br>super + ctrl  + right                   resize_split:right,10<br>super + shift + down                    jump_to_prompt:1<br>super + shift + w                       close_window<br>super + shift + left_bracket            previous_tab<br>super + shift + right_bracket           next_tab<br>super + shift + up                      jump_to_prompt:-1<br>super + shift + comma                   reload_config<br>super + shift + enter                   toggle_split_zoom<br>super + shift + j                       write_scrollback_file:paste<br>super + shift + d                       new_split:down<br>ctrl  + shift + left_bracket            previous_tab<br>ctrl  + shift + period                  move_tab:1<br>ctrl  + shift + comma                   move_tab:-1<br>ctrl  + shift + right_bracket           next_tab<br>ctrl  + shift + tab                     previous_tab<br>super + page_up                         scroll_page_up<br>super + physical:four                   goto_tab:4<br>super + backspace                       esc:<br>super + w                               close_surface<br>super + physical:eight                  goto_tab:8<br>super + down                            jump_to_prompt:1<br>super + enter                           toggle_fullscreen<br>super + t                               new_tab<br>super + c                               copy_to_clipboard<br>super + physical:one                    goto_tab:1<br>super + equal                           increase_font_size:1<br>super + physical:three                  goto_tab:3<br>super + right                           text:\x05<br>super + d                               new_split:right<br>super + plus                            increase_font_size:1<br>super + q                               quit<br>super + home                            scroll_to_top<br>super + left                            text:\x01<br>super + comma                           open_config<br>super + minus                           decrease_font_size:1<br>super + a                               select_all<br>super + n                               new_window<br>super + page_down                       scroll_page_down<br>super + left_bracket                    goto_split:previous<br>super + physical:nine                   last_tab<br>super + right_bracket                   goto_split:next<br>super + end                             scroll_to_bottom<br>super + zero                            reset_font_size<br>super + physical:five                   goto_tab:5<br>super + physical:seven                  goto_tab:7<br>super + up                              jump_to_prompt:-1<br>super + k                               clear_screen<br>super + s                               toggle_quick_terminal<br>super + physical:two                    goto_tab:2<br>super + physical:six                    goto_tab:6<br>super + v                               paste_from_clipboard<br>alt   + left                            esc:b<br>alt   + right                           esc:f<br>ctrl  + v                               new_split:right<br>ctrl  + h                               new_split:down<br>ctrl  + tab                             next_tab<br>ctrl  + z                               close_surface<br>shift + up                              adjust_selection:up<br>shift + left                            adjust_selection:left<br>shift + page_up                         adjust_selection:page_up<br>shift + end                             adjust_selection:end<br>shift + right                           adjust_selection:right<br>shift + page_down                       adjust_selection:page_down<br>shift + down                            adjust_selection:down<br>shift + home                            adjust_selection:home</pre><p>For me migration from iTerm to Ghostty is super easy. I’m looking forward to using Ghostty as my default shell moving forward.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=dcd42194bcf4" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building a Word Frequency Analyzer in Go: A Step-by-Step Guide]]></title>
            <link>https://abhishekamralkar.medium.com/building-a-word-frequency-analyzer-in-go-a-step-by-step-guide-cced76e3bc1b?source=rss-26504703b9ff------2</link>
            <guid isPermaLink="false">https://medium.com/p/cced76e3bc1b</guid>
            <category><![CDATA[go]]></category>
            <category><![CDATA[golang]]></category>
            <dc:creator><![CDATA[Abhishek Amralkar]]></dc:creator>
            <pubDate>Fri, 23 Aug 2024 03:50:47 GMT</pubDate>
            <atom:updated>2024-08-23T03:50:47.487Z</atom:updated>
            <content:encoded><![CDATA[<p>In this blog post, we will walk through a Go program that reads text input, counts the frequency of each unique word, and sorts and displays these words by their frequency of occurrence. This program is a great example of how to efficiently process text using Go’s standard library, especially the <strong>bufio</strong> and <strong>sort</strong> packages.</p><p><strong>Introduction</strong></p><p>Text processing is a common task in programming, whether it’s for analyzing logs, parsing documents, or performing natural language processing. One of the fundamental tasks in text processing is counting how many times each word appears in a given input. In this tutorial, we’ll write a Go program that reads text input, counts the occurrences of each word, and then sorts the words by their frequency.</p><p><strong>The Program</strong></p><p>Here’s the complete Go program we’ll be discussing:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/4a8f67608986e2b17dc9e1696426a46b/href">https://medium.com/media/4a8f67608986e2b17dc9e1696426a46b/href</a></iframe><p><a href="https://gist.github.com/abhishekamralkar/ad0b1d31c9dcc0954ccfa709c5ff637c">Step-by-Step Explanation</a></p><p>Let’s break down the code step by step to understand how it works.</p><p><strong>1. Setting Up the Scanner</strong></p><p>The program begins by setting up a `Scanner` to read input from standard input (os.Stdin). The <strong>bufio</strong> package provides a convenient way to read input efficiently:</p><pre><br>scan := bufio.NewScanner(os.Stdin)</pre><p>The <strong>Scanner</strong> is a powerful tool for reading text, as it can be easily configured to split the input into words, lines, or custom tokens.</p><p><strong>2. Configuring the Scanner to Split by Words</strong></p><p>By default, the `Scanner` reads input line by line. However, since we want to count individual words, we need to configure the scanner to split input by words using <strong>bufio.ScanWords</strong>:</p><pre><br>scan.Split(bufio.ScanWords)</pre><p>The `bufio.ScanWords` function tells the scanner to treat each word as a separate token, which makes it easy to process each word individually.</p><p><strong>3. Counting Word Frequencies</strong></p><p>Next, we use a map to keep track of how many times each word appears in the input. Maps in Go are a key-value data structure, making them ideal for this purpose:</p><pre><br>words := make(map[string]int)<br>for scan.Scan() {<br> words[scan.Text()]++<br>}</pre><p>- <strong>scan.Scan()</strong>: Advances the scanner to the next word.<br>- <strong>scan.Text()</strong>: Retrieves the current word as a string.<br>- <strong>words[scan.Text()]++</strong>: Increments the count for the word in the map. If the word isn’t already in the map, it’s added with an initial count of 1.</p><p><strong>4. Displaying the Number of Unique Words</strong></p><p>Once all the input has been processed, we can determine how many unique words were found by checking the length of the map:</p><pre><br>fmt.Println(len(words), “unique words”)<br></pre><p>The <strong>len(words)</strong> function returns the number of keys in the map, which corresponds to the number of unique words.</p><p><strong>5. Preparing Data for Sorting</strong></p><p>To sort the words by their frequency, we need to move the word-count pairs from the map into a slice of structs. We define a simple <strong>data</strong> struct to hold each word and its count:</p><pre>go<br>type data struct {<br> k string<br> v int<br>}<br>var s []data<br>for k, v := range words {<br> s = append(s, data{k, v})<br>}</pre><p>Here, we iterate over the map, appending each word and its count to the slice <strong>s</strong>.</p><p><strong>6. Sorting the Words by Frequency</strong></p><p>Go’s <strong>sort</strong> package allows us to sort slices in a flexible manner. We use <strong>sort.Slice</strong> to sort our slice of <strong>data</strong> structs in descending order based on the word count:</p><pre><br>sort.Slice(s, func(i, j int) bool {<br> return s[i].v &gt; s[j].v<br>})</pre><p>This sorting function compares the counts (<strong>v)</strong> of two elements and orders them so that the words with higher counts come first.</p><p><strong>7. Displaying the Sorted Results</strong></p><p>Finally, we iterate over the sorted slice and print each word along with its frequency:</p><pre><br>for _, s := range s {<br> fmt.Println(s.k, &quot;appears&quot;, s.v, &quot;times&quot;)<br>}</pre><p>This loop prints each word followed by the number of times it appeared in the input.</p><p><strong>Conclusion</strong></p><p>In this tutorial, we’ve walked through a Go program that reads text input, counts the frequency of each unique word, and sorts the words by their frequency. This program is an excellent demonstration of how to use Go’s <strong>bufio</strong> and <strong>sort</strong> packages for efficient text processing.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cced76e3bc1b" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>