<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Israel Olaleye</title>
    <description>The latest articles on DEV Community by Israel Olaleye (@theisraelolaleye).</description>
    <link>https://dev.to/theisraelolaleye</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F501890%2F6c9f8c2f-dfae-44c6-ad3c-5cd917609b30.jpg</url>
      <title>DEV Community: Israel Olaleye</title>
      <link>https://dev.to/theisraelolaleye</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/theisraelolaleye"/>
    <language>en</language>
    <item>
      <title>SSH Keys in 2024: Why Ed25519 Replaced RSA as the Default</title>
      <dc:creator>Israel Olaleye</dc:creator>
      <pubDate>Thu, 26 Mar 2026 18:20:35 +0000</pubDate>
      <link>https://dev.to/theisraelolaleye/ssh-keys-in-2024-why-ed25519-replaced-rsa-as-the-default-47aa</link>
      <guid>https://dev.to/theisraelolaleye/ssh-keys-in-2024-why-ed25519-replaced-rsa-as-the-default-47aa</guid>
      <description>&lt;p&gt;If you've ever set up GitHub, configured a server, or worked with remote machines, you've encountered SSH keys. Take a look in your ~/.ssh/ directory and you'll likely find files named id_rsa or id_ed25519. These represent two generations of cryptography—and understanding the difference matters for both security and performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  What These Files Actually Are
&lt;/h2&gt;

&lt;p&gt;SSH keys come in pairs: a private key (kept secret on your machine) and a public key (shared with servers). The names id_rsa and id_ed25519 refer to the cryptographic algorithms used to generate them:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;id_rsa&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;id_ed25519&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Algorithm&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RSA (1977)&lt;/td&gt;
&lt;td&gt;Ed25519 (2011)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mathematical foundation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Integer factorization&lt;/td&gt;
&lt;td&gt;Elliptic curve cryptography&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Key size&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2048–4096+ bits&lt;/td&gt;
&lt;td&gt;Fixed 256 bits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Standard since&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Early SSH days&lt;/td&gt;
&lt;td&gt;OpenSSH 6.5+ (2014)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Technical Shift
&lt;/h2&gt;

&lt;p&gt;RSA relies on the difficulty of factoring large prime numbers which is a problem that has served cryptography for decades but requires increasingly large keys to maintain security. Modern 2048-bit RSA keys offer roughly 112 bits of security.&lt;/p&gt;

&lt;p&gt;Ed25519 uses elliptic curve cryptography (specifically Curve25519 designed by Daniel Bernstein). Despite its compact 256-bit size, it provides approximately 128 bits of security with significantly better performance characteristics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Performance Differences
&lt;/h2&gt;

&lt;p&gt;The contrast becomes noticeable in practice:&lt;br&gt;
&lt;strong&gt;Key generation:&lt;/strong&gt; Ed25519 is nearly instantaneous; RSA with 4096 bits takes perceptibly longer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authentication speed:&lt;/strong&gt; Ed25519 signatures are smaller (64 bytes vs 256 bytes for RSA 2048) and faster to verify—relevant when connecting to busy servers or working from low-power devices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Storage efficiency:&lt;/strong&gt; Public keys shrink from ~500 bytes to 32 bytes. On systems managing thousands of keys, this adds up.&lt;/p&gt;
&lt;h2&gt;
  
  
  When to Use Which
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Choose Ed25519 for:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New projects and fresh setups&lt;/li&gt;
&lt;li&gt;Modern servers running OpenSSH 6.5 or later&lt;/li&gt;
&lt;li&gt;Resource-constrained environments (embedded systems, mobile devices)&lt;/li&gt;
&lt;li&gt;Any situation where you control both endpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Keep RSA for:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Legacy infrastructure (old network equipment, aging enterprise systems)&lt;/li&gt;
&lt;li&gt;Environments with strict compliance requirements mandating specific algorithms&lt;/li&gt;
&lt;li&gt;Interfacing with systems that haven't updated their SSH implementations since ~2014&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most major platforms—GitHub, GitLab, AWS, Azure—have supported Ed25519 for years. The remaining compatibility concerns typically involve specialized hardware: load balancers, industrial controllers, or vintage corporate infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical Migration&lt;/strong&gt;&lt;br&gt;
Generating a modern key takes one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; ed25519 &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"your_email@example.com"&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates ~/.ssh/id_ed25519 and ~/.ssh/id_ed25519.pub. Add the public key to your services, update your SSH config if needed, and gradually retire RSA dependencies.&lt;/p&gt;

&lt;p&gt;If you maintain both, SSH will try keys in order—Ed25519 typically first—falling back to RSA only when necessary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Looking Forward&lt;/strong&gt;&lt;br&gt;
Cryptography evolves. Ed25519 represents a deliberate design: rigidity (no variable parameters to misconfigure), speed, and resistance to side-channel attacks. It won't resist quantum computing—no mainstream public-key algorithm does yet—but it represents current best practice.&lt;/p&gt;

&lt;p&gt;RSA isn't broken. 4096-bit keys remain secure for now. But Ed25519 achieves equivalent or better security with elegance and efficiency. For new work in 2024, it's the clear default.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Check your current keys with ls -la ~/.ssh/ and consider whether your setup reflects modern standards or inherited legacy.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ssh</category>
      <category>cryptography</category>
      <category>devops</category>
    </item>
    <item>
      <title>How to Add a Link or Hyperlink in README.md File</title>
      <dc:creator>Israel Olaleye</dc:creator>
      <pubDate>Wed, 23 Jul 2025 14:32:17 +0000</pubDate>
      <link>https://dev.to/theisraelolaleye/how-to-add-a-link-or-hyperlink-in-readmemd-file-48gk</link>
      <guid>https://dev.to/theisraelolaleye/how-to-add-a-link-or-hyperlink-in-readmemd-file-48gk</guid>
      <description>&lt;p&gt;As a software engineer, one of the first things I learned after pushing my code to GitHub was the importance of a well-structured README.md file. Whether you're open-sourcing a library, sharing a project with your team, or just documenting something for future-you, your README is often the first impression people get of your work.&lt;/p&gt;

&lt;p&gt;One of the most common elements you'll need to include in a README is a hyperlink—maybe to your live site, an external documentation page, or even another file in your repository. It sounds simple, but if you're new to Markdown, you might not know the exact syntax.&lt;/p&gt;

&lt;p&gt;Let me walk you through it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Basic Markdown Link Syntax
&lt;/h2&gt;

&lt;p&gt;In Markdown, you add a hyperlink using this syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Link Text](https://example.com)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Link Text is the clickable text that will be shown.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://example.com" rel="noopener noreferrer"&gt;https://example.com&lt;/a&gt; is the URL the user will be taken to when they click the link.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Check out my portfolio [here](https://yourwebsite.com).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When rendered, that line becomes&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Check out my portfolio here.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Linking to Another File in Your Repo&lt;br&gt;
Sometimes you’ll want to link to another file inside your own project repository—maybe a contribution guide, license, or even another markdown file.&lt;/p&gt;

&lt;p&gt;Here’s how:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[CONTRIBUTING.md](CONTRIBUTING.md)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This assumes CONTRIBUTING.md is in the same directory as your README.md.&lt;/p&gt;

&lt;p&gt;If it's in a subfolder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[View API Docs](docs/API.md)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Opening in a New Tab? Not with Vanilla Markdown&lt;br&gt;
If you're coming from HTML, you might be tempted to write this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;a href="https://example.com" target="_blank"&amp;gt;Click me&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But most Markdown processors — including GitHub's — don’t support target="_blank". Markdown links open in the same tab by default. If you really need the target="_blank" behavior, you’ll have to fall back to raw HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;a href="https://example.com" target="_blank"&amp;gt;Click me&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works in GitHub-flavored Markdown, which supports inline HTML.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus: Reference-Style Links
&lt;/h2&gt;

&lt;p&gt;If you're trying to keep things clean and readable—especially for long documents—reference-style links are a great option:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Read the [official docs][docs-link].

...

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This separates the content from the links, which is nice for large documentation files.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Final Thoughts
&lt;/h2&gt;

&lt;p&gt;I can’t count how many times I’ve had to Google “how to add a link in Markdown” when writing README files in my early days. But once you get the hang of it, it becomes second nature. The simplicity of Markdown is actually what makes it so powerful.&lt;/p&gt;

&lt;p&gt;Whether you're linking to your deployed site, another file in your repo, or an external tutorial, now you know exactly how to do it—clean, professional, and properly formatted.&lt;/p&gt;

&lt;p&gt;Let your README.md file speak for your project. It's more than just a document—it's your first impression to the world.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>JavaScript Data Structures and Algorithm.</title>
      <dc:creator>Israel Olaleye</dc:creator>
      <pubDate>Mon, 21 Feb 2022 20:55:35 +0000</pubDate>
      <link>https://dev.to/theisraelolaleye/javascript-data-structures-and-algorithm-1ad6</link>
      <guid>https://dev.to/theisraelolaleye/javascript-data-structures-and-algorithm-1ad6</guid>
      <description>&lt;p&gt;High-level data structures are methods of storing and organizing data so that it can be easily modified, navigated, and accessed. Data structures define how data is collected, the functions we can use to access it, and relationships between data.&lt;/p&gt;

&lt;p&gt;Data structures are used in almost every area of ​​computer science and programming, from operating systems to simple vanilla code to artificial intelligence.&lt;/p&gt;

&lt;p&gt;Data structures enable us to:&lt;br&gt;
    • Manage and utilize large datasets&lt;br&gt;
    • Search for particular data from a database&lt;br&gt;
    • Design algorithms that are tailored towards particular programs&lt;br&gt;
    • Handle multiple requests from users at once&lt;br&gt;
    • Simplify and speed up data processing&lt;/p&gt;

&lt;p&gt;Data structures are essential for efficient problem solving in the real world. Finally, how we organize data has a huge impact on performance and usability. In fact, most top companies require a strong understanding of data structures.&lt;/p&gt;

&lt;p&gt;JavaScript has primitive and non-primitive data structures. Primitive data structures and data types are native to programming languages. These include Boolean values, nulls, numbers, strings, and more. Non-primitive data structures are defined by the programmer, not the programming language. These include linear and static data structures, as well as dynamic data structures such as queues and linked lists.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Array&lt;br&gt;
The most basic array of all data structures stores data in memory for later use. Each array has a fixed number of cells that are determined at creation time, and each cell has a corresponding numeric index used to select the data. Whenever you use an array, you only need the index you want, and you can access any data in it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Queues&lt;br&gt;
Queues are conceptually similar to stacks; both are sequential structures, but queues process items in the order they were entered, not the order they were last entered.&lt;br&gt;
Therefore, queues can be configured as a FIFO (First In, First Out) are viewed from stacks. These are useful as buffers for requests, storing each request in the order it was received until it can be processed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linked List&lt;br&gt;
Linked lists are a data structure that, unlike the previous three, does not use physical placement of data in memory. This means that linked lists use a referencing system instead of indices or positions: elements are stored in nodes containing a pointer to the next node, which is repeated until all nodes are linked.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This system enables items to be loaded and unloaded efficiently without reorganization.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>algorithms</category>
    </item>
    <item>
      <title>JavaScript 101: Ultimate JavaScript Guide.</title>
      <dc:creator>Israel Olaleye</dc:creator>
      <pubDate>Mon, 14 Feb 2022 06:42:53 +0000</pubDate>
      <link>https://dev.to/theisraelolaleye/javascript-101-ultimate-javascript-guide-127l</link>
      <guid>https://dev.to/theisraelolaleye/javascript-101-ultimate-javascript-guide-127l</guid>
      <description>&lt;p&gt;*&lt;em&gt;JavaScript Overview *&lt;/em&gt;&lt;br&gt;
Let's take a look at what's special about JavaScript, what you can do with JavaScript, and what other technologies work well with JavaScript. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is JavaScript?&lt;/strong&gt;&lt;br&gt;
JavaScript was originally created to "bring web pages to life". Programs in this language are called scripts. These can be written directly in the HTML of the web page and will be executed automatically when the page loads. The script is provided and executed as plain text. No special preparation or compilation is required to run it. In this respect, JavaScript is very different from another language called Java.&lt;/p&gt;

&lt;p&gt;Today, JavaScript can be executed not only in the browser, but also on the server, or actually on any device with a special program called the JavaScript Engine. The browser has a built-in engine sometimes called a "javascript virtual machine". &lt;/p&gt;

&lt;p&gt;Different engines have different "code names". For example: &lt;/p&gt;

&lt;p&gt;V8 - in Chrome, Opera and Edge.&lt;br&gt;
SpiderMonkey - in Firefox.&lt;/p&gt;

&lt;p&gt;... There are other code names like "Chakra" for IE, "JavaScriptCore", "Nitro", "SquirrelFish" for Safari, etc. It's a good idea to remember the terms above because they are used in developer articles on the Internet. We'll use it too. For example, if "Feature X is supported by V8", it probably works in Chrome, Opera, and Edge.&lt;/p&gt;

&lt;p&gt;Code editors&lt;br&gt;
A code editor is the place where programmers spend most of their time.&lt;br&gt;
There are two main types of code editors: IDEs and lightweight editors. Many people use one tool of each type.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IDE&lt;/strong&gt;&lt;br&gt;
The term IDE (Integrated Development Environment) refers to a powerful editor with many features that would normally run on a "complete project". As the name implies, it is not just an editor, but a "complete development environment". &lt;/p&gt;

&lt;p&gt;The IDE loads the project (which can be many files), allows navigation between files, provides auto-completion based on the entire project (not just the open file), and integrates With a version management system (such as git), a test environment, and other "project level" elements. If you haven't selected an IDE yet, consider the following options: &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;• Visual Studio Code ( across platforms, for free). 
• WebStorm (cross-platform, paid).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Light Weight Editor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A "lightweight editor" isn't as powerful as an IDE, but it's fast, elegant, and simple. Mainly used to open and edit files instantly. The main difference between "lightweight editor" and "IDE" is that the IDE works at the project level, so it has much more data at the start and analysis. Is to load. Project structure etc. as needed. If you only need one file, the lightweight editor is much faster. In fact, lightweight editors may contain a number of plugins such as directory-level syntax analyzers and autocompleters. There is no strict boundary between the lightweight editor and the IDE. The following options are noteworthy:  Atom (cross-platform, free). Sublime Text (cross-platform, shareware). Notepad ++ (Windows, free). Vim and Emacs are also cool if you know how to use them. &lt;/p&gt;

&lt;p&gt;The modern mode, "use strict"&lt;br&gt;
    • Variables&lt;br&gt;
    • Data types&lt;br&gt;
    • Interaction: alert, prompt, confirm&lt;br&gt;
    • Type Conversions&lt;br&gt;
    • Basic operators, maths&lt;br&gt;
    • Comparisons&lt;br&gt;
    • Conditional branching: if, '?'&lt;br&gt;
    • Logical operators&lt;br&gt;
    • Nullish coalescing operator '??'&lt;br&gt;
    • Loops: while and for&lt;br&gt;
    • The "switch" statement&lt;br&gt;
    • Functions&lt;br&gt;
    • Function expressions&lt;br&gt;
    • Arrow functions, the basics&lt;br&gt;
    • JavaScript specials&lt;br&gt;
    • Objects&lt;br&gt;
    • Object references and copying&lt;br&gt;
    • Garbage collection&lt;br&gt;
    • Object methods, "this"&lt;br&gt;
    • Constructor, operator "new"&lt;br&gt;
    • Optional chaining '?.'&lt;br&gt;
    • Symbol type&lt;br&gt;
    • Object to primitive conversion&lt;/p&gt;

&lt;p&gt;Just to mention a few to start with.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
