<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: EffessDev</title>
    <description>The latest articles on DEV Community by EffessDev (@effessdev).</description>
    <link>https://dev.to/effessdev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3932962%2Ff8063266-7ea2-44d6-8ff0-7fbce9748ba7.png</url>
      <title>DEV Community: EffessDev</title>
      <link>https://dev.to/effessdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/effessdev"/>
    <language>en</language>
    <item>
      <title>This app lets your chatbot see your codebase</title>
      <dc:creator>EffessDev</dc:creator>
      <pubDate>Thu, 16 Jul 2026 16:10:23 +0000</pubDate>
      <link>https://dev.to/effessdev/i-made-an-app-to-let-your-chatbot-see-your-codebase-4ngn</link>
      <guid>https://dev.to/effessdev/i-made-an-app-to-let-your-chatbot-see-your-codebase-4ngn</guid>
      <description>&lt;p&gt;A coding agent that can read and edit files in your repository directly is out of reach for me. Since regular chatbots generally have generous free tiers, that is what I use regularly for coding.&lt;/p&gt;

&lt;p&gt;Sometimes I want to give the chatbot some context about my existing code. What I generally do is copy and paste the relevant files, put them in code blocks, and type in the paths to those files.&lt;/p&gt;

&lt;p&gt;However, giving the chatbot an idea of how the overall project is structured (files and folders) is crucial for optimal outputs. Doing this manually is really hard.&lt;/p&gt;

&lt;p&gt;What I used to do was run the &lt;code&gt;tree&lt;/code&gt; command and copy its output. But this includes files that are not included in version control (such as &lt;code&gt;node_modules&lt;/code&gt;), which can get high in number and clutter the output. I found out that I can use the &lt;code&gt;--gitignore&lt;/code&gt; flag to only include tracked files, but the overall workflow was still slow.&lt;/p&gt;

&lt;p&gt;I found some good options online (such as &lt;a href="https://repomix.com/" rel="noopener noreferrer"&gt;RepoMix&lt;/a&gt;), but they seemed to be much more complex than what I needed or optimized for slightly different things.&lt;/p&gt;

&lt;p&gt;So, with the help of AI, I quickly created a Python app optimized for my specific workflow, and named it &lt;a href="https://github.com/effessdev/reptclip" rel="noopener noreferrer"&gt;ReptClip&lt;/a&gt;. Here is how it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  App overview
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/effessdev/reptclip#install" rel="noopener noreferrer"&gt;installation&lt;/a&gt; is super simple. You can run the command &lt;code&gt;pip install reptclip&lt;/code&gt; (or &lt;code&gt;pipx&lt;/code&gt; in Ubuntu) to install and use the app.&lt;/p&gt;

&lt;p&gt;When you run the app from your terminal, relevant parts of your codebase, such as the project structure and the files you specify, are &lt;strong&gt;copied straight to your clipboard&lt;/strong&gt;! No output files, no manual copying. You can paste it into the chat box and start typing your prompt right away.&lt;/p&gt;

&lt;p&gt;For example, an output might look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Project structure&lt;/span&gt;

&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;AGENTS.md
README.md
docs/README.md
src/main.py
src/functions.py
&lt;span class="p"&gt;```&lt;/span&gt;

&lt;span class="gh"&gt;# AGENTS.md&lt;/span&gt;

&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;Contents of AGENTS.md
&lt;span class="p"&gt;```&lt;/span&gt;

&lt;span class="gh"&gt;# src/main.py&lt;/span&gt;

&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;Contents of main.py
&lt;span class="p"&gt;```&lt;/span&gt;

&lt;span class="gh"&gt;# Prompt&lt;/span&gt;

&amp;lt;- cursor will be here,
   you can quickly start typing your prompt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, it only uses a few tokens too!&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;p&gt;You can use the &lt;code&gt;-i&lt;/code&gt; or &lt;code&gt;--include&lt;/code&gt; and &lt;code&gt;-e&lt;/code&gt; or &lt;code&gt;--exclude&lt;/code&gt; flags to specify which files to include. Glob patterns (&lt;code&gt;**&lt;/code&gt; and &lt;code&gt;*&lt;/code&gt;) as well as relative paths are supported. Simply running the command without any arguments (&lt;code&gt;reptclip&lt;/code&gt; or &lt;code&gt;rrcc&lt;/code&gt;) will only copy the project structure. Even that only saves a ton of time for a lot of people. Click &lt;a href="https://github.com/effessdev/reptclip#basic-usage" rel="noopener noreferrer"&gt;here&lt;/a&gt; for basic usage instructions.&lt;/p&gt;

&lt;p&gt;I also added an alias &lt;code&gt;rrcc&lt;/code&gt; so that you can launch the app either using the full name &lt;code&gt;reptclip&lt;/code&gt; or the quicker &lt;code&gt;rrcc&lt;/code&gt; command from the terminal. &lt;code&gt;rrcc&lt;/code&gt; can be typed using only your left hand.&lt;/p&gt;

&lt;p&gt;Moreover, you can create a &lt;code&gt;reptclip-config.toml&lt;/code&gt; file (use the &lt;code&gt;config&lt;/code&gt; command to create a default one) in the root of your repository for default include and exclude patterns for a specific project. The config file also supports presets, which you can define in the config file and select one or more of them using &lt;code&gt;-p&lt;/code&gt; or &lt;code&gt;--preset&lt;/code&gt; flag (see &lt;a href="https://github.com/effessdev/reptclip#advanced-usage" rel="noopener noreferrer"&gt;Advanced Usage&lt;/a&gt; for more details). The content of files over 1MB and binary files is not pasted, and a placeholder mentioning the reason is included instead. Binary files are identified using their extensions as well as their content.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thanks
&lt;/h2&gt;

&lt;p&gt;Thank you for reading till the end. If you found this app useful, please consider starring the &lt;a href="https://github.com/effessdev/reptclip" rel="noopener noreferrer"&gt;repo&lt;/a&gt; and liking this post. If you have any suggestions, please let me know by writing a comment. Pull requests are also welcome if you are interested!&lt;/p&gt;

&lt;p&gt;If you think I am overstating a simple project, I wouldn't blame you. I am just an 18-year-old kid (about to start college), anyway 🙄&lt;/p&gt;

&lt;p&gt;Thanks for your support!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/effessdev/reptclip" rel="noopener noreferrer"&gt;View the project on GitHub&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/effessdev" rel="noopener noreferrer"&gt;Follow me on GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>productivity</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Dual role of * in C</title>
      <dc:creator>EffessDev</dc:creator>
      <pubDate>Wed, 15 Jul 2026 12:22:56 +0000</pubDate>
      <link>https://dev.to/effessdev/dual-role-of-asterisk-in-c-31f2</link>
      <guid>https://dev.to/effessdev/dual-role-of-asterisk-in-c-31f2</guid>
      <description>&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Let's create a variable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;myNum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, &lt;code&gt;myNum&lt;/code&gt; refers to the value &lt;code&gt;5&lt;/code&gt;. However, we can get its memory address using the &lt;code&gt;&amp;amp;&lt;/code&gt; operator like this: &lt;code&gt;&amp;amp;myNum&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Role 1: Creating pointers
&lt;/h2&gt;

&lt;p&gt;A pointer holds a memory address.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;pointerToMyNum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;myNum&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Role 2: Modifying values using a pointer
&lt;/h2&gt;

&lt;p&gt;In this case, &lt;code&gt;*&lt;/code&gt; works as the dereference operator.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;pointerToMyNum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, if we print &lt;code&gt;myNum&lt;/code&gt;, the output will be &lt;code&gt;10&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Understanding that they &lt;em&gt;are&lt;/em&gt; different in each context makes things much easier ✨&lt;/p&gt;

&lt;h2&gt;
  
  
  Note
&lt;/h2&gt;

&lt;p&gt;Both &lt;code&gt;int *ptr&lt;/code&gt; and &lt;code&gt;int* ptr&lt;/code&gt; are functionally identical in C.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Indexes: Quickstart Using PostgreSQL</title>
      <dc:creator>EffessDev</dc:creator>
      <pubDate>Fri, 12 Jun 2026 15:35:06 +0000</pubDate>
      <link>https://dev.to/effessdev/indexes-quickstart-using-postgresql-min-read-55ee</link>
      <guid>https://dev.to/effessdev/indexes-quickstart-using-postgresql-min-read-55ee</guid>
      <description>&lt;p&gt;Let's consider a table &lt;code&gt;user&lt;/code&gt;. When we execute a query to find &lt;code&gt;Emily&lt;/code&gt;, we are actually going through &lt;strong&gt;each record&lt;/strong&gt;, looking whether the &lt;code&gt;name&lt;/code&gt; column equals &lt;code&gt;Emily&lt;/code&gt;. Indexes comes in when you want to speed this up.&lt;/p&gt;

&lt;p&gt;Let's create an Index with the name &lt;code&gt;idx_users_name&lt;/code&gt; (the name can be anything, and it doesn't matter functionally):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;INDEX&lt;/span&gt; &lt;span class="n"&gt;idx_users_name&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now when you run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Emily'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Postgres will use the index we just created (not by the name, the name is just for us) to execute that query, and the time complexity is reduced from &lt;code&gt;O(n)&lt;/code&gt; to &lt;code&gt;O(log n)&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>database</category>
      <category>postgres</category>
      <category>sql</category>
    </item>
  </channel>
</rss>
