-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.xml
181 lines (181 loc) · 42.3 KB
/
index.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>jpnt website</title>
<link>https://jpnt.github.io/</link>
<description>Recent content on jpnt website</description>
<generator>Hugo</generator>
<language>en-us</language>
<copyright>© João Pinto</copyright>
<lastBuildDate>Sun, 29 Dec 2024 00:00:00 +0000</lastBuildDate>
<atom:link href="https://jpnt.github.io/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Comprehensive SSH Configuration</title>
<link>https://jpnt.github.io/posts/ssh-config/</link>
<pubDate>Sun, 29 Dec 2024 00:00:00 +0000</pubDate>
<guid>https://jpnt.github.io/posts/ssh-config/</guid>
<description><h1 id="introduction">Introduction</h1>
<p>The Secure Shell (SSH) protocol is a cryptographic network protocol
designed for secure communication over an unsecured network. It is
widely used for remote login and command-line execution, replacing
older, insecure protocols like Telnet and rsh. This guide will explain
how to configure SSH and manage keys.</p>
<h2 id="how-to-use-ssh-keys">How To Use SSH Keys</h2>
<p>SSH key-based authentication is more secure and convenient than passwords.
The client creates a private key and sends a public key to the server.</p></description>
</item>
<item>
<title>Divine Simplicity</title>
<link>https://jpnt.github.io/posts/divine-simplicity/</link>
<pubDate>Thu, 14 Nov 2024 00:00:00 +0000</pubDate>
<guid>https://jpnt.github.io/posts/divine-simplicity/</guid>
<description><p><img src="https://jpnt.github.io/img/divine-simplicity/ai.jpg" alt=""></p>
<h1 id="introduction-to-divine-simplicity">Introduction to Divine Simplicity</h1>
<p>Divine simplicity is the doctrine that God is <strong>not composed of parts</strong>,
if that was the case then that would indicate incompleteness and a
imperfection (God must be absolutely simple to be absolutely perfect).</p>
<p>Unlike humans, whose attributes are separate and finite, God&rsquo;s attributes
such as wisdom, love and power are not parts of Him but are fully and entirely
unified within His essence. God is not a collection of qualities but exists in
complete unity. Each attribute is not something God merely posesses &ndash; He is His
wisdom, love and power in a way that reflects His indivisible, unchangeable, and
perfect nature.</p></description>
</item>
<item>
<title>About</title>
<link>https://jpnt.github.io/about/</link>
<pubDate>Thu, 31 Oct 2024 00:00:00 +0000</pubDate>
<guid>https://jpnt.github.io/about/</guid>
<description><p>Welcome to my personal blog :-)</p>
<p>Usually I use the &ldquo;jpnt&rdquo; acronym because it sounds cool, but my
real name is João Pinto.</p>
<p>I enjoy Application Programming, Design Patterns,
DevOps, Operating Systems, Embedded Systems, IoT, Computer
Architecture and so on.</p>
<p>I have a preference to developing software at a lower level in
order to have the most efficient solution to the problem at hand.</p>
<p>At the moment, I am studying at ISEP (Polytechnic Instute of Engineering of Porto),
Where I have written many applications in Java, ANSI C, C# (.NET 8), Javascript (React),
and I am open to work on anything.</p></description>
</item>
<item>
<title>CPU Cache</title>
<link>https://jpnt.github.io/posts/cpu-cache/</link>
<pubDate>Mon, 28 Oct 2024 00:00:00 +0000</pubDate>
<guid>https://jpnt.github.io/posts/cpu-cache/</guid>
<description><p><img src="https://jpnt.github.io/img/cpu-cache/ai.jpg" alt=""></p>
<h1 id="what-is-cpu-cache">What is CPU cache</h1>
<p>CPU cache is a small but high-speed memory located on or near the processor core.
It is designed to store frequently accessed data and instructions, allowing the CPU
to retrieve them far more quickly than from the main memory. Modern CPUs have multiple
levels of cache (L1, L2, and L3), each balancing size and speed to optimize data
access speed and overall system performance.</p>
<h1 id="why-cpu-cache">Why CPU cache</h1>
<p>The main purpose of CPU cache is to reduce the time it takes for the CPU to retrieve
data from main memory by storing recently or frequently accessed data closer to the CPU.
Since cache memory is significantly faster than main memory, using cache reduces the latency
associated with memory access. This reduction in latency boosts the CPU&rsquo;s ability to process
instructions efficiently, minimizing bottlenecks that arise due to slower main memory access speeds.</p></description>
</item>
<item>
<title>.NET 8 Clean Architecture Setup</title>
<link>https://jpnt.github.io/posts/dotnet8-clean-architecture-setup/</link>
<pubDate>Thu, 26 Sep 2024 00:00:00 +0000</pubDate>
<guid>https://jpnt.github.io/posts/dotnet8-clean-architecture-setup/</guid>
<description><p><img src="https://jpnt.github.io/img/dotnet8-clean-architecture-setup/clean_architecture.png" alt=""></p>
<h1 id="clean-architecture-overview">Clean Architecture Overview</h1>
<ul>
<li>Opinionated way of structuring code.</li>
<li>Emphasizes separating the application into layers (Domain,
Application, Infrastructure and Presentation) and ensuring dependencies flow inward.</li>
<li>Each layer only knows about the inner layers.</li>
<li>Architecture enforces design policies.</li>
</ul>
<h2 id="clean-architecture-vs-onion-architecture">Clean Architecture vs Onion Architecture</h2>
<p>Both emphasize layer separation and the direction of dependencies, but Clean
Architecture makes a stronger distinction between use cases (Application layer)
and technical concerns (Infrastructure).</p>
<h2 id="domain-driven-design-ddd-101">Domain Driven Design (DDD) 101</h2>
<ul>
<li>Focuses on creating a model of the business domain.</li>
<li>Concepts such as Entities, Value Objects, Aggregates, Repositories and Services.</li>
</ul>
<h2 id="solid-principles-101">SOLID Principles 101</h2>
<p>The SOLID principles are a set of design guidelines that promote maintainable, scalable, and flexible software systems.
They provide a foundation that Clean Architecture builds upon. Lets take a quick look how each principle aligns with
Clean Architecture:</p></description>
</item>
<item>
<title>Abstraction</title>
<link>https://jpnt.github.io/posts/abstraction/</link>
<pubDate>Mon, 19 Aug 2024 00:00:00 +0000</pubDate>
<guid>https://jpnt.github.io/posts/abstraction/</guid>
<description><p>&ldquo;The purpose of abstraction is not to be vague, but to create a new semantic level
in which one can be absolutely precise.&rdquo; &ndash; Edsger Dijkstra</p>
<p>&ldquo;Abstraction enables designers to focus on a manageable subset of the
system at a time.&rdquo;</p>
<h1 id="abstraction-and-the-reality-of-the-fullstack-spectrum-in-it">Abstraction and the reality of the &ldquo;fullstack&rdquo; spectrum in I.T.</h1>
<p>Abstraction is the core principle of information technology. It is how we
in the field manage the immense complexity inherent in our systems.</p></description>
</item>
<item>
<title>Linux Audio Guide</title>
<link>https://jpnt.github.io/posts/linux-audio-guide/</link>
<pubDate>Sun, 18 Aug 2024 00:00:00 +0000</pubDate>
<guid>https://jpnt.github.io/posts/linux-audio-guide/</guid>
<description><h1 id="understanding-current-audio-solutions">Understanding Current Audio Solutions</h1>
<p>There are three commonly discussed audio abstraction layers in Linux:</p>
<ol>
<li>Pulseaudio</li>
</ol>
<ul>
<li>Created as a modern replacement for Enlightenment Sound Daemon (ESD),
it provides advanced features like per-application volume control and network audio streaming.</li>
</ul>
<ol start="2">
<li>Jack</li>
</ol>
<ul>
<li>Designed as a professional audio server for Linux, it offers low-latency audio
processing and precise control over audio inputs and outputs, making it suitable
for professional audio work.</li>
</ul>
<ol start="3">
<li>Pipewire</li>
</ol>
<ul>
<li>The newest abstraction layer, Pipewire integrates seamlessly with both
Pulseaudio and Jack.</li>
</ul>
<h1 id="understanding-the-stack">Understanding the Stack</h1>
<ol>
<li>Kernel layer</li>
</ol>
<p>The kernel layer provides hardware abstraction. Advanced Linux Sound Architecture (ALSA)
is the primary component that interacts with sound cards and manages communication,
replacing the older Open Sound System (OSS). Thus, all three abstraction layers
previously refered must communicate with ALSA.</p></description>
</item>
<item>
<title>Slices</title>
<link>https://jpnt.github.io/posts/slices/</link>
<pubDate>Sat, 15 Jun 2024 23:21:33 +0100</pubDate>
<guid>https://jpnt.github.io/posts/slices/</guid>
<description><h1 id="the-slice-concept">The Slice Concept</h1>
<p>If you already understand pointers, then understanding Slices will be much easier,
the way I think about them in the most simple level is this:</p>
<p>Pointer := Memory Address + Data Type</p>
<p>Slice := Pointer + Length</p>
<p>This means a slice is a memory address with a data type and a length associated to it.</p>
<h2 id="problem-of-pointers">Problem of Pointers</h2>
<p>Alright, what I mean by this is the problems that arise from using pointers in
languages such as C and C++, some of them include:</p></description>
</item>
<item>
<title>inici(os)</title>
<link>https://jpnt.github.io/posts/inicios/</link>
<pubDate>Sun, 02 Jun 2024 00:00:00 +0000</pubDate>
<guid>https://jpnt.github.io/posts/inicios/</guid>
<description><h1 id="introduction-the-problem">Introduction: The Problem</h1>
<p>The growing complexity and size of modern software is a significant issue, which
I have discussed previously <a href="https://jpnt.github.io/posts/modern-software/">here</a>.</p>
<p>Today, software tends to be bloated, with enormous and complex codebases that can
consist of tens of millions of lines of code and intricate dependency trees, often
just to perform simple tasks.</p>
<p>It wasn&rsquo;t always like this. In the past, when computers had limited processing
power, developers had less freedom and were compelled to solve problems in more
efficient ways.</p></description>
</item>
<item>
<title>Trees</title>
<link>https://jpnt.github.io/posts/trees/</link>
<pubDate>Tue, 27 Feb 2024 00:00:00 +0000</pubDate>
<guid>https://jpnt.github.io/posts/trees/</guid>
<description><p>A tree is a hierarchical data structure composed of nodes connected by edges.
The structure starts with a single root node and extends downwards, forming
parent-child relationships among nodes. Each node, except the root, has exactly
one parent, and nodes with no children are called leaf nodes. Various concepts
and properties characterize trees.</p>
<h2 id="concepts">Concepts</h2>
<p>Nodes and Edges</p>
<ul>
<li>Node: Basic unit in a tree that contains data and may have zero or more child nodes.</li>
<li>Edge: Connection between nodes that represents relationships.</li>
</ul>
<p>Root, Parent, Child, and Leaf</p></description>
</item>
<item>
<title>Tweaking TLP</title>
<link>https://jpnt.github.io/posts/tweaking-tlp/</link>
<pubDate>Sun, 25 Feb 2024 18:30:59 +0000</pubDate>
<guid>https://jpnt.github.io/posts/tweaking-tlp/</guid>
<description><h3 id="problem">Problem</h3>
<p>Linux battery life on laptops is known to not be great; If you are a student or
travel frequently you will want that your machine lasts some time.</p>
<h3 id="solution">Solution</h3>
<p>There are many things one can do to improve battery life:</p>
<ol>
<li>Lower screen brightness</li>
<li>Turn off keyboard backlight</li>
<li>Turn off Bluetooth</li>
<li>Turn off Wifi</li>
<li>Use resource efficient software</li>
<li>Use the appropriate drivers for your system</li>
</ol>
<p>But I am going to focus on <strong>TLP</strong>, a power management tool which will allow us
to optimize the battery usage on Linux.</p></description>
</item>
<item>
<title>Docker to Podman</title>
<link>https://jpnt.github.io/posts/docker-to-podman/</link>
<pubDate>Sat, 17 Feb 2024 23:30:45 +0000</pubDate>
<guid>https://jpnt.github.io/posts/docker-to-podman/</guid>
<description><h3 id="motivation">Motivation</h3>
<p>Containerization has become a common practise of modern software development;
Docker has been a popular choice for container orchestration, however, as the
field evolves, new tools emerge.</p>
<p>One of those is Podman; one of the premises of it is that it does not require a
daemon, unlike docker (dockerd).</p>
<p>This is one of the many more reasons people are starting to migrate to podman.</p>
<p>For more information I recommend reading: <a href="https://docs.podman.io/en/latest/">https://docs.podman.io/en/latest/</a></p></description>
</item>
<item>
<title>Iproute2</title>
<link>https://jpnt.github.io/posts/iproute2/</link>
<pubDate>Wed, 01 Nov 2023 19:09:04 +0000</pubDate>
<guid>https://jpnt.github.io/posts/iproute2/</guid>
<description><p>iproute2 is the Linux networking toolkit that replaced net-tools (ifconfig,
route, arp etc.).</p>
<p>This post serves mostly to compare the old commands with the new standard ones.
If you want a more detailed cheatsheet I encourage you to visit
<a href="https://paulgorman.org/technical/linux-iproute2-cheatsheet.html">https://paulgorman.org/technical/linux-iproute2-cheatsheet.html</a></p>
<h2 id="net-tools-vs-iproute2-table">net-tools vs iproute2 table</h2>
<table>
 <thead>
 <tr>
 <th>Net-tools Command</th>
 <th>iproute2 Command</th>
 <th>Description</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td><code>ifconfig</code></td>
 <td><code>ip addr</code></td>
 <td>Show or manipulate network interfaces</td>
 </tr>
 <tr>
 <td><code>route</code></td>
 <td><code>ip route</code></td>
 <td>Display or manipulate the IP routing table</td>
 </tr>
 <tr>
 <td><code>arp</code></td>
 <td><code>ip neigh</code> or <code>ip -4 neigh</code></td>
 <td>Show or manipulate the ARP cache</td>
 </tr>
 <tr>
 <td><code>netstat</code></td>
 <td><code>ss</code> or <code>ip -s</code></td>
 <td>Display network connections, routing tables, interface statistics, masquerade connections, and multicast memberships</td>
 </tr>
 <tr>
 <td><code>hostname</code></td>
 <td><code>hostnamectl</code></td>
 <td>Query and change the system hostname and related settings</td>
 </tr>
 <tr>
 <td><code>dnsdomainname</code></td>
 <td><code>hostnamectl --transient</code></td>
 <td>Query and change the system transient hostname and related settings</td>
 </tr>
 <tr>
 <td><code>domainname</code></td>
 <td><code>hostnamectl --static</code></td>
 <td>Query and change the system static hostname and related settings</td>
 </tr>
 <tr>
 <td><code>nisdomainname</code></td>
 <td><code>hostnamectl --pretty</code></td>
 <td>Query and change the system pretty hostname and related settings</td>
 </tr>
 <tr>
 <td><code>ifconfig -a</code></td>
 <td><code>ip addr show</code></td>
 <td>Show information about all network interfaces, including those that are down</td>
 </tr>
 <tr>
 <td><code>route -n</code></td>
 <td><code>ip route show</code></td>
 <td>Display the routing table in numeric format</td>
 </tr>
 <tr>
 <td><code>ifconfig &lt;iface&gt; up/down</code></td>
 <td><code>ip link set &lt;iface&gt; up/down</code></td>
 <td>Bring an interface up or down</td>
 </tr>
 <tr>
 <td><code>arp -s &lt;ip&gt; &lt;mac&gt;</code></td>
 <td><code>ip neigh add &lt;ip&gt; lladdr &lt;mac&gt;</code></td>
 <td>Add a static ARP entry</td>
 </tr>
 <tr>
 <td><code>netstat -tuln</code></td>
 <td><code>ss -tuln</code></td>
 <td>Display listening sockets for TCP and UDP</td>
 </tr>
 <tr>
 <td><code>netstat -rn</code></td>
 <td><code>ip route show</code></td>
 <td>Display the routing table</td>
 </tr>
 </tbody>
</table>
<h2 id="why-iproute2">Why iproute2?</h2>
<p>Unlike its predecessor net-tools, iproute2 offers a comprehensive set of networking
utilities that go beyond the basic functionalities of net-tools.</p></description>
</item>
<item>
<title>Databases</title>
<link>https://jpnt.github.io/posts/databases/</link>
<pubDate>Tue, 26 Sep 2023 16:47:56 +0100</pubDate>
<guid>https://jpnt.github.io/posts/databases/</guid>
<description><h2 id="introductory-concepts">Introductory Concepts</h2>
<p>A <strong>database</strong> (DB) is defined as a collection of related data; A <strong>database management
system</strong> (DBMS) is the software that manages and controls access to the DB.</p>
<p>A <strong>database application</strong> is a program which interacts with the database at
some point in its execution; <strong>Database system</strong> is a term used for a collection
of application programs that interact with the DB along with the DBMS.</p>
<h2 id="file-based-systems">File-Based systems</h2>
<p>Before the database system there was the <strong>file-based system</strong> which is now obsolete.</p></description>
</item>
<item>
<title>Pointers</title>
<link>https://jpnt.github.io/posts/pointers/</link>
<pubDate>Fri, 21 Jul 2023 00:00:00 +0000</pubDate>
<guid>https://jpnt.github.io/posts/pointers/</guid>
<description><h2 id="what-are-pointers">What are pointers?</h2>
<p>In programming, a pointer is a derived data type (like arrays, structs and unions).</p>
<p>Instead of storing values like normal types, pointers store memory addresses
of another data objects.
Hence the name pointer, because these addresses &ldquo;point&rdquo; to some data.</p>
<p>In short, a pointer is: <strong>a variable that contains a memory address (as its value).</strong></p>
<p>We will see how they prove to be very useful and how to use them in the C
programming language.</p></description>
</item>
<item>
<title>Steam on Void Linux</title>
<link>https://jpnt.github.io/posts/voidlinux-steam/</link>
<pubDate>Mon, 30 May 2022 23:21:40 +0000</pubDate>
<guid>https://jpnt.github.io/posts/voidlinux-steam/</guid>
<description><h1 id="how-to-install-steam-on-void-linux">How to install Steam on Void Linux</h1>
<h2 id="1-non-free-repositories">1. Non-free repositories</h2>
<p>To install Steam, you will need to enable the non-free repositories.
To do so, install the non-free repository packages:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e"># xbps-install -S void-repo-nonfree void-repo-multilib-nonfree</span>
</span></span></code></pre></div><h2 id="2-install-steam">2. Install Steam</h2>
<p>Now, you should have the Steam package available.
To install it:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e"># xbps-install -S steam</span>
</span></span></code></pre></div><h2 id="3-additional-packages">3. Additional packages</h2>
<p>Unlike the Arch Linux <code>steam</code> package, in Void Linux this package
does not contain the additional library packages.
To install them:</p></description>
</item>
<item>
<title>Cloud Native</title>
<link>https://jpnt.github.io/posts/cloud-native/</link>
<pubDate>Fri, 28 Jan 2022 22:06:11 -0100</pubDate>
<guid>https://jpnt.github.io/posts/cloud-native/</guid>
<description><p>Cloud Native is a Modern Software approach that makes use of
cloud computing to build and execute scalable programs.</p>
<h2 id="the-goal-of-cloud-native-development">The goal of Cloud Native development</h2>
<p><strong>Speed of software development.</strong></p>
<h2 id="the-concepts-of-cloud-native">The concepts of Cloud Native</h2>
<p>Cloud Native development is divided into four aspects:</p>
<ol>
<li>
<p><strong>DevOps</strong></p>
<ul>
<li>Manage infrastructure as code</li>
<li>Merge Developers and Operators</li>
</ul>
</li>
<li>
<p><strong>Continuous integration/Continuous development (CI/CD)</strong></p>
<ul>
<li>Always shipping software</li>
<li>Automation of testing software</li>
</ul>
</li>
<li>
<p><strong>Microservices</strong></p>
<ul>
<li>Scaling of application components</li>
<li>Communication between components via APIs</li>
</ul>
</li>
<li>
<p><strong>Containers</strong></p></description>
</item>
<item>
<title>Take Notes in VIM</title>
<link>https://jpnt.github.io/posts/vimwiki/</link>
<pubDate>Fri, 28 Jan 2022 20:26:06 -0100</pubDate>
<guid>https://jpnt.github.io/posts/vimwiki/</guid>
<description><p>There are a lot of programs to take notes on, however, if you use
VIM, why not take notes on your own text editor?</p>
<h2 id="install-a-plugin-manager">Install a plugin manager</h2>
<p>Make sure you have some type of VIM plugin manager installed.
Personally, I use ´vim-plug´.</p>
<p>Install ´vim-plug´ for VIM, on Unix based systems:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>curl -fLo ~/.vim/autoload/plug.vim --create-dirs <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span> https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
</span></span></code></pre></div><p>Documentation is available at: <a href="https://github.com/junegunn/vim-plug">https://github.com/junegunn/vim-plug</a></p>
<h2 id="install-vimwiki">Install vimwiki</h2>
<p>Edit ´~/.vimrc´ to configure VIM and make it use vimwiki:</p></description>
</item>
<item>
<title>Why Most People Fail to Get I.T.</title>
<link>https://jpnt.github.io/posts/why-most-people-fail-to-get-it/</link>
<pubDate>Tue, 18 Jan 2022 14:56:45 -0100</pubDate>
<guid>https://jpnt.github.io/posts/why-most-people-fail-to-get-it/</guid>
<description><p>The Information Technology field is immensely vast, however, one can break it down in these core aspects.</p>
<h2 id="what-is-it">What is IT?</h2>
<ul>
<li>Programming</li>
<li>Computer Networking</li>
<li>Databases</li>
<li>Operating Systems</li>
</ul>
<h2 id="the-problem">The problem</h2>
<p>The issue is that most people, even ones on the field, fail to grasp the core basics. They try
to invent theories on what information technology is, and end up abstracting real problems with layers
of garbage that just create new <a href="https://jpnt.github.io/posts/modern-software/">problems</a>.</p>
<p>IT is not social studies and humanities, it is all about engineering and math, knowing how to approach
a problem and solve it in the most optimal and correct way, it involves logic reasoning without
a place for ambiguities.</p></description>
</item>
<item>
<title>Modern Software is a disaster</title>
<link>https://jpnt.github.io/posts/modern-software/</link>
<pubDate>Sat, 15 Jan 2022 21:02:39 -0100</pubDate>
<guid>https://jpnt.github.io/posts/modern-software/</guid>
<description><p>&ldquo;Designing simple and elegant software is far more difficult than letting ad-hoc or over-ambitious features
obscure the code over time.&rdquo;
&ndash; suckless.org</p>
<p>We live in a really agitated world where information flows much faster than anyone could ever grasp.
Due to the agile technological advancements and the appearance of new technologies every day, the
demand for people on the Information Technology sector is extremely high.</p>
<p>However, because there is still so much software to write, there is no market pressure in the software
space to ship high quality code. The trend is fast, agile software development that is buggy, bloated,
insecure and fails to even do its own thing.</p></description>
</item>
<item>
<title>LEARN LINUX THE RIGHT WAY</title>
<link>https://jpnt.github.io/posts/learn-linux/</link>
<pubDate>Thu, 06 Jan 2022 22:41:20 -0100</pubDate>
<guid>https://jpnt.github.io/posts/learn-linux/</guid>
<description><p><img src="https://jpnt.github.io/img/learn-linux/penguin.jpg" alt=""></p>
<h2 id="what-is-linux">WHAT IS LINUX?</h2>
<ul>
<li>Concept of a kernel
<ul>
<li>Hardware &lt;-&gt; Kernel &lt;-&gt; Software</li>
<li>Monolithic kernel vs Microkernel</li>
</ul>
</li>
<li>Open source nature
<ul>
<li>Worldwide development</li>
<li>You can contribute to it</li>
</ul>
</li>
</ul>
<h2 id="what-is-a-linux-distribution">WHAT IS A LINUX DISTRIBUTION</h2>
<ul>
<li>OS based on monolithic Linux kernel</li>
</ul>
<h2 id="what-makes-a-linux-distribution">WHAT MAKES A LINUX DISTRIBUTION</h2>
<ul>
<li>Core: libc; Base: coreutils; Extras;
<ul>
<li>Most Linux distros differ on Extras</li>
</ul>
</li>
</ul>
<h2 id="difference-between-linux-distros">DIFFERENCE BETWEEN LINUX DISTROS</h2>
<ul>
<li>User-friendly vs user-centric distros</li>
<li>Rolling release vs fixed release
<ul>
<li>Linux Mint vs Arch</li>
</ul>
</li>
<li>Binary vs Source based</li>
</ul>
<h2 id="installing-software-on-a-linux-distro">INSTALLING SOFTWARE ON A LINUX DISTRO</h2>
<ul>
<li>A linux distro distributes packages</li>
<li>Package manager: apt, pacman
<ul>
<li>´apt install firefox´</li>
<li>´pacman -S firefox´</li>
</ul>
</li>
</ul>
<h2 id="flexibility-of-linux">FLEXIBILITY OF LINUX</h2>
<ul>
<li>Used on super computers
<ul>
<li>100% of top 500</li>
</ul>
</li>
<li>Used on the server
<ul>
<li>96% of top 1,000,000</li>
</ul>
</li>
<li>Used on personal computers</li>
</ul>
<h2 id="introduction-to-the-terminal">INTRODUCTION TO THE TERMINAL</h2>
<ul>
<li>Commands are programs
<ul>
<li>ls, cd, cat, pwd, whoami, echo, ps</li>
<li>Learn every command: ´man command´</li>
</ul>
</li>
<li>Everything is a file
<ul>
<li>Programs, devices and drivers are files</li>
<li>´ls /dev´, ´ls /bin´</li>
</ul>
</li>
</ul>
<h2 id="automation-and-scripting">AUTOMATION AND SCRIPTING</h2>
<ul>
<li>Bash scripts
<ul>
<li>Shell vs Terminal</li>
<li>Variables: PATH, export, env</li>
<li>´#!/bin/bash´ vs ´#!/bin/sh´</li>
</ul>
</li>
<li>Version control system (VCS)
<ul>
<li>Git: pull, push, commit, branch, log, status</li>
</ul>
</li>
</ul>
<h2 id="hardware-and-system-configuration">HARDWARE AND SYSTEM CONFIGURATION</h2>
<ul>
<li>Configure and verify network connection
<ul>
<li>ping, ip, nmtui, nmcli</li>
</ul>
</li>
<li>Boot process
<ul>
<li>Bootloader: grub</li>
<li>Boot modules and files: mkinitrd, dracut,
initramfs, vmlinuz, grub-mkconfig</li>
</ul>
</li>
<li>Install, configure and monitor kernel modules
<ul>
<li>dmesg, lsmod, modprobe</li>
</ul>
</li>
<li>Manage storage
<ul>
<li>Partitions: GPT, MBR</li>
<li>Linux file system hierarchy: ´ls /´</li>
<li>File system types: ext4, btrfs, xfs</li>
</ul>
</li>
<li>Virtualization
<ul>
<li>Type 1 vs type 2 hypervisor</li>
<li>KVM: Kernel virtual machine</li>
</ul>
</li>
</ul>
<h2 id="operation-and-maintenance">OPERATION AND MAINTENANCE</h2>
<ul>
<li>Install, update and remove software
<ul>
<li>Package managers: apt, dnf, pacman</li>
<li>Build tools: Makefile and compiling</li>
</ul>
</li>
<li>Manage user and groups
<ul>
<li>Create: useradd, groupadd</li>
<li>Modify: usermod, groupmod, passwd</li>
</ul>
</li>
<li>Create, modify and redirect files
<ul>
<li>Text editors: vim, nano</li>
<li>Read files: cat, grep, less</li>
<li>File operations: touch, mv, cp, rm, ln</li>
</ul>
</li>
<li>Manage services (systemd)
<ul>
<li>Using systemctl: start, stop, enable,
status, restart</li>
</ul>
</li>
<li>Linux graphical user interface
<ul>
<li>Servers: Xorg, Wayland</li>
<li>DE/GUI: Gnome, KDE, xfce, Cinnamon</li>
<li>Remote desktop: VNC, XRDP, Spice</li>
</ul>
</li>
</ul>
<h2 id="linux-security">LINUX SECURITY</h2>
<ul>
<li>User/group permissions
<ul>
<li>´ls -l´, chmod, chown, chgrp, rwx</li>
</ul>
</li>
<li>Athentication methods
<ul>
<li>SSH: Public and Private keys</li>
</ul>
</li>
<li>Firewall
<ul>
<li>UFW: Uncomplicated firewall</li>
</ul>
</li>
<li>Compress files
<ul>
<li>Compression: gzip, xz, bzip2</li>
<li>Integrety checks: MD5, SHA</li>
</ul>
</li>
</ul>
<h2 id="troubleshooting-and-diagnostics">TROUBLESHOOTING AND DIAGNOSTICS</h2>
<ul>
<li>Analyse system properties
<ul>
<li>Network: ping, nmap, netstat, tcpdump,
wireshark, traceroute, arp, ip, nmcli</li>
<li>Storage: iostat, df, du</li>
<li>CPU: uptime, lscpu</li>
<li>Memory: free, swap</li>
</ul>
</li>
<li>Analyse system processes
<ul>
<li>ps, time, pgrep, pkill</li>
</ul>
</li>
<li>Troubleshooting user issues
<ul>
<li>Permissions and authentication</li>
</ul>
</li>
<li>Application and hardware issues
<ul>
<li>Storage, firewall, permission, dependencies</li>
</ul>
</li>
</ul></description>
</item>
<item>
<title>Rust Ownership</title>
<link>https://jpnt.github.io/posts/rust-ownership/</link>
<pubDate>Mon, 02 Aug 2021 15:44:10 +0000</pubDate>
<guid>https://jpnt.github.io/posts/rust-ownership/</guid>
<description><h1 id="understanding-ownership">Understanding Ownership</h1>
<p><strong>Ownership</strong> is what enables Rust to make <strong>memory safety guarantees without needing a garbage collector.</strong></p>
<h2 id="what-is-a-garbage-collector">What is a Garbage collector?</h2>
<p>Garbage collection (GC) is a form of <strong>automatic memory management</strong>.</p>
<p>It attempts to <strong>reclaim memory</strong> which was allocated by the program, but is <strong>no longer used</strong> &mdash; hence the name garbage.</p>
<p>GC exists to <strong>relieve</strong> the programmer from <strong>manually managing memory</strong>, which can be <strong>susceptible to errors</strong> such as <strong>memory leaks</strong>.</p></description>
</item>
<item>
<title>Pop!_OS Install</title>
<link>https://jpnt.github.io/posts/popos-install/</link>
<pubDate>Sat, 31 Jul 2021 19:06:06 +0000</pubDate>
<guid>https://jpnt.github.io/posts/popos-install/</guid>
<description><p><strong>Pop!_OS</strong> is a free and open-source <strong>Linux</strong> distribution, based on Ubuntu, and it uses the GNOME desktop.</p>
<p>It provides full support for <strong>AMD</strong> and <strong>Nvidia</strong> graphics cards <strong>out-of-the-box</strong>, which makes it an excellent choice for beginners.</p>
<h1 id="download-pop_os">Download Pop!_OS</h1>
<p>Go to <a href="https://pop.system76.com/">https://pop.system76.com/</a> and click on <strong>download</strong>.</p>
<p><img src="https://jpnt.github.io/img/popos-install/pop-0.jpg" alt=""></p>
<p>Pop!_OS comes in two versions: the <strong>latest</strong>, and the <strong>LTS</strong> (Long Term Support). I will choose the latest, since I want to use the latest features.</p></description>
</item>
<item>
<title>Disable Suspend on Linux</title>
<link>https://jpnt.github.io/posts/disable-suspend/</link>
<pubDate>Fri, 30 Jul 2021 13:47:02 +0000</pubDate>
<guid>https://jpnt.github.io/posts/disable-suspend/</guid>
<description><h1 id="disable--mask-services-using-systemctl">Disable / Mask services using systemctl</h1>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
</span></span></code></pre></div><h1 id="edit-etcsystemdlogindconf-to-avoid-errors-and-high-cpu-usage">Edit &ldquo;/etc/systemd/logind.conf&rdquo; to avoid errors and high CPU usage</h1>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>HandleSuspendKey<span style="color:#f92672">=</span>ignore
</span></span><span style="display:flex;"><span>HandleHibernateKey<span style="color:#f92672">=</span>ignore
</span></span><span style="display:flex;"><span>HandleLidSwitch<span style="color:#f92672">=</span>ignore
</span></span><span style="display:flex;"><span>HandleLidSwitchExternalPower<span style="color:#f92672">=</span>ignore
</span></span><span style="display:flex;"><span>HandleLidSwitchDocked<span style="color:#f92672">=</span>ignore
</span></span></code></pre></div><h1 id="restart-systemd-logind">Restart systemd-logind</h1>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo systemctl restart systemd-logind
</span></span></code></pre></div><h1 id="check-for-errors">Check for errors</h1>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>journalctl -xe
</span></span></code></pre></div><p>That&rsquo;s it!</p></description>
</item>
</channel>
</rss>