<?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: Abhinav Srinivasan</title>
    <description>The latest articles on DEV Community by Abhinav Srinivasan (@abhinavsrinivasan).</description>
    <link>https://dev.to/abhinavsrinivasan</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1097507%2Fc701abb1-154e-4ea0-bf23-9f83d036aa3c.png</url>
      <title>DEV Community: Abhinav Srinivasan</title>
      <link>https://dev.to/abhinavsrinivasan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abhinavsrinivasan"/>
    <language>en</language>
    <item>
      <title>Steganography</title>
      <dc:creator>Abhinav Srinivasan</dc:creator>
      <pubDate>Fri, 18 Aug 2023 18:24:12 +0000</pubDate>
      <link>https://dev.to/abhinavsrinivasan/steganography-2cgd</link>
      <guid>https://dev.to/abhinavsrinivasan/steganography-2cgd</guid>
      <description>&lt;p&gt;In the last decade, cryptography has been rampant as the world becomes more and more with the idea of securing data. As technology advances and people keep more of their data online, highly encrypted software like Bitlocker and OpenSSL and even common messaging platforms such as Whatsapp become more prevalent. This structure enhances data security, making it highly resistant to malicious hacking. While encryption conceals the content of a message, it doesn't hide the message's presence itself. That’s exactly where steganography comes in. &lt;/p&gt;

&lt;p&gt;The main difference between steganography and encryption lies in the fact that the message’s presence remains hidden. For instance, in regions that carry rather strict privacy laws and free speech might be censored, steganography could be beneficial as the message could evade the eye of the government. An example of how censorship could be bypassed is by putting the message within an innocent image, sending it to someone, and having them encode the message later on. Despite the benefits of steganography seeming to outweigh encryption, there are some situations where the latter is better: the most obvious being data storage. &lt;/p&gt;

&lt;p&gt;To truly understand the true potential of steganography, it’s vital to understand just how it works. To begin, lets do a quick review of the binary number system. Below is an 8-bit number representing 123 in decimal&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0111 1011
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The very first number, 0 (from left to right), is considered to be the most significant bit, in the sense that if you change that number it changes the value the most compared to the rest of the bits. On the other end, if you change the very last number, 1, you change the value the least, hence why it’s referred to as the least significant bit. Therefore, in order to not distort the picture itself by much, messages are oftentimes masked within the lowest bits or the least significant bits. In this sense, the overall picture itself will not look different to the human eye but it still hides the message within it.&lt;/p&gt;

&lt;p&gt;All in all, steganography has been a huge deal in the past and even now. However, more machine learning algorithms have been tuned to be on the lookout for steganographic content. As a result, the future of steganography will look completely different than the past. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Basic Introduction to Makefiles</title>
      <dc:creator>Abhinav Srinivasan</dc:creator>
      <pubDate>Thu, 22 Jun 2023 04:22:15 +0000</pubDate>
      <link>https://dev.to/abhinavsrinivasan/basic-introduction-to-makefiles-2b3</link>
      <guid>https://dev.to/abhinavsrinivasan/basic-introduction-to-makefiles-2b3</guid>
      <description>&lt;h2&gt;
  
  
  What is a Makefile?
&lt;/h2&gt;

&lt;p&gt;Oftentimes as software programs become complicated, with multiple files and hundreds if not thousands of lines of code, managing all this can be a rather demanding and time-consuming process. This is where Makefiles come in. &lt;/p&gt;

&lt;p&gt;A Makefile, is essentially a set of instructions written in code that, when implemented properly, can serve as a powerful tool to link multiple files together. Doing so makes testing programs much easier. Instead of handling the different files independently, the instructions automate the entire process, compiling all the files together with a basic make command.&lt;/p&gt;

&lt;p&gt;Makefiles intelligently track the various code changes in multiple files and accurately link them. To maximize productivity, it only rebuilds code that has changed since the last compilation. Doing so will ensure that it runs smoothly and, especially with large programs, does not cause lag in the system. &lt;/p&gt;

&lt;h2&gt;
  
  
  Structure of a Makefile
&lt;/h2&gt;

&lt;p&gt;Now, let’s learn how to make these Makefiles 👀&lt;br&gt;
Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;`example1: example1.o example2.o
gcc -o main main.o util.o

example1.o: example1.c
gcc -c example1.c

example2.o: example2.c
gcc -c example2.c

clean:
rm *.o example1
`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Above is a basic example of how a Makefile should look like. There are three source files: example1.c and example2.c. It then goes on to specify the compilation commands and the target executable file named "main".&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example1: example1.o example2.o
    gcc -o main main.o util.o
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first line here states that the main executable depends on example1.o and the example2.o files. The command following the rule compiles the object files and links them together to create the executable "main". One thing to make sure of is the indentation. For the command, it should be exactly 1 tab indent from the left side of the page.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example1.o: example1.c
    gcc -c example1.c
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second line states that the target "main.o" depends on the source file main.c. The command following the rule compiles main.c into an object file (-c flag indicates compilation without linking).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example2.o: example2.c
gcc -c example2.c
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The third line states that util.o depends on util.c and, similarly, the command under it runs it properly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;clean:
rm *.o example1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lastly, the final rule defines a target "clean" which is used for cleaning up the generated object files and the executable. The command rm &lt;em&gt;.o main removes all object files (&lt;/em&gt;.o) and the "main" executable.&lt;/p&gt;

&lt;p&gt;Doing this will ensure that the three source files are combined through just the &lt;strong&gt;make&lt;/strong&gt; command. &lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Mention
&lt;/h2&gt;

&lt;p&gt;One other aspect of Makefiles I just thought of mentioning was &lt;strong&gt;Parallel Builds&lt;/strong&gt;. They are a powerful feature offered by Makefiles, which allow for the execution of build tasks and also speeds up the compilation process. By utilizing the available CPU cores, Makefiles can distribute the workload across multiple jobs, effectively reducing the overall build time. With the -j flag followed by the desired number of parallel jobs, developers can unleash the full potential of their systems, achieving faster iterations and improved productivity. &lt;/p&gt;

</description>
      <category>makefile</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>codenewbie</category>
    </item>
  </channel>
</rss>
