<?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: Ahmed Tealeb</title>
    <description>The latest articles on DEV Community by Ahmed Tealeb (@ahtealeb82).</description>
    <link>https://dev.to/ahtealeb82</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%2F1241924%2Ff1e036bb-4042-4134-b8c5-36519c3e8161.jpg</url>
      <title>DEV Community: Ahmed Tealeb</title>
      <link>https://dev.to/ahtealeb82</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ahtealeb82"/>
    <language>en</language>
    <item>
      <title>Introduction to Generative AI and why it's a game-changer in the business world</title>
      <dc:creator>Ahmed Tealeb</dc:creator>
      <pubDate>Mon, 15 Jan 2024 05:26:33 +0000</pubDate>
      <link>https://dev.to/ahtealeb82/generative-ai-is-and-why-its-a-game-changer-in-the-business-world-42b4</link>
      <guid>https://dev.to/ahtealeb82/generative-ai-is-and-why-its-a-game-changer-in-the-business-world-42b4</guid>
      <description>&lt;p&gt;Let's start with the basics of Generative AI concepts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Artificial Intelligence (AI): AI is the broad field of computer science focused on creating machines capable of performing tasks that typically require human intelligence.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Machine Learning (ML): ML is a subset of AI involving algorithms and statistical models that enable computers to improve their performance on a task through experience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deep Learning: Deep Learning is a subset of ML based on artificial neural networks, where algorithms learn from large amounts of data to identify patterns and make decisions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generative AI: Generative AI refers to AI technologies that can generate new content, ideas, or data that are coherent and plausible, often resembling human-generated outputs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What powers Generative AI&lt;/strong&gt;&lt;br&gt;
Foundation models are large-scale artificial intelligence models that have been trained on vast amounts of data. These models are highly versatile and can be adapted to a wide range of tasks and applications.&lt;/p&gt;

&lt;p&gt;Generative AI is one of the applications of foundation models. It involves using these models to create new content, such as text, images, or music. The foundation model serves as the underlying structure that understands and processes information, enabling the generative AI to produce new, coherent, and relevant outputs.&lt;/p&gt;

&lt;p&gt;In simple terms, foundation models are like the core engine, and generative AI is one of the many things that this engine can power.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What makes Foundation Models so powerful?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Pretrained: The model has already been trained on a vast dataset before being fine-tuned or applied to specific tasks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generalized: The model is capable of performing well across a wide range of tasks, not just the ones it was specifically trained for.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Adaptable: The model can be easily modified or fine-tuned to suit particular needs or tasks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Large: The model is built with a substantial architecture and trained on extensive data, giving it a broad understanding and capability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Self-supervised: The model primarily learns by analyzing and making sense of unlabeled data, without explicit guidance on what to learn.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;and what are Large Language Models?&lt;/strong&gt;&lt;br&gt;
Large Language Models (LLMs) are a type of foundation model specifically designed to understand and generate text. They're trained on huge amounts of text, which makes them good at a wide range of language tasks. LLMs are part of the broader category of foundation models, meaning they're versatile and can be adapted for different uses involving language.&lt;/p&gt;

&lt;p&gt;LLMs like GPT take, as input, an entire sequence of words, and predicts which word is most likely to come next. They perform that prediction of the next word in a sequence by analyzing patterns in vast amounts of text data.&lt;/p&gt;

&lt;p&gt;There's a big debate that LLMs do more than predict the next word; they compress a "world-model" within their complex networks and weights.&lt;/p&gt;

&lt;p&gt;Two important concepts to understand in LLMs are:&lt;/p&gt;

&lt;p&gt;Weights: Numerical values within a machine learning model that are adjusted during training to influence the model's output in response to input data.&lt;/p&gt;

&lt;p&gt;Parameters: The broader set of configurable elements in a model, including weights, that determine its behavior and performance.&lt;/p&gt;

&lt;p&gt;Tokenization: The process of converting text into smaller units (tokens), such as words or subwords, which are used as the input for LLMs to understand and generate language.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>AWS Journey: Navigating the World of Infrastructure as Code</title>
      <dc:creator>Ahmed Tealeb</dc:creator>
      <pubDate>Fri, 29 Dec 2023 09:06:55 +0000</pubDate>
      <link>https://dev.to/ahtealeb82/aws-journey-navigating-the-world-of-infrastructure-as-code-1p30</link>
      <guid>https://dev.to/ahtealeb82/aws-journey-navigating-the-world-of-infrastructure-as-code-1p30</guid>
      <description>&lt;p&gt;Knowing cloud services is one thing. Implementing applications is another thing. You won't see a real production workload (hopefully) that wasn't provisioned without any infrastructure as a code tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application Code IS Infrastructure Code&lt;/strong&gt;&lt;br&gt;
Before serverless &amp;amp; cloud computing it was very common to distinguish infrastructure from application code. For example, your Java Spring server was application code. The database and docker provisioning code was infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Eb6-mP_R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uaghcy3sh1l0aavyq2ed.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Eb6-mP_R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uaghcy3sh1l0aavyq2ed.jpg" alt="Image description" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nowadays this is different. Think of the combination of Lambda and SQS. It is hard to say what exactly here is infrastructure and what Application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qW7uwo1I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t4ode8212kdh3a4ba0qa.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qW7uwo1I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t4ode8212kdh3a4ba0qa.jpg" alt="Image description" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Infrastructure as Code?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Infrastructure as Code (IaC)&lt;/strong&gt; describes the practice of provisioning your infrastructure with source code. By having source code, you gain many benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can &lt;strong&gt;duplicate&lt;/strong&gt; the same environment in another account or region.&lt;/li&gt;
&lt;li&gt;Every change is &lt;strong&gt;documented&lt;/strong&gt; and &lt;strong&gt;versioned&lt;/strong&gt; (thanks to GIT).&lt;/li&gt;
&lt;li&gt;Infrastructure as Code enables you to follow &lt;strong&gt;DevOps&lt;/strong&gt; best practices, such as automated testing, continuous deployment, and feature flagging. All of these practices are possible.&lt;/li&gt;
&lt;li&gt;You get a &lt;strong&gt;reproducible&lt;/strong&gt; setup. There are no manual checklists or steps to remember. Executing the code is sufficient.
There are many more benefits. You cannot use AWS professionally without being able to provision resources via Code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;History of IaC&lt;/strong&gt;&lt;br&gt;
"If you want to understand today, you must search yesterday."&lt;br&gt;
&lt;strong&gt;Pearl S. Buck, American novelist (1892-1973)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are many IaC tools available, and each has its place. To understand their differences, we need to take a step back and understand where we are coming from. Each step in the timeline had a different philosophy.&lt;/p&gt;

&lt;p&gt;Remember that cloud computing has only been evolving for the last two decades, and software development has undergone many changes during that time.&lt;/p&gt;

&lt;p&gt;The image below shows some of the main categories of different IaC tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RxJC878f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lvsdsor57gjtpzil92l0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RxJC878f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lvsdsor57gjtpzil92l0.jpg" alt="Image description" width="800" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We started with a manual approach by clicking in the AWS Console. Nowadays, we have several IaC frameworks available and can use them in our favorite programming language. Let's see the single steps in a bit more detail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Manual - Clicking in the AWS Console&lt;/strong&gt;&lt;br&gt;
When AWS was launched it was common to create your resources in the UI. This is also called ClickOps. This was very error-prone. It was common to have documents with screenshots and checklists on how to create the resource.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OQ4E_Ocq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bvscg6sqthnhzg3cn9a9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OQ4E_Ocq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bvscg6sqthnhzg3cn9a9.jpg" alt="Image description" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There was no code, history, or governance. With more complex AWS setups this approach became very bad.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scripted - Provision AWS Resources with the CLI&lt;/strong&gt;&lt;br&gt;
AWS has a very powerful CLI. At some point, people started using the CLI to provision resources. For example, you can create a bucket like this:&lt;br&gt;
"aws s3api create-bucket --bucket awsfundamentalstestbucket"&lt;/p&gt;

&lt;p&gt;These CLI commands were added to pipelines like Jenkins and that is how infrastructure was provisioned.&lt;/p&gt;

&lt;p&gt;While this was the first step of going in the direction of having code it was still suboptimal.&lt;/p&gt;

&lt;p&gt;The CLI had no idea which resources were already created, or if you needed to update or create new resources, and error handling was also non-existent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Declarative - Describe the Infrastructure&lt;/strong&gt;&lt;br&gt;
The next step was using a declarative method. A declarative approach defines what the final state looks like. We know this approach from SQL. We don't care how it will be done; we only define the final state.&lt;/p&gt;

&lt;p&gt;For example, we can define that we need an S3 bucket. How the tool takes care of providing us with that bucket is not of interest.&lt;/p&gt;

&lt;p&gt;AWS introduced the service &lt;strong&gt;CloudFormation&lt;/strong&gt;. CloudFormation allows you to provision resources, handle errors, and roll back states. A CloudFormation template is a configuration file in a YAML or JSON format. For example, a file could look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3c3hgfEu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8kr023yimlirh0e6c1uk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3c3hgfEu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8kr023yimlirh0e6c1uk.png" alt="Image description" width="565" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CloudFormation has a state and knows which infrastructure was already provisioned and which needs to be updated.&lt;/p&gt;

&lt;p&gt;The engine underneath is still used in most of the frameworks like CDK, Amplify, or SST. It is still to this day a very common approach to use CloudFormation.&lt;/p&gt;

&lt;p&gt;If you want to use any of the other tools (except for tools like Terraform) you need to understand the basics of CloudFormation.&lt;/p&gt;

&lt;p&gt;Tools in this step are for example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CloudFormation&lt;/li&gt;
&lt;li&gt;Terraform&lt;/li&gt;
&lt;li&gt;Serverless Framework&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Componentized - Use your Programming Language to Build Abstractions&lt;/strong&gt;&lt;br&gt;
Componentized frameworks allow you to build reusable abstractions that developers can use. There is one big difference between the other stages. Now developers can build infrastructure in a proper programming language. Languages like Python, TypeScript, or Java are very common for these frameworks. Under the hood, CloudFormation will often be used.&lt;/p&gt;

&lt;p&gt;Popular frameworks are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CDK&lt;/li&gt;
&lt;li&gt;SST (Based on CDK)&lt;/li&gt;
&lt;li&gt;Pulumi
Using a proper programming language is the major benefit here. Developers use these languages, concepts, and IDEs daily. There is no need to learn a new syntax. But it is important to learn the basics of the engine underneath, e.g. CloudFormation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Creating a bucket can be as simple as that:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Yiol9FYb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0rmlzzvqwd2rxndt6os7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Yiol9FYb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0rmlzzvqwd2rxndt6os7.png" alt="Image description" width="624" height="221"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You have all the benefits of using a programming language but also the benefits that if you don't understand the concepts (or software engineering) well enough, you can easily over-abstract a lot!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;br&gt;
This post gives you an overview of existing IaC tools, their different stages, and why we have them.&lt;/p&gt;

&lt;p&gt;Please remember that the stages don't refer to which tool is better suited than the others. Not every tool in the componentized area is better than in the declarative one.&lt;/p&gt;

&lt;p&gt;It depends a lot on the organization, use case, and the team that will be working with it.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloudcomputing</category>
      <category>infrastructureascode</category>
    </item>
  </channel>
</rss>
