<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Developer Tools on Uday K</title><link>https://uday.dev/tags/developer-tools/</link><description>Recent content in Developer Tools on Uday K</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 09 Aug 2026 11:15:02 -0400</lastBuildDate><atom:link href="https://uday.dev/tags/developer-tools/index.xml" rel="self" type="application/rss+xml"/><item><title>GitHub Copilot + LSP: Smarter Code Context and Better Token Efficiency</title><link>https://uday.dev/posts/copilot-with-lsp/</link><pubDate>Sun, 09 Aug 2026 11:15:02 -0400</pubDate><guid>https://uday.dev/posts/copilot-with-lsp/</guid><description>&lt;p&gt;This guide walks through configuring Language Server Protocol (LSP) support for &lt;strong&gt;Go, Python, Ruby, TypeScript, and JavaScript&lt;/strong&gt; in GitHub Copilot CLI. It also includes practices for keeping AI coding sessions efficient and token-conscious.&lt;/p&gt;&#10;&lt;h2 id="part-of-a-series"&gt;Part of a Series&lt;/h2&gt;&#10;&lt;p&gt;This post is part of a broader series exploring how modern AI coding&#10;assistants understand and work with code.&lt;/p&gt;&#10;&lt;p&gt;The series starts with the foundations of how source code moves through the&#10;development toolchain—from &lt;strong&gt;ASTs and parsing to compilers and language&#10;servers (LSP)&lt;/strong&gt;—and then builds on those concepts to explain how AI coding&#10;tools can use this information to navigate and reason about a codebase.&lt;/p&gt;</description></item><item><title>fast-deepseek: Building a Lightweight DeepSeek Client for Ruby</title><link>https://uday.dev/posts/fast-deepseek/</link><pubDate>Wed, 26 Mar 2025 18:12:39 -0400</pubDate><guid>https://uday.dev/posts/fast-deepseek/</guid><description>&lt;p&gt;AI APIs have become remarkably easy to call.&lt;/p&gt;&#10;&lt;p&gt;The hard part isn&amp;rsquo;t sending an HTTP request. It&amp;rsquo;s deciding how much abstraction you actually need.&lt;/p&gt;&#10;&lt;p&gt;When I started experimenting with DeepSeek from Ruby, I didn&amp;rsquo;t want an AI framework, an agent abstraction, or a large dependency tree. I wanted this:&lt;/p&gt;&#10;&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-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;FastDeepseek&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;Client&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;new(&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;api_key&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;ENV&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;fetch(&lt;span style="color:#e6db74"&gt;&amp;#34;DEEPSEEK_API_KEY&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;response &lt;span style="color:#f92672"&gt;=&lt;/span&gt; client&lt;span style="color:#f92672"&gt;.&lt;/span&gt;chat(&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Explain Ruby blocks in simple terms&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;model&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;deepseek-chat&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That idea became &lt;a href="https://rubygems.org/gems/fast-deepseek"&gt;fast-deepseek on RubyGems&lt;/a&gt; and &lt;a href="https://github.com/your-handle/fast-deepseek"&gt;fast-deepseek on GitHub&lt;/a&gt; — a lightweight Ruby client for the DeepSeek API.&lt;/p&gt;</description></item><item><title>Effortlessly Manage Multiple Git Accounts</title><link>https://uday.dev/posts/multiple_git_accounts/</link><pubDate>Wed, 13 May 2020 16:14:59 -0400</pubDate><guid>https://uday.dev/posts/multiple_git_accounts/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;&#10;&lt;p&gt;Managing multiple git accounts becomes essential when you have multiple accounts that you want to contribute to. This tutorial will guide you through the process of seamlessly switching between two git accounts without any hassle.&lt;/p&gt;&#10;&lt;h2 id="steps"&gt;Steps&lt;/h2&gt;&#10;&lt;p&gt;Follow these steps to effectively manage multiple git accounts:&lt;/p&gt;&#10;&lt;h3 id="1-create-git-accounts"&gt;1. Create Git Accounts&lt;/h3&gt;&#10;&lt;p&gt;Start by creating two git accounts, either on platforms like GitHub or GitLab, or using existing accounts from your workplace. For this tutorial, we will use two accounts created on GitHub.com.&lt;/p&gt;</description></item></channel></rss>