<?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: Alex M. Espinosa</title>
    <description>The latest articles on DEV Community by Alex M. Espinosa (@amtzespinosa).</description>
    <link>https://dev.to/amtzespinosa</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%2F1079400%2F934cc63e-c99b-45eb-9218-be00736ad8f7.png</url>
      <title>DEV Community: Alex M. Espinosa</title>
      <link>https://dev.to/amtzespinosa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/amtzespinosa"/>
    <language>en</language>
    <item>
      <title>#12in24: Learning COBOL in 1h.</title>
      <dc:creator>Alex M. Espinosa</dc:creator>
      <pubDate>Sat, 24 Feb 2024 15:40:56 +0000</pubDate>
      <link>https://dev.to/amtzespinosa/12in24-learning-cobol-in-1h-4e9c</link>
      <guid>https://dev.to/amtzespinosa/12in24-learning-cobol-in-1h-4e9c</guid>
      <description>&lt;p&gt;The title is even more clickbaiting thean the previous article: &lt;a href="https://dev.to/amtzespinosa/12in24-learning-perl-in-4h-2d7g"&gt;#12in24: Learning Perl in 4h.&lt;/a&gt; But read me out: &lt;strong&gt;Yes, you can learn COBOL (Common Business-Oriented Languge) in just 1 hour!&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I will use this video to learn the basics: &lt;a href="https://www.youtube.com/watch?v=RdMAEdGvtLA&amp;amp;ab_channel=freeCodeCamp.org" rel="noopener noreferrer"&gt;COBOL Course - Programming with VSCode&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why learning COBOL?
&lt;/h2&gt;

&lt;p&gt;Well, COBOL has been around for over 60 years and is still used in many operations like card payments, in fact, everyday about 3 trillion dollars in finance gets handled by COBOL. &lt;/p&gt;

&lt;p&gt;This language, Business-Oriented, &lt;strong&gt;was designed around data processing with high accuracy, efficiency, ease of reading and writing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;COBOL pretty much runs the world:&lt;/strong&gt; It has been kept up to date to support new requirements and 1.5 billion lines of COBOL are written every year!&lt;/p&gt;

&lt;p&gt;Learning this language will give you a very valuable set of skills that can be used in finance (the people that hold the money and will likely pay quite well), Big Data or Live Events Lighting (once I saw a lighting desk running programs in COBOL). &lt;/p&gt;

&lt;h2&gt;
  
  
  Basics
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;There are different COBOL flavours, this will be COBOL written specifically for &lt;strong&gt;IBM Z Mainframe OS&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;COBOL is column dependent&lt;/strong&gt; - 5 key areas of a 72 char line:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdocumentation.softwareag.com%2Fnatural%2Fprd461%2Fextobjects%2Fgraphics%2Finc1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdocumentation.softwareag.com%2Fnatural%2Fprd461%2Fextobjects%2Fgraphics%2Finc1.png" alt="COBOL Areas" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Sequence Number Area (1-6):&lt;/strong&gt; Blank or to provide context.&lt;br&gt;
&lt;strong&gt;2. Indicator Area (7):&lt;/strong&gt; Multi-purpose area - * for comments or to continue a previous line...&lt;br&gt;
&lt;strong&gt;3. A Area (8-11):&lt;/strong&gt; Structure.&lt;br&gt;
&lt;strong&gt;4. B Area (12-72):&lt;/strong&gt; Actual statements area.&lt;br&gt;
&lt;strong&gt;5. Id Area (73-80):&lt;/strong&gt; Ignored, used for any purpose.&lt;/p&gt;

&lt;p&gt;The full list of reserved words can be found &lt;a href="https://www.ibm.com/docs/en/iis/9.1?topic=words-cobol-reserved" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Structure
&lt;/h3&gt;

&lt;p&gt;DIVISIONS &amp;gt; SECTIONS &amp;gt; PARAGRAPHS &amp;gt; SENTENCES &amp;gt; STATEMENTS&lt;br&gt;&lt;br&gt;
(tl;dw)&lt;/p&gt;
&lt;h2&gt;
  
  
  Basic variables
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Basic rules apply:&lt;/strong&gt; no reserved words, no weird chars or spaces (letters, numbers and dashes are fine) and no longer that 30 chars.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Type of variable and size using PIC clause:&lt;/strong&gt; PIC M(N) where M is the value type and (N), optional, the length.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- PIC 9(4):&lt;/strong&gt; Number value with a length of 4 numbers. We can use &lt;strong&gt;V&lt;/strong&gt; for decimals: PIC 9(2)V99 could be 24.59.&lt;br&gt;
&lt;strong&gt;- PIC A:&lt;/strong&gt; Alphabetic value.&lt;br&gt;
&lt;strong&gt;- PIC X(8):&lt;/strong&gt; Alphanumeric value with a length of 8 chars.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the sake of efficiency you can as well use literals like: &lt;strong&gt;ZERO/ZEROES, SPACE/SPACES, LOW-VALUE, HIGH-VALUE, NULL/NULLS&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Divisions
&lt;/h2&gt;
&lt;h3&gt;
  
  
  DATA DIVISION &amp;amp; PROCEDURE DIVISION
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;DATA DIVISION&lt;/strong&gt; is where all the program data goes. Then in &lt;strong&gt;PROCEDURE DIVISION&lt;/strong&gt; &lt;strong&gt;MOVE&lt;/strong&gt; and &lt;strong&gt;COMPUTE&lt;/strong&gt; are used to alter the value of variables. A simple program to undertand COBOL so far:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1    678   12
|    | |   |
       IDENTIFICATION DIVISION.
       PROGRAM-ID. PAYROLL00.
       DATA DIVISION. 
       WORKING-STORAGE SECTION. 
      *VARIABLES
       77  FNAME       PIC X(15).
       77  SNAME       PIC X(15).
       77  RATE        PIC 9(3).
       77  HOURS       PIC 9(3).
       77  GROSS-PAY   PIC 9(5).

       PROCEDURE DIVISION.
      *MOVE STATEMENTS
           MOVE "Alex" TO FNAME.
           MOVE "Espinosa" TO SNAME.
           MOVE 100 TO RATE.
           MOVE 40 TO HOURS.
      *CALCULATE GROSS-PAY WITH COMPUTE     
           COMPUTE GROSS-PAY = HOURS * RATE.

      *DISPLAY
           DISPLAY "Name: " FNAME.
           DISPLAY "Surname: " SNAME.
           DISPLAY "Hour worked: " HOURS.
           DISPLAY "Hourly rate: " RATE.
           DISPLAY "Gross Pay: " GROSS-PAY.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, it's pretty easy stuff: set variables in the DATA DIVISION and then we assign values to variables and we display the values in the PROCEDURE DIVISION.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paragraphs
&lt;/h2&gt;

&lt;p&gt;Paragraphs are chunks of code defined in the PROCEDURE DIVISION starting at column A and can have the name you like. The termination of a pragraph is a period and can contain one to many COBOL sentences.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conditionals
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1    678   12
|    | |   |
      *CONDITIONAL
           IF GROSS-PAY &amp;lt; 6000 THEN
              DISPLAY FNAME " is being underpaid!"
           ELSE DISPLAY FNAME "is being paid a fair salary."
           END-IF.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can also use EVALUATE and WHEN as if it was a switch statement:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1    678   12
|    | |   |
           EVALUATE GROSS-PAY 
              WHEN (GROSS-PAY &amp;lt; 6000)
                 DISPLAY FNAME " is being underpaid!"
              WHEN (GROSS-PAY &amp;gt;= 6000)
                 DISPLAY FNAME "is being paid a fair salary."
           END-EVALUATE. 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Loops
&lt;/h3&gt;

&lt;p&gt;As COBOL is pretty much like plain english I believe there is no need to explain this type of loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1    678   12
|    | |   |
           MOVE 'THE NUMBER IS: ' TO MSG-HEADER OF PRINT-REC.
           PERFORM VARYING COUNTER FROM 01 BY 1 UNTIL COUNTER EQUAL 11
           MOVE COUNTER TO MSG-TO-WRITE
           WRITE PRINT-REC
           END-PERFORM.

           CLOSE PRINT-LINE.
           STOP RUN.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Program linkage
&lt;/h3&gt;

&lt;p&gt;We use the &lt;strong&gt;CALL&lt;/strong&gt; keyword to call another program:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CALL 'PROG1' ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Intrinsic functions
&lt;/h2&gt;

&lt;p&gt;These are functions ready-made for us to use within our COBOL programs. There are 6 categories:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;MATH&lt;/li&gt;
&lt;li&gt;STATISTICS&lt;/li&gt;
&lt;li&gt;DATE/TIME&lt;/li&gt;
&lt;li&gt;FINANCIAL&lt;/li&gt;
&lt;li&gt;CHARACTER-HANDLING &lt;/li&gt;
&lt;li&gt;GENERAL&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To use them we use FUNCTION NAME-OF-THE-FUNCTION(PARAMETERS). &lt;/p&gt;

&lt;h2&gt;
  
  
  Project
&lt;/h2&gt;

&lt;p&gt;As COBOL is frequently used in finance, I decided to build a simple banking program. The user is able to add and withdraw money, check his balance and exit the program:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IDENTIFICATION DIVISION.
PROGRAM-ID. SIMPLEBANKING.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 ACCT-BALANCE         PIC 9(7)V99 VALUE 1000.00.
01 TRS-AMOUNT           PIC 9(7)V99.
01 CHOICE               PIC X.

PROCEDURE DIVISION.
MAIN-PROCEDURE.
    DISPLAY "Welcome to the Simple Banking Program".
    PERFORM UNTIL CHOICE = '4'
        DISPLAY "1. Deposit"
        DISPLAY "2. Withdraw"
        DISPLAY "3. Check Balance"
        DISPLAY "4. Exit"
        DISPLAY "Enter your choice (1-4): "
        ACCEPT CHOICE

        EVALUATE CHOICE
            WHEN '1'
                PERFORM DEPOSIT
            WHEN '2'
                PERFORM WITHDRAW
            WHEN '3'
                PERFORM CHECK-BALANCE
            WHEN '4'
                DISPLAY "Thank you for using the banking program. Goodbye!"
            WHEN OTHER
                DISPLAY "Invalid choice. Please enter again."
        END-EVALUATE
    END-PERFORM.

    STOP RUN.

DEPOSIT.
    DISPLAY "Enter the amount to deposit: "
    ACCEPT TRS-AMOUNT
    ADD TRS-AMOUNT TO ACCT-BALANCE
    DISPLAY "Amount deposited successfully."
    PERFORM CHECK-BALANCE.

WITHDRAW.
    DISPLAY "Enter the amount to withdraw: "
    ACCEPT TRS-AMOUNT
    IF TRS-AMOUNT &amp;lt;= ACCT-BALANCE
        SUBTRACT TRS-AMOUNT FROM ACCT-BALANCE
        DISPLAY "Amount withdrawn successfully."
    ELSE
        DISPLAY "Insufficient funds."
    END-IF
    PERFORM CHECK-BALANCE.

CHECK-BALANCE.
    DISPLAY "Your current balance is: ", ACCT-BALANCE.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>programming</category>
      <category>cobol</category>
    </item>
    <item>
      <title>🎣 Phishing Websites: When Web Development and Cybersecurity Come Together</title>
      <dc:creator>Alex M. Espinosa</dc:creator>
      <pubDate>Tue, 06 Feb 2024 13:00:00 +0000</pubDate>
      <link>https://dev.to/amtzespinosa/phishing-websites-when-web-development-and-cybersecurity-come-together-29f8</link>
      <guid>https://dev.to/amtzespinosa/phishing-websites-when-web-development-and-cybersecurity-come-together-29f8</guid>
      <description>&lt;p&gt;In the landscape of web development, practical experience often proves to be the most effective teacher. As well as in cybersecurity. &lt;/p&gt;

&lt;p&gt;And one intriguing method that aspiring developers can explore is the &lt;strong&gt;ethical replication of existing websites&lt;/strong&gt; for educational purposes. This approach allows learners to gain hands-on experience, honing their skills in a real-world context.&lt;/p&gt;

&lt;h2&gt;
  
  
  Emulating websites for educational purposes
&lt;/h2&gt;

&lt;p&gt;Before delving into the technicalities, it's crucial to draw a clear distinction between ethical learning and malicious activities. Ethical website replication involves creating projects with the sole purpose of learning and skill development, rather than aiming to deceive or harm users. Or to be used in Red Team engagements, always with permission.&lt;/p&gt;

&lt;p&gt;The benefits of hands-on experience in web development cannot be overstated. By replicating existing websites, learners gain insights into various aspects of web development, from frontend design to backend functionalities.&lt;/p&gt;

&lt;h2&gt;
  
  
  What can you learn from emulating websites?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Server-Side Aspects
&lt;/h3&gt;

&lt;p&gt;Learning how to manage servers is a fundamental skill for any web developer. Ethical website replication provides an excellent opportunity to practice server management in a controlled and educational environment. Security practices should be implemented to protect these projects, even if they are solely for learning purposes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Database Exploration
&lt;/h3&gt;

&lt;p&gt;Understanding database management is a crucial aspect of web development. Replicating data structures from existing websites provides learners with a practical understanding of how information is stored and retrieved. Implementing secure database practices should be a priority, even in educational environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Forms and Data Handling
&lt;/h3&gt;

&lt;p&gt;Web forms are ubiquitous in online applications, and learning how to create them and handle data is an essential skill. Ethical replication allows learners to practically apply their knowledge in creating forms and responsibly handling user data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of emulating websites
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Skill Enhancement and Portfolio Building
&lt;/h3&gt;

&lt;p&gt;One of the significant advantages of ethical website replication is the enhancement of practical skills. By tackling real-world challenges, learners build a robust portfolio that showcases their capabilities. Employers often value hands-on experience, and including ethical replication projects in a portfolio demonstrates proficiency and initiative.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cybersecurity Awareness in Educational Projects
&lt;/h3&gt;

&lt;p&gt;Incorporating ethical hacking principles into web development education enhances cybersecurity awareness. By understanding potential vulnerabilities and responsibly disclosing and fixing them in educational projects, learners contribute to a safer online environment. This dual focus on development and security is invaluable in today's interconnected digital landscape.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some examples I made that worked during my Red Team engagements
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;WARNING&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;The following pages are &lt;strong&gt;FAKE&lt;/strong&gt; pages hosted on my &lt;a href="https://amtzespinosa.github.io/" rel="noopener noreferrer"&gt;website&lt;/a&gt;. They are harmless &lt;strong&gt;"phishing"&lt;/strong&gt; pages. They are showcased for educational purposes and they have no real functionality of logging any credentials.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Sign in with Google
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://amtzespinosa.github.io/assets/phishing/signin-google/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;amtzespinosa.github.io&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Click the Sign in with Google button and it will take you to the fake login page.&lt;/p&gt;

&lt;h3&gt;
  
  
  WordPress Backdoor plugin download page
&lt;/h3&gt;

&lt;p&gt;Extracted from a longer post published on my website: &lt;a href="https://amtzespinosa.github.io/posts/wordpress-backdoor-plugin/" rel="noopener noreferrer"&gt;WordPress Backdoor Plugin: A Complete Phishing Scheme&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here you can see a fake website where you can download a "security patch" from WordPress plugins repository. But that plugin is actually a backdoor.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://amtzespinosa.github.io/assets/phishing/wordpress-backdoor/index.html" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Famtzespinosa%2Famtzespinosa.github.io%2Fmain%2Fassets%2Fimg%2Fposts%2F2023-12-06-wordpress-backdoor-plugin%2Fwordpress-backdoor-header.png" height="293" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://amtzespinosa.github.io/assets/phishing/wordpress-backdoor/index.html" rel="noopener noreferrer" class="c-link"&gt;
            WordPress Security Patch CVE-2023-46732 – WordPress plugin | WordPress.orgAkismet Anti-spam: Spam Protection – Plugin WordPress | WordPress.org España
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            This security plugin serves as a patch for the recently identified vulnerability known as CVE-2023-46732. This specific vulnerability is categorized as a Remote Code Execution (RCE) threat, meaning that attackers can exploit it to gain unauthorized access to your website.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs.w.org%2Ffavicon.ico%3F2" width="32" height="32"&gt;
          amtzespinosa.github.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Captive portals: TP Link, Vodafone and Starbucks.
&lt;/h3&gt;

&lt;p&gt;These pages can actually be used with the tool &lt;strong&gt;Wifiphisher&lt;/strong&gt;. And here you can see how they look:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://amtzespinosa.github.io/assets/phishing/wifiphisher/tp-link/html/" rel="noopener noreferrer"&gt;TP-Link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://amtzespinosa.github.io/assets/phishing/wifiphisher/vodafone/html/" rel="noopener noreferrer"&gt;Vodafone Firmware Update&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://amtzespinosa.github.io/assets/phishing/wifiphisher/starbucks/" rel="noopener noreferrer"&gt;Starbucks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I know, the &lt;strong&gt;WordPress Security Patch&lt;/strong&gt; website and the &lt;strong&gt;Vodafone Firmware Update&lt;/strong&gt; page are simple copy/paste. But still you can learn about form submissions, data handling, server management...&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Phishing websites, when approached ethically, become a unique intersection where web development and cybersecurity converge. The lessons learned from emulating phishing scenarios contribute to a deeper understanding of security challenges as well as web development.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>cybersecurity</category>
      <category>career</category>
      <category>learning</category>
    </item>
    <item>
      <title>Why developers should learn hacking (and vice versa)</title>
      <dc:creator>Alex M. Espinosa</dc:creator>
      <pubDate>Sat, 03 Feb 2024 11:21:09 +0000</pubDate>
      <link>https://dev.to/amtzespinosa/why-developers-should-learn-hacking-and-vice-versa-1j75</link>
      <guid>https://dev.to/amtzespinosa/why-developers-should-learn-hacking-and-vice-versa-1j75</guid>
      <description>&lt;p&gt;The worlds of developers and hackers may seem like polar opposites: builders and breakers, creators and exploiters. However, the reality is far more nuanced. Both share a deep understanding of technology, albeit from contrasting perspectives. This shared foundation fosters a mutually beneficial relationship, where each side can learn and grow from the other. &lt;strong&gt;Here's why developers should embrace hacking, and hackers should explore development.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Developers, Embrace the Hacker Mindset:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Security-first mentality:&lt;/strong&gt; Understanding hacking techniques exposes vulnerabilities you might miss, leading to more secure software from the ground up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creative problem-solving:&lt;/strong&gt; Hackers excel at unconventional thinking, finding solutions beyond textbook approaches. This can inspire developers to approach problems from new angles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing and vulnerability assessment:&lt;/strong&gt; Hackers excel at finding weak points. By learning their methods, developers can proactively test their own applications, identifying and fixing issues before attackers do.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Staying ahead of the curve:&lt;/strong&gt; Understanding emerging hacking trends helps developers anticipate future threats and implement preventative measures.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Hackers, Dive into the World of Development:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Understanding the system:&lt;/strong&gt; Knowing how software works grants deeper insight into vulnerabilities and attack vectors. This enhances your effectiveness and avoids unintended consequences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Building responsible tools:&lt;/strong&gt; Your hacking skills can be used ethically to create security testing tools, helping developers identify and fix vulnerabilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;I have created a free version of WPScan using Python called WPyScan that you can check. Any contribution is welcomed!&lt;/strong&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://amtzespinosa.github.io/posts/wpyscan-free-wordpress-vulnerability-scanner-python/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Famtzespinosa%2Fwpyscan%2Fraw%2Fmain%2Fimg%2FWPyScan.png" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://amtzespinosa.github.io/posts/wpyscan-free-wordpress-vulnerability-scanner-python/" rel="noopener noreferrer" class="c-link"&gt;
            WPyScan: My FREE, UNLIMITED version of WPScan, now released | Alex's pwnlab!
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            A tool developed in Python for enumerating and scanning WordPress websites. It is an easy-to-use tool that can be run from the command line. WPyScan can enumerate and find any vulnerability associated with version, theme and plugins installed.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Famtzespinosa.github.io%2Fassets%2Fimg%2Ffavicons%2Ffavicon-32x32.png" width="32" height="32"&gt;
          amtzespinosa.github.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bug bounty programs:&lt;/strong&gt; Leverage your skills to earn rewards by ethically disclosing vulnerabilities to companies through bug bounty programs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collaboration and contribution:&lt;/strong&gt; Join the developer community and collaborate on open-source projects, contributing your security expertise and improving software for everyone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ethical awareness:&lt;/strong&gt; Understanding the impact of your actions strengthens your ethical compass, ensuring responsible hacking practices.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Synergy of Two Worlds:
&lt;/h2&gt;

&lt;p&gt;The true potential lies in collaboration. Imagine developers building with a hacker's security mindset, anticipating and thwarting attacks. Conversely, imagine hackers armed with development knowledge, creating responsible tools and contributing to a more secure ecosystem. Together, we can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Strengthen the security posture of software:&lt;/strong&gt; A combined understanding leads to more robust solutions, protecting against sophisticated attacks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Foster a culture of security:&lt;/strong&gt; Shared knowledge empowers both sides to promote security awareness and best practices throughout the technology landscape.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bridge the communication gap:&lt;/strong&gt; Developers and hackers often speak different languages. Learning each other's perspectives fosters better understanding and collaboration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Future of Technology:
&lt;/h2&gt;

&lt;p&gt;As technology evolves, the lines between development and hacking will continue to blur. Embracing this interconnectedness, where both sides learn and grow from each other, is crucial for building a more secure and responsible digital future.&lt;/p&gt;

&lt;p&gt;So, developers, open your minds to the hacker's perspective. Hackers, explore the world of development. Together, we can build a more secure and innovative future for technology.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>devops</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>#12in24: Learning Perl in 4h.</title>
      <dc:creator>Alex M. Espinosa</dc:creator>
      <pubDate>Wed, 24 Jan 2024 16:00:00 +0000</pubDate>
      <link>https://dev.to/amtzespinosa/12in24-learning-perl-in-4h-2d7g</link>
      <guid>https://dev.to/amtzespinosa/12in24-learning-perl-in-4h-2d7g</guid>
      <description>&lt;p&gt;The title is pretty clickbaiting. But read me out: &lt;strong&gt;Yes, you can learn a new language in just 4 hours.&lt;/strong&gt; Other thing is mastering it...&lt;/p&gt;

&lt;p&gt;So, as this is the first language of my &lt;strong&gt;#12in24&lt;/strong&gt;, I wanted to start small. &lt;strong&gt;I will use this video to learn the basics: &lt;a href="https://youtu.be/_DFa26ep-h4?si=1TuCkUKxqUUY4nLQ" rel="noopener noreferrer"&gt;Perl Programming Course for Beginners&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The basics
&lt;/h2&gt;

&lt;h3&gt;
  
  
  File structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="c1"&gt;#!/usr/bin/env perl&lt;/span&gt;
&lt;span class="c1"&gt;# Good ol' shebang&lt;/span&gt;

&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nv"&gt;strict&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;# This does not allow execution if errors&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nv"&gt;warnings&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;# This prints the errors in console&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;DEV community is cool!&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt; &lt;span class="c1"&gt;# The actual program&lt;/span&gt;

&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;# Not always present, indicates that compilation succeeded&lt;/span&gt;
&lt;span class="c1"&gt;# Don't forget ; at the end of the lines&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Data types: Scalars
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$decimal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;3.14&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$number&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;$decimal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;# 4.14&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$number&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;$decimal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;# -2.14&lt;/span&gt;
&lt;span class="c1"&gt;# ...&lt;/span&gt;

&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Follow me &lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt; 
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$string2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;on dev.to!&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$string&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$string2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;# Follow me on dev.to!&lt;/span&gt;

&lt;span class="c1"&gt;# Variables are case sensitive&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$variable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;# is different to&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$Variable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;# To declare a global variable&lt;/span&gt;
&lt;span class="k"&gt;our&lt;/span&gt; &lt;span class="nv"&gt;$global_variable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0b75d5eskfa2s6ggdls7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0b75d5eskfa2s6ggdls7.png" alt="Bugs Bunny Communist declaring a global variable in Perl" width="640" height="404"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Data types: Arrays
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;@array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;two&lt;/span&gt;&lt;span class="p"&gt;",&lt;/span&gt;
    &lt;span class="mf"&gt;3.14&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;@array&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;# $VAR1 = 1;&lt;/span&gt;
&lt;span class="c1"&gt;# $VAR2 = "two";&lt;/span&gt;
&lt;span class="c1"&gt;# $VAR3 = "3.14";&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;# This will print 1&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;@array&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;# This will print $VAR1 = 3;&lt;/span&gt;

&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;@array2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;..&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;# $VAR1 = 3;&lt;/span&gt;
&lt;span class="c1"&gt;# $VAR2 = 4;&lt;/span&gt;
&lt;span class="c1"&gt;# $VAR3 = 5;&lt;/span&gt;
&lt;span class="c1"&gt;# $VAR4 = 6;&lt;/span&gt;
&lt;span class="c1"&gt;# $VAR5 = 7;&lt;/span&gt;
&lt;span class="c1"&gt;# If you use (  "a" .. "d" ) it will print each letter from a to d&lt;/span&gt;
&lt;span class="c1"&gt;# You can use it for array indexes as well&lt;/span&gt;

&lt;span class="nb"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;@array2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;# Adds number 8 to the array&lt;/span&gt;
&lt;span class="nb"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;@array&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;# Removes last element&lt;/span&gt;
&lt;span class="nb"&gt;shift&lt;/span&gt; &lt;span class="nv"&gt;@array&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;# Removes first element&lt;/span&gt;
&lt;span class="nv"&gt;unshft&lt;/span&gt; &lt;span class="nv"&gt;@array&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;# Adds element at the beginning&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Subroutines
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="nf"&gt;my_function&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$hi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;my_function&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;# This will print Hello&lt;/span&gt;

&lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="nf"&gt;my_name&lt;/span&gt;&lt;span class="p"&gt;( $name ) {&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;my_name&lt;/span&gt;&lt;span class="p"&gt;("&lt;/span&gt;&lt;span class="s2"&gt;Alex&lt;/span&gt;&lt;span class="p"&gt;");&lt;/span&gt; &lt;span class="c1"&gt;# This will print Alex&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Conditionals
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="nv"&gt;$test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$test&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hi!&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; 
&lt;span class="k"&gt;elsif&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$test&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;How are you?&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Goodbye!&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Loops
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="nv"&gt;$test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$test&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Count: &lt;/span&gt;&lt;span class="si"&gt;$test&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
    &lt;span class="nv"&gt;$test&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; 
&lt;span class="c1"&gt;# Count: 0&lt;/span&gt;
&lt;span class="c1"&gt;# Count: 1&lt;/span&gt;
&lt;span class="c1"&gt;# Count: 2&lt;/span&gt;
&lt;span class="c1"&gt;# Count: 3&lt;/span&gt;
&lt;span class="c1"&gt;# Count: 4&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;$count&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;$count&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello&lt;/span&gt;&lt;span class="p"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;# Hello&lt;/span&gt;
&lt;span class="c1"&gt;# Hello&lt;/span&gt;
&lt;span class="c1"&gt;# Hello&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The video covers way more than this, I know, but these are the basics. With a little help of the documentation, I will be fine for the next sections.&lt;/p&gt;
&lt;h2&gt;
  
  
  Practice
&lt;/h2&gt;

&lt;p&gt;Now, I will put my knowledge to test using &lt;a href="https://exercism.org/tracks/perl5/exercises" rel="noopener noreferrer"&gt;Exercism&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Starting here!&lt;/p&gt;
&lt;h3&gt;
  
  
  Hello World
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://exercism.org/tracks/perl5/exercises/hello-world/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.exercism.org%2Fmeta%2Fog.png" height="418" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://exercism.org/tracks/perl5/exercises/hello-world/" rel="noopener noreferrer" class="c-link"&gt;
            Hello World in Perl on Exercism
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Can you solve Hello World in Perl? Improve your Perl skills with support from our world-class team of mentors.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.exercism.org%2Fmeta%2Ffavicon-32x32.png" width="32" height="32"&gt;
          exercism.org
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;I must say that Exercism complicates way too much the exercises. But anyway, it's not bad to practice.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Project
&lt;/h2&gt;

&lt;p&gt;I wanted to do something related to Cybersecurity but not too complex as I am new to Perl. After some deliberation, I came up with this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A very simple SQLi Vulnerability Finder.&lt;/strong&gt; It is simple as it is just a PoC but can be enhanced to be usable just by adding payloads and places to check.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="c1"&gt;#!/usr/bin/env perl&lt;/span&gt;

&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nv"&gt;strict&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nv"&gt;warnings&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;LWP::&lt;/span&gt;&lt;span class="nv"&gt;UserAgent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="nf"&gt;check_sql_injection&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;@_&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;' OR '1'='1&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
    &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$test_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$url&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;?id=&lt;/span&gt;&lt;span class="p"&gt;"&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$payload&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$ua&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;LWP::&lt;/span&gt;&lt;span class="nv"&gt;UserAgent&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$ua&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nv"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$test_url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nv"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=~&lt;/span&gt; &lt;span class="sr"&gt;/error in your SQL syntax/i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Vulnerable to SQL Injection: &lt;/span&gt;&lt;span class="si"&gt;$url&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Not Vulnerable: &lt;/span&gt;&lt;span class="si"&gt;$url&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Prompt the user for the target URL&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Enter the target URL: &lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$target_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="bp"&gt;STDIN&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nb"&gt;chomp&lt;/span&gt; &lt;span class="nv"&gt;$target_url&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  

&lt;span class="c1"&gt;# Example usage:&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;check_sql_injection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$target_url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hope you enjoyed it! See you next month learning &lt;strong&gt;COBOL&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>perl</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>💰 The Cybersecurity (or Any IT Job) Salary Myth</title>
      <dc:creator>Alex M. Espinosa</dc:creator>
      <pubDate>Tue, 23 Jan 2024 17:00:00 +0000</pubDate>
      <link>https://dev.to/amtzespinosa/the-cybersecurity-salary-myth-5b50</link>
      <guid>https://dev.to/amtzespinosa/the-cybersecurity-salary-myth-5b50</guid>
      <description>&lt;p&gt;In the dynamic world of cybersecurity, the allure of high salaries often takes center stage, creating a myth that can mislead aspiring professionals. Let's delve into the complexities of cybersecurity salaries and debunk the common misconceptions surrounding six-figure incomes in the industry.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hype vs. Reality
&lt;/h2&gt;

&lt;p&gt;While the prospect of earning a six-figure salary in cybersecurity is undeniably attractive, it's crucial to separate hype from reality. &lt;strong&gt;Many training programs, universities, and influencers leverage the allure of high incomes as a marketing tool.&lt;/strong&gt; However, the truth lies in a nuanced understanding of the factors that shape cybersecurity salaries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context Matters
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The average cybersecurity salary varies significantly based on factors like geographical location, experience, qualifications, and industry demand.&lt;/strong&gt; A cursory glance at median salaries may suggest a lucrative field, but a closer look reveals disparities among states and regions. Half of the United States, for instance, reports average cybersecurity salaries below the six-figure mark, emphasizing the importance of considering the cost of living.&lt;/p&gt;

&lt;h2&gt;
  
  
  Entry-Level Realities
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The myth gains traction when considering entry-level cybersecurity positions.&lt;/strong&gt; While Google searches may yield enticing figures, the reality is more nuanced. Median salaries for entry-level roles hover around $74,000, a respectable starting point but not necessarily reflective of the hyped six-figure promise. Variables such as company type, qualifications, certifications, and location play pivotal roles in shaping entry-level compensation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bridging the Skills Gap
&lt;/h2&gt;

&lt;p&gt;Addressing the persistent cybersecurity skills gap remains a priority. Aspiring professionals must set realistic expectations and acknowledge the factors influencing salary levels. Negotiation for fair compensation is essential, but cultivating a realistic mindset during the initial stages of a cybersecurity career is equally crucial.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pursuit of Passion over Paycheck
&lt;/h2&gt;

&lt;p&gt;Beyond the monetary aspect, the cybersecurity industry demands genuine interest and commitment. The field's ever-evolving nature requires continuous learning, making passion a driving force for success. While a high-income potential exists, &lt;strong&gt;pursuing cybersecurity solely for financial gains may lead to dissatisfaction.&lt;/strong&gt; Striking a balance between income goals and job satisfaction is imperative for a fulfilling career.&lt;/p&gt;

&lt;h2&gt;
  
  
  Caution in the Training Landscape
&lt;/h2&gt;

&lt;p&gt;As individuals explore cybersecurity training programs and educational avenues, it's vital to approach information with a critical mindset. Recognize that not every entry-level position guarantees a six-figure income, and success in the industry involves a combination of factors beyond financial compensation.&lt;/p&gt;

&lt;p&gt;In dispelling the cybersecurity salary myth, it's essential to navigate the industry with informed expectations. While high incomes are achievable in the long run, the journey begins with a realistic understanding of entry-level realities, geographical nuances, and the evolving nature of cybersecurity. &lt;strong&gt;Pursuing passion, coupled with a balanced outlook on income expectations, ensures a gratifying and successful cybersecurity career.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Happy hacking!&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>career</category>
    </item>
    <item>
      <title>Coding Bootcamps: Elevate Your Career or Stall Your Ambitions?</title>
      <dc:creator>Alex M. Espinosa</dc:creator>
      <pubDate>Tue, 16 Jan 2024 16:30:00 +0000</pubDate>
      <link>https://dev.to/amtzespinosa/coding-bootcamps-elevate-your-career-or-stall-your-ambitions-1k3k</link>
      <guid>https://dev.to/amtzespinosa/coding-bootcamps-elevate-your-career-or-stall-your-ambitions-1k3k</guid>
      <description>&lt;p&gt;&lt;strong&gt;Are coding bootcamps the golden ticket to a lucrative software development career, or are they just a bunch of hype?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On one hand, bootcamps promise to catapult you from coding novice to employable developer in a matter of months.&lt;/p&gt;

&lt;p&gt;On the other hand, critics warn that bootcamps' accelerated pace and limited scope may leave you with a superficial understanding of programming, limiting your career growth.&lt;/p&gt;

&lt;p&gt;So, is it bootcamp or bust? Or is there a more balanced path to becoming a software developer?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Debate is open!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>career</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Cybersecurity: Trends for 2024</title>
      <dc:creator>Alex M. Espinosa</dc:creator>
      <pubDate>Tue, 09 Jan 2024 08:12:50 +0000</pubDate>
      <link>https://dev.to/amtzespinosa/cybersecurity-trends-for-2024-42ec</link>
      <guid>https://dev.to/amtzespinosa/cybersecurity-trends-for-2024-42ec</guid>
      <description>&lt;p&gt;As we enter 2024, cybersecurity stands on the brink of significant changes. The frequency and sophistication of cyber threats challenge traditional security approaches. This article explores my top 8 cybersecurity trends for the upcoming year, including the role of AI and the growing importance of mobile security. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Battle of AIs
&lt;/h2&gt;

&lt;p&gt;The integration of artificial intelligence (AI) continues to be a pivotal factor in cybersecurity. Not only are defenders leveraging AI for threat detection and response, but cyber adversaries are also employing sophisticated AI techniques to enhance their attacks. The evolving role of AI in both offense and defense sets the stage for a relentless battle between automated systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Growing Importance of IoT Security
&lt;/h2&gt;

&lt;p&gt;With the proliferation of Internet of Things (IoT) devices, the attack surface for cyber threats has expanded exponentially. The coming year will witness a heightened focus on securing IoT ecosystems to prevent potential breaches. Cybersecurity measures will extend beyond traditional devices to encompass a diverse range of interconnected smart devices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evolution of Phishing Attacks
&lt;/h2&gt;

&lt;p&gt;Phishing attacks are becoming more sophisticated, employing advanced techniques to deceive even the most vigilant users. As cybercriminals refine their tactics, organizations must enhance their phishing detection and prevention mechanisms. A comprehensive approach that combines technology, awareness training, and real-time threat intelligence will be essential.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you want to know how easy is to set up a Phishing campaign targeting WordPress users, check my article &lt;a href="https://amtzespinosa.github.io/posts/wordpress-backdoor-plugin/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Enhanced Focus on Mobile Security
&lt;/h2&gt;

&lt;p&gt;The increasing reliance on mobile devices necessitates a stronger emphasis on mobile security. With a surge in mobile-centric threats, organizations must implement robust security measures to safeguard sensitive data and ensure the integrity of mobile applications. Mobile security will take center stage in cybersecurity strategies in 2024.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zero Trust Security
&lt;/h2&gt;

&lt;p&gt;The concept of Zero Trust Security, which assumes no inherent trust within or outside an organization, will gain prominence. As traditional perimeter defenses prove inadequate, organizations will adopt a Zero Trust model, requiring continuous authentication and verification for every user and device accessing their network.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cybersecurity Skills Gap and Education
&lt;/h2&gt;

&lt;p&gt;The shortage of skilled cybersecurity professionals remains a critical challenge. In 2024, addressing the skills gap will be a priority, with increased focus on educational initiatives, training programs, and collaborative efforts between academia and industry to nurture a capable workforce capable of tackling evolving threats.&lt;/p&gt;

&lt;p&gt;Now a degree is not enough to land a cybersecurity job and companies are taking in better consideration people with industry standard certs rather than degrees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cybersecurity Insurance Becoming Mainstream
&lt;/h2&gt;

&lt;p&gt;As cyber threats become more prevalent and damaging, the adoption of cybersecurity insurance will become mainstream. Organizations will seek comprehensive coverage to mitigate financial losses and operational disruptions resulting from cyberattacks. The insurance industry will respond with tailored policies addressing the unique challenges of the digital age.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cyber Warfare and State-Sponsored Cyber Attacks
&lt;/h2&gt;

&lt;p&gt;Geopolitical tensions will continue to spill into the digital realm, leading to an escalation in cyber warfare and state-sponsored cyber attacks. Nation-states will invest heavily in offensive cyber capabilities, making it imperative for governments and private entities alike to bolster their defenses against these sophisticated and potentially devastating cyber threats.&lt;/p&gt;

&lt;p&gt;In conclusion, the cybersecurity landscape for 2024 is marked by a dynamic interplay of technological advancements, evolving threat landscapes, and strategic responses. Organizations must remain vigilant, adaptive, and proactive to navigate these trends and secure their digital assets effectively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Share your thoughts and forecasts with the community!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>career</category>
      <category>ai</category>
    </item>
    <item>
      <title>#12in24: Trying 12 languages during 2024!</title>
      <dc:creator>Alex M. Espinosa</dc:creator>
      <pubDate>Tue, 02 Jan 2024 14:45:08 +0000</pubDate>
      <link>https://dev.to/amtzespinosa/12in24-trying-12-languages-during-2024-1c8d</link>
      <guid>https://dev.to/amtzespinosa/12in24-trying-12-languages-during-2024-1c8d</guid>
      <description>&lt;p&gt;&lt;strong&gt;Happy New Year DEV family!&lt;/strong&gt; As a new year comes in, so do the new year resolutions. &lt;/p&gt;

&lt;p&gt;Mine, regarding coding, is to try new programming languages and get better in the ones I already know. Hence, I thought that posting about my impressions learning new languages could be fun!&lt;/p&gt;

&lt;p&gt;I have made a simple &lt;strong&gt;Python&lt;/strong&gt; script to randomly choose the 12 languages I will be trying. The list of the languages corresponds to the languages listed in &lt;a href="https://exercism.org/" rel="noopener noreferrer"&gt;Exercism&lt;/a&gt; so it will be easy to practice them!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;

&lt;span class="n"&gt;list_of_languages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8th&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ABAP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AWK&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Ballerina&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;C&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;C#&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;C++&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CFML&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Clojure&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;COBOL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CoffeeScript&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Common Lisp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Crystal&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;D&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Dart&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Delphi Pascal&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Elixir&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Elm&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Emacs Lisp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Erlang&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;F#&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Fortran&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Gleam&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Go&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Groovy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Haskell&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Java&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;JavaScript&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;jq&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Julia&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Kotlin&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;LFE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Lua&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MIPS Assembly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Nim&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Objective-C&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;OCaml&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Perl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Pharo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PHP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PL/SQL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PowerShell&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Prolog&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PureScript&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Python&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;R&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Racket&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ReasonML&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Red&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Ruby&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Rust&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Scala&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Scheme&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Standard ML&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Swift&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tcl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TypeScript&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Unison&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;V&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Vim script&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Visual Basic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Web Assembly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Wren&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x86-64 Assembly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Zig&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;language&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;list_of_languages&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;language&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;list_of_languages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;language&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And, after running the script...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Perl
2. COBOL
3. Nim
4. Go
5. 8th
6. Kotlin
7. Ruby
8. R
9. Lua
10. Elm
11. Crystal
12. jq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Boom! Not a bad batch at all! I see some interesting languages here. &lt;/p&gt;

&lt;p&gt;To be honest, there are languages I never heard of. So it will be a nice adventure.&lt;/p&gt;

&lt;p&gt;See you in the next post regarding basic &lt;strong&gt;Perl&lt;/strong&gt; and my impressions about it!&lt;/p&gt;

</description>
      <category>devresolutions2024</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
