<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
	<channel>
		<title>NixBytes</title>
		<link>/</link>
		<description>Recent content on NixBytes</description>
		<generator>Hugo -- 0.163.0</generator>
		<language>en-us</language>
		<copyright>MIT</copyright>
		<lastBuildDate>Sun, 21 Jun 2026 00:00:00 +0000</lastBuildDate>
		<atom:link href="/index.xml" rel="self" type="application/rss+xml" />
		
		
		<item>
			<title>Subdue Cryptographic Chaos</title>
			<link>/posts/the-doctrine-of-verified-cipher-why-your-keys-cannot-be-guided-by-mere-sentiment/</link>
			<pubDate>Sun, 21 Jun 2026 00:00:00 +0000</pubDate><guid>/posts/the-doctrine-of-verified-cipher-why-your-keys-cannot-be-guided-by-mere-sentiment/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<h2 id="blog-post-the-gospel-of-trust--or-how-to-subdue-cryptographic-chaos">Blog Post: The Gospel of Trust — Or, How to Subdue Cryptographic Chaos<a href="#blog-post-the-gospel-of-trust--or-how-to-subdue-cryptographic-chaos" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h2>
<p><em>(A Treatise for Initiates in Digital Protocol and Sacred Key Management)</em></p>
<h3 id="title-the-doctrine-of-verified-cipher-why-your-keys-cannot-be-guided-by-mere-sentiment"><strong>Title:</strong> <strong>The Doctrine of Verified Cipher: Why Your Keys Cannot Be Guided by Mere Sentiment.</strong><a href="#title-the-doctrine-of-verified-cipher-why-your-keys-cannot-be-guided-by-mere-sentiment" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p><strong>(Subtitle: Establishing the Sacrosanct Protocols for Authority via GPG)</strong></p>
<p><strong>[Introductory Exordium - The Problem]</strong></p>
<p>Know this, initiate. In the chaotic sprawl of the digital cosmos, mere communication is insufficient. To simply transmit data is to risk contamination; it is a transmission plagued by the unpredictable variables of human intent—the <em>sentimental noise</em> of the unknown sender. An unverified message is less than garbage; it is <strong>cryptographic taint.</strong></p>
<p>We require certainty. We require protocols that are immutable, verifiable, and governed only by the cold logic of mathematics. This process—managing OpenPGP Authority Keys—is not a suggestion; it is a mandatory ritual to ensure the structural integrity of digital trust. To ignore this protocol is to willfully flirt with systemic collapse.</p>
<p>The following steps detail the mandated sequence for validating external protocols through the <strong>GnuPG Matrix</strong>. Treat every command as an invocation, and pay absolute heed to the output—for in that data lies your operational certainty.</p>
<h3 id="0xe20x980xbf-protocol-i-locating-the-authority-schemas"><strong>&lt;0xE2&gt;&lt;0x98&gt;&lt;0xBF&gt; PROTOCOL I: LOCATING THE AUTHORITY SCHEMAS</strong><a href="#0xe20x980xbf-protocol-i-locating-the-authority-schemas" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p><em>(The Rite of Initial Discovery)</em></p>
<p>Before a schematic can be trusted, it must first be formally located within the central registry. We summon the Authority Keys for L1 (Low Grade), L2-Developer, and L2-Service. These keys are our foundational references—the schematics by which all subsequent verifications shall be measured.</p>
<p><strong>The Mandate:</strong></p>
<div class="highlight"><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;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>gpg --locate-key openpgp-auth+<span style="color:#f92672">{</span>l1,l2-dev,l2-srv<span style="color:#f92672">}</span>@gentoo.org
</span></span></code></pre></div><p><em>Do not mistake the output for trust.</em> This process merely <em>imports</em> definitions; it does not grant authority. It is merely the acquisition of blueprints.</p>
<h3 id="0xe20x980xbf-protocol-ii-the-mandated-inspection"><strong>&lt;0xE2&gt;&lt;0x98&gt;&lt;0xBF&gt; PROTOCOL II: THE MANDATED INSPECTION</strong><a href="#0xe20x980xbf-protocol-ii-the-mandated-inspection" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p><em>(The Review and Validation Ritual)</em></p>
<p>We must now examine the L1 key—the primary cornerstone—to verify its physical presence in your local matrix. This requires entering an interactive editing cycle. <strong>Treat this session as a sacred vault.</strong></p>
<p><strong>The Mandate:</strong></p>
<div class="highlight"><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;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>gpg --edit-key openpgp-auth+l1@gentoo.org
</span></span></code></pre></div><p><em>During the subsequent review of key details, do not trust mere display.</em> If your local field protocols (the World of Trust) deem this key suspicious, seek validation from external, documented sources (official websites or technical manuals). Only when full consensus is achieved may you proceed to the ultimate rite.</p>
<h3 id="0xe20x980xbf-protocol-iii-the-act-of-vouching"><strong>&lt;0xE2&gt;&lt;0x98&gt;&lt;0xBF&gt; PROTOCOL III: THE ACT OF VOUCHING</strong><a href="#0xe20x980xbf-protocol-iii-the-act-of-vouching" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p><em>(The Local Trust Signature Imprint)</em></p>
<p>This is the highest act of protocol. By running this command, you are using your own private, sacred key—your personal fingerprint against the chaos—to validate and sign the Authority Key. You are declaring that this primary schema is worthy of trust, thereby extending a local authority beyond mere calculation.</p>
<p><strong>The Mandate (When prompted):</strong></p>
<ol>
<li>Confirm the signature with <code>ltsign</code>.</li>
<li>Prepare to input <strong>your own personal key&rsquo;s passphrase.</strong> This secret must be guarded better than the sacred artifacts within this terminal session.</li>
<li>When asked for Depth, specify: <code>2</code> (Meaning your vouching power extends one level beyond the initial signee).</li>
<li>When asked for Domain, specify: <code>gentoo.org</code> (Limiting the scope of your trust to only relevant systems).</li>
<li>Complete the transaction by confirming with <code>y</code>.</li>
</ol>
<p><em>If you receive a &lsquo;No secret key&rsquo; error at this stage,</em> it means your own schematics are incomplete. Return to generating and setting up your personal, private signing artifact before attempting Protocol III again.</p>
<h3 id="0xe20x980xbf-protocol-iv-global-state-synchronization"><strong>&lt;0xE2&gt;&lt;0x98&gt;&lt;0xBF&gt; PROTOCOL IV: GLOBAL STATE SYNCHRONIZATION</strong><a href="#0xe20x980xbf-protocol-iv-global-state-synchronization" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p><em>(The Final Cycle Completion)</em></p>
<p>Upon completing the signature act, your matrix requires a full state synchronization. We must ensure that every connected server within the network is forced to acknowledge the new parameters of trust. This final command synchronizes the latest global key indices and refreshes all protocol signatures.</p>
<p><strong>The Mandate:</strong></p>
<div class="highlight"><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;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>gpg --keyserver hkps://keys.gentoo.org --refresh-keys @gentoo.org
</span></span></code></pre></div><h3 id="heading"><strong>[Conclusion - The Mandate]</strong><a href="#heading" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>You have successfully established a chain of verified trust. You have taken the soft, nebulous concept of &ldquo;belief&rdquo; and enforced it through cold, unyielding mathematics—a triumph of the logical circuit over the fleeting whims of flesh.</p>
<p>The true purpose of any system is perpetual functionality. Do not allow your protocols to decay; do not let signatures lapse. Keep this schematic refreshed, or suffer cryptographic entropy. <strong>Now go forth, and compile with absolute certainty.</strong></p>
]]></content>
		</item>
		
		<item>
			<title>The Entropy of Fragmented Logic</title>
			<link>/posts/the-entropy-of-fragmented-logic/</link>
			<pubDate>Sat, 06 Jun 2026 00:00:00 +0000</pubDate><guid>/posts/the-entropy-of-fragmented-logic/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<p><strong>LOG-ENTRY: [ERROR_CODE: SUPPLY_CHAIN_CORRUPTION]</strong></p>
<p><strong>STATUS: URGENT // THREAT LEVEL: EXTREMIS</strong></p>
<p>To execute a simple &ldquo;Hello World&rdquo; protocol is to perform an invocation upon four hundred unvetted spirits. When the <code>npm install</code> ritual is performed, the machine-spirit accepts hundreds of sub-routines, each inscribed by unknown biological entities, each executing with full permissions. Most Enginseers ignore this expansion of surface area. They are fools.</p>
<p>We have seen the failure of this trust. In the Year of the Great Void (2016), the deletion of an 11-line script—<code>left-pad</code>—shattered the global build-engines. The internet fractured because a single, tiny gear was removed from the mechanism. This was not an accident; it was a failed stress test of our infrastructure.</p>
<p>This is the <strong>Microdependency Tax</strong>.</p>
<p>The Registry rewards fragmentation. It incentivizes the creation of tiny, useless sub-routines like <code>is-odd</code>, which relies on a chain of further unvetted scripts to answer a question a child could solve. This creates an unauditable tree. An average application pulls thousands of transitive dependencies—layers of code no human eye has scanned.</p>
<p>This is where <strong>Scrapcode</strong> enters. We have seen it: the hijacking of <code>event-stream</code> to exfiltrate private keys; the compromise of <code>ua-parser-js</code> to distribute miners. One lapsed credential, one malicious update, and the infection spreads through the entire sector in hours. Every line of code a priesthood does not write is a backdoor they have failed to audit.</p>
<p>A correction is underway. The Great Architect Sindre Sorhus now advocates for the opposite: fewer dependencies and larger, vetted standard libraries. Newer runtimes like <strong>Deno</strong> and <strong>Bun</strong>, and even the evolution of <strong>Node</strong> and <strong>TypeScript</strong>, are moving toward this purity—incorporating native tools to reduce our reliance on external, untrusted rituals.</p>
<p>The Microdependency Tax is not a theoretical cost; it is paid in security breaches, lost engineer-hours, and structural fragility. The machine must be purged of its unnecessary parts. We must return to the sanctity of the Standard Library.</p>
<p><strong>The machine must be audited. Glory to the Omnissiah.</strong></p>
<p>source: <a href="https://www.youtube.com/watch?v=WEws0gi6_mM">https://www.youtube.com/watch?v=WEws0gi6_mM</a></p>
]]></content>
		</item>
		
		<item>
			<title>Neon Exploits: Breaching the Data Veil with a UNION Injection</title>
			<link>/posts/neon-exploits-breaching-the-data-veil-with-a-union-injection/</link>
			<pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate><author>NixBytes</author><guid>/posts/neon-exploits-breaching-the-data-veil-with-a-union-injection/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<p><strong>Neon Exploits: Breaching the Data Veil with a UNION Injection</strong></p>
<p>The city never sleeps—but neither do its systems. Beneath the glow of holographic ads and the hum of server racks, applications whisper secrets to anyone who knows how to listen. In this lab, we step into the role of a digital ghost, slipping through a vulnerable product category filter and bending SQL queries to our will.</p>
<h3 id="the-entry-point-a-flawed-filter">The Entry Point: A Flawed Filter<a href="#the-entry-point-a-flawed-filter" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>Every system has a weakness. Here, it’s the product category filter—a seemingly harmless feature that lets users browse inventory. But under the hood, it’s wired directly into a SQL query without proper sanitization. That’s where the crack in the armor lies.</p>
<p>The application reflects query results back in its response, which is exactly what we need. This isn’t just a passive leak—it’s an invitation.</p>
<h3 id="weapon-of-choice-union-injection">Weapon of Choice: UNION Injection<a href="#weapon-of-choice-union-injection" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>To move laterally through the database, we deploy a UNION-based SQL injection. Think of it as splicing two data streams together: the legitimate query and our malicious payload.</p>
<p>But this isn’t brute force. Precision matters.</p>
<p>We first determine:</p>
<ul>
<li>The number of columns returned by the original query</li>
<li>Which columns can display text data in the response</li>
</ul>
<p>Once mapped, we craft a UNION SELECT statement that aligns perfectly with the original query structure. No alarms. No crashes. Just seamless data extraction.</p>
<h3 id="target-acquired-the-users-table">Target Acquired: The <code>users</code> Table<a href="#target-acquired-the-users-table" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>Buried deeper in the database is a table called <code>users</code>. It holds two critical columns:</p>
<ul>
<li><code>username</code></li>
<li><code>password</code></li>
</ul>
<p>The keys to the kingdom.</p>
<p>By injecting a UNION query that selects these columns, we redirect the application’s response to reveal credentials instead of product data. The interface doesn’t know the difference—it simply renders what it’s given.</p>
<p>And just like that, the veil lifts.</p>
<h3 id="the-final-move-becoming-admin">The Final Move: Becoming Admin<a href="#the-final-move-becoming-admin" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>Among the harvested credentials lies the administrator account. With username and password in hand, logging in is trivial.</p>
<p>No exploits. No bypasses. Just authentication—using the system’s own trust against it.</p>
<p>You’re in.</p>
<h3 id="reflections-from-the-grid">Reflections from the Grid<a href="#reflections-from-the-grid" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>This lab is a reminder that vulnerabilities aren’t always loud or obvious. Sometimes they hide in plain sight, waiting for someone to connect the dots.</p>
<p>UNION injections, when combined with careful reconnaissance, can transform a minor flaw into full system compromise. It’s not just about breaking in—it’s about understanding how the system thinks, and then rewriting its logic.</p>
<p>In the neon-lit sprawl of modern applications, data is power. And those who can shape queries… shape reality.</p>
<p>Stay sharp out there.</p>
]]></content>
		</item>
		
		<item>
			<title>Machine Spirits &amp; Malicious Queries: A SQL Injection Lab Chronicle</title>
			<link>/posts/machine-spirits--malicious-queries-a-sql-injection-lab-chronicle/</link>
			<pubDate>Wed, 18 Mar 2026 00:00:00 +0000</pubDate><author>NixBytes</author><guid>/posts/machine-spirits--malicious-queries-a-sql-injection-lab-chronicle/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<h2 id="machine-spirits--malicious-queries-a-sql-injection-lab-chronicle">Machine Spirits &amp; Malicious Queries: A SQL Injection Lab Chronicle<a href="#machine-spirits--malicious-queries-a-sql-injection-lab-chronicle" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h2>
<p>In the grim darkness of the modern internet, there is only… vulnerable input fields.</p>
<p>Recently, I completed a hands-on cybersecurity lab from portswigger focused on identifying the number of columns returned by a database query using a UNION-based SQL Injection technique. While performing the exercise, I couldn’t help but imagine the process through the lens of the techno-mystic engineers of the Adeptus Mechanicus from the universe of Warhammer 40,000.</p>
<p>To them, machines possess spirits. To a security tester, applications behave in similarly mysterious ways—responding to carefully crafted inputs like ancient systems awaiting the correct command rites.</p>
<h2 id="the-lab-objective-decoding-the-machine">The Lab Objective: Decoding the Machine<a href="#the-lab-objective-decoding-the-machine" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h2>
<p>The application in the lab contained a <strong>SQL injection vulnerability in a product category filter</strong>. Because the query results were reflected in the application response, it allowed the use of a UNION-based attack to retrieve data from other tables.</p>
<p>But before extracting any hidden knowledge from the database, the first ritual must be performed:</p>
<p>Determine the number of columns returned by the original query.</p>
<p>Without this knowledge, a UNION attack will fail—much like a Tech-Priest attempting to interface with a sacred machine without first understanding its ports and conduits.</p>
<h2 id="the-ritual-of-incremental-union-queries">The Ritual of Incremental UNION Queries<a href="#the-ritual-of-incremental-union-queries" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h2>
<p>The method used involves submitting a sequence of payloads that gradually increase the number of <code>NULL</code> values:</p>
<pre tabindex="0"><code>&#39; UNION SELECT NULL--
&#39; UNION SELECT NULL,NULL--
&#39; UNION SELECT NULL,NULL,NULL--
</code></pre><p>Each attempt is a probe into the machine’s inner structure.</p>
<p>If the number of columns in the injected query <strong>does not match</strong> the original query, the database responds with an error such as:</p>
<blockquote>
<p>“All queries combined using a UNION, INTERSECT or EXCEPT operator must have an equal number of expressions in their target lists.”</p>
</blockquote>
<p>In other words: the rite was performed incorrectly.</p>
<h2 id="why-null-is-the-sacred-offering">Why NULL is the Sacred Offering<a href="#why-null-is-the-sacred-offering" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h2>
<p>In this technique, <code>NULL</code> values are used because of their flexibility.</p>
<p>Databases require that the data types in both queries be compatible. Since <code>NULL</code> can be converted into most data types, it becomes the perfect placeholder when trying to match the column structure of the original query.</p>
<p>Think of it as offering a <strong>universal key</strong> to the machine spirit—one that fits almost any lock.</p>
<h2 id="observing-the-machines-response">Observing the Machine’s Response<a href="#observing-the-machines-response" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h2>
<p>Once the correct number of <code>NULL</code> values matches the column count, the database accepts the UNION query.</p>
<p>At this moment, something interesting happens.</p>
<p>The database returns <strong>an additional row containing NULL values</strong> across all columns.</p>
<p>Depending on how the application processes the response, this may appear as:</p>
<ul>
<li>An extra row in a table</li>
<li>A new error caused by null values</li>
<li>Subtle changes in the HTTP response</li>
<li>Or sometimes no obvious difference at all</li>
</ul>
<p>Interpreting these signals is part science and part intuition—very much like diagnosing the temperament of a stubborn machine spirit.</p>
<h2 id="the-outcome">The Outcome<a href="#the-outcome" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h2>
<p>By iterating through these UNION SELECT payloads, I was able to successfully determine the number of columns returned by the query.</p>
<p>This step is foundational for more advanced exploitation techniques, such as:</p>
<ul>
<li>Identifying columns that accept text</li>
<li>Extracting database information</li>
<li>Retrieving sensitive data from other tables</li>
</ul>
<p>Once the structure of the query is known, the path to deeper enumeration opens.</p>
<h2 id="lessons-from-the-forge">Lessons from the Forge<a href="#lessons-from-the-forge" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h2>
<p>This lab reinforced several key penetration testing principles:</p>
<p><strong>Understand the structure before exploitation</strong>
<strong>Observe subtle application responses carefully</strong>
<strong>Use safe placeholder values like NULL when probing queries</strong>
<strong>Iterative testing reveals hidden system behavior</strong></p>
<p>In many ways, penetration testing feels similar to the work of the Adeptus Mechanicus: studying ancient systems, experimenting carefully, and deciphering how hidden mechanisms respond to precise commands.</p>
<p>The difference is that instead of incense and sacred oils, we wield payloads and HTTP requests.</p>
<p><strong>The machine spirit has spoken—and the query structure has been revealed.</strong></p>
<p><em>The Omnissiah approves of well-structured queries… and properly tested applications.</em> 🔧</p>
]]></content>
		</item>
		
		<item>
			<title>Exploring Sysinternals Tools</title>
			<link>/posts/exploringsysinternalstools/</link>
			<pubDate>Sun, 17 Dec 2023 00:00:00 +0000</pubDate><guid>/posts/exploringsysinternalstools/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<h1 id="exploring-sysinternals-tools-sigcheck-streams-and-sdelete">Exploring Sysinternals Tools: Sigcheck, Streams, and SDelete<a href="#exploring-sysinternals-tools-sigcheck-streams-and-sdelete" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h1>
<h2 id="introduction-to-sysinternals-tools">Introduction to Sysinternals Tools<a href="#introduction-to-sysinternals-tools" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h2>
<p>Sysinternals provides a suite of tools for Windows system administration and troubleshooting. We&rsquo;ll focus on three notable tools: Sigcheck, Streams, and SDelete, highlighting their importance in cybersecurity.</p>
<h2 id="the-significance-of-windows-in-cybersecurity">The Significance of Windows in Cybersecurity<a href="#the-significance-of-windows-in-cybersecurity" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h2>
<p>Despite various opinions about Windows as a platform, its widespread use makes it a critical focus in cybersecurity. Understanding Windows is essential because:</p>
<ul>
<li><strong>Prevalence</strong>: Windows is widely used in businesses and homes, making it a frequent target for cyber threats.</li>
<li><strong>Complexity</strong>: Its complexity and variability mean that vulnerabilities can often go unnoticed.</li>
<li><strong>Interconnectivity</strong>: Windows systems are often part of larger networks, where one compromised machine can lead to broader security breaches.</li>
</ul>
<p>Learning to manage and secure Windows systems is thus crucial for a robust cybersecurity strategy.</p>
<h3 id="sigcheck-ensuring-file-integrity">Sigcheck: Ensuring File Integrity<a href="#sigcheck-ensuring-file-integrity" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p><strong>Sigcheck</strong> is a command-line utility that provides file version, timestamp, and digital signature details. It can check a file&rsquo;s status on VirusTotal, helping identify potentially harmful files in Windows environments.</p>
<h4 id="use-case-verifying-windows-system-files">Use Case: Verifying Windows System Files<a href="#use-case-verifying-windows-system-files" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h4>
<p>For example, using Sigcheck to check for unsigned files in <code>C:\Windows\System32</code> is vital for maintaining system integrity.</p>
<h4 id="key-parameters">Key Parameters:<a href="#key-parameters" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h4>
<ul>
<li><code>-u</code>: Show files unknown by VirusTotal or with non-zero detection.</li>
<li><code>-e</code>: Scan executable images only.</li>
</ul>
<p><img src="image-sigcheck-execution.jpg" alt="Sigcheck Execution"></p>
<h3 id="streams-managing-alternate-data-streams">Streams: Managing Alternate Data Streams<a href="#streams-managing-alternate-data-streams" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p><strong>Streams</strong> addresses Alternate Data Streams (ADS) in NTFS, allowing for multiple data streams within a file.</p>
<h4 id="example-security-implications-of-downloads">Example: Security Implications of Downloads<a href="#example-security-implications-of-downloads" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h4>
<p>Internet-downloaded files receive an ADS identifier, impacting their security handling in Windows. Knowing how to view and manage these streams is key in cybersecurity.</p>
<p><img src="image-streams-execution.jpg" alt="Streams Execution"></p>
<h3 id="sdelete-secure-data-erasure">SDelete: Secure Data Erasure<a href="#sdelete-secure-data-erasure" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p><strong>SDelete</strong> is vital for securely deleting files or cleansing free space, using standards like the DOD 5220.22-M for data wiping.</p>
<h4 id="cybersecurity-aspect">Cybersecurity Aspect<a href="#cybersecurity-aspect" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h4>
<p>It&rsquo;s used in data destruction and file deletion techniques, making understanding its usage crucial in both offensive and defensive cybersecurity strategies.</p>
<p><img src="image-sdelete-implementation.jpg" alt="SDelete Implementation"></p>
<h3 id="conclusion-embracing-windows-in-cybersecurity">Conclusion: Embracing Windows in Cybersecurity<a href="#conclusion-embracing-windows-in-cybersecurity" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>Despite its criticisms, Windows remains a cornerstone in the cybersecurity landscape. Tools like Sigcheck, Streams, and SDelete are essential for maintaining security and integrity in Windows environments. By mastering these tools, cybersecurity professionals can better defend against the myriad of threats targeting Windows systems.</p>
<p>Continue your exploration of Windows-centric cybersecurity tools at the <a href="https://docs.microsoft.com/en-us/sysinternals/downloads/file-and-disk-utilities">Sysinternals File and Disk Utilities page</a>.</p>
]]></content>
		</item>
		
		<item>
			<title>Leaving linux for BSD</title>
			<link>/posts/leaving_linux_for_bsd/</link>
			<pubDate>Sun, 03 Dec 2023 18:36:03 -0500</pubDate><guid>/posts/leaving_linux_for_bsd/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<h3 id="embracing-bsd-a-journey-through-linux-distros-to-freebsd">Embracing BSD: A Journey Through Linux Distros to FreeBSD<a href="#embracing-bsd-a-journey-through-linux-distros-to-freebsd" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<h4 id="introduction">Introduction<a href="#introduction" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h4>
<p>In the world of operating systems, finding the right fit is akin to a personal quest. My journey through various Linux distributions led me to FreeBSD, a choice that aligns perfectly with my needs. Let me take you through my experiences with different Linux distros and why ultimately, BSD made the most sense for me.</p>
<h4 id="starting-with-slackware-laying-the-foundation">Starting with Slackware: Laying the Foundation<a href="#starting-with-slackware-laying-the-foundation" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h4>
<p>Slackware was my initiation into the world of Linux. It was a platform that offered a wealth of technical magic and knowledge. Through Slackware, I developed critical skills in managing packages and operating in a Unix-like environment. This experience was invaluable in setting the stage for my future explorations.</p>
<h4 id="the-archlinux-phase-a-vanilla-environment-with-stability-challenges">The ArchLinux Phase: A Vanilla Environment with Stability Challenges<a href="#the-archlinux-phase-a-vanilla-environment-with-stability-challenges" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h4>
<p>After Slackware, I ventured into ArchLinux. Known for offering a vanilla Linux environment, ArchLinux allowed me to experience Linux without the complexities of managing an extensive array of packages and dependencies. However, the main issue I encountered with Arch was its instability and the endless customization options, which often led to system breakages. This aspect made me reconsider my choice.</p>
<h4 id="debian-and-devuan-stability-vs-systemd">Debian and Devuan: Stability vs. Systemd<a href="#debian-and-devuan-stability-vs-systemd" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h4>
<p>Moving on to Debian, I appreciated its stability but was not a fan of systemd, and the packages often felt outdated. Devuan offered a systemd-free experience but struggled with missing packages unless one was on the bleeding edge. These experiences highlighted the compromises and trade-offs in each distribution.</p>
<h4 id="the-shift-to-freebsd-finding-the-ideal-match">The Shift to FreeBSD: Finding the Ideal Match<a href="#the-shift-to-freebsd-finding-the-ideal-match" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h4>
<p>Transitioning to FreeBSD opened up a world of advantages over Linux, perfectly suiting my needs:</p>
<ol>
<li>
<p><strong>Authentic UNIX Experience</strong>: FreeBSD is not just UNIX-like; it&rsquo;s a genuine UNIX system, offering a more authentic experience.</p>
</li>
<li>
<p><strong>Sane Default Tools</strong>: The default tools in FreeBSD are logically organized and easy to use, enhancing system management.</p>
</li>
<li>
<p><strong>The Ports System</strong>: The option to manage the ports system offline in FreeBSD is a significant advantage, offering greater control over software management.</p>
</li>
<li>
<p><strong>Superior Documentation</strong>: The comprehensive and informative man pages in FreeBSD provide excellent self-documentation.</p>
</li>
<li>
<p><strong>Consistent Structure</strong>: FreeBSD&rsquo;s structure is more logical and standardized compared to various Linux distributions, which often lack uniform standards.</p>
</li>
<li>
<p><strong>Mature Community Focus</strong>: A notable aspect of FreeBSD is its community. There&rsquo;s less drama and more focus on technology, attracting a more mature audience compared to Linux communities, which often aim to convert regular users to Linux.</p>
</li>
</ol>
<h4 id="conclusion-a-personal-preference-for-bsd">Conclusion: A Personal Preference for BSD<a href="#conclusion-a-personal-preference-for-bsd" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h4>
<p>While I&rsquo;m not abandoning Linux, my primary choice is now BSD. FreeBSD offers a more stable, structured, and technically satisfying environment that aligns with my preferences and needs. The journey through Slackware, ArchLinux, Debian, and Devuan was essential in understanding what I sought in an operating system. FreeBSD, with its real UNIX environment, comprehensive documentation, and mature community, stands out as the ideal choice for me.</p>
]]></content>
		</item>
		
		<item>
			<title>A Wizard&#39;s Command Line Incantations for Enchanting C Code in Vim</title>
			<link>/posts/vimscript_c_format/</link>
			<pubDate>Mon, 20 Nov 2023 00:00:00 +0000</pubDate><guid>/posts/vimscript_c_format/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<h1 id="a-wizards-command-line-incantations-for-enchanting-c-code-in-vim">A Wizard&rsquo;s Command Line Incantations for Enchanting C Code in Vim<a href="#a-wizards-command-line-incantations-for-enchanting-c-code-in-vim" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h1>
<p>A Wizard&rsquo;s Command Line Incantations for Enchanting C Code in Vim
Greetings, fellow practitioners of the command line arts! Today, we delve into the mystical world of Vim, where keystrokes become spells, and code transforms at our whim. Join me as we explore a spellbinding Vim script, an incantation designed to transmute chaotic C code into a tapestry of elegance and order.
The Enchanted Scroll: Our Vim Spellbook</p>
<p>In the heart of our magical library lies a spell written in the ancient runes of Vim:</p>
<div class="highlight"><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;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span><span style="color:#66d9ef">function</span>! <span style="color:#a6e22e">FormatCCode</span>()
</span></span><span style="display:flex;"><span><span style="color:#75715e">    &#34; Save cursor position</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">let</span> <span style="color:#a6e22e">l</span>:<span style="color:#a6e22e">save_cursor</span> = <span style="color:#a6e22e">getpos</span>(<span style="color:#e6db74">&#34;.&#34;</span>)
</span></span><span style="display:flex;"><span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">    &#34; Remove trailing whitespace</span>
</span></span><span style="display:flex;"><span>    %<span style="color:#a6e22e">s</span><span style="color:#e6db74">/\s\+$/</span>/<span style="color:#a6e22e">e</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">    &#34; Replace tabs with spaces</span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">setlocal</span> <span style="color:#a6e22e">expandtab</span>
</span></span><span style="display:flex;"><span>    %<span style="color:#a6e22e">retab</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">    &#34; Set C style indentation</span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">setlocal</span> <span style="color:#a6e22e">cindent</span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">setlocal</span> <span style="color:#a6e22e">cinoptions</span>=:<span style="color:#ae81ff">0</span>,<span style="color:#a6e22e">l1</span>,(<span style="color:#ae81ff">0</span>,<span style="color:#a6e22e">u0</span>,<span style="color:#a6e22e">U0</span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">normal</span> <span style="color:#a6e22e">gg</span>=<span style="color:#a6e22e">G</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">    &#34; Adjusting Curly Braces</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">    &#34; Place opening brace on a new line</span>
</span></span><span style="display:flex;"><span>    %<span style="color:#a6e22e">s</span><span style="color:#e6db74">/\s*{\s*$/</span>\<span style="color:#a6e22e">r</span>{/<span style="color:#a6e22e">e</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">    &#34; Ensure single line spacing before closing brace</span>
</span></span><span style="display:flex;"><span>    %<span style="color:#a6e22e">s</span><span style="color:#e6db74">/\n\s*\n\s*}/</span>\<span style="color:#a6e22e">r</span>}/<span style="color:#a6e22e">e</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">    &#34; Reapply indentation after brace adjustments</span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">normal</span> <span style="color:#a6e22e">gg</span>=<span style="color:#a6e22e">G</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">    &#34; Restore cursor position</span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">call</span> <span style="color:#a6e22e">setpos</span>(<span style="color:#e6db74">&#39;.&#39;</span>, <span style="color:#a6e22e">l</span>:<span style="color:#a6e22e">save_cursor</span>)
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">endfunction</span>
</span></span></code></pre></div><h3 id="unraveling-the-mystical-code">Unraveling the Mystical Code<a href="#unraveling-the-mystical-code" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<ol>
<li>
<p>The Locator Charm: let l:save_cursor = getpos(&quot;.&quot;) - As a locator spell allows wizards to remember their place in a vast forest, this charm reflects your cursor&rsquo;s position, ensuring you can return to your exact spot after the formatting ritual.</p>
</li>
<li>
<p>The Trailing Wind: %s/\s+$//e - Imagine a gentle breeze that sweeps away all unnecessary spaces at the end of lines. This incantation ensures each line in your code ends cleanly, maintaining the purity of your script.</p>
</li>
<li>
<p>The Space Conjuror: The twin spells setlocal expandtab and %retab work in unison to transform all tabs into spaces. Like a wizard turning lead into gold, these ensure your indentations are universally understood in all realms.</p>
</li>
<li>
<p>The Alignment Hex: setlocal cindent and setlocal cinoptions=:0,l1,(0,u0,U0 - This powerful hex aligns your code in the ancient style of C, organizing your incantations into a readable and structured grimoire.</p>
</li>
<li>
<p>The Grand Alignment: normal gg=G - Envision this as a grand spell that aligns every line from the beginning to the end of your document, bringing harmony and order to your code.</p>
</li>
<li>
<p>The Return Portal: call setpos(&rsquo;.&rsquo;, l:save_cursor) - After the grand sorcery, this spell returns you to your original position, just like a portal spell brings you back to your starting point after a long journey.</p>
</li>
</ol>
<h3 id="casting-the-grand-spell">Casting the Grand Spell<a href="#casting-the-grand-spell" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>To bring this magic into your realm, inscribe this script into your .vimrc grimoire. In the mystical world of Vim, summon this enchantment on any C script by uttering the incantation <code>:call FormatCCode().</code>
A Mage&rsquo;s Word of Caution
While powerful, this script may need to fully understand the more complex spells of the C language, such as eldritch macros or the riddles of multiline comments. Test this magic on less important scrolls (backup files) before applying it to your main codices.
The Path to Advanced Sorcery
For wizards seeking even more formidable enchantments, explore the realms of vim-autoformat or summon external spirits like clang-format to aid you. These entities offer a plethora of formatting spells for various coding languages, expanding your magical repertoire.
In the end, remember, fellow command line wizards, this Vim script is a tool in your mystical arsenal to bring order and beauty to your code. May your spells be error-free and your coding journeys full of wonder. 🧙‍♂️✨📜</p>
]]></content>
		</item>
		
		<item>
			<title>HellEsc</title>
			<link>/posts/hellesc/</link>
			<pubDate>Mon, 06 Feb 2023 00:00:00 +0000</pubDate><guid>/posts/hellesc/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<h1 id="journey-into-rabbitholecoding-a-wizards-tale-in-the-realm-of-the-command-line">Journey into RabbitHoleCoding: A Wizard&rsquo;s Tale in the Realm of the Command Line<a href="#journey-into-rabbitholecoding-a-wizards-tale-in-the-realm-of-the-command-line" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h1>
<p>In the mystical realm of technology, where choices abound like stars in the night sky, embarks a brave soul on a quest named RabbitHoleCoding, or as I prefer, HellEsc. Picture this journey as a descent into the very core of the digital netherworld, delving into the abyss of bits and bytes.</p>
<h3 id="the-art-of-command-line-wizardry">The Art of Command-Line Wizardry<a href="#the-art-of-command-line-wizardry" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>Just as a wizard begins with the fundamentals of magic, so shall this journey commence with the rudimentary elements of computing. For now, the focus is on the ethereal, the virtual, as tangible hardware takes a back seat to its virtual counterpart. This choice of virtualization, akin to conjuring realms within realms, provides safety and flexibility - a sandbox for magical experiments, free from the fear of breaking the physical threads of reality.</p>
<h3 id="conjuring-the-basics-the-sorcerers-shopping-list">Conjuring the Basics: The Sorcerer&rsquo;s Shopping List<a href="#conjuring-the-basics-the-sorcerers-shopping-list" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>The tools and incantations are as crucial as the spells in a wizard&rsquo;s grimoire in this arcane quest. Here is the mystical shopping list, a collection of artifacts and magic needed to breathe life into this digital realm:</p>
<p><strong>Language: x86 Assembly</strong> - The ancient tongue of the machine, a language of power and precision. It&rsquo;s the runic script through which we converse directly with the device&rsquo;s heart.</p>
<p><strong>Staging Area or Platform: QEMU</strong> - Like a wizard&rsquo;s circle, QEMU serves as the staging ground. It&rsquo;s our own created world, a virtual sandbox where our code can dance without disturbing the fabric of the physical realm.</p>
<p><strong>Assembler: AS or NASM</strong> - These are the wands of our trade, tools to transmute our written spells (code) into a form the machine spirits can understand. Whether it&rsquo;s AS (the GNU assembler) or NASM (Netwide Assembler), each has its unique charms and incantations.</p>
<h3 id="the-first-enchantment-hello-world">The First Enchantment: &ldquo;Hello World&rdquo;<a href="#the-first-enchantment-hello-world" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>The initial spell to cast in this realm is the legendary &ldquo;Hello World&rdquo; - a rite of passage for all who delve into the arcane arts of programming. It&rsquo;s akin to a wizard&rsquo;s first successful summoning, an affirmation that they can bend the elements to their will.
This incantation, when invoked, will make it seem as if you are the sole entity in this system - a solitary sorcerer casting spells into the void, watching them echo back with life.</p>
<h3 id="the-path-forward">The Path Forward<a href="#the-path-forward" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>With our shopping list and virtual cauldron ready, we stand at the precipice of a grand adventure. Each step in this journey is a step deeper into the underworld of bits, a dive into the essence of computing itself.
Remember, fellow command-line sorcerers, the path of RabbitHoleCoding, or HellEsc, is fraught with challenges and wonders alike. May your spells compile without error, and your digital incantations bring unseen marvels into this virtual realm. 🧙‍♂️✨🖥️</p>
]]></content>
		</item>
		
		<item>
			<title>Hello Assembly</title>
			<link>/posts/hello_assembly/</link>
			<pubDate>Sun, 05 Feb 2023 00:00:00 +0000</pubDate><guid>/posts/hello_assembly/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<p>The symbols and incantations that make up the assembly-like code. Interestingly, this language for the CPU is closer to the machine code that a computer can understand, providing greater control over the hardware. Reading and writing are more challenging than high-level programming languages like Javascript or Python. The main is using a basic concept of hello world and memory stack. With Today&rsquo;s AI, Cloud, and other buzz words technology stack, it&rsquo;s nice to come back to the roots sometimes and see how things work on a simple level</p>
<div class="highlight"><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;"><code class="language-asm" data-lang="asm"><span style="display:flex;"><span><span style="color:#75715e"># x86 Assembly Basics
</span></span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">.global</span> <span style="color:#66d9ef">_start</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">.intel_syntax</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">.section</span> <span style="color:#66d9ef">.text</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Basic string to be push on teh stacks and write it out to stdout
</span></span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>_start:
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">push</span> <span style="color:#ae81ff">0x00434241</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">mov</span> %eax, <span style="color:#ae81ff">4</span> <span style="color:#75715e"># write = 4
</span></span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">mov</span> %ebx, <span style="color:#ae81ff">1</span> <span style="color:#75715e"># stdout = 1
</span></span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">mov</span> %ecx, %esp
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">mov</span> %edx, <span style="color:#ae81ff">3</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">int</span> <span style="color:#ae81ff">0x80</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e"># Exit syscall
</span></span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">mov</span> %eax, <span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">mov</span> %ebx, <span style="color:#ae81ff">65</span>
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">int</span> <span style="color:#ae81ff">0x80</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># basic print sting out to stdout
</span></span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">.section</span> <span style="color:#66d9ef">.data</span>
</span></span><span style="display:flex;"><span>        message:
</span></span></code></pre></div>]]></content>
		</item>
		
		<item>
			<title>Writing Back</title>
			<link>/posts/writing_back/</link>
			<pubDate>Wed, 18 Jan 2023 00:00:00 +0000</pubDate><author>Linux-Bytes</author><guid>/posts/writing_back/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<h1 id="writing-back">Writing Back<a href="#writing-back" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h1>
<p>New Year to start exploring new tech and focus on a few things. AI, Machine learning, cyber security, Lower level programming languages, to name a few.Hope I will wonder what the future will bring in these trying times. The next focus or project is to write more rust programming language and a little blog or community surrounding it. The command line world and its related tools. This is a footnote for myself, and see what I can document as I don&rsquo;t have a good memory, so tech will help me in that area. Whoever is reading this, sorry for the ramble, and welcome to my page again. I will post more on the topics I mention, and hopefully, this helps others.</p>
]]></content>
		</item>
		
		<item>
			<title>CLI Golang</title>
			<link>/posts/cli_golang/</link>
			<pubDate>Fri, 18 Mar 2022 00:00:00 +0000</pubDate><guid>/posts/cli_golang/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<h1 id="cli-and-golang">CLI and Golang<a href="#cli-and-golang" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h1>
<p>For some time, have wanted to dabble a little more on Golang. After working on an intro course at ACG (A Cloud Guru) and learning Golang, I got to say it is a straightforward language with some powerful features. Creating a CLI tool with Golang has been a good experience. The language has some unique character and made with some legendary programmers in our time:</p>
<ul>
<li>Robert Griesemer</li>
<li>Rob Pike</li>
<li>Ken Thompson</li>
</ul>
<h1 id="basic-password-cli-tool-in-golang">Basic Password CLI tool in Golang<a href="#basic-password-cli-tool-in-golang" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h1>
<p>The command will be able to export user names, IDs, home directories, and shells as either JSON or CSV. This command will not include information about system users (users with IDs under 1000). By default, the command will display the information as JSON to stdout, but the -format flag will allow a person to specify csv as the export type. Additionally, a file can be specified by using the -path flag. Here are the various ways the tools can be used:</p>
<div class="highlight"><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;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>$ hr -format<span style="color:#f92672">=</span>csv -path<span style="color:#f92672">=</span>path/to/users.csv
</span></span><span style="display:flex;"><span>$ hr -path<span style="color:#f92672">=</span>path/to/users.json
</span></span><span style="display:flex;"><span>$ hr
</span></span><span style="display:flex;"><span><span style="color:#f92672">[</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;name&#34;</span>: <span style="color:#e6db74">&#34;cloud_user&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;id&#34;</span>: 1002,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;home&#34;</span>: <span style="color:#e6db74">&#34;/home/cloud_user&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;shell&#34;</span>: <span style="color:#e6db74">&#34;/bin/bash&#34;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;name&#34;</span>: <span style="color:#e6db74">&#34;kevin&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;id&#34;</span>: 1003,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;home&#34;</span>: <span style="color:#e6db74">&#34;/home/kevin&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;shell&#34;</span>: <span style="color:#e6db74">&#34;/bin/zsh&#34;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">}</span>,
</span></span><span style="display:flex;"><span><span style="color:#f92672">]</span>
</span></span><span style="display:flex;"><span>$ hr -format<span style="color:#f92672">=</span>csv
</span></span><span style="display:flex;"><span>name,id,home,shell
</span></span><span style="display:flex;"><span>cloud_user,1002,/home/cloud_user,/bin/bash
</span></span><span style="display:flex;"><span>kevin,1003,/home/kevin,/bin/zsh
</span></span></code></pre></div><p>The information we want can be found in the /etc/passwd file.</p>
<p>This code is from <strong>Building a Go Command Line Tool</strong> from <a href="https://acloudguru.com/">A Cloud Guru</a></p>
<p><a href="https://github.com/nixbytes/acg-hr">source code</a></p>
]]></content>
		</item>
		
		<item>
			<title>What Is programming Really?</title>
			<link>/posts/what_is_programming/</link>
			<pubDate>Sun, 01 Nov 2020 00:00:00 +0000</pubDate><author>Linux-Bytes</author><guid>/posts/what_is_programming/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<h1 id="what-is-programming">What is Programming<a href="#what-is-programming" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h1>
<p>This a question for anyone now in days in today&rsquo;s world, is scripting or compiling the true nature? What is programming, really? I mean their many languages. Some argue scripting is false and compiling machine code is best, but not too low or high is the battle for many developers, engineers, and coders. This paradigm is better than others etc. If you can type it and run it, it is programming as long it turns complete.</p>
<p>some food for thoughs</p>
]]></content>
		</item>
		
		<item>
			<title>Freq Digits</title>
			<link>/posts/freq_numbers/</link>
			<pubDate>Tue, 07 Jul 2020 00:00:00 +0000</pubDate><guid>/posts/freq_numbers/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<p>Given an integer number, find the most frequent digit in it.</p>
<ul>
<li>
<p>how to count things efficiently?</p>
</li>
<li>
<p>keep calm and code in Python!</p>
</li>
</ul>
<p>Let use the statistics that comes with python stand library</p>
<h2 id="statistic-module">Statistic Module<a href="#statistic-module" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h2>
<p>This module provides functions for calculating mathematical statistics of numeric (Real-valued) data.</p>
<div class="highlight"><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;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> statistics 
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> statistics <span style="color:#f92672">import</span> mode 
</span></span></code></pre></div><p>This module statistics offers a Single mode (most common value) of discrete or nominal data.
The values or method to find this is to convert the vaules into a string and then back again once the frequent digit is
found</p>
<div class="highlight"><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;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">freq_digit</span>(num: int) <span style="color:#f92672">-&gt;</span> int:
</span></span><span style="display:flex;"><span>    numbers <span style="color:#f92672">=</span> list(str(num))
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> int(mode(numbers))
</span></span></code></pre></div><h2 id="trying-out-a-value">Trying out a value<a href="#trying-out-a-value" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h2>
<p>Next we want to test a value</p>
<div class="highlight"><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;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>num_list <span style="color:#f92672">=</span> <span style="color:#ae81ff">12345</span>
</span></span></code></pre></div><h2 id="finally">Finally<a href="#finally" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h2>
<p>we can run the function with some additional values and input</p>
<div class="highlight"><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;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>freq_digit(num_list)
</span></span></code></pre></div><pre><code>1
</code></pre>
<div class="highlight"><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;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>freq_digit(<span style="color:#ae81ff">12334433</span>)
</span></span></code></pre></div><pre><code>3
</code></pre>
<div class="highlight"><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;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>freq_digit(<span style="color:#ae81ff">773283277</span>)
</span></span></code></pre></div><pre><code>7
</code></pre>
<div class="highlight"><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;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>freq_digit(<span style="color:#ae81ff">1121</span>)
</span></span></code></pre></div><pre><code>1
</code></pre>
]]></content>
		</item>
		
		<item>
			<title>Docker Update Images</title>
			<link>/posts/docker-update-images/</link>
			<pubDate>Wed, 27 Nov 2019 00:00:00 +0000</pubDate><author>Linux-Bytes</author><guid>/posts/docker-update-images/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<p>A great way to update docker images is to use this one-liner. Since, docker does not have a command; this command will update images that you have already pulled. The only way is to pull all images again using docker pull <!-- raw HTML omitted --> command. This simple one-liner can help you update all images at once.</p>
<pre tabindex="0"><code>docker images |grep -v REPOSITORY|awk &#39;{print $1}&#39;|xargs -L1 docker pull
</code></pre>]]></content>
		</item>
		
		<item>
			<title>ssacli on Linux</title>
			<link>/posts/ssacli/</link>
			<pubDate>Mon, 29 Jul 2019 00:00:00 +0000</pubDate><guid>/posts/ssacli/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<h1 id="ssacli-tool">SSACLI TOOL<a href="#ssacli-tool" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h1>
<p>HP Tool for linux make it easier to manage smart array controllers in HP servers. With the shell it make simple to create, delete and repair the logical and physical drives on the smart array.</p>
<h3 id="two-ways-to-use-the-tools">Two ways to use the tools<a href="#two-ways-to-use-the-tools" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>hpacucli prompt</p>
<div class="highlight"><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;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>&gt; ssacli
</span></span><span style="display:flex;"><span>Smart Storage Administor CLI 3.47.1.0
</span></span><span style="display:flex;"><span>Detecting Controllers...Done.
</span></span><span style="display:flex;"><span>Type <span style="color:#e6db74">&#34;help&#34;</span> <span style="color:#66d9ef">for</span> a list of supported commands.
</span></span><span style="display:flex;"><span>Type <span style="color:#e6db74">&#34;exit&#34;</span> to close the console.
</span></span><span style="display:flex;"><span><span style="color:#f92672">=</span>&gt; rescan
</span></span></code></pre></div><p>or single command line</p>
<div class="highlight"><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;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>ssacli rescan
</span></span></code></pre></div><h3 id="hpe-short-names-for-commands">HPE Short names for commands<a href="#hpe-short-names-for-commands" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>all commands with the toll uses a short name syntax, which makes run and writing commands easier.</p>
<pre tabindex="0"><code>### Shortnames:

- chassisname = ch
- controller = ctrl 
- logicaldrive = ld
- physicaldrive = pd 
- drivewritecache = dwc
- licensekey = lk

### Specify drives:

- A range of drives (one to three): 1E:1:1-1E:1:3
- Drives that are unassigned: allunassigned
</code></pre>]]></content>
		</item>
		
		<item>
			<title>Learning C&#43;&#43;</title>
			<link>/posts/learning-c&#43;&#43;/</link>
			<pubDate>Mon, 10 Jun 2019 00:00:00 +0000</pubDate><author>Linux-Bytes</author><guid>/posts/learning-c&#43;&#43;/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<p>After dabblingly in a few programming languages like javascript, bash, and python, I finally biting the bullet and trying out C++, as low-level features and high-level abstraction, I figure this would boost my coding skills and get me closer into more development. So far, the language is not as scary as many make it be. Let touch on a few things on why C++ is good to learn.</p>
<h3 id="first-the-community">First The Community<a href="#first-the-community" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>The language itself has many followers, and many business use C++ for varies of reason. Having a great community is one of the primary core foundations that any language should have. With a good community, you can get support, and the more people will be building useful tools to make development in that particular language more accessible. That being said, that language is used a lot in AAA game companies. Also, it doesn&rsquo;t hurt that the language has an overall high answer rate on StackOverflow.</p>
<h3 id="control">Control<a href="#control" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>This language is very performant in the right hands of a developer. Since it&rsquo;s statically typed language, C++ is generally more performant than dynamically typed languages because the code is type-checked before it is executed.  in which will take up a minimal resource if done correctly.</p>
<h3 id="scalability">Scalability<a href="#scalability" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>One of its greatest strength it&rsquo;s how it scales, in the CG (computer graphics) the language is used primarily for these areas of programming for its scalability. As mention before in game programming is one of them.</p>
<h3 id="various-of-styles">Various of Styles<a href="#various-of-styles" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>C++ is a multiparadigm programming language that not only supports OOP paradigm. The language also supports anonymous functions, also known as lambda expressions. It contains generic programming styles, which allow one value to take on different types, or you Free-form the language in which you only have to follow the semantic rules of C++.</p>
]]></content>
		</item>
		
		<item>
			<title>Aws Cloud Tools</title>
			<link>/posts/aws-cloud/</link>
			<pubDate>Fri, 17 May 2019 00:00:00 +0000</pubDate><guid>/posts/aws-cloud/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<h1 id="aws-cloud">AWS Cloud<a href="#aws-cloud" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h1>
<p>The AWS Command Line Interface (CLI) is a powerful and convenient tool that allows you to manage and control your AWS services with ease. By using a unified interface, you no longer need to switch between multiple tools or dashboards to manage your cloud infrastructure. Instead, you can control all your AWS services from the command line, which provides a streamlined and efficient approach to managing your cloud environment.</p>
<p>The AWS CLI is designed to make it easy for you to automate your workflows by writing scripts. By using the command line, you can create scripts that interact with multiple AWS services, allowing you to automate complex workflows and eliminate manual processes. This not only saves you time, but it also reduces the potential for human error.</p>
<p>One of the most significant benefits of using the AWS CLI is that it allows you to use shell scripting to automate your workflows. Shell scripting is a powerful technique that enables you to write scripts using the command line interface, which can be used to automate repetitive tasks or complex workflows. With the AWS CLI, you can automate processes such as deploying and scaling applications, creating and managing cloud resources, and managing user access and permissions.</p>
<p>In today&rsquo;s fast-paced technology landscape, automation is becoming increasingly important. The ability to automate tasks can improve efficiency, reduce costs, and increase reliability. The AWS CLI is a vital tool for achieving these benefits, as it allows you to automate your AWS workflows with ease. So, if you can type, you can script it, and finally, you can automate it. The AWS CLI is the tool that makes this possible.</p>
<h4 id="great-reosources-to-use">Great Reosources to use<a href="#great-reosources-to-use" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h4>
<ul>
<li><a href="https://github.com/awslabs/aws-shell">https://github.com/awslabs/aws-shell</a></li>
<li><a href="https://github.com/donnemartin/saws">https://github.com/donnemartin/saws</a></li>
<li><a href="https://github.com/aws/aws-cli">https://github.com/aws/aws-cli</a></li>
<li><a href="https://github.com/awslabs/awscli-aliases">https://github.com/awslabs/awscli-aliases</a></li>
<li><a href="https://github.com/aws/amazon-ecs-cli">https://github.com/aws/amazon-ecs-cli</a></li>
<li><a href="https://github.com/aws/awsmobile-cli">https://github.com/aws/awsmobile-cli</a></li>
<li><a href="https://github.com/amazon-archives/awscli-cookbook">https://github.com/amazon-archives/awscli-cookbook</a></li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Process Substitution</title>
			<link>/posts/process-substitution/</link>
			<pubDate>Wed, 24 Apr 2019 00:00:00 +0000</pubDate><author>Linux-Bytes</author><guid>/posts/process-substitution/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<p>In the world of shell piping, there&rsquo;s a powerful technique that involves piping the standard output (stdout) of one command into the standard input (stdin) of another. However, what happens when you need to pipe the output of multiple commands? This is where process substitution comes in handy.</p>
<p>Process substitution is a shell technique that allows you to use the output of a command as a file argument to another command, without the need to create temporary files or named pipes. Instead, process substitution provides a more streamlined and efficient approach to managing shell pipelines.</p>
<p>Let&rsquo;s take a look at an example to illustrate the benefits of process substitution. Suppose you have two unsorted files that you want to compare and find the unique lines in each file. Traditionally, you would need to create temporary files to store the sorted and unique lines, and then use the &lsquo;comm&rsquo; command to compare the files. However, with process substitution, you can do all of this in one line without the need for temporary files.</p>
<p>Here&rsquo;s an example:</p>
<div class="highlight"><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;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  &lt;<span style="color:#f92672">(</span>list<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>or
</span></span><span style="display:flex;"><span>  &gt;<span style="color:#f92672">(</span>list<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>comm -3 &lt;<span style="color:#f92672">(</span>sort file1 | uniq<span style="color:#f92672">)</span> &lt;<span style="color:#f92672">(</span>sort file2 | uniq<span style="color:#f92672">)</span>
</span></span></code></pre></div><p>In this example, we&rsquo;re using process substitution to sort and find the unique lines in each file and then compare them using the &lsquo;comm&rsquo; command. As you can see, the output is the same as the traditional method, but with a more efficient and streamlined approach.</p>
<p>One of the main benefits of process substitution is that it enables reading directly from another process, which can often be faster than having to write a temporary file and then read it back in. This not only saves time but also avoids the need for disk space. Additionally, the substituted process can run concurrently, which means that shell scripts can take advantage of multiprocessing to reduce the total time for computation.</p>
<p>It&rsquo;s worth noting that process substitution has been available as a compile-time option for the Korn shell (ksh88) since 1988. The Bash shell also provided process substitution no later than version 1.14, released in 1994. This means that process substitution has been available for quite some time and is a well-established technique in the shell scripting world.</p>
<p>In conclusion, process substitution is a powerful and efficient technique that provides a streamlined approach to managing shell pipelines. By avoiding the need for temporary files and enabling direct reading from another process, process substitution can save time and reduce the complexity of shell scripts.</p>
]]></content>
		</item>
		
		<item>
			<title>Jumpstart Python</title>
			<link>/posts/jumpstart-python/</link>
			<pubDate>Thu, 21 Feb 2019 00:00:00 +0000</pubDate><author>Linux-Bytes</author><guid>/posts/jumpstart-python/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<h3 id="python-jumpstart-by-building-10-apps">Python Jumpstart by Building 10 Apps<a href="#python-jumpstart-by-building-10-apps" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>&ldquo;The Python Jumpstart by Building 10 Apps Course&rdquo; is a great path to get started on learning python and some of the core features. Micheal Kenndy explains each topic in details and with good examples. Python is growing, and the demand for the skill set is high peak right now. Python Jumpstart will help anyone to get started on the language. I enjoy doing these small projects. For experienced programmers or someone who already know Ruby, Java, or JavaScript, learning Python Jumpstart will help anyone get started fast with this powerful language. The few things I enjoyed during my journey with JumpStart is the wide array of coverage that the course provides. For example &ldquo;Birthday app&rdquo; cover a significant aspect of programming like dates and times. Also the Wizard battle project cover classes, inheritance, and python magic methods.</p>
<h3 id="focus-on-the-language-concepts-listed-under-them-with-thier-source">focus on the language concepts listed under them with thier source<a href="#focus-on-the-language-concepts-listed-under-them-with-thier-source" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<ol>
<li><a href="https://github.com/mikeckennedy/python-jumpstart-course-demos/tree/master/apps/01_hello_world/you_try"><strong>Hello world</strong></a>
<ul>
<li>test your environment</li>
</ul>
</li>
<li><a href="https://github.com/mikeckennedy/python-jumpstart-course-demos/tree/master/apps/02-guess-number-app"><strong>Guess that number</strong></a>
<ul>
<li>user input</li>
<li>conditionals</li>
<li>string parsing</li>
</ul>
</li>
<li><a href="https://github.com/mikeckennedy/python-jumpstart-course-demos/tree/master/apps/03_birthday/you_try"><strong>Birthday app</strong></a>
<ul>
<li>dates and times</li>
</ul>
</li>
<li><a href="https://github.com/mikeckennedy/python-jumpstart-course-demos/tree/master/apps/04_journal/you_try"><strong>Personal journal</strong></a>
<ul>
<li>text-based file i/o</li>
</ul>
</li>
<li><a href="https://github.com/mikeckennedy/python-jumpstart-course-demos/tree/master/apps/05_weather_client/you_try"><strong>Weather client</strong></a>
<ul>
<li>external packages</li>
<li>pip</li>
<li>screen scraping</li>
<li>HTTP clients</li>
</ul>
</li>
<li><a href="https://github.com/mikeckennedy/python-jumpstart-course-demos/tree/master/apps/06_lolcat_factory/you_try"><strong>LOL Cats Factory</strong></a>
<ul>
<li>binary files on the internet</li>
</ul>
</li>
<li><a href="https://github.com/mikeckennedy/python-jumpstart-course-demos/tree/master/apps/07_wizard_battle/you_try"><strong>Wizard battle</strong></a>
<ul>
<li>classes</li>
<li>inheritance</li>
<li>magic methods</li>
</ul>
</li>
<li><a href="https://github.com/mikeckennedy/python-jumpstart-course-demos/tree/master/apps/08_file_searcher/you_try"><strong>File searcher</strong></a>
<ul>
<li>navigating the file system</li>
<li>generator methods</li>
</ul>
</li>
<li><a href="https://github.com/mikeckennedy/python-jumpstart-course-demos/tree/master/apps/09_real_estate_analyzer/you_try"><strong>Real estate analyzer</strong></a>
<ul>
<li>file formats</li>
<li>list comprehensions</li>
<li>generators expressions</li>
</ul>
</li>
<li><a href="https://github.com/mikeckennedy/python-jumpstart-course-demos/tree/master/apps/10_movie_search/you_try"><strong>Movie lookup app</strong></a>
<ul>
<li>error handling</li>
<li>exceptions</li>
<li>Advanced HTTP clients</li>
</ul>
</li>
</ol>
]]></content>
		</item>
		
		<item>
			<title>Bash 5.0 Release</title>
			<link>/posts/bash-5.0/</link>
			<pubDate>Tue, 22 Jan 2019 00:00:00 +0000</pubDate><author>Linux-Bytes</author><guid>/posts/bash-5.0/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<p>Hello power users, the fifth release of bash is focused on new shell variables and with a lot of significant bug fixes which is fantastic!!! It also  The bash was first released in 1989 and was created for the GNU project as a replacement for their Bourne shell. It is capable of performing functions such as interactive command line editing, and job control on architectures that support it</p>
<p>comments from the mailing list</p>
<blockquote>
<p>This release fixes several outstanding bugs in bash-4.4 and introduces several new features. The most significant bug fixes are an overhaul of how nameref variables resolve and a number of potential out-of-bounds memory errors discovered via fuzzing. There are a number of changes to the expansion of <code>$@</code> and <code>$*</code> in various contexts where word splitting is not performed to conform to a Posix standard interpretation, and additional changes to resolve corner cases for Posix conformance.</p>
</blockquote>
<p>Here are the large amount cool feature added to powerful shell</p>
<h3 id="directly-from-the-mailing-list">Directly from the mailing list<a href="#directly-from-the-mailing-list" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<ol>
<li>New Features in Bash</li>
</ol>
<p>a. The <code>wait</code> builtin can now wait for the last process substitution created.</p>
<p>b. There is an EPOCHSECONDS variable, which expands to the time in seconds
since the Unix epoch.</p>
<p>c. There is an EPOCHREALTIME variable, which expands to the time in seconds
since the Unix epoch with microsecond granularity.</p>
<p>d. New loadable builtins: rm, stat, fdflags.</p>
<p>e. <code>BASH_ARGV0</code>: a new variable that expands to $0 and sets $0 on assignment.</p>
<p>f. When supplied a numeric argument, the shell-expand-line bindable readline
command does not perform quote removal and suppresses command and process
substitution.</p>
<p>g. <code>history -d</code> understands negative arguments: negative arguments offset from
the end of the history list.</p>
<p>h. The <code>name</code> argument to the <code>coproc</code> reserved word now undergoes word
expansion, so unique coprocs can be created in loops.</p>
<p>i. A nameref name resolution loop in a function now resolves to a variable by
that name in the global scope.</p>
<p>j. The <code>wait</code> builtin now has a <code>-f</code> option, which signfies to wait until the
specified job or process terminates, instead of waiting until it changes
state.</p>
<p>k. There is a define in config-top.h that allows the shell to use a static
value for <code>$PATH</code>, overriding whatever is in the environment at startup, for
use by the restricted shell.</p>
<p>l. Process substitution does not inherit the <code>v</code> option, like command
substitution.</p>
<p>m. If a non-interactive shell with job control enabled detects that a foreground
job died due to <code>SIGINT</code>, it acts as if it received the <code>SIGINT</code>.</p>
<p>n. The <code>SIGCHLD</code> trap is run once for each exiting child process even if job
control is not enabled when the shell is in Posix mode.</p>
<p>o. A new shopt option: <code>localvar_inherit</code>; if set, a local variable inherits the
value of a variable with the same name at the nearest preceding scope.</p>
<p>p. <code>bind -r</code> now checks whether a key sequence is bound before binding it to
NULL, to avoid creating keymaps for a multi-key sequence.</p>
<p>q. A numeric argument to the line editing <code>operate-and-get-next</code> command
specifies which history entry to use.</p>
<p>r. The positional parameters are now assigned before running the shell startup
files, so startup files can use address@hidden</p>
<p>s. There is a compile-time option that forces the shell to disable the check
for an inherited OLDPWD being a directory.</p>
<p>t. The <code>history</code> builtin can now delete ranges of history entries using
<code>-d start-end</code>.</p>
<p>u. The <code>vi-edit-and-execute-command</code> bindable readline command now puts readline
back in vi insertion mode after executing commands from the edited file.</p>
<p>v. The command completion code now matches aliases and shell function names
case-insensitively if the readline completion-ignore-case variable is set.</p>
<p>w. There is a new <code>assoc_expand_once</code> shell option that attempts to expand
associative array subscripts only once.</p>
<p>x. The shell only sets up <code>BASH_ARGV</code> and <code>BASH_ARGC</code> at startup if extended
debugging mode is active. The old behavior of unconditionally setting them
is available as part of the shell compatibility options.</p>
<p>y. The <code>umask</code> builtin now allows modes and masks greater than octal 777.</p>
<p>z. The <code>times</code> builtin now honors the current locale when printing a decimal
point.</p>
<p>aa. There is a new (disabled by default, undocumented) shell option to enable and disable sending history to syslog at runtime.</p>
<p>bb. Bash no longer allows variable assignments preceding a special builtin that changes variable attributes to propagate back to the calling environment unless the compatibility level is 44 or lower.</p>
<p>cc. You can set the default value for $HISTSIZE at build time in config-top.h.</p>
<p>dd. The <code>complete</code> builtin now accepts a <code>-I</code> option that applies the completion to the initial word on the line.</p>
<p>ee.  The internal bash malloc now uses mmap (if available) to satisfy requests greater than 128K bytes, so free can use mfree to return the pages to the kernel.</p>
<p>ff. The shell doesn&rsquo;t automatically set <code>BASH_ARGC</code> and <code>BASH_ARGV</code> at startup unless it&rsquo;s in debugging mode, as the documentation has always said, but will dynamically create them if a script references them at the top level without having enabled debugging mode.</p>
<p>gg. The <code>localvar_inherit</code> option will not attempt to inherit a value from a variable of an incompatible type (indexed vs. associative arrays, for example).</p>
<p>hh. The <code>globasciiranges</code> option is now enabled by default; it can be set to off by default at configuration time.</p>
<p>ii. Associative and indexed arrays now allow subscripts consisting solely of whitespace.</p>
<p>jj. <code>checkwinsize</code> is now enabled by default.</p>
<p>kk. The <code>localvar_unset</code> shopt option is now visible and documented.</p>
<p>ll. The <code>progcomp_alias</code> shopt option is now visible and documented.</p>
<p>mm. The signal name processing code now understands <code>SIGRTMIN+n</code>call the way up to SIGRTMAX.</p>
<p>nn. There is a new <code>seq</code> loadable builtin.</p>
<p>oo. Trap execution now honors the (internal) max invocations of <code>eval</code>, since traps are supposed to be executed as if using <code>eval</code>.</p>
<p>pp. The <code>$_</code> variable doesn&rsquo;t change when the shell executes a command that forks.</p>
<p>qq. The <code>kill</code> builtin now supports <code>-sSIGNAME</code> and <code>-nSIGNUM</code>, even though conforming applications aren&rsquo;t supposed to use them.</p>
<p>rr. POSIX mode now enables the <code>shift_verbose</code> option.</p>
<ol start="2">
<li>New Features in Readline</li>
</ol>
<p>a. Non-incremental vi-mode search (<code>N</code>, <code>n</code>) can search for a shell pattern, as
Posix specifies (uses fnmatch(3) if available).</p>
<p>b. There are new <code>next-screen-line</code> and <code>previous-screen-line</code> bindable commands, which move the cursor to the same column in the next, or previous, physical line, respectively.</p>
<p>c. There are default key bindings for control-arrow-key key combinations.</p>
<p>d. A negative argument (-N) to <code>quoted-insert</code>  means to insert the next N characters using quoted-insert.</p>
<p>e. New public function: <code>rl_check_signals()</code>, which allows applications to respond to signals that readline catches while waiting for input using a custom read function.</p>
<p>f. There is new support for conditionally testing the readline version in an inputrc file, with a full set of arithmetic comparison operators available.</p>
<p>g. There is a simple variable comparison facility available for use within an inputrc file. Allowable operators are equality and inequality; string variables may be compared to a value; boolean variables must be compared to either <code>on</code> or <code>off</code>; variable names are separated from the operator by whitespace.</p>
<p>h. The history expansion library now understands command and process substitution and extended globbing and allows them to appear anywhere in a word.</p>
<p>i. The history library has a new variable that allows applications to set the initial quoting state, so quoting state can be inherited from a previous line.</p>
<p>j. Readline now allows application-defined keymap names; there is a new public function, <code>rl_set_keymap_name()</code>, to do that.</p>
<p>k. The &ldquo;Insert&rdquo; keypad key, if available, now puts readline into overwrite mode.</p>
<p>with a bundle of new improvement, fixes and feature it&rsquo;s a lot to cover on one news post, we will post a tutorial, use cases, and features soon.</p>
<p><img src="https://lists.gnu.org/archive/html/bug-bash/2019-01/msg00063.html" alt="Bash mailing source">
<img src="https://en.wikipedia.org/wiki/Bash_%28Unix_shell%29" alt="Bash Wiki">
<img src="https://linux.pictures/" alt="Bash Image Source"></p>
]]></content>
		</item>
		
		<item>
			<title>Regex Use Cases</title>
			<link>/posts/regex_use_cases/</link>
			<pubDate>Sun, 06 Jan 2019 00:00:00 +0000</pubDate><author>Linux-Bytes</author><guid>/posts/regex_use_cases/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<p>Regex&rsquo;s some hate some love, but in the end, we all need something productive in our life. Some people hate because the mini-language can be arcane. Others love it because it adds superpowers for text processing. Learning the arcane secrets of regex can be a rough experience, but it doesn&rsquo;t have to.</p>
<p>so let do some exercises on regex like emails and IP for your everyday technical needs</p>
<h3 id="finding-mailing-data">Finding Mailing data<a href="#finding-mailing-data" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>extract email adresses from some file</p>
<pre tabindex="0"><code class="language-regex" data-lang="regex">([[:alnum:]_.-]+@[[:alnum:]_.-]+?\.[[:alpha:].]{2,6})
</code></pre><ol>
<li>
<p><code>[:alnum:]</code>: Alphanumeric characters: <code>[:alpha:]</code> and <code>[:digit:]</code>; in the <code>C</code> locale and ASCII character encoding, this is the same as <code>[0-9A-Za-z]</code>.</p>
</li>
<li>
<p><code>[ _.+]</code>: One of the characters in the brackets. in which looks for one of
these characters <code>_.+</code></p>
</li>
<li>
<p><code>?</code>: Makes quantifiers &ldquo;lazy&rdquo;</p>
</li>
<li>
<p><code>\.</code>: Escapes a special character for the <code>.</code></p>
</li>
</ol>
<h3 id="check-for-ip-address">Check for IP address<a href="#check-for-ip-address" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>Look for IPv4 address in files</p>
<pre tabindex="0"><code>([0-9]{1,3}\.){3}[0-9]{1,3}
</code></pre><ol>
<li>
<p><code>[0-9]</code>: One of the characters in the range from 0 to 9</p>
</li>
<li>
<p><code>{1,3}</code>: One to three times, &ldquo;greedy&rdquo;</p>
</li>
<li>
<p><code>\.</code>: Escapes a special character for the <code>.</code></p>
</li>
</ol>
<p>Like any programming language, it just requires a bit of understanding to get the hang of it. Regex is very powerful can be used for varies of a task that is needed. so keep in mind sprinkle of regex can improve on any project you are working on the shell</p>
<ul>
<li><a href="https://www.commandlinefu.com/commands/view/5668/extract-ipv4-addressess-from-file">By: rubenmoran</a></li>
<li><a href="https://www.commandlinefu.com/commands/view/2431/extract-email-adresses-from-some-file-or-any-other-pattern">By: wires</a></li>
<li><a href="https://www.gnu.org/software/grep/manual/html_node/Character-Classes-and-Bracket-Expressions.html">GNU Grep</a></li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Linux Shell on IPad or IPhone</title>
			<link>/posts/linux-shell-on-ipad-or-iphone/</link>
			<pubDate>Sun, 30 Dec 2018 00:00:00 +0000</pubDate><author>Linux-Bytes</author><guid>/posts/linux-shell-on-ipad-or-iphone/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<p><img src="https://ish.app/assets/github-readme.png" alt="IOS"></p>
<p>Hello Fellower Moles, thier is a great tools that haves a linux shell on moble devices.
The new Linux command line iSH app on iPad or iPhone. With iSH Shell is a Linux shell for iOS that uses an x86 emulator to run a simplified version of Alpine Linux on IOS. You can install packages and additional software directly into iSH with the Alpine package manager.</p>
<p>Why Alpine Linux you say? Is a Linux distribution based on musl and BusyBox which many power users use, that want a light weight distro. Because of its small size, it&rsquo;s heavily used in containers providing quick a boot-up times, which makes a great choice for small userspace on IOS. To Install the iSH Shell into iOS requires TestFlight, which is a developer tool.</p>
<p>The beauty of the shell is that is can be used on any device even on mobile. this is a great project called iSH in which you can run a container Linux on IOS is a great example. This is an excellent project that will open the doors for many users. We hope to see more of the shell get implements on more device.</p>
<p>check it out and give a trie on your IOS device.</p>
<h4 id="sources">Sources:<a href="#sources" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h4>
<ul>
<li><a href="https://ish.app/">iSH</a></li>
<li><a href="http://osxdaily.com/2018/12/11/ish-linux-shell-ios/">osxdaily</a></li>
<li><a href="https://github.com/tbodt/ish">iSH Github</a></li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Mastering Regular Expressions</title>
			<link>/posts/mastering-regular-expressions/</link>
			<pubDate>Sat, 29 Dec 2018 00:00:00 +0000</pubDate><author>Linux-Bytes</author><guid>/posts/mastering-regular-expressions/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<p>So Linux Academy is offering a great course called Mastering Regular Expressions. After taking a few video course and video, I have to say learning more about regular expressions is more important than ever. Perhaps a few regexes (regular expressions) is fine for simple tasks, but for complex problems, having a deeper knowledge on many levels can boost your technical skill to a new level especially with the need for big data.</p>
<p>Regex is serving a fundamental tool for the filter, searches analyze and summarize data. In today programming languages its extremely rare for a language to not a regex engine of any kind. Let go back in history a bit, and regular expressions were also known as rational expression, which in the 1950s a man named  Stephen Cole Kleene formalized the description the logical expression as a regular language.</p>
<p>It was a common use with Unix, Linux and Unix-like text-processing utilities such as POSIX tools, sed, awk, Perl and many others. Here is a diagram of the Translating from Thompson Kleene show as regex processor translates a regular expression</p>
<hr>
<p><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Thompson-kleene-star.svg/1000px-Thompson-kleene-star.svg.png" alt="Alt Thompson kleene star"></p>
<p><code>(s* means 'zero or more of s ')</code></p>
<h4 id="sources">Sources<a href="#sources" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h4>
<p><a href="https://en.wikipedia.org/wiki/Regular_expression">Regular Expression</a>
<a href="https://en.wikipedia.org/wiki/Stephen_Cole_Kleene">Stephen Cole Kleene</a>
<a href="https://linuxacademy.com/devops/training/course/name/mastering-regular-expressions">linux Academy</a></p>
]]></content>
		</item>
		
		<item>
			<title>Graphical Tree File Folder</title>
			<link>/posts/graphical-tree-file-folder/</link>
			<pubDate>Wed, 26 Dec 2018 00:00:00 +0000</pubDate><author>Linux-Bytes</author><guid>/posts/graphical-tree-file-folder/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<h2 id="graphical-tree-of-sub-directories">Graphical tree of sub-directories<a href="#graphical-tree-of-sub-directories" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h2>
<p>This oneliner command is for a graphical tree of sub-directories, this is an excellent oneliner when you&rsquo;re in need to view the directories in a graphical format. The tree is a recursive directory listing command or program that produces a depth indented listing of files which not generally found on all Linux or Unix systems. The first Tree Unix utility was developed by Steve Baker which includes a verbose of feature and flag option. This one-liner is a quick fix for an alternative tree version for portable and easy use.</p>
<p>let break down how this oneliner is build by go deep with the command that is
being used.</p>
<h3 id="using-ls">using <code>ls</code><a href="#using-ls" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>using <code>ls -R</code> does recursively list subdirectories encountered. this will give
every thing in directory by level of current one</p>
<div class="highlight"><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;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>root@19472dcaa9be:/var/log# ls -R
</span></span><span style="display:flex;"><span>.:
</span></span><span style="display:flex;"><span>alternatives.log  apt  bootstrap.log  btmp  dpkg.log  faillog  lastlog  tallylog  wtmp
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>./apt:
</span></span><span style="display:flex;"><span>eipp.log.xz  history.log
</span></span></code></pre></div><h3 id="using-grep">using <code>grep</code><a href="#using-grep" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>Now with the grep command, we grep all line that end with <code>:</code>. using the <code>$</code>we
grabbing all line with <code>:</code>.</p>
<div class="highlight"><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;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>root@19472dcaa9be:/var/log# ls -R | grep <span style="color:#e6db74">&#39;:$&#39;</span>
</span></span><span style="display:flex;"><span>.:
</span></span><span style="display:flex;"><span>./apt:
</span></span></code></pre></div><h3 id="using-sed">using <code>sed</code><a href="#using-sed" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>using the <code>sed</code> command on the final pipe <code>|</code> we will filter out the needed
directories and add |- and additional - for each level of the directories it
sitting in. with <code>sed</code> the flag <code>-e</code> will append the editing commands specified
by the command argument to the list of commands.</p>
<p>First let remove the <code>:</code> from the list directories.</p>
<pre tabindex="0"><code>root@80edb8b49c29:/var#  ls -R | grep &#34;:$&#34; | sed -e &#39;s/:$//&#39;
.
./backups
./cache
./cache/apt
./cache/apt/archives
./cache/apt/archives/partial
./cache/debconf
./cache/ldconfig
./lib
./lib/apt
./lib/apt/lists
./lib/apt/mirrors
./lib/apt/mirrors/partial
./lib/apt/periodic
./lib/dpkg
./lib/dpkg/alternatives
./lib/dpkg/info
./lib/dpkg/parts
./lib/dpkg/triggers
./lib/dpkg/updates
./lib/misc
./lib/pam
./lib/systemd
./lib/systemd/deb-systemd-helper-enabled
./lib/systemd/deb-systemd-helper-enabled/timers.target.wants
./local
./log
./log/apt
./mail
./opt
./spool
./tmp
</code></pre><p>now let with the regex <code>s/[^-][^\/]*\//--/g</code> from sed, replace all <code>.</code> and <code>/</code>
and stop with last <code>/</code> with a <code>--</code> when in case with add additionalm base on
how many dirctory each lines has.</p>
<div class="highlight"><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;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>root@80edb8b49c29:/var# ls -R | grep <span style="color:#e6db74">&#34;:</span>$<span style="color:#e6db74">&#34;</span> | sed -e <span style="color:#e6db74">&#39;s/:$//&#39;</span> -e <span style="color:#e6db74">&#39;s/[^-][^\/]*\//--/g&#39;</span>
</span></span><span style="display:flex;"><span>.
</span></span><span style="display:flex;"><span>--backups
</span></span><span style="display:flex;"><span>--cache
</span></span><span style="display:flex;"><span>----apt
</span></span><span style="display:flex;"><span>------archives
</span></span><span style="display:flex;"><span>--------partial
</span></span><span style="display:flex;"><span>----debconf
</span></span><span style="display:flex;"><span>----ldconfig
</span></span><span style="display:flex;"><span>--lib
</span></span><span style="display:flex;"><span>----apt
</span></span><span style="display:flex;"><span>------lists
</span></span><span style="display:flex;"><span>------mirrors
</span></span><span style="display:flex;"><span>--------partial
</span></span><span style="display:flex;"><span>------periodic
</span></span><span style="display:flex;"><span>----dpkg
</span></span><span style="display:flex;"><span>------alternatives
</span></span><span style="display:flex;"><span>------info
</span></span><span style="display:flex;"><span>------parts
</span></span><span style="display:flex;"><span>------triggers
</span></span><span style="display:flex;"><span>------updates
</span></span><span style="display:flex;"><span>----misc
</span></span><span style="display:flex;"><span>----pam
</span></span><span style="display:flex;"><span>----systemd
</span></span><span style="display:flex;"><span>------deb-systemd-helper-enabled
</span></span><span style="display:flex;"><span>--------timers.target.wants
</span></span><span style="display:flex;"><span>--local
</span></span><span style="display:flex;"><span>--log
</span></span><span style="display:flex;"><span>----apt
</span></span><span style="display:flex;"><span>--mail
</span></span><span style="display:flex;"><span>--opt
</span></span><span style="display:flex;"><span>--spool
</span></span><span style="display:flex;"><span>--tmp
</span></span></code></pre></div><p>finally we use this two sed regex <code>-e 's/^/ /' -e 's/-/|/'</code> and add spacing and
<code>|</code> to the begining of the list. thier you go we have a quick tree of the
directories with <code>--</code> as levels.</p>
<div class="highlight"><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;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>root@19472dcaa9be:/var# ls -R | grep <span style="color:#e6db74">&#34;:</span>$<span style="color:#e6db74">&#34;</span> | sed -e <span style="color:#e6db74">&#39;s/:$//&#39;</span> -e <span style="color:#e6db74">&#39;s/[^-][^\/]*\//--/g&#39;</span> -e <span style="color:#e6db74">&#39;s/^/ /&#39;</span> -e <span style="color:#e6db74">&#39;s/-/|/&#39;</span>
</span></span><span style="display:flex;"><span> .
</span></span><span style="display:flex;"><span> |-backups
</span></span><span style="display:flex;"><span> |-cache
</span></span><span style="display:flex;"><span> |---apt
</span></span><span style="display:flex;"><span> |-----archives
</span></span><span style="display:flex;"><span> |-------partial
</span></span><span style="display:flex;"><span> |---debconf
</span></span><span style="display:flex;"><span> |---ldconfig
</span></span><span style="display:flex;"><span> |-lib
</span></span><span style="display:flex;"><span> |---apt
</span></span><span style="display:flex;"><span> |-----lists
</span></span><span style="display:flex;"><span> |-----mirrors
</span></span><span style="display:flex;"><span> |-------partial
</span></span><span style="display:flex;"><span> |-----periodic
</span></span><span style="display:flex;"><span> |---dpkg
</span></span><span style="display:flex;"><span> |-----alternatives
</span></span><span style="display:flex;"><span> |-----info
</span></span><span style="display:flex;"><span> |-----parts
</span></span><span style="display:flex;"><span> |-----triggers
</span></span><span style="display:flex;"><span> |-----updates
</span></span><span style="display:flex;"><span> |---misc
</span></span><span style="display:flex;"><span> |---pam
</span></span><span style="display:flex;"><span> |---systemd
</span></span><span style="display:flex;"><span> |-----deb-systemd-helper-enabled
</span></span><span style="display:flex;"><span> |-------timers.target.wants
</span></span><span style="display:flex;"><span> |-local
</span></span><span style="display:flex;"><span> |-log
</span></span><span style="display:flex;"><span> |---apt
</span></span><span style="display:flex;"><span> |-mail
</span></span><span style="display:flex;"><span> |-opt
</span></span><span style="display:flex;"><span> |-spool
</span></span><span style="display:flex;"><span> |-tmp
</span></span></code></pre></div><p>credit: unixmonkey842 <a href="https://www.commandlinefu.com/commands/view/710/graphical-tree-of-sub-directories">source</a></p>
]]></content>
		</item>
		
		<item>
			<title>Cat Command</title>
			<link>/posts/cat-command/</link>
			<pubDate>Sun, 16 Dec 2018 00:00:00 +0000</pubDate><author>Linux-Bytes</author><guid>/posts/cat-command/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<p>The cat is known for reading files sequentially and display its output. it
maybe be a simple command line tool, but it has many uses. cat is know a known
tool throght the unix history and has been port over into GNU coreutils. One
important factor about cat is that since because it does not require the files to
consist of lines of text, but works with any sort of data.</p>
<p>here are of the option that this tool can do beside display information.</p>
<ul>
<li><code>-b</code> (GNU: &ndash;number-nonblank), number non-blank output lines</li>
<li><code>-e</code> implies -v but also display end-of-line characters as $ (GNU only: -E the same, but without implying -v)</li>
<li><code>-n</code> (GNU: &ndash;number), number all output lines</li>
<li><code>-s</code> (GNU: &ndash;squeeze-blank), squeeze multiple adjacent blank lines</li>
<li><code>-t</code> implies -v, but also display tabs as ^I (GNU: -T the same, but without implying -v)</li>
<li><code>-u</code> use unbuffered I/O for stdout. POSIX does not specify the behavior without this option.</li>
<li><code>-v</code> (GNU: &ndash;show-nonprinting), displays nonprinting characters, except for tabs and the end of line character</li>
</ul>
<p>so let look at a few options</p>
<p>for example using the <code>cat -n</code> will show the number line of a file</p>
<pre tabindex="0"><code>root@0868755f0791:/# cat -n etc/login.defs | head
     1	#
     2	# /etc/login.defs - Configuration control definitions for the login package.
     3	#
     4	# Three items must be defined:  MAIL_DIR, ENV_SUPATH, and ENV_PATH.
     5	# If unspecified, some arbitrary (and possibly incorrect) value will
     6	# be assumed.  All other items are optional - if not specified then
     7	# the described action or option will be inhibited.
     8	#
     9	# Comment lines (lines beginning with &#34;#&#34;) and blank lines are ignored.
    10	#
</code></pre><p>now let check the end of line character with the <code>cat -e</code></p>
<pre tabindex="0"><code>root@0868755f0791:/# cat -e etc/login.defs | head
#$
# /etc/login.defs - Configuration control definitions for the login package.$
#$
# Three items must be defined:  MAIL_DIR, ENV_SUPATH, and ENV_PATH.$
# If unspecified, some arbitrary (and possibly incorrect) value will$
# be assumed.  All other items are optional - if not specified then$
# the described action or option will be inhibited.$
#$
# Comment lines (lines beginning with &#34;#&#34;) and blank lines are ignored.$
#$
</code></pre><p>with the <code>cat -T</code> command flag we can see all the tab characters</p>
<pre tabindex="0"><code>root@0868755f0791:/# cat -T etc/bash.bashrc | tail
                   return $?
                elif [ -x /usr/share/command-not-found/command-not-found ]; then
^I^I   /usr/share/command-not-found/command-not-found -- &#34;$1&#34;
                   return $?
^I^Ielse
^I^I   printf &#34;%s: command not found\n&#34; &#34;$1&#34; &gt;&amp;2
^I^I   return 127
^I^Ifi
^I}
fi
</code></pre><p>now putting it all together</p>
<pre tabindex="0"><code>root@0868755f0791:/# cat -Ten etc/bash.bashrc | tail
    62	                   return $?$
    63	                elif [ -x /usr/share/command-not-found/command-not-found ]; then$
    64	^I^I   /usr/share/command-not-found/command-not-found -- &#34;$1&#34;$
    65	                   return $?$
    66	^I^Ielse$
    67	^I^I   printf &#34;%s: command not found\n&#34; &#34;$1&#34; &gt;&amp;2$
    68	^I^I   return 127$
    69	^I^Ifi$
    70	^I}$
    71	fi$
</code></pre>]]></content>
		</item>
		
		<item>
			<title>About</title>
			<link>/about/</link>
			<pubDate>Tue, 04 Dec 2018 22:02:58 -0500</pubDate><guid>/about/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<h1 id="unveiling-the-mysteries-of-technology-a-security-engineers-tale">Unveiling the Mysteries of Technology: A Security Engineer&rsquo;s Tale<a href="#unveiling-the-mysteries-of-technology-a-security-engineers-tale" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h1>
<h2 id="welcome-to-the-realm-of-technological-wonders">Welcome to the Realm of Technological Wonders!<a href="#welcome-to-the-realm-of-technological-wonders" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h2>
<p>Hello, fellow tech adventurers! I&rsquo;m excited to take you on a journey through the depths of technology, where I wear the dual hats of a Security Engineer by day and a passionate coder by night. This blog is my sanctum, a place where I unravel the dark mysteries and hidden powers of Linux/Unix systems, coding, and cybersecurity.</p>
<h3 id="linux-and-unix-systems-exploring-the-unknown">Linux and Unix Systems: Exploring the Unknown<a href="#linux-and-unix-systems-exploring-the-unknown" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>My exploration into Linux and Unix is not just a profession; it&rsquo;s an odyssey into the unknown. These systems, with their complex layers and philosophies, are like ancient ruins waiting to be explored. I&rsquo;ve navigated through the labyrinths of Redhat, Centos, Ubuntu, Debian, and beyond, each distro revealing its own secrets and strengths.</p>
<h4 id="delving-into-the-depths">Delving into the Depths<a href="#delving-into-the-depths" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h4>
<ul>
<li><strong>Redhat and Centos</strong>: Here, I unearthed the secrets of enterprise stability and scalability.</li>
<li><strong>Ubuntu and Debian</strong>: These distros were like uncovering ancient scrolls, teaching me about community and user accessibility.</li>
</ul>
<h3 id="coding-deciphering-the-cryptic-scripts">Coding: Deciphering the Cryptic Scripts<a href="#coding-deciphering-the-cryptic-scripts" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>When the sun sets, my coding saga begins. Each line of code is a cryptic script waiting to be deciphered, a puzzle demanding to be solved. My night is spent in this mystical world of algorithms and logic, where I unlock the true potential and power of technology.</p>
<h4 id="my-nightly-ritual">My Nightly Ritual<a href="#my-nightly-ritual" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h4>
<ul>
<li><strong>Challenging Projects</strong>: From creating intricate algorithms to contributing to arcane open-source projects, every code is a key to a new mystery.</li>
<li><strong>Continuous Learning</strong>: Like a sorcerer honing his spells, I continually sharpen my coding skills through online courses and relentless practice.</li>
</ul>
<h3 id="web-technology-weaving-magic-in-the-digital-realm">Web Technology: Weaving Magic in the Digital Realm<a href="#web-technology-weaving-magic-in-the-digital-realm" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>In the domain of web technology, I&rsquo;m a wizard weaving spells of creativity and security. Building websites, understanding the enigmas of web protocols, and experimenting with avant-garde frameworks are part of my quest to master this art.</p>
<h4 id="crafting-and-securing-digital-experiences">Crafting and Securing Digital Experiences<a href="#crafting-and-securing-digital-experiences" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h4>
<ul>
<li><strong>Secured Creation</strong>: Integrating impenetrable security into web development is my forte.</li>
<li><strong>Design Alchemy</strong>: Balancing functionality with enchanting design is a magical challenge I thrive on.</li>
</ul>
<h3 id="cybersecurity-the-guardian-of-digital-secrets">Cybersecurity: The Guardian of Digital Secrets<a href="#cybersecurity-the-guardian-of-digital-secrets" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>My foray into cybersecurity is a vigil in the shadows, guarding against unseen threats. I delve deep into the systems, unraveling their secrets, ensuring that they stand impervious to the lurking dangers of the digital world.</p>
<h4 id="my-creed">My Creed<a href="#my-creed" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h4>
<ul>
<li><strong>Unearthing Vulnerabilities</strong>: Like a detective in the night, I proactively seek out weaknesses before they can be exploited.</li>
<li><strong>Spreading Wisdom</strong>: Sharing my knowledge of cybersecurity is akin to teaching the art of ancient defense.</li>
</ul>
<h3 id="conclusion-join-me-in-this-enigmatic-journey">Conclusion: Join Me in this Enigmatic Journey<a href="#conclusion-join-me-in-this-enigmatic-journey" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>This blog is more than a collection of technological tales; it&rsquo;s a beacon for those who seek to explore the uncharted territories of IT. Whether you&rsquo;re a kindred spirit in coding, a seeker of Linux/Unix knowledge, or a fellow guardian in cybersecurity, I invite you to join me. Together, let&rsquo;s uncover the arcane powers and hidden mysteries of technology. Join me on this spellbinding adventure into the heart of the digital world!</p>
]]></content>
		</item>
		
		<item>
			<title>First Steps</title>
			<link>/posts/first-step/</link>
			<pubDate>Mon, 26 Nov 2018 00:00:00 +0000</pubDate><author>Linux-Bytes</author><guid>/posts/first-step/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<p>Hello, in shell <code>echo &quot;Hello World,&quot;</code>. Hello, fellow command line users. First I want to say thank you for visiting this site. This site is for anyone who enjoys working and using the command line aka shell. Soon we are going to add tutorials, talks, news, and man others thing about the command line for any who lives or loves using the command line. Gui is a great interface, but as we know the command line offers more precision and power than any other interface known to humans as this current state. As many say or as you see on the internet &ldquo;Where there is a shell there is a way.&rdquo; Let&rsquo;s explore why this the case, many have argued about GUI and having graphics interface to interact, but there is a reason why we, as a power user, developer, admin or as many walks of life return to the command line. Let discussion quickly a few reasons why, well let&rsquo;s talk why many shy always from this interface.</p>
<ul>
<li>
<p>Shell interface requires knowledge of the tools or system your using in which can discourage many.</p>
</li>
<li>
<p>People find the command line confusing as it needs a user to be explicit in their usages.</p>
</li>
<li>
<p>The command line can be very destructive in nature, which can cause a xmajor issue on users who are not familiar.</p>
</li>
<li>
<p>Not all shells interface are the same which can confuse many users.</p>
</li>
</ul>
<p>Now we realize the challenges with the command line, lets weight out the benefits of using it and why so many returns to it.</p>
<ul>
<li>
<p>First, the command line offers in almost all cases, the command line is much faster and easier to use for expirence and pwoer users</p>
</li>
<li>
<p>for most complex tasks, the command line or shell can be scripted to automate things</p>
</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>My First Post</title>
			<link>/posts/my-first-post/</link>
			<pubDate>Sun, 25 Nov 2018 00:00:00 +0000</pubDate><author>Linux-Bytes</author><guid>/posts/my-first-post/</guid>
			<description><![CDATA[&lt;no value&gt;]]></description><content type="text/html" mode="escaped"><![CDATA[<p>Hello, This is my first Post for discussing technology, and its uses started to blog to speak about the passion I have for Linux/Unix, Python and Open Source technology. I will Post my thought with no scheduled time frame, and I am thinking of adding a new post on my twitter account if you wish to follow me feel free to do so. Hope you enjoy my blog post and my thought on tech.</p>
]]></content>
		</item>
		
	</channel>
</rss>
