<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://revarma.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://revarma.github.io/" rel="alternate" type="text/html" /><updated>2024-12-19T16:15:16+00:00</updated><id>https://revarma.github.io/feed.xml</id><title type="html">Four White Spaces</title><subtitle>Welcome to my blog, where I document the things that spark my curiosity in the world of technology.  From tips and emerging tools to intriguing software trends and personal insights,  this blog is a collection of what I find interesting and worth exploring.
</subtitle><author><name>Eswara Rudraraju</name></author><entry><title type="html">Differences between .cer, .pfx and .p12 file types</title><link href="https://revarma.github.io/certificates/2024/12/19/differences-between-.cer,-.pfx-and-.p12-file-types.html" rel="alternate" type="text/html" title="Differences between .cer, .pfx and .p12 file types" /><published>2024-12-19T00:00:00+00:00</published><updated>2024-12-19T00:00:00+00:00</updated><id>https://revarma.github.io/certificates/2024/12/19/differences-between-.cer,-.pfx-and-.p12-file-types</id><content type="html" xml:base="https://revarma.github.io/certificates/2024/12/19/differences-between-.cer,-.pfx-and-.p12-file-types.html"><![CDATA[<ol>
  <li>
    <p><strong>.cer (Certificate) file</strong>: 
This is a binary encoded X.509 certificate file, which contains public key data and attributes about the certificate holder. It is often used in Public Key Infrastructure (PKI) systems to verify the identity of a server or other entity for SSL/TLS secure connections.</p>
  </li>
  <li>
    <p><strong>.pfx (Personal Information Exchange) or .p12 files</strong>: 
These are PKCS #12 files, which contain a private key and one or more X.509 certificates in a single file. The primary difference between .pfx and .p12 files is the extension; they are essentially the same file type. These files can be used for both client and server certificate authentication, and are commonly used for code signing, email encryption, and securing network connections with SSL/TLS.</p>
  </li>
</ol>

<p>In summary, both .cer and .pfx/p12 files serve different purposes in a PKI system. A .cer file is only used to verify the identity of a server or other entity and contains public key data, while a .pfx/.p12 file includes both private key and one or more certificates, allowing for two-way authentication when establishing secure connections.</p>]]></content><author><name>Eswara Rudraraju</name></author><category term="Certificates" /><summary type="html"><![CDATA[.cer (Certificate) file: This is a binary encoded X.509 certificate file, which contains public key data and attributes about the certificate holder. It is often used in Public Key Infrastructure (PKI) systems to verify the identity of a server or other entity for SSL/TLS secure connections.]]></summary></entry><entry><title type="html">Requirement level keywords and how to use them</title><link href="https://revarma.github.io/tips/2024/12/06/Requirement-level-keywords-and-how-to-use-them.html" rel="alternate" type="text/html" title="Requirement level keywords and how to use them" /><published>2024-12-06T00:00:00+00:00</published><updated>2024-12-06T00:00:00+00:00</updated><id>https://revarma.github.io/tips/2024/12/06/Requirement-level-keywords-and-how-to-use-them</id><content type="html" xml:base="https://revarma.github.io/tips/2024/12/06/Requirement-level-keywords-and-how-to-use-them.html"><![CDATA[<p>Source: https://www.rfc-editor.org/rfc/rfc2119</p>

<ol>
  <li>
    <p><strong>MUST</strong> <br />
This word, or the terms “REQUIRED” or “SHALL”, mean that the definition is an absolute requirement of the specification.</p>
  </li>
  <li>
    <p><strong>MUST NOT</strong>
This phrase, or the phrase “SHALL NOT”, mean that the definition is an absolute prohibition of the specification.</p>
  </li>
  <li>
    <p><strong>SHOULD</strong> <br />
This word, or the adjective “RECOMMENDED”, mean that there may exist valid reasons in particular circumstances to ignore a particular item, but the full implications must be understood and carefully weighed before choosing a different course.</p>
  </li>
  <li>
    <p><strong>SHOULD NOT</strong> <br />
This phrase, or the phrase “NOT RECOMMENDED” mean that there may exist valid reasons in particular circumstances when the particular behavior is acceptable or even useful, but the full implications should be understood and the case carefully weighed before implementing any behavior described with this label.</p>
  </li>
  <li>
    <p><strong>MAY</strong> <br />
This word, or the adjective “OPTIONAL”, mean that an item is truly optional.  One vendor may choose to include the item because a particular marketplace requires it or because the vendor feels that it enhances the product while another vendor may omit the same item. An implementation which does not include a particular option MUST be prepared to interoperate with another implementation which does include the option, though perhaps with reduced functionality. In the same vein an implementation which does include a particular option MUST be prepared to interoperate with another implementation which does not include the option (except, of course, for the feature the option provides.)</p>
  </li>
</ol>]]></content><author><name>Eswara Rudraraju</name></author><category term="tips" /><summary type="html"><![CDATA[Source: https://www.rfc-editor.org/rfc/rfc2119]]></summary></entry><entry><title type="html">Benefits of adding a comma at the end of the list</title><link href="https://revarma.github.io/tips/git/python/2024/11/29/Benefits-of-adding-a-comma-at-the-end-of-a-list.html" rel="alternate" type="text/html" title="Benefits of adding a comma at the end of the list" /><published>2024-11-29T00:00:00+00:00</published><updated>2024-11-29T00:00:00+00:00</updated><id>https://revarma.github.io/tips/git/python/2024/11/29/Benefits-of-adding-a-comma-at-the-end-of-a-list</id><content type="html" xml:base="https://revarma.github.io/tips/git/python/2024/11/29/Benefits-of-adding-a-comma-at-the-end-of-a-list.html"><![CDATA[<p>Consider following line of code in a file</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">names</span> <span class="o">=</span> <span class="p">[</span><span class="s">'Alice'</span><span class="p">,</span> <span class="s">'Bob'</span><span class="p">,</span> <span class="s">'Dilbert'</span><span class="p">]</span>
</code></pre></div></div>

<p>When a new item is added to the list and committed to a source control like git, the file diff will highlight the entire line as a difference between the commits instead of just the newly added item(s).</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">names</span> <span class="o">=</span> <span class="p">[</span><span class="s">'Alice'</span><span class="p">,</span> <span class="s">'Bob'</span><span class="p">,</span> <span class="s">'Dilbert'</span><span class="p">,</span> <span class="s">'Roger'</span><span class="p">]</span>
</code></pre></div></div>

<h4 id="ways-to-solve-this">Way(s) to solve this:</h4>

<ol>
  <li>Write each list item into its own lines</li>
</ol>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">names</span> <span class="o">=</span> <span class="p">[</span>
    <span class="s">'Alice'</span><span class="p">,</span> 
    <span class="s">'Bob'</span><span class="p">,</span> 
    <span class="s">'Dilbert'</span><span class="p">,</span> <span class="c1"># ◀️ gets highlighted because of an additional comma 
</span>    <span class="s">'Roger'</span>    <span class="c1"># ◀️ gets highlighted
</span>    <span class="p">]</span>
</code></pre></div></div>

<p>Because the git diff is a line based tool, it now highlights the difference on <em>Last 2 Items of the list</em> (notice the <code class="language-plaintext highlighter-rouge">,</code> was added next to Dilbert)</p>

<ol>
  <li>Even to further alleviate this problem, always end the last item on a list with a comma(,)</li>
</ol>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">names</span> <span class="o">=</span> <span class="p">[</span>
    <span class="s">'Alice'</span><span class="p">,</span> 
    <span class="s">'Bob'</span><span class="p">,</span> 
    <span class="s">'Dilbert'</span><span class="p">,</span>
    <span class="s">'Roger'</span><span class="p">,</span> <span class="c1"># ◀️ note an additional comma here
</span>    <span class="p">]</span>
</code></pre></div></div>]]></content><author><name>Eswara Rudraraju</name></author><category term="tips" /><category term="git" /><category term="python" /><summary type="html"><![CDATA[Consider following line of code in a file]]></summary></entry><entry><title type="html">Orchestration vs. Choreography in a service based architecture</title><link href="https://revarma.github.io/architecture/2024/11/26/Orchestration-vs.-Choreography-in-software-systems.html" rel="alternate" type="text/html" title="Orchestration vs. Choreography in a service based architecture" /><published>2024-11-26T00:00:00+00:00</published><updated>2024-11-26T00:00:00+00:00</updated><id>https://revarma.github.io/architecture/2024/11/26/Orchestration-vs.-Choreography-in-software-systems</id><content type="html" xml:base="https://revarma.github.io/architecture/2024/11/26/Orchestration-vs.-Choreography-in-software-systems.html"><![CDATA[<p>Orchestration and Choreography are required when multiple services must be coordinated to complete a certain business transaction.</p>

<p><strong>Orchestration</strong> is the coordination of multiple services through the use of a separate mediator service that controls and manages the workflow of the transaction (like a conductor in an orchestra).</p>

<p><strong>Choreography</strong>, on the other hand, is the coordination of multiple services by which each service talks to one another without the use of a central mediator (like dancers in a dance).</p>

<p>As services become more fine-grained, both orchestration and choreography are necessary to tie the services together to complete the business transaction.</p>

<p><em>Additional Resources</em>: https://cloud.google.com/blog/topics/developers-practitioners/service-orchestration-google-cloud</p>]]></content><author><name>Eswara Rudraraju</name></author><category term="architecture" /><summary type="html"><![CDATA[Orchestration and Choreography are required when multiple services must be coordinated to complete a certain business transaction.]]></summary></entry><entry><title type="html">Architecture Sinkhole</title><link href="https://revarma.github.io/architecture/2024/11/26/architecture-sinkhole.html" rel="alternate" type="text/html" title="Architecture Sinkhole" /><published>2024-11-26T00:00:00+00:00</published><updated>2024-11-26T00:00:00+00:00</updated><id>https://revarma.github.io/architecture/2024/11/26/architecture-sinkhole</id><content type="html" xml:base="https://revarma.github.io/architecture/2024/11/26/architecture-sinkhole.html"><![CDATA[<h4 id="what">What:</h4>
<p>The concept of an <strong>“architecture sinkhole”</strong> refers to the practice of designing software or systems in such a way that they consume significant resources while providing limited benefits or value.</p>

<p>It can be described as a structure that does not perform its intended function well and instead creates a waste of time, money, or energy.</p>

<p>In software development, architecture sinkholes can occur when developers design systems with complex, over-engineered architectures that are difficult to maintain or modify. These architectures often require extensive resources, such as human expertise, time, and financial investment, but they may not provide any significant benefits to the organization or end-users.</p>

<p>Another type of architecture sinkhole is when a system fails to meet its intended requirements or goals, resulting in wasted effort, time, and money. This can happen for a variety of reasons, including poor design, faulty implementation, or inadequate resources.</p>

<p>Overall, an architecture sinkhole refers to any situation where a software or systems design fails to deliver the expected results or value, causing waste and inefficiency.</p>

<h4 id="example">Example:</h4>
<p>In an N-layered architecture, when a request passes from the User Interface (UI) layer directly to the Persistent Layer without incorporating any business rules in either the Business or Service Layers, the purpose of these layers during that request cycle is merely to create objects. <strong>This can result in unnecessary memory usage as objects are created but not utilized beyond their creation process</strong>.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>UI-Layer ➡️ Business-Layer ➡️ Service-Layer ➡️ Database
</code></pre></div></div>

<h4 id="what-tradeoffs-to-consider">What tradeoffs to consider:</h4>
<p>Maintain an oversight of your N-layered architecture to ensure that no more than 20% of your endpoints have sinkholes. If this percentage exceeds, consider a strategic reconfiguration of your architecture.</p>]]></content><author><name>Eswara Rudraraju</name></author><category term="architecture" /><summary type="html"><![CDATA[What: The concept of an “architecture sinkhole” refers to the practice of designing software or systems in such a way that they consume significant resources while providing limited benefits or value.]]></summary></entry><entry><title type="html">The Fundamentals of Software Architecture</title><link href="https://revarma.github.io/architecture/2024/11/12/fundamentals-of-software-architecture.html" rel="alternate" type="text/html" title="The Fundamentals of Software Architecture" /><published>2024-11-12T00:00:00+00:00</published><updated>2024-11-12T00:00:00+00:00</updated><id>https://revarma.github.io/architecture/2024/11/12/fundamentals-of-software-architecture</id><content type="html" xml:base="https://revarma.github.io/architecture/2024/11/12/fundamentals-of-software-architecture.html"><![CDATA[<h1 id="key-takeaways">Key takeaways:</h1>
<ol>
  <li>Software Architecture is dynamic, is a tradeoff and is an iterative process.</li>
  <li>Architecture cannot be done at the beginning of an initiative and cannot expect it to remain constant during the development process.</li>
  <li>New changes keeps coming and architecture should incorporate those changes and keep evolving while considering tradeoffs.</li>
</ol>]]></content><author><name>Eswara Rudraraju</name></author><category term="architecture" /><summary type="html"><![CDATA[Key takeaways: Software Architecture is dynamic, is a tradeoff and is an iterative process. Architecture cannot be done at the beginning of an initiative and cannot expect it to remain constant during the development process. New changes keeps coming and architecture should incorporate those changes and keep evolving while considering tradeoffs.]]></summary></entry></feed>