<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Microsoft - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Microsoft - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Thu, 28 May 2026 16:47:20 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/microsoft/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ What is Microsoft Fabric? How to Build a Customer Segmentation Project ]]>
                </title>
                <description>
                    <![CDATA[ Microsoft Fabric is a data analytics tool that can help you streamline all your data needs and workflows, from data integration to analytics and engineering. In this guide, I'll explain what Microsoft Fabric is in more detail, how it works, and walk ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-is-microsoft-fabric/</link>
                <guid isPermaLink="false">66ba5bc6fa3ca700fcc9f230</guid>
                
                    <category>
                        <![CDATA[ data analysis ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Microsoft ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Benny Ifeanyi Iheagwara ]]>
                </dc:creator>
                <pubDate>Tue, 05 Mar 2024 01:00:06 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2024/03/Green-Orange-and-Brown-Collage-Math-Quiz-Presentation-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Microsoft Fabric is a data analytics tool that can help you streamline all your data needs and workflows, from data integration to analytics and engineering.</p>
<p>In this guide, I'll explain what Microsoft Fabric is in more detail, how it works, and walk you through building a project with it. If you already have an understanding of the platform, you can skip to the <a class="post-section-overview" href="#heading-how-to-get-started-with-microsoft-fabric-an-end-to-end-project-example-1">Microsoft Fabric project.</a></p>
<p>Here's what you'll learn about in this guide:</p>
<ul>
<li><a class="post-section-overview" href="#heading-what-is-microsoft-fabric">What is Microsoft Fabric?</a></li>
<li><a class="post-section-overview" href="#heading-why-you-should-learn-about-microsoft-fabric">Why you should learn about Microsoft Fabric</a></li>
<li><a class="post-section-overview" href="#heading-microsoft-fabric-architecture">Microsoft Fabric architecture and components</a></li>
<li><a class="post-section-overview" href="#heading-how-to-get-started-with-microsoft-fabric-an-end-to-end-project-example-1">How to get started by building a simple project</a></li>
<li><a class="post-section-overview" href="#heading-how-to-create-a-workspace-in-microsoft-fabric">How to create a workspace in Microsoft Fabric</a></li>
<li><a class="post-section-overview" href="#heading-how-to-create-a-lakehouse-in-microsoft-fabric">How to create a Lakehouse in Microsoft Fabric</a></li>
<li><a class="post-section-overview" href="#how-to-use-kaggle-data-in-microsoft-fabric">How to use Kaggle API data in Microsoft Fabric</a></li>
<li><a class="post-section-overview" href="#heading-how-to-use-the-data-wrangler-in-microsoft-fabric">How to use the Data Wrangler in Microsoft Fabric</a></li>
<li><a class="post-section-overview" href="#heading-how-to-perform-customer-segmentation-in-microsoft-fabric">How to perform customer segmentation in Microsoft Fabric</a></li>
<li><a class="post-section-overview" href="#heading-how-to-visualize-lakehouse-data-in-power-bi">How to visualize your lakehouse data in Power BI</a></li>
</ul>
<h2 id="heading-prerequisites">Prerequisites</h2>
<p>To follow along, you will need to have a Power BI license. You can get one for free to practice with using the <a target="_blank" href="https://learn.microsoft.com/en-us/office/developer-program/microsoft-365-developer-program">Microsoft 365 Developer Program</a>.</p>
<p>It would be also be helpful if you have knowledge of Microsoft Power BI and Python.</p>
<h2 id="heading-what-is-microsoft-fabric">What is Microsoft Fabric?</h2>
<p>Microsoft Fabric is an all-in-one analytics software-as-a-service (SaaS) platform for managing all your data analytics needs and workflows. Microsoft built this end-to-end platform to handle data-related data, from your data storage and migration to your real-time data analytics, data science projects, and data engineering workflow.</p>
<p>But how does it work?</p>
<p>This tool brings together various new and preexisting data tools and technologies—Power BI, OneLake, Azure Data Factory, Data Activator, Power Query, Apache Spark, Synapse Data Warehouse, Synapse Data Engineering, Synapse Data Science, Synapse Real-Time Analytics, Azure Machine Learning, and various connectors.</p>
<h2 id="heading-why-you-should-learn-about-microsoft-fabric">Why You Should Learn About Microsoft Fabric</h2>
<p>The best part of Microsoft Fabric is its simplicity in terms of functionality. Using various technologies together, you can do everything all in one place and focus more on what you can do with it and less on licensing, supporting systems, dependencies, and how to integrate with all these different platforms.</p>
<p>Another benefit of the platform is how it handles your data. This provides and allows you to maintain a single reliable source of information. With Microsoft Fabric’s OneLake, you can have a single, unified data storage. </p>
<p>Microsoft Fabric also has Azure’s OpenAI service integrated into its layer. This way, you can use AI (Co-pilot) to help you discover insights quickly.</p>
<p>Lastly, since it is an all-in-one platform, there is a cost-saving edge since there is no need to subscribe to multiple vendors.</p>
<h2 id="heading-microsoft-fabric-architecture">Microsoft Fabric Architecture</h2>
<p>Think of Microsoft Fabric as your data estate.</p>
<p>Just like every piece of real estate, Microsoft Fabric has various components in its architecture.</p>
<p>Let’s start by looking at the terminology you'll encounter and need to understand when using Microsoft Fabric's architecture:</p>
<h3 id="heading-experiences-and-workloads">Experiences and Workloads:</h3>
<p>These refer to the various capabilities of the platform. Every experience on the platform is tailored with a specific user in mind. </p>
<p>Below are some examples of the various experiences/workloads available. You'll notice that each of them are built for a specific purpose, task, and user. </p>
<ul>
<li><strong>Data factory</strong>: This application gives users over 150 connectors to Lakehouses, warehouses, cloud, and on-premise data sources and orchestrates data pipelines for data transformation. A Lakehouse here refers to a data platform for storing structured and unstructured data. You can also copy your on-prem data to the cloud and load it into OneLake through the Data Factory.</li>
<li><strong>Synapse data engineering</strong> is part of the data engineering experience on the platform. It has some cool features like Lakehouses, built data pipelines, and a Spark engine.</li>
<li><strong>Synapse data warehouse</strong> provides you with a unified and serverless SQL engine. Like your “traditional” data warehouse, you have the full capabilities of your transactional T-SQL features.</li>
<li><strong>Synapse real-time analytics</strong> allows you to stream data from Internet of Things (IoT) devices, telemetry, and logs. You can also use the workload here to analyze semi-structured data using its Kusto Query Language (KQL) capabilities, just like Azure Data Explorer.</li>
<li><strong>Synapse data science</strong> allows you to build, collaborate, train, and deploy fully scalable end-to-end Machine learning (ML) and AI models. You can also carry out your ML experiments in your notebooks and log your models using the Fabric Auto Logging feature. A must-mention tool in this experience is the Data Wrangler, a Fabric graphical user interface for data transformation. With this tool, you can clean your data by simplifying by clicking buttons while the tool automatically generates the Python code for you. It is similar to Power Query.</li>
<li><strong>Business Intelligence with Power BI</strong> helps you quickly turn your business data into insightful analytic reports and dashboards.</li>
<li><strong>Data Activator</strong> allows you to take care of your data observability and monitor workloads in a non-code/low-code way. This tells you when specific data points hit a threshold or match a pattern. You can also automate particular actions and kickoff Power Automates flows when specific conditions occur.</li>
<li><strong>Copilot in Fabric</strong> provides you with an Azure OpenAI Service. This means you can build reports, describe how you want to ingest your data, summarize, explore, and transform your data using the natural language capability of Azure OpenAI.</li>
</ul>
<h3 id="heading-workspaces">Workspaces</h3>
<p>Workspaces are similar to Power BI’s workspace. Here, you can share and collaborate with others and create reports, Warehouses, Lakehouses, dashboards, and notebooks.</p>
<h3 id="heading-capacity-unit-cu">Capacity Unit (CU)</h3>
<p>A CU is the ability of your resource to perform or produce an output.</p>
<p>Now we'll look at the various components of Microsoft Fabric's architecture.</p>
<h3 id="heading-onelake">OneLake</h3>
<p>OneLake is the central data repository for Microsoft Fabric that stores the data in Delta Lake format. Think of it as OneDrive for your data. This repository allows you to explore and find data assets in your organization.</p>
<p>One exciting thing is Shortcuts, which allows you to share or point to data in other locations in OneLake without moving or duplicating the data. This removes any case of data redundancy.</p>
<h3 id="heading-lakehouses-vs-warehouses">Lakehouses vs Warehouses</h3>
<p>While both "houses" hold data, some differences exist between Lakehouses and Warehouses in Microsoft Fabric.</p>
<p>For starters, a Lakehouse can store any data type, whether structured or unstructured. It is, however, stored in the <a target="_blank" href="https://learn.microsoft.com/en-us/fabric/get-started/delta-lake-interoperability">Delta format</a> by default. The Delta format is a storage layer that offers ACID (Atomicity, Consistency, Isolation, Durability) transactions. A Warehouse, on the other hand, is more suited for structured data.</p>
<p>Lakehouses also support Notebooks. So you can work with various languages from PySpark to SQL and R. Warehouses, on the other hand, only use SQL. </p>
<p>Keep in mind, though, that Fabric provides you with two types of Warehouses: SQL Endpoint and Synapse Data Warehouse.</p>
<ul>
<li>SQL Endpoint is auto-generated when a Lakehouse is created. This mean you can have a SQL-based experience and can query Lakehouse data using T-SQL language. </li>
<li>Synapse Data Warehouse is more of your traditional SQL engine. So you can use it to create and query data out of OneLake.</li>
</ul>
<h2 id="heading-how-to-get-started-with-microsoft-fabric-an-end-to-end-project-example">How to Get Started With Microsoft Fabric – An End-to-End Project Example</h2>
<p>To get a glimpse of how the Fabric platform works, we will build a little project.</p>
<p>We'll create a Lakehouse to store a mall dataset from Kaggle using the Kaggle API. We will also transform our data using Data Wrangler. Then, we will perform customer segmentation on our data based on the customer's annual income and spending score using the KMeans clustering algorithm. This will allow us to group the customers into various categories like low income earners that don't spend, average income earning customers, and high income customers who do not spend much.</p>
<p>Let's get started.</p>
<h3 id="heading-how-to-enable-fabric">How to Enable Fabric</h3>
<p>The first thing we need to do is to log into Microsoft Power BI. Here, we will activate Microsoft Fabric's capabilities for our workspace. </p>
<p>To do this, follow these steps:</p>
<p>First, navigate to the capacity settings in the <a target="_blank" href="https://app.powerbi.com/home?experience=power-bi">admin portal</a>. The admin portal is where administrators control and manage the various Power BI features.</p>
<p><img src="https://lh7-us.googleusercontent.com/M5O2_Xb5h76ydZyy_VteTWpz2i3Nc_FiQoyZUXA_js69sWZidtAfzKMZ2-mJBgam4GqD0FXfft4fVFkBu_sw1rUCMIypcZHgWh49FgXO5xk-Q0dduYL3_7FGb5wLKrHoBPrL6-GU9nN3bdFrpsQT5wQ" alt="Image" width="344" height="777" loading="lazy">
<em>Admin Portal of Microsoft fabric</em></p>
<p>Then under the <strong>Tenant setting</strong> tab, look for <strong>Microsoft fabric</strong> tab.</p>
<p>Under that tab, enable the <strong>Users can create fabric items</strong> toggle to on. Once you've done that, select <strong>Apply</strong>.</p>
<p><img src="https://lh7-us.googleusercontent.com/yLMF0s789eNL7RW94Ax0Ssm-i9g1_wyOC7fgyPbql2DjNOgrrFVIMIKBrZMKs5aZA-br3MBgOrHu7g26moAG2kLI8JUE6WdJiRmC0wUK8Ak4h2TbDzt-t54LeOkBCqz2cTzpFrBT7q5MnvdgidTdGvo" alt="Image" width="1169" height="759" loading="lazy"></p>
<p>Now your environment will be set up and the various services should appear at the bottom left of your screen.</p>
<p><img src="https://lh7-us.googleusercontent.com/PKdkrIktTXMGw2O04yYa8-lkAiaUq6dZ_C4OCX3q6y3qlOl2jWr8hblLUwiFoWMDWyUPtF_aPAkfYKhXvaCOTjiU3ZlZAjrU3BJuAYx2QJfdKMRkQWalSVK7aRE0cqXepKM_oRUjvlSmYqCtL7tz1CE" alt="Image" width="442" height="424" loading="lazy">
<em>Now you can see all the services like Power BI, Data Factory, and so on.</em></p>
<h3 id="heading-ia"> </h3>
<p>How to Create a Workspace in Microsoft Fabric</p>
<p>We'll use a <a target="_blank" href="https://www.kaggle.com/datasets/vjchoudhary7/customer-segmentation-tutorial-in-python">mall customer segmentation dataset from Kaggle</a> for this demo. This data, as mentioned in Kaggle, was created for the purpose of learning customer segmentation concepts.</p>
<p>Let's talk a little bit about the dataset. Imagine you have a supermarket mall and each customer has a membership card. You also have a data catalog of each customer with basic information like their customer ID, age, gender, annual income and spending score. </p>
<p>Now we want to segment these customer into various groups so we can improve customer loyalty, understand the customers better, and more effectively target our marketing strategy. </p>
<p>To achieve this, we will use the spending score assigned to each customer to define their purchasing power.</p>
<p>To get started, you'll need to create a new workspace. You can do that by following these steps:</p>
<ol>
<li>Head to your <a target="_blank" href="https://app.powerbi.com/home?experience=power-bi&amp;clientSideAuth=0">Microsoft Fabric home page</a>.</li>
<li>Select <strong>workspaces</strong> and click on <strong>New Workspace</strong>.</li>
<li>Give your workspace a name – I'm calling mine FabricMall.</li>
<li>Click on <strong>Advanced</strong> to view the dropdown options and select <strong>Trial</strong> if you are making use of your Fabric trial.</li>
<li>Click <strong>Apply</strong>.</li>
</ol>
<p><img src="https://lh7-us.googleusercontent.com/KvydyWSwyknsCNEHahc8aNME1z4nxVsLYUlMmAf73ru4O1XoYz5YnrBAHml_uYJPajix6svZ_S5VlJn7Nv4GNvfxXNyHChZXF9ZFjOCDNs-QY0cVlZT3abtkukhjEs2Ik9HFq7NTg47_gHrrbquuppI" alt="Image" width="1600" height="719" loading="lazy">
<em>How to create a workspace in Microsoft fabric</em></p>
<p>The next thing you want to do is to create a Lakehouse for your data.</p>
<h3 id="heading-how-to-create-a-lakehouse-in-microsoft-fabric">How to Create a Lakehouse in Microsoft Fabric</h3>
<p>To create a Lakehouse, first click on <strong>New</strong> within your workspace. This will display a list of various tasks you can do within your workspace.</p>
<p>Then select <strong>More options</strong> and select <strong>Lakehouse</strong>. </p>
<p><img src="https://lh7-us.googleusercontent.com/_zF0EcAg_tSGHvdpZt41huS5OR346NZ7AGTlWioXKIKuT5D5s7h_SIjLH-Yia13tpTGeobE3VsxE5zS4vOoya5S4qdqHRGJJcnAZSNnNn2s_C_F2J2tjIYDoK1BP_omkv3HaEGvSfd6v-XiiBlKv-qQ" alt="Image" width="673" height="861" loading="lazy">
<em>Selecting Lakehouse under "More options"</em></p>
<p>Then give it a name, like <strong>FabricMallLake</strong>, and click on <strong>Open notebook</strong>.</p>
<p>Click on <strong>New notebook</strong> and <strong>Open</strong>. You can rename your notebook at the top left corner of your notebook. The notebook is similar to the Jupyter notebook experience.</p>
<p><img src="https://lh7-us.googleusercontent.com/hquyOMggUOEdoyLE53_a1dJBmvguAZegZ2atVLxiA8p3wpXHgLvZOZA3uj2SzMDnDXxhAV5D0rJE2gwv2yGw1_u2AotOEAgcP0Sqh5YtKiX4WBdENgGc5fb30MEou1RA0ejSSEnyucYvhdqej5UXEXs" alt="Image" width="1600" height="691" loading="lazy">
<em>Notebooks in Fabric</em></p>
<h3 id="heading-how-to-use-kaggle-api-data-in-microsoft-fabric">How to Use Kaggle API Data in Microsoft Fabric</h3>
<p>Notebooks allow us to write, visualize, and execute code. Within the Notebook, we will use Python to perform a customer segmentation on our data in Microsoft Fabric.</p>
<p>First, import Kaggle using the command below:</p>
<pre><code class="lang-python">!pip install Kaggle
</code></pre>
<p>Next, you'll need to import your operating system and connect to the Kaggle API.</p>
<pre><code class="lang-python"><span class="hljs-keyword">import</span> os
os.chdir(<span class="hljs-string">'/lakehouse/default/Files'</span>)
os.environ[<span class="hljs-string">'KAGGLE_USERNAME'</span>] = <span class="hljs-string">'bennyifeanyi'</span>
os.environ[<span class="hljs-string">'KAGGLE_KEY'</span>] = <span class="hljs-string">'050019167fbe0027359cdb4b5eea50fe'</span>
<span class="hljs-keyword">from</span> kaggle.api.kaggle_api_extended <span class="hljs-keyword">import</span> KaggleApi
api = KaggleApi()
api.authenticate()
api.dataset_download_file(<span class="hljs-string">'vjchoudhary7/customer-segmentation-tutorial-in-python'</span>, <span class="hljs-string">'Mall_Customers.csv'</span>)
</code></pre>
<p>In the code above, <code>os.chdir('/lakehouse/default/Files')</code> represents our File API path. Also remember to replace the <a target="_blank" href="https://www.kaggle.com/settings">username and API Key</a> with your own.  </p>
<p>Now import Pandas. This will allow you to read your file.</p>
<pre><code class="lang-python"><span class="hljs-keyword">import</span> pandas <span class="hljs-keyword">as</span> pd
df = pd.read_csv(<span class="hljs-string">"/lakehouse/default/"</span> + <span class="hljs-string">"Files/Mall_Customers.csv"</span>)
df.head()
</code></pre>
<p>But before we start segmenting our customers, let's transform our data by exploring the data wrangler.</p>
<h3 id="heading-how-to-use-the-data-wrangler-in-microsoft-fabric">How to Use the Data Wrangler in Microsoft Fabric</h3>
<p>One of the most exciting things about this notebook is that you can perform data cleaning tasks without writing code using the Data Wrangler.</p>
<p>To do that, click on <strong>Data</strong> on the ribbon and select <strong>Transform DataFrame in Data Wrangler</strong>. </p>
<p>We will perform the following transformations:</p>
<ul>
<li>We will convert the gender column to lowercase.</li>
<li>We will also rename the columns with special characters like the dollar sign, brackets, and a dash. This is because I noticed Fabric finds it hard to handle these characters at the moment.</li>
</ul>
<p>To do these transformations, follow these steps:</p>
<p>Under the <strong>Operation</strong> tab, select <strong>Convert text to lowercase</strong>.</p>
<p>Pick the column – Gender in this example – and select <strong>Apply</strong>. This will convert your Gender column to lowercase and automatically generate the codes.</p>
<p><img src="https://lh7-us.googleusercontent.com/-QkNWJszDVHAMtm282FTLr-_NekndORMvaR45tqhxDIg7rMW7Rr2FfMTEOW2kb_ZlnmNxQ50MfWB4hma-lbMcNr6Du1BmFd-f7ehG-4-sSJbdhf7WmV0CrvCZGnE92w8qddCCyHaaxM6HAE_yvhYgDM" alt="Image" width="1600" height="755" loading="lazy">
<em>Data wrangler: Formatting text</em></p>
<p>Similarly, under the <strong>schema</strong> tab, select rename columns.</p>
<p>Rename <strong>Annual Income (k$)</strong> to <strong>AnnualIncome</strong>, and <strong>Spending Score (1-100)</strong> to <strong>SpendingScore</strong>.</p>
<p>Once you’re done with the transformation, click <strong>Add code to notebook</strong>.</p>
<p><img src="https://lh7-us.googleusercontent.com/vtvL7X_ll8Nh2mpc7bW01cqy-XvMeiy7whyrJtQdbc0QTz3VQ-qYV3-uywa4QVI2DpfvLPXudHy-a4bTFAOt0Fp2d0ac6lUVp7L0zT38m6ImNQrFTtKp8WtFPZaVjEjCNMrtSph7fhAZSw7o_DQvWe0" alt="Image" width="1501" height="807" loading="lazy">
<em>Data wrangler: Rename column</em></p>
<p>Back in the notebook, we can visualize our data using the code below:</p>
<pre><code class="lang-python">sparkdf = spark.createDataFrame(df_clean)
display(sparkdf)
</code></pre>
<p>Within the chart element created, select <strong>Customize chart</strong>. Pick the columns you want and select <strong>Apply</strong>.</p>
<p><img src="https://lh7-us.googleusercontent.com/WZoVr74bKT59da-YBwDishooHH1rqufkWA_jN-zr2eDK237rrKTXZybjZ-U5iWU7qnPOFyPnHKA0SkjIuC_ADk_X3Uh35sSAFMz254_FVKcc4IQGxBPQwNsP3Z_d-0uPHJxWxqJpoHdoJP_KOjQw6jo" alt="Image" width="1579" height="700" loading="lazy">
<em>Charts in Data Wrangler</em></p>
<p>Once that's done, we can save the data in the Lakehouse using this code below:</p>
<pre><code class="lang-python">sparkdf.write.format(<span class="hljs-string">"delta"</span>).mode(<span class="hljs-string">"overwrite"</span>).saveAsTable(<span class="hljs-string">"malldatadf"</span>)
</code></pre>
<p><img src="https://lh7-us.googleusercontent.com/boKGK5-xUaWccqNy76XjSXDd0Fdkrg2JOyqYiDTq51JOog-a_KMWsfLHTskC5iySI8nBuHjiWsDhj1ZVwLG5TxHbRciWTjBJIisKsvQJLsqEq4-UnFVfHBL1ngWMYMdZ5nheYw9pqwmApxaoL8WIMRE" alt="Image" width="1600" height="617" loading="lazy">
<em>Saving data in Lakehouse</em></p>
<h3 id="heading-how-to-perform-customer-segmentation-in-microsoft-fabric">How to Perform Customer Segmentation in Microsoft Fabric</h3>
<p>For our customer segmentation, we will use the KMeans clustering algorithm to segment the customers based on their annual income and spending score. </p>
<p>K-means clustering is an unsupervised machine learning algorithm. It groups similar data points in your data based on underlying observations, similarities, and input vectors. </p>
<p>We will do this by importing our libraries, applying our K-means by training the K-Means clustering model, and visualizing the clusters of customers based on their annual income and spending score. </p>
<p>We will also include and show the centroids of each cluster, providing insights into the distribution of customers in the dataset. </p>
<p>The centroids here refers to the center points of the clusters found by our algorithm. This is calculated as the average of all the data points in that cluster. When we visualize the clusters, the centroid will be represented with a distinct symbol or color.</p>
<p>Run this code to achieve this:</p>
<pre><code class="lang-python"><span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
<span class="hljs-keyword">import</span> seaborn <span class="hljs-keyword">as</span> sns
<span class="hljs-keyword">import</span> matplotlib.pyplot <span class="hljs-keyword">as</span> plt
<span class="hljs-keyword">from</span> sklearn.cluster <span class="hljs-keyword">import</span> KMeans
<span class="hljs-keyword">from</span> sklearn.preprocessing <span class="hljs-keyword">import</span> StandardScaler
<span class="hljs-keyword">from</span> sklearn.preprocessing <span class="hljs-keyword">import</span> MinMaxScaler
X = df_clean[[<span class="hljs-string">'AnnualIncome'</span>, <span class="hljs-string">'SpendingScore'</span>]]
<span class="hljs-comment"># Feature normalization</span>
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
kmeans = KMeans(n_clusters=<span class="hljs-number">5</span>, init=<span class="hljs-string">'k-means++'</span>, random_state=<span class="hljs-number">42</span>)
kmeans.fit(X_scaled)
plt.figure(figsize=(<span class="hljs-number">10</span>, <span class="hljs-number">8</span>))
<span class="hljs-keyword">for</span> cluster_label <span class="hljs-keyword">in</span> range(<span class="hljs-number">5</span>):  <span class="hljs-comment"># Loop through each cluster label</span>
cluster_points = X[kmeans.labels_ == cluster_label]
centroid = cluster_points.mean(axis=<span class="hljs-number">0</span>)  <span class="hljs-comment"># Calculate the centroid as the mean position of the data points</span>
plt.scatter(cluster_points[<span class="hljs-string">'AnnualIncome'</span>], cluster_points[<span class="hljs-string">'SpendingScore'</span>],
s=<span class="hljs-number">50</span>, label=<span class="hljs-string">f'Cluster <span class="hljs-subst">{cluster_label + <span class="hljs-number">1</span>}</span>'</span>)  <span class="hljs-comment"># Plot points for the current cluster</span>
plt.scatter(centroid[<span class="hljs-number">0</span>], centroid[<span class="hljs-number">1</span>], s=<span class="hljs-number">300</span>, c=<span class="hljs-string">'black'</span>, marker=<span class="hljs-string">'*'</span>, label=<span class="hljs-string">f'Centroid <span class="hljs-subst">{cluster_label + <span class="hljs-number">1</span>}</span>'</span>)  <span class="hljs-comment"># Plot the centroid</span>
plt.title(<span class="hljs-string">'Clusters of Customers'</span>)
plt.xlabel(<span class="hljs-string">'Annual Income (k$)'</span>)
plt.ylabel(<span class="hljs-string">'Spending Score (1-100)'</span>)
plt.legend()
plt.show()
</code></pre>
<p>Here's the output:</p>
<p><img src="https://lh7-us.googleusercontent.com/lsIdbv7j_QbsmChgxFgs-X0QQEguqGZS_Hsvrj1kB55hIUsuTt5kGP5denL28jszo_HCjTe9NB-NbYfS2rsXJgw1LnHH6c7Z7E0cJe1vdW5pe3s9o4F2AebF2l6MB3M_XHtEYIzuzGSmFGaPFYbfj4w" alt="Image" width="1600" height="661" loading="lazy">
<em>Performing Customer Segmentation in Microsoft Fabric</em></p>
<p>The result of our analysis shows that our customers can be grouped into 5 clusters:</p>
<ul>
<li>Cluster 1 (Purple) are low income earners with a low spending score.</li>
<li>Cluster 2 (Blue) are low income earners with a high spending score.</li>
<li>Cluster 3 (Red) are average income earning customers with significant spending scores.</li>
<li>Cluster 4 (Orange) are high income customers who do not spend much at the mall. They’re probably not satisfied with the services rendered.</li>
<li>Cluster 5 (Green) are high income customers with a high spending score.</li>
</ul>
<p>We can also save our prediction as a new dataset using this code:</p>
<pre><code class="lang-python"><span class="hljs-comment"># Create a new DataFrame to store the clustering results</span>
cluster_df = pd.DataFrame(data=X, columns=[<span class="hljs-string">'AnnualIncome'</span>, <span class="hljs-string">'SpendingScore'</span>])
cluster_df[<span class="hljs-string">'Cluster'</span>] = cluster_label
sparkclusterdf = spark.createDataFrame(cluster_df)
sparkclusterdf.write.format(<span class="hljs-string">"delta"</span>).mode(<span class="hljs-string">"overwrite"</span>).saveAsTable(<span class="hljs-string">"clusterdatadf"</span>)
</code></pre>
<p><img src="https://lh7-us.googleusercontent.com/vMJYBX_nbjwPdODAlVKfWp-KWvqRD6BW-pPg4XAZ8UVgSMkaI4-tDRQZqlA38Eg5iVpvP-f_cUI9vXL6dxmUYJl-kJ_t46lQfsXytQGGAW1iHSGad8x7KwEqxDBeP2effQ-LME1PX5qE3-7NBUoa9Yg" alt="Image" width="1600" height="647" loading="lazy">
<em>Customer segementation prediction</em></p>
<p>Want to take a look at the notebook? You can download it from <a target="_blank" href="https://github.com/Bennykillua/Project/tree/main/CustomerSegmentationMicrosoftFabric">my GitHub</a>.</p>
<h3 id="heading-how-to-visualize-lakehouse-data-in-power-bi">How to Visualize Lakehouse Data in Power BI</h3>
<p>Now we can decide to visualize our data on a dashboard within Fabric.</p>
<p>Head back to the FabricMall workspace and select the <strong>semantic model type</strong> of the FabricMallLake Lakehouse.</p>
<p><img src="https://lh7-us.googleusercontent.com/YO0SWvhNJEdz2o3a85rhOf8CHorcX50o_Fu3sqJWdGP-P8kO8t1CD194a7JB9Tx3LxyFjMvjE0ek9CrRBSMKyXGy2vrx0hPQ9BZofrlI9BRw3o4nqDCegmZ1GCyi2pDMk4mfKuCvFycUW6f0kwjYnxQ" alt="Image" width="1301" height="640" loading="lazy">
<em>semantic model type of the FabricMallLake LakeHouse</em></p>
<p>Then select <strong>Manage default semantic model</strong>.</p>
<p><img src="https://lh7-us.googleusercontent.com/j5k-aWOHKXMKrkfygcD7HBIUDONorZcnpbH0j2uNbiL1rLZ8sdhOIscIKnTLZXwFBGEDNp30v3oYi0vPsG-t_SawMcVcp1kd7PSI81iM-ZOm1IGn72KFs5hDPmFbJ_UAF4Cr2wiEphaM93EWgiVfXug" alt="Image" width="1600" height="650" loading="lazy">
<em>Manage default semantic model In Microsoft Fabric</em></p>
<p>Pick your dataset, click <strong>Confirm</strong>, and then select <strong>New Report</strong>. </p>
<p>Let's visualize the average age in our data. To do this, click on the card visual and drag the age into this card. This will automatically create a visual showing the average age in your dataset. </p>
<p><img src="https://lh7-us.googleusercontent.com/eh28PLD0HCw2m2fWIbVhIrL78TLRP0hqF5aSDbEcE6_hzFaZaWA9c_AX5_u_w6yG49ovcvBVWY_Og4nQYqDnUCeIEe73o6LAgyrH0pLv0Gy1eMxxmhrV2KbmIDPuQhgPsimL_Drnxkq6wlE-OrG0CFA" alt="Image" width="1600" height="671" loading="lazy">
<em>Power BI service in Microsoft Fabric</em></p>
<p>Just like in <a target="_blank" href="https://www.freecodecamp.org/news/teach-yourself-data-analytics-in-30-days/#:~:text=Enterprise%20strength%20tools%20like%20Tableau%20Splunk%2C%20or%20Microsoft's%20Power%20BI&amp;text=You%20can%20download%20Jupiter%20to%20your%20PC%20or%20a%20private%20server%20and%20access%20the">Power BI Desktop</a>, you can create your measure, build your report, and publish your dashboard. You can learn more about how to create visuals in Power BI using this free <a target="_blank" href="https://www.youtube.com/watch?v=PSNXoAs2FtQ">freeCodeCamp YouTube data analysis video</a>.</p>
<p>Alternatively, you can open Power BI Desktop, and connect to your Lakehouses from Onelake data hub.</p>
<p><img src="https://lh7-us.googleusercontent.com/Na-xm9ThvGM6rkljbdDHD_ZUzekJ88mzCRQSoKOW7bCNfgmB_dkusJjoOrBfyIam-Smnvm_2p08G-25MVx_IsJpvUxnCYZab4NlKCCystqkn7kdPN56QLxvJ0ikCLmca4w4Y828dk8lUE2tqakpDWr4" alt="Image" width="1536" height="992" loading="lazy">
<em>Connect to your Lakehouse in Power BI</em></p>
<h2 id="heading-where-can-i-learn-more-about-microsoft-fabric">Where Can I Learn More about Microsoft Fabric?</h2>
<p>Though Microsoft Fabric is a pretty new data platform, I hope you can tell that this tool will help you ease the way you and your team consume, analyze, and get insight from your data.</p>
<p>To learn more you can start with the <a target="_blank" href="https://www.microsoft.com/en-us/microsoft-fabric/getting-started">fabric official documentation</a> or any helpful YouTube tutorial like <a target="_blank" href="https://www.youtube.com/playlist?list=PLUeJI2NOafNvaNor3qUHw1gyFuz_K1Rtt">Francis’s Fabric course.</a> I would also advise you to start with freeCodeCamp's Fabric publication tags if you want a compilation of resources.</p>
<p>Lastly, if you’re new to data analysis, start your journey today with <a target="_blank" href="https://www.youtube.com/watch?v=PSNXoAs2FtQ">freeCodeCamp’s Data Analyst Bootcamp for Beginners on YouTube</a>. It covers everything from SQL, Tableau, Power BI, and Python to Excel, Pandas, and real-life projects building.  </p>
<p>If you enjoyed reading this article and/or have any questions and want to connect, you can find me on <a target="_blank" href="https://www.linkedin.com/in/ifeanyi-iheagwara/">LinkedIn</a>, <a target="_blank" href="https://twitter.com/Bennykillua">Twitter</a> and do check out my articles on <a target="_blank" href="https://www.freecodecamp.org/news/author/benny/">freeCodeCamp</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Become a Microsoft Learn Student Ambassador ]]>
                </title>
                <description>
                    <![CDATA[ The Microsoft Learn Student Ambassadors program is a student-focused program designed to empower students to become advocates and leaders in the tech ecosystem.  Microsoft Learn Student Ambassadors are student leaders who collaborate with Microsoft t... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-become-a-microsoft-learn-student-ambassador/</link>
                <guid isPermaLink="false">66ba2dc92045fa5eb7a55321</guid>
                
                    <category>
                        <![CDATA[ Microsoft ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Students ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Salim Oyinlola ]]>
                </dc:creator>
                <pubDate>Mon, 14 Aug 2023 16:11:33 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/08/asdfghjkl-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>The <a target="_blank" href="https://mvp.microsoft.com/studentambassadors">Microsoft Learn Student Ambassadors</a> program is a student-focused program designed to empower students to become advocates and leaders in the tech ecosystem. </p>
<p>Microsoft Learn Student Ambassadors are student leaders who collaborate with Microsoft to help fellow students learn about technology and engage with various Microsoft technologies and services.</p>
<p>It is important to note that Microsoft Learn Student Ambassadors <strong>are not employees of Microsoft</strong>. While they work closely with Microsoft and have access to certain resources, training, and support from the company, they do not receive regular employee compensation. </p>
<p>Instead, student ambassadors often receive benefits such as networking opportunities, skill development, and recognition within the tech community. </p>
<h2 id="heading-responsibilities-of-microsoft-learn-student-ambassadors">Responsibilities of Microsoft Learn Student Ambassadors</h2>
<p>At the very high level, the responsibilities of student ambassadors include encouraging their peers to use <a target="_blank" href="https://learn.microsoft.com/en-us/">Microsoft Learn</a>, Microsoft's educational platform. It offers free resources, tutorials, and courses on various Microsoft technologies in a bid to help students build skills that open doors. </p>
<p>Student Ambassadors also represent Microsoft technologies on their campuses. In this capacity, Ambassadors engage with faculty and students to showcase the benefits of these tools for education and innovation. </p>
<p>Student Ambassadors are required to complete a variety of pre-determined activities in order to advance through the well-defined program milestones. As you complete these program milestones you can unlock additional program benefits. </p>
<p>You go through these milestones in the following order: new to alpha, alpha to beta, and beta to gold. With each milestone achievement, program certificates are updated. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/image-117.png" alt="Image" width="600" height="400" loading="lazy">
<em>The different milestones</em></p>
<p>To attain the Alpha milestone, new student ambassadors are required to complete a learn path on Microsoft Learn within four months of joining the program. </p>
<p>To reach the Beta milestone, first you need to complete the program's technical onboarding as a alpha student ambassador. Then you must host and report an approved event or actively participate in a Student Ambassadors project within twelve months of joining the program. </p>
<p>Finally, to achieve the highest milestone in the program (Gold), you are required to go above and beyond program expectations by demonstrating significant reach and impact. </p>
<h2 id="heading-how-to-apply-to-be-a-microsoft-learn-student-ambassador">How to Apply to Be a Microsoft Learn Student Ambassador</h2>
<p>Before applying, it is important to note the following: </p>
<ul>
<li>The minimum age requirement for applicants is <strong>16 years</strong>.</li>
<li>Full-time enrollment in an accredited academic institution (such as a College or University) is <strong>required</strong> for applicants.</li>
<li>Applications are restricted to individual persons and not open to corporate entities.</li>
<li>Individuals who are Microsoft employees or current contractors are ineligible to apply. </li>
</ul>
<p>If you meet these qualifications, you can apply to become a Student Ambassador.</p>
<p>The most important thing to know about the application process for the Microsoft Learn Student Ambassador program is that the application is open all year long. But applications are only reviewed (and applicants are gotten back to) quarterly – in January, April, July and October. </p>
<p>You can find the application form <a target="_blank" href="https://mvp.microsoft.com/studentambassadors">here</a>. The application consists of four major parts – privacy and terms, personal information, academic institution, and application questions. Let's go through each one now.</p>
<h3 id="heading-privacy-and-terms">Privacy and terms</h3>
<p>In the privacy and terms section, you are required to agree to the <a target="_blank" href="https://privacy.microsoft.com/en-US/privacystatement">Microsoft Privacy Statement</a> and confirm your eligibility for the program. </p>
<p>By completing this section, you accept that as you submit your application, your information will be shared with the Microsoft program lead who manages Microsoft Learn Student Ambassadors selection in your region. </p>
<p>Also in this section, you are informed that if your application is not accepted, although all the information you provided will be removed from their servers within twelve months of the application submission date. You can request removal of your application data at any time without constraints. </p>
<h3 id="heading-personal-information">Personal information</h3>
<p>In the personal information section, the required prompts include your name, contact email address, date of birth, gender, pronoun and country or region. </p>
<p>You can also enter your preferred programming language in this section (but this particular question is not required). </p>
<p>In this section, you can also add the social media profiles you use for community leadership as an allusion to your online influence and network. </p>
<h3 id="heading-academic-institution">Academic institution</h3>
<p>In the academic institution section, as the name implies, the prompts are aimed at getting the country and region of your academic institution, its name, your degree program and your expected graduation date. </p>
<p>The available options include Computer Science, Electrical Engineering, Software Engineering, Systems Engineering, Engineering - Other, Information Systems, Cyber Security, Business and Others). You'll also be asked to list your degree level (the selections accessible are Bachelor, Master and PhD).</p>
<h3 id="heading-application-questions">Application questions</h3>
<p>In the application questions section, as an applicant, you are required to answer the following three questions. </p>
<ul>
<li><em>Tell us about one specific technical skill you have learned, and how you were guided to learning it. How would you use that experience to be a better Student Ambassador? (Guide)</em></li>
<li><em>Tell us about a specific time you welcomed a new person into one of your communities. How would you use that experience to be a better Student Ambassador? (Welcome)</em></li>
<li><em>Tell us about a specific event you have planned that connected diverse audiences together. How would you use that experience to be a better Student Ambassador? (Connect)</em></li>
</ul>
<p>Now, here's the catch. Whilst every applicant gets to answer all three questions, each applicant also gets the opportunity to answer any two of their choice with written responses and one as a video response. I think this is an attempt to get applicants to demonstrate their public speaking skills. </p>
<p>The video must be <strong>under two minutes</strong> and should be recorded in a quiet space without background noise. The written responses, on the other hand, must be a <strong>minimum of 100 character</strong>s and <strong>maximum of 2000 characters</strong> each. </p>
<p>Also, the video response's link has to be publicly accessible to anyone with the link. If an applicant chooses to record their video in any language that is not English, they must include English subtitles. </p>
<p>There's an option to pick from a list of technologies and highlight which ones interest you. </p>
<p>Finally, in <strong>more than 100 characters</strong> and <strong>less than 1000 characters</strong>, you can share the link to your Microsoft Learn profile (if you have one) and provide the reviewing team with details about your engagements within your community, both in online and on-campus settings. </p>
<p>In that space, you can also let them know about any organizations you are part of, particularly if you hold leadership roles. Feel free to share any additional information you consider important in this section. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/image-111.png" alt="Image" width="600" height="400" loading="lazy">
<em>The list of technologies to choose from</em></p>
<p>The application process/essays may seem quite lengthy. But the good thing about it is that the essay portal automatically saves your application as you go, so you can leave at any time and come back later to continue your application. </p>
<h2 id="heading-benefits-of-being-a-microsoft-learn-student-ambassador">Benefits of Being a Microsoft Learn Student Ambassador</h2>
<p>The benefits of being a Microsoft Learn Student Ambassador are many. First, you benefit from comprehensive technical and leadership training and gain access to Microsoft's extensive array of learning materials. You also get to connect with a worldwide community of students who share your enthusiasm for building the future you envision. </p>
<p>In my opinion, the biggest thing student ambassadors stand to gain is the community they become a part of alongside fellow ambassadors. This community offers an extensive network of peers, mentors, and professionals who are all invested in the same mission. It becomes a platform for collaboration, knowledge-sharing, and personal growth. </p>
<p>Here are a few other benefits that are accessible as you progress through the milestones: </p>
<h3 id="heading-benefits-of-the-new-milestone">Benefits of the New Milestone</h3>
<p>Microsoft 365: This is a product family of productivity software, collaboration and cloud-based services owned by Microsoft. As a student ambassador in the new milestone, you get Microsoft 365 subscriptions. </p>
<p>The Microsoft 365 subscriptions include full Office desktop apps such as Word, Excel, Outlook, PowerPoint, Access and Publisher for Windows PCs, as well as access to additional OneNote features. </p>
<h3 id="heading-benefits-of-the-alpha-milestone">Benefits of the Alpha Milestone</h3>
<p>In addition to the benefits that comes with the new milestone, student ambassadors get access to <a target="_blank" href="https://www.microsoft.com/en-us/d/visual-studio-enterprise-subscription/dg7gmgf0dst4?activetab=pivot:overviewtab">Visual Studio Enterprise</a>. This annual subscription provides Student Ambassadors with $150 monthly Azure credit, license keys to various Microsoft Products, and many other benefits. </p>
<p>In addition, in line with the program's dedication to the growth of student ambassadors, student ambassadors in the Alpha milestone and beyond get free access to LinkedIn Learning.</p>
<h3 id="heading-benefits-of-the-beta-milestone">Benefits of the Beta Milestone</h3>
<p>In addition to the existing benefits, upon reaching this milestone, student ambassadors get a Beta swag box. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/image-115.png" alt="Image" width="600" height="400" loading="lazy">
<em>The Microsoft Learn Student Ambassador Beta Swag Box</em></p>
<h3 id="heading-benefits-of-the-gold-milestone">Benefits of the Gold Milestone</h3>
<p>On top of the previous benefits, student ambassadors who achieve this milestone get a Gold swag box, more program leadership opportunities, consideration for special events and activities, and consideration for MVP mentorship and nomination. This is the highest milestone in the program. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/image-116.png" alt="Image" width="600" height="400" loading="lazy">
<em>The Microsoft Learn Student Ambassador Gold Swag Box</em></p>
<h3 id="heading-windows-insider-for-student-ambassadorshttpswwwmicrosoftcomen-uswindowsinsiderstudentambassadors"><a target="_blank" href="https://www.microsoft.com/en-us/windowsinsider/studentambassadors">Windows Insider for Student Ambassadors</a></h3>
<p>Finally, one last benefit I want to touch on is the Windows Insider Program for Student Ambassadors.</p>
<p>Thanks to the Windows Insider Program's collaboration with Microsoft Learn Student Ambassadors, when Student Ambassadors become part of the Windows Insider Program, they will get a chance to preview upcoming Windows features and offer input to influence the direction Windows takes in the future.</p>
<h2 id="heading-wrapping-up">Wrapping Up</h2>
<p>Once you graduate from the Microsoft Learn Student Ambassador program at the Gold milestone, you will be eligible for nomination to the Windows Insider Most Valuable Professional (MVP) program. </p>
<p>This prestigious status comes with exclusive interaction opportunities with the Windows engineering team, special event invitations, and complimentary subscriptions to tools such as Visual Studio Enterprise, Office 365, and LinkedIn Premium. You you will receive a personalized award kit to commemorate this achievement.</p>
<p>I hope this guide helps you apply for the program and know what to expect! Thanks for reading.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Microsoft Power Platform Fundamentals Certification (PL-900) – Pass the Exam With This Free 4-Hour Course ]]>
                </title>
                <description>
                    <![CDATA[ Certifications like the Microsoft Power Platform Fundamentals can help you advance in your career. You can learn everything you need to know to earn the Microsoft Power Platform Fundamentals Certification by completing this free 4-hour course that we... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/microsoft-power-platform-fundamentals-certification-pl-900/</link>
                <guid isPermaLink="false">66b205c4eea9870582e16cba</guid>
                
                    <category>
                        <![CDATA[ Microsoft ]]>
                    </category>
                
                    <category>
                        <![CDATA[ youtube ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Beau Carnes ]]>
                </dc:creator>
                <pubDate>Tue, 13 Jun 2023 14:28:52 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/06/powerfund.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Certifications like the Microsoft Power Platform Fundamentals can help you advance in your career.</p>
<p>You can learn everything you need to know to earn the Microsoft Power Platform Fundamentals Certification by completing this free 4-hour course that we just posted on the freeCodeCamp.org YouTube channel.</p>
<p>Andrew Brown created this course. He is the founder of ExamPro and has created a ton of popular courses about how to prepare for different technical certifications. He has helped thousands of people pass certifications.</p>
<h2 id="heading-what-is-the-microsoft-power-platform-fundamentals-certification"><strong>What is</strong> the Microsoft Power Platform <strong>Fundamentals</strong> Certification<strong>?</strong></h2>
<p>The Microsoft Power Platform Fundamentals certification is a credential that certifies your understanding of the core capabilities of the Microsoft Power Platform. It's aimed at developers beginning to work with Microsoft's suite of business analytics tools, and it verifies their ability to utilize these tools to drive business improvements.</p>
<p>The certification covers the following primary areas:</p>
<p><strong>Understanding the business value of Power Platform</strong>: This involves understanding the value of Power Platform services, and their role in the Microsoft 365 ecosystem. It covers Power Apps, Power Automate, Power BI, and Power Virtual Agents.</p>
<p><strong>Understanding the core components of Power Platform</strong>: This includes understanding the function and capabilities of Power BI, Power Apps, Power Automate, and Power Virtual Agents. Also understanding Power Platform's extensibility and integration with other services and tools.</p>
<p><strong>Demonstrating the business value of Power BI</strong>: Candidates need to be able to demonstrate how Power BI can bring data to life, how Power BI can provide data insights, and how Power BI can help organizations make informed business decisions.</p>
<p><strong>Demonstrating the business value of Power Apps</strong>: This involves understanding how Power Apps can simplify app development, and how it can help organizations create custom solutions.</p>
<p><strong>Demonstrating the business value of Power Automate</strong>: Candidates must demonstrate how Power Automate can boost productivity, reduce manual tasks, and automate business processes.</p>
<p><strong>Demonstrating the business value of Power Virtual Agents</strong>: This includes understanding how Power Virtual Agents can enhance customer service, streamline common actions, and improve overall customer engagement.</p>
<h2 id="heading-who-is-the-microsoft-365-fundamentals-certification-for">Who is the Microsoft 365 Fundamentals Certification for?</h2>
<p>The Microsoft Power Platform Fundamentals certification is intended for people looking to demonstrate their knowledge and skills in using Microsoft Power Platform. This includes:</p>
<p><strong>Beginners in IT</strong>: The certification is designed to be an entry-level credential, suitable for those with little to no prior experience in IT or Microsoft Power Platform. This makes it an ideal starting point if you're just beginning your IT career.</p>
<p><strong>Non-Technical Professionals</strong>: This includes business analysts, data enthusiasts, and others who need to work with data, improve productivity, automate business processes, or create custom business applications but don't necessarily have a technical or programming background. The Power Platform offers a low-code or no-code approach that allows non-technical users to work effectively.</p>
<p><strong>Technical Professionals</strong>: Even if you're a developer, data professional, or IT professional, this certification can be valuable. It provides recognition for your ability to work with the Power Platform and can help broaden your skillset, making you more valuable to your organization.</p>
<p><strong>Students or Job Seekers</strong>: For those looking to break into the field of data analysis, business analysis, or IT in general, this certification can be a valuable addition to your resume, making you more attractive to potential employers.</p>
<p>Remember, although this is a fundamental certification, having a basic understanding of data processing and business value along with familiarity with the internet, cloud computing, and software as a service (SaaS) environments can be beneficial.</p>
<h2 id="heading-what-are-the-topics-covered-in-this-course">What are the topics covered in this course?</h2>
<p>This video course covers all the topics you need to know to get certified. Here is what is covered:</p>
<h3 id="heading-introduction">☁️ Introduction</h3>
<ul>
<li>Exam Breakdown</li>
<li>Practice Exam Sample</li>
</ul>
<h3 id="heading-business-value-of-microsoft-power-platform-services">☁️ Business value of Microsoft Power Platform services</h3>
<ul>
<li>What is Power Platform</li>
<li>Power Platform Features</li>
<li>Business value of Power Platform</li>
</ul>
<h3 id="heading-microsoft-power-platform-value-in-extending-business-solutions">☁️ Microsoft Power Platform value in extending business solutions</h3>
<ul>
<li>Power Platform apps with Dynamics 365 apps</li>
<li>Microsoft Power Platform with Microsoft 365 apps and services</li>
<li>How Power Platform apps work together</li>
<li>Power Platform solutions with Microsoft Teams</li>
<li>Power Platform using Microsoft Azure services</li>
</ul>
<h3 id="heading-microsoft-power-platform-administration-and-security">☁️ Microsoft Power Platform administration and security</h3>
<ul>
<li>Power Platform Security Model</li>
<li>Environments in Power Platform</li>
<li>Environments Permissions</li>
<li>Power Platform admin center</li>
<li>Microsoft 365 admin center</li>
</ul>
<h3 id="heading-microsoft-dataverse">☁️ Microsoft Dataverse</h3>
<ul>
<li>Overview of Dataverse</li>
<li>Traditional Databases vs Microsoft Dataverse</li>
<li>Tables and columns in Dataverse</li>
<li>Relationships</li>
<li>Environments in Dataverse</li>
<li>Business Rules</li>
<li>Dataflows in Dataverse</li>
<li>Dataverse Connectors</li>
<li>Standard and Premium Connectors</li>
<li>Custom Connectors</li>
<li>Triggers and Actions</li>
</ul>
<h3 id="heading-capabilities-of-power-bi">☁️ Capabilities of Power BI</h3>
<ul>
<li>Power BI</li>
<li>Parts of Power BI</li>
<li>Power BI Workspace</li>
<li>Datasets</li>
<li>Reports</li>
<li>Dashboards</li>
<li>Dashboards vs Reports</li>
<li>Template Apps</li>
</ul>
<h3 id="heading-connect-to-and-consume-data">☁️ Connect to and consume data</h3>
<ul>
<li>Data modeling and visualization</li>
<li>Types of visualization in Power BI</li>
<li>Custom Visuals</li>
<li>Filter data with Power BI and Slicers</li>
<li>Buttons in Power BI</li>
<li>Power Query Editor</li>
<li>Aggregate</li>
<li>Power BI Security and Administration</li>
</ul>
<h3 id="heading-build-a-basic-dashboard-using-power-bi">☁️ Build a basic dashboard using Power BI</h3>
<ul>
<li>Create an Account</li>
<li>Power BI Sample Report</li>
<li>Create a Report and Dashboard</li>
</ul>
<h3 id="heading-capabilities-of-power-apps">☁️ Capabilities of Power Apps</h3>
<ul>
<li>Power Apps</li>
<li>Power Apps Portals</li>
<li>AI Builder</li>
<li>AI Builder in Power Apps</li>
<li>Functions in Power Apps</li>
</ul>
<h3 id="heading-canvas-apps">☁️ Canvas apps</h3>
<ul>
<li>Canvas Apps</li>
<li>Canvas Apps Basic Elements</li>
<li>Canvas Apps Demo</li>
</ul>
<h3 id="heading-model-driven-apps">☁️ Model driven apps</h3>
<ul>
<li>Model driven apps</li>
<li>Model driven apps and canvas apps differences</li>
<li>Model driven app design phase</li>
<li>Building blocks on model driven apps</li>
<li>Business Logic</li>
<li>Dashboards in Power Apps</li>
<li>Model Driven App Template</li>
<li>Create a Model Driven App</li>
</ul>
<h3 id="heading-capabilities-of-power-automate">☁️ Capabilities of Power Automate</h3>
<ul>
<li>Power Automate</li>
<li>Types of flows in Power Automate</li>
<li>Cloud flow templates</li>
<li>Actions and Triggers</li>
<li>Loops</li>
<li>Switch</li>
<li>Conditions</li>
<li>Expressions</li>
<li>Approvals</li>
<li>Use cases for Power Automate</li>
<li>Power Automate Apps</li>
<li>Actions for Power Automate desktop flow</li>
<li>Document ProcessingAI Builder in Power Automate</li>
</ul>
<h3 id="heading-build-a-basic-cloud-flow">☁️ Build a basic cloud flow</h3>
<ul>
<li>Create an automated cloud flow</li>
</ul>
<h3 id="heading-complementary-microsoft-power-platform-solutions">☁️ Complementary Microsoft Power Platform solutions</h3>
<ul>
<li>Power Virtual Agents</li>
<li>Power Virtual Agents Feature</li>
<li>Topics</li>
<li>Entities and Actions</li>
<li>Publishing</li>
<li>Add chatbot to Teams</li>
<li>Create a Topic</li>
<li>Power Pages</li>
<li>Power Pages capabilities</li>
<li>Power Pages templates</li>
<li>Integration with other Power Platform component</li>
</ul>
<p>Head on over <a target="_blank" href="https://youtu.be/ZTPcRWK0ytE">to freeCodeCamp's YouTube channel</a> to start working through the full 4 hour course.</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/ZTPcRWK0ytE" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Find a Meeting Time and Schedule a Meeting on Microsoft 365 ]]>
                </title>
                <description>
                    <![CDATA[ By Waldek Mastykarz A common functionality that many work apps have is letting users schedule a meeting with others in their organization. Here's how to do it on Microsoft 365. Work Apps Need Work Data If your organization uses Microsoft 365, it shou... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/find-meeting-time-schedule-meeting-microsoft-365/</link>
                <guid isPermaLink="false">66d4617337bd2215d1e245fc</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Microsoft ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 26 Oct 2022 21:34:19 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/10/Screenshot-2022-10-25-at-13.03.43.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Waldek Mastykarz</p>
<p>A common functionality that many work apps have is letting users schedule a meeting with others in their organization. Here's how to do it on Microsoft 365.</p>
<h2 id="heading-work-apps-need-work-data">Work Apps Need Work Data</h2>
<p>If your organization uses Microsoft 365, it should consider integrating it with apps that it uses for work. </p>
<p>Bringing data and insights from Microsoft 365 into the context of work apps helps users stay in the flow of their work, and have access to all relevant information in one place.</p>
<p>Say, your organization has an app that it uses for managing projects. Along with the information about the project itself, users of the app will also need information about the people on the project to get updates or schedule meetings. </p>
<p>Information about people in your organization and their work is stored on Microsoft 365 and you can bring it into the context of your app.</p>
<p>When you build apps for work, you can use <a target="_blank" href="https://graph.microsoft.com/">Microsoft Graph</a> - the API for Microsoft 365, to interact with Microsoft 365 and retrieve the data that's stored there.</p>
<h2 id="heading-find-a-meeting-time-and-schedule-a-meeting-with-attendees-on-microsoft-365">Find a Meeting Time and Schedule a Meeting with Attendees on Microsoft 365</h2>
<p>Many work scenarios require the ability to schedule a meeting with others in your organization. For organizations that use Microsoft 365, this functionality is readily available in Microsoft Outlook.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/10/image-173.png" alt="Image" width="600" height="400" loading="lazy">
<em>Scheduling a meeting in Microsoft Outlook on the web</em></p>
<p>But what if you don't want your users to leave your app, go to Outlook, and manually schedule the meeting with the right people?</p>
<p>Using Microsoft Graph you can let users <strong>select attendees, find a suitable meeting time, and schedule a meeting directly from your app</strong>. Let me show you how.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/10/image-176.png" alt="Image" width="600" height="400" loading="lazy">
<em>Custom web app allowing users to find a meeting time and schedule a meeting</em></p>
<p>A sample app built using code fragments in this article is available on <a target="_blank" href="https://github.com/waldekmastykarz/mgt-spa-findmeetingtimes">GitHub</a>. To run it, you'll need <a target="_blank" href="https://nodejs.org/">Node.js LTS</a> and a Microsoft 365 developer tenant which you can get for free from the <a target="_blank" href="https://developer.microsoft.com/microsoft-365/dev-program">Microsoft 365 developer program</a>.</p>
<h3 id="heading-select-meeting-attendees">Select meeting attendees</h3>
<p>The first step is to let users select with whom they'd like to meet.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/10/image-179.png" alt="Image" width="600" height="400" loading="lazy">
<em>Web app with a few people selected to find available meeting times</em></p>
<p>The easiest way to do this is by using the <a target="_blank" href="https://learn.microsoft.com/graph/toolkit/components/people-picker">People picker</a> component from Microsoft Graph Toolkit.</p>
<blockquote>
<p><a target="_blank" href="https://aka.ms/mgt-docs">Microsoft Graph Toolkit</a> is a set of web components connected to Microsoft Graph, that work in any web framework.</p>
</blockquote>
<p>To add the people picker, you'd add to your app:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">mgt-people-picker</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">mgt-people-picker</span>&gt;</span>
</code></pre>
<p>People picker automatically retrieves information about people in your organization from Microsoft 365 and filters the list as you type. Each person shows up with their name and picture to help users select the right person.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/10/select-people-graph-mgt.gif" alt="Image" width="600" height="400" loading="lazy">
<em>Selecting people from Microsoft 365 in a custom web app</em></p>
<p>Combining it with the <a target="_blank" href="https://learn.microsoft.com/graph/toolkit/components/login">Login component</a> from Microsoft Graph Toolkit, you let users sign in to your app with their Microsoft 365 account and get access to the Microsoft Graph API.</p>
<h3 id="heading-find-meeting-times">Find meeting times</h3>
<p>The next step is to find available meeting times for the selected attendees including the current user.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/10/image-178.png" alt="Image" width="600" height="400" loading="lazy">
<em>Available meeting times for the selected people from Microsoft 365</em></p>
<p>Rather than having to download calendars for all users and manually look for a suitable meeting slot, you can call the <a target="_blank" href="https://learn.microsoft.com/graph/api/user-findmeetingtimes?view=graph-rest-1.0&amp;tabs=javascript"><code>findMeetingTimes</code> Microsoft Graph API</a>, passing as arguments the array of the attendees and the meeting duration.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> meetingTimes = <span class="hljs-keyword">await</span> graphClient
  .api(<span class="hljs-string">'/me/findMeetingTimes'</span>)
  .post({
    <span class="hljs-attr">attendees</span>: <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'mgt-people-picker'</span>).selectedPeople.map(<span class="hljs-function"><span class="hljs-params">p</span> =&gt;</span> {
      <span class="hljs-keyword">return</span> {
        <span class="hljs-attr">emailAddress</span>: {
          <span class="hljs-attr">address</span>: p.userPrincipalName,
          <span class="hljs-attr">name</span>: p.displayName
        },
        <span class="hljs-attr">type</span>: <span class="hljs-string">'required'</span>
      };
    }),
    <span class="hljs-attr">maxCandidates</span>: <span class="hljs-number">3</span>,
    <span class="hljs-attr">meetingDuration</span>: <span class="hljs-string">`PT<span class="hljs-subst">${<span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'#duration'</span>).value}</span>`</span>,
    <span class="hljs-attr">returnSuggestionReasons</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">minimumAttendeePercentage</span>: <span class="hljs-number">100</span>
  });
availableMeetingTimes = meetingTimes.meetingTimeSuggestions;
</code></pre>
<p>You can get the list of attendees from the People picker which exposes the list of people selected by the user. </p>
<p>When requesting available meeting times, you can pass many additional options, such as how many suggestions you'd like to get (<code>maxCandidates</code>), how many attendees have to be able to attend the meeting at minimum (<code>minimumAttendeePercentage</code>), or between which times the meeting should take place.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/10/find-meeting-times-graph.gif" alt="Image" width="600" height="400" loading="lazy">
<em>Finding available meeting times for the selected attendees and meeting duration</em></p>
<h3 id="heading-schedule-a-meeting">Schedule a meeting</h3>
<p>The final step is to schedule a meeting.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/10/image-180.png" alt="Image" width="600" height="400" loading="lazy">
<em>Scheduling a meeting on Microsoft 365 from a custom web app</em></p>
<p>At this point, you have all the necessary information to send a meeting invite to the selected people on behalf of the current user. </p>
<p>You can do this by calling the <code>events</code> Microsoft Graph API, passing in the request body all information such as subject, start- and end-time, and the list of attendees.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> meetingTime = availableMeetingTimes[selectedMeetingTime].meetingTimeSlot;

<span class="hljs-keyword">await</span> graphClient
  .api(<span class="hljs-string">'/me/events'</span>)
  .post({
    <span class="hljs-attr">subject</span>: <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'#subject'</span>).value,
    <span class="hljs-attr">start</span>: meetingTime.start,
    <span class="hljs-attr">end</span>: meetingTime.end,
    <span class="hljs-attr">attendees</span>: <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'mgt-people-picker'</span>).selectedPeople.map(<span class="hljs-function"><span class="hljs-params">p</span> =&gt;</span> {
      <span class="hljs-keyword">return</span> {
        <span class="hljs-attr">emailAddress</span>: {
          <span class="hljs-attr">address</span>: p.userPrincipalName,
          <span class="hljs-attr">name</span>: p.displayName
        },
        <span class="hljs-attr">type</span>: <span class="hljs-string">'required'</span>
      };
    })
  });
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/10/scheduling-meeting-graph.gif" alt="Image" width="600" height="400" loading="lazy">
<em>Scheduling a meeting on Microsoft 365 from a custom web app</em></p>
<h2 id="heading-summary">Summary</h2>
<p>By integrating Microsoft 365 into your work apps, you help your users work more effectively. </p>
<p>Using the Microsoft Graph API, you can bring data and insights from Microsoft 365 into your work apps. This provides your users with all the information they need to complete their tasks. </p>
<p>Because they have all information they need at their fingertips, they don't need to switch between different apps and can stay in the flow of their work. And by using web components from the Microsoft Graph Toolkit, you can build apps connected to Microsoft 365 even quicker.</p>
<p>Check out the <a target="_blank" href="https://github.com/waldekmastykarz/mgt-spa-findmeetingtimes">sample app</a>, and I'm looking forward to hearing from you how about you like it and what other integration scenarios you'd be interested in.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Show Upcoming Meetings for a Microsoft 365 User ]]>
                </title>
                <description>
                    <![CDATA[ By Waldek Mastykarz If you're a web developer and you work with an organization that uses Microsoft 365, you probably use it to manage your meetings. In this tutorial, you'll learn how you can build a simple personal assistant in under 10 minutes tha... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-show-upcoming-meetings-for-a-microsoft-365-user/</link>
                <guid isPermaLink="false">66d4617633b83c4378a5184b</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Microsoft ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Productivity ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 17 Oct 2022 17:08:26 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/10/Screenshot-2022-10-17-at-14.47.26.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Waldek Mastykarz</p>
<p>If you're a web developer and you work with an organization that uses Microsoft 365, you probably use it to manage your meetings.</p>
<p>In this tutorial, you'll learn how you can build a simple personal assistant in under 10 minutes that'll show a Microsoft 365 user the meetings they have left for the day.</p>
<h2 id="heading-how-to-build-apps-for-microsoft-365">How to Build Apps for Microsoft 365</h2>
<p><a target="_blank" href="https://www.freecodecamp.org/news/build-microsoft-365-application-in-10-minutes/">Previously</a> I showed you how you can use your existing web development skills to tap into data and insights stored on Microsoft 365 and build apps for your organization. </p>
<p>In just 10 minutes, you can build a simple app that shows you the profile of the user signed in to your app with their Microsoft 365 account.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/09/microsoft-365-app-user-profile-information-1.png" alt="Browser window showing a web page with user profile information" width="600" height="400" loading="lazy">
<em>Simple Microsoft 365 application showing the profile of the current user</em></p>
<p>This time, I want to show you how you can build – in just 10 minutes – a simple personal assistant that shows upcoming meetings for the currently signed-in user.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/10/image-88.png" alt="Image" width="600" height="400" loading="lazy">
<em>Custom app for Microsoft 365 showing list of upcoming meetings</em></p>
<h2 id="heading-what-youll-need">What you'll need</h2>
<ul>
<li><a target="_blank" href="https://nodejs.org/">Node.js LTS</a> (at the time of writing this article, it's 16.18.0)</li>
<li>a Microsoft 365 developer tenant. You can get one for free from <a target="_blank" href="https://developer.microsoft.com/microsoft-365/dev-program">Microsoft 365 developer program</a>, and it'll give you access to all Microsoft 365 APIs you need to build your apps, along with some demo data to get started</li>
<li>10 minutes of your time</li>
</ul>
<h2 id="heading-how-to-register-your-application-on-the-microsoft-cloud">How to Register Your Application on the Microsoft Cloud</h2>
<p>Create a folder for your application, where you'll store all app files. Open a terminal and change the working directory to that folder.</p>
<p>In the terminal, run the following command:</p>
<pre><code class="lang-bash">npx -p @pnp/cli-microsoft365 -- m365 login --authType browser
</code></pre>
<p>In your web browser, sign in with your newly created Microsoft 365 developer account:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/09/Screenshot-2022-09-30-at-12.12.08.png" alt="Microsoft 365 login screen" width="600" height="400" loading="lazy">
<em>Sign into your Microsoft 365 developer account</em></p>
<p>Next, back in the terminal, run the following command:</p>
<pre><code class="lang-bash">appId=$(npx -p @pnp/cli-microsoft365 -- m365 aad app add --name <span class="hljs-string">"Upcoming Meetings"</span> --multitenant --redirectUris <span class="hljs-string">"http://localhost,http://localhost/index.html"</span> --platform spa  --query <span class="hljs-string">"appId"</span> -o text)
</code></pre>
<p>With these two commands, you've used the <a target="_blank" href="https://aka.ms/cli-m365">CLI for Microsoft 365</a> to sign in to Microsoft 365 and register your new app on the Microsoft Cloud.</p>
<p>Every app that integrates with Microsoft 365 must be registered and provide information such as the application's name and type (platform). For single-page apps, you also need to specify the application's URL, which is used to ensure that users are signing in to the right app.</p>
<p>Next, write the ID of the newly created app to a file that you'll reference in your app. In the terminal, run:</p>
<pre><code class="lang-bash"><span class="hljs-built_in">echo</span> <span class="hljs-string">"const appId = '<span class="hljs-variable">$appId</span>';"</span> &gt; env.js
</code></pre>
<h2 id="heading-how-to-create-your-app">How to Create your App</h2>
<p>Open your app folder in your code editor. Create a new file named <code>index.html</code> and paste the following code:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>Upcoming meetings<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
  <span class="hljs-comment">&lt;!-- TODO #1: add libraries --&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Upcoming meetings<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"auth"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"upcomingMeetings"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="javascript">
    <span class="hljs-comment">// TODO #2: add app code</span>
  </span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
</code></pre>
<p>This code is a simple HTML page with two placeholders: one for the libraries that you'll use to build your app, and another for the app's code. It also contains a <code>div</code> where you'll show the login/logout button and another <code>div</code> where you'll show the list of upcoming meetings for today.</p>
<h2 id="heading-how-to-add-libraries">How to Add Libraries</h2>
<p>Replace the <code>TODO #1</code> comment with the following code:</p>
<pre><code class="lang-html">  <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"https://alcdn.msauth.net/browser/2.28.3/js/msal-browser.min.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"https://cdn.jsdelivr.net/npm/@microsoft/microsoft-graph-client/lib/graph-js-sdk.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">script</span>
    <span class="hljs-attr">src</span>=<span class="hljs-string">"https://cdn.jsdelivr.net/npm/@microsoft/microsoft-graph-client/lib/graph-client-msalBrowserAuthProvider.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"./env.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></pre>
<p>To build this app you'll use a few libraries:</p>
<ul>
<li><a target="_blank" href="https://learn.microsoft.com/azure/active-directory/develop/msal-overview?WT.mc_id=m365-79476-wmastyka">MSAL.js</a> which helps you handle signing users in with their Microsoft 365 account</li>
<li><a target="_blank" href="https://learn.microsoft.com/graph/sdks/sdk-installation#install-the-microsoft-graph-javascript-sdk">Microsoft Graph JavaScript SDK</a> which simplifies calling Microsoft Graph – the API to access data and insights on Microsoft 365</li>
<li>MSAL Browser Auth Provider which integrates MSAL.js with the Microsoft Graph JS SDK</li>
<li>the previously created <code>env.js</code> file with the ID of your app</li>
</ul>
<p>Using these libraries will help you build your app faster, and you won't have to worry about the details of how to sign users in, get an access token, or properly handle API errors.</p>
<h2 id="heading-how-to-sign-users-in-with-their-microsoft-365-account"><strong>How to Sign Users In with Their Microsoft 365 Account</strong></h2>
<p>Replace the <code>TODO #2</code> comment with the following code:</p>
<pre><code class="lang-javascript">    (<span class="hljs-function">() =&gt;</span> {
      <span class="hljs-comment">// TODO #3: create MSAL client</span>

      <span class="hljs-comment">// TODO #5: handle login/logout</span>

      <span class="hljs-comment">// TODO #6: create Microsoft Graph client</span>

      <span class="hljs-comment">// TODO #7: get upcoming meetings from Microsoft 365 user's calendar</span>

      <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">render</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-comment">// TODO #4: render UI</span>
      }

      render();
    })();
</code></pre>
<p>This code is an immediately invoked function expression (IIFE) that encapsulates the app's code and runs when the app loads. It also contains several placeholders for the code that you'll write in the next steps.</p>
<p>Replace the <code>TODO #3</code> comment with the following code:</p>
<pre><code class="lang-javascript">      <span class="hljs-keyword">const</span> scopes = [<span class="hljs-string">'Calendars.Read'</span>];
      <span class="hljs-keyword">const</span> msalConfig = {
        <span class="hljs-attr">auth</span>: {
          <span class="hljs-attr">clientId</span>: appId
        }
      };
      <span class="hljs-keyword">const</span> msalClient = <span class="hljs-keyword">new</span> msal.PublicClientApplication(msalConfig);
</code></pre>
<p>In this fragment, you're creating a new configuration object for the MSAL.js library which includes a reference to the ID of the app you created earlier. You also define a list of permissions (also known as scopes) that your app will have to request to be able to access information from the calendar of the currently signed-in user.</p>
<p>Next, you pass this object to the <code>PublicClientApplication</code> constructor to create a new instance of the MSAL client. You'll use this to sign users into your app with their Microsoft 365 account.</p>
<p>Right now, the app shows an empty page. Let's change that by replacing the <code>TODO #4</code> comment with the following code:</p>
<pre><code class="lang-javascript">        msalClient
          .handleRedirectPromise()
          .then(<span class="hljs-function"><span class="hljs-params">response</span> =&gt;</span> {
            <span class="hljs-keyword">const</span> accounts = msalClient.getAllAccounts();

            <span class="hljs-keyword">if</span> (accounts.length === <span class="hljs-number">0</span>) {
              <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'#auth'</span>).innerHTML = <span class="hljs-string">'&lt;button&gt;Login&lt;/button&gt;'</span>;
              <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'#auth button'</span>).addEventListener(<span class="hljs-string">'click'</span>, login);
              <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'#upcomingMeetings'</span>).innerHTML = <span class="hljs-string">''</span>;
            }
            <span class="hljs-keyword">else</span> {
              <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'#auth'</span>).innerHTML = <span class="hljs-string">'&lt;button&gt;Logout&lt;/button&gt;'</span>;
              <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'#auth button'</span>).addEventListener(<span class="hljs-string">'click'</span>, logout);
              <span class="hljs-comment">// TODO #8: load upcoming meetings</span>
            }
          });
</code></pre>
<p>When signing users in with their Microsoft 365 account, you'll redirect them to the Microsoft 365 sign-in page. When they sign in, they'll be redirected back to your app.</p>
<p>The <code>handleRedirectPromise</code> function will handle processing the information that Microsoft 365 sends to your app. When users come to your app and haven't signed in yet, the <code>handleRedirectPromise</code> function will resolve with a <code>null</code> response.</p>
<p>After handling the redirect, you check using MSAL if there are any users signed in to your app. If there are none (<code>accounts.length === 0</code> ), you show the login button. If there are users signed in, you show the logout button. Later, you'll add the code to show upcoming meetings from the user's calendar.</p>
<p>Both the login and the logout button are missing their click handlers, so let's add them by replacing <code>TODO #5</code> with the following code:</p>
<pre><code class="lang-javascript">      <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">login</span>(<span class="hljs-params">e</span>) </span>{
        e.preventDefault();
        msalClient.loginRedirect({
          scopes
        });
      }

      <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">logout</span>(<span class="hljs-params">e</span>) </span>{
        e.preventDefault();
        msalClient.logoutRedirect();
      }
</code></pre>
<p>In both cases, you're using MSAL to sign users in and out by redirecting them to the Microsoft 365 login/logout page. In the login function, you also pass the same set of permissions so that users will be prompted only once to approve the same set of permissions when signing in to the app and loading its data.</p>
<p>At this stage, your app should let you sign in and out using your Microsoft 365 account. To verify that everything is working as intended, save your changes, and in the terminal run:</p>
<pre><code class="lang-bash">npx lite-server
</code></pre>
<p>In your web browser, navigate to <code>http://localhost:3000</code> and sign in to your app. You should see the following screen:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/10/image-90.png" alt="Image" width="600" height="400" loading="lazy">
<em>After signing in to your app</em></p>
<p>When you click the login button, you will be asked to sign in with your Microsoft 365 account. Then, when you click the logout button, you will be signed out from Microsoft 365 and the app.</p>
<p>This concludes the first part of building the app, and you're ready to start retrieving data from Microsoft 365 using Microsoft Graph.</p>
<h2 id="heading-how-to-show-upcoming-meetings-from-microsoft-365">How to Show Upcoming Meetings from Microsoft 365</h2>
<p>Now that your app supports signing in and out with Microsoft 365 accounts, the next step is to add the code to retrieve information about upcoming meetings from the signed-in user's calendar.</p>
<h3 id="heading-how-to-get-a-microsoft-graph-client">How to Get a Microsoft Graph Client</h3>
<p>Replace the <code>TODO #6</code> comment with the following code:</p>
<pre><code class="lang-js">      <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getGraphClient</span>(<span class="hljs-params">account</span>) </span>{
        <span class="hljs-keyword">const</span> authProvider = <span class="hljs-keyword">new</span> MSGraphAuthCodeMSALBrowserAuthProvider.AuthCodeMSALBrowserAuthenticationProvider(msalClient, {
          account,
          scopes,
          <span class="hljs-attr">interactionType</span>: msal.InteractionType.Redirect,
        });

        <span class="hljs-keyword">return</span> MicrosoftGraph.Client.initWithMiddleware({ authProvider });
      }
</code></pre>
<p>This function takes as an argument the Microsoft 365 account that has been used to sign in to the app. It uses it to create a Microsoft Graph client that you'll use to call Microsoft Graph APIs and get data from Microsoft 365. </p>
<p>Also note that you're passing the same list of API permissions (scopes) that you defined earlier. This will let the <code>graphClient</code> get an access token for the Microsoft Graph API with access to calendar information.</p>
<h3 id="heading-how-to-load-information-about-upcoming-meetings">How to Load Information about Upcoming Meetings</h3>
<p>Next, let's replace the <code>TODO #7</code> comment with the following code:</p>
<pre><code class="lang-js">      <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getTimeString</span>(<span class="hljs-params">dateFromGraph</span>) </span>{
        <span class="hljs-keyword">const</span> date = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>(dateFromGraph + <span class="hljs-string">'Z'</span>);
        <span class="hljs-keyword">const</span> minutes = date.getMinutes();
        <span class="hljs-keyword">return</span> <span class="hljs-string">`<span class="hljs-subst">${date.getHours()}</span>:<span class="hljs-subst">${minutes &lt; <span class="hljs-number">10</span> ? <span class="hljs-string">'0'</span> : <span class="hljs-string">''</span>}</span><span class="hljs-subst">${minutes}</span>`</span>;
      }

      <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">loadUpcomingMeetings</span>(<span class="hljs-params">graphClient</span>) </span>{
        <span class="hljs-comment">// configure Microsoft Graph query to retrieve upcoming meetings for today</span>
        <span class="hljs-keyword">const</span> now = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>();
        <span class="hljs-keyword">const</span> midnight = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>();
        midnight.setDate(midnight.getDate() + <span class="hljs-number">1</span>);
        midnight.setHours(<span class="hljs-number">0</span>);
        midnight.setMinutes(<span class="hljs-number">0</span>);
        midnight.setSeconds(<span class="hljs-number">0</span>);
        midnight.setMilliseconds(<span class="hljs-number">0</span>);

        graphClient
          .api(<span class="hljs-string">`/me/calendarview?startdatetime=<span class="hljs-subst">${now.toISOString()}</span>&amp;enddatetime=<span class="hljs-subst">${midnight.toISOString()}</span>&amp;$orderby=start/dateTime`</span>)
          .get()
          .then(<span class="hljs-function"><span class="hljs-params">res</span> =&gt;</span> {
            <span class="hljs-keyword">if</span> (res.value.length === <span class="hljs-number">0</span>) {
              <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'#upcomingMeetings'</span>).innerHTML = <span class="hljs-string">'No more meetings for today'</span>;
            }
            <span class="hljs-keyword">else</span> {
              <span class="hljs-keyword">const</span> meetingsHtml = res.value.map(<span class="hljs-function"><span class="hljs-params">meeting</span> =&gt;</span> {
                <span class="hljs-keyword">return</span> <span class="hljs-string">`&lt;dt&gt;
                  <span class="hljs-subst">${getTimeString(meeting.start.dateTime)}</span>-<span class="hljs-subst">${getTimeString(meeting.end.dateTime)}</span> <span class="hljs-subst">${meeting.subject}</span>
                &lt;/dt&gt;
                &lt;dd&gt;
                  <span class="hljs-subst">${meeting.location.displayName}</span> with <span class="hljs-subst">${meeting.attendees.map(attendee =&gt; attendee.emailAddress.name).join(<span class="hljs-string">', '</span>)}</span>
                &lt;/dd&gt;`</span>;
              });
              <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'#upcomingMeetings'</span>).innerHTML = <span class="hljs-string">`&lt;dl&gt;<span class="hljs-subst">${meetingsHtml.join(<span class="hljs-string">''</span>)}</span>&lt;/dl&gt;`</span>;
            }
          });
      }
</code></pre>
<p>The <code>loadUpcomingMeetings</code> function takes as an argument an instance of the Microsoft Graph client as returned by the Microsoft Graph JavaScript SDK and uses it to call the Microsoft Graph API.</p>
<h3 id="heading-how-to-call-the-microsoft-graph-api">How to Call the Microsoft Graph API</h3>
<p>To get the list of upcoming meetings for today, you're calling the <code>/me/calendarview</code> Microsoft Graph API. This endpoint takes as arguments the start and end date and time and returns a view of the calendar. </p>
<p>Using this endpoint allows you to include occurrences of recurring meetings that users might have in their calendars. To retrieve upcoming meetings for today, you take the current time as the start date/time, and the coming midnight as the end date/time.</p>
<h3 id="heading-how-to-process-the-microsoft-graph-api-response">How to Process the Microsoft Graph API Response</h3>
<p>After calling the API, you get back an array with objects that represent upcoming meetings for the current user. Each meeting contains information such as the meeting's subject, start and end time, location, and attendees. </p>
<p>If the returned array is empty, it means that there are no upcoming meetings. If it contains one or more items, you use the <code>map</code> function to turn meeting items into an HTML string with <code>dt</code> and <code>dd</code>, showing the meeting's subject, start and end time in a human-readable format, the meeting's location, and who are the attendees.</p>
<h3 id="heading-how-to-format-events-start-and-end-time">How to Format Events' Start and End Time</h3>
<p>To format the date, you use the <code>getTimeString</code> function. It takes as an argument the date returned by Microsoft Graph. </p>
<p>The important thing to keep in mind here is that by default, Microsoft Graph API returns times and dates in the UTC timezone. Because the timezone information is stored separately, before parsing the date, you need to add the <code>Z</code> UTC timezone denominator to the date string.</p>
<p>The final piece is to tie it all together and call both functions after the user signs in to the app. Replace the <code>TODO #8</code> comment with the following code:</p>
<pre><code class="lang-js">              <span class="hljs-keyword">const</span> graphClient = getGraphClient(accounts[<span class="hljs-number">0</span>]);
              loadUpcomingMeetings(graphClient);
</code></pre>
<p>That's it! When you save your changes and go back to the browser, you'll see it automatically refreshed in the background, and you're prompted to grant the app access to your calendar information.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/10/image-91.png" alt="Image" width="600" height="400" loading="lazy">
<em>Setting permissions on the app</em></p>
<p>After your grant access, by clicking the <strong>Accept</strong> button, you'll see information about your upcoming meetings displayed on the page.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/10/image-92.png" alt="Image" width="600" height="400" loading="lazy">
<em>Information about upcoming meetings retrieved from the Microsoft 365 calendar</em></p>
<h2 id="heading-summary">Summary</h2>
<p>In this article, you learned how to use the Microsoft Graph SDK to connect to the Microsoft Graph API and retrieve information about upcoming meetings from the current user's calendar. </p>
<p>This is just one of many scenarios and <a target="_blank" href="https://learn.microsoft.com/graph/overview">types of apps</a> that you can implement on Microsoft 365. For more information about the type of data and insights stored on Microsoft 365 that you can tap into, check out the <a target="_blank" href="https://learn.microsoft.com/graph/api/overview">Microsoft Graph API documentation</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Build Your First Microsoft 365 Application in 10 minutes ]]>
                </title>
                <description>
                    <![CDATA[ By Waldek Mastykarz If you're a web developer and work with an organization that uses Microsoft 365, or you build applications that you sell to customers, I've got great news for you: you can use your existing skills to build applications that integr... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/build-microsoft-365-application-in-10-minutes/</link>
                <guid isPermaLink="false">66d46171a3a4f04fb2dd2e6d</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Microsoft ]]>
                    </category>
                
                    <category>
                        <![CDATA[  Single Page Applications  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Tue, 04 Oct 2022 17:32:26 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/09/banner.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Waldek Mastykarz</p>
<p>If you're a web developer and work with an organization that uses Microsoft 365, or you build applications that you sell to customers, I've got great news for you: you can use your existing skills to build applications that integrate with Microsoft 365.</p>
<h2 id="heading-whats-microsoft-365">What's Microsoft 365?</h2>
<p><a target="_blank" href="https://www.microsoft.com/microsoft-365">Microsoft 365</a> is a set of applications, like Microsoft Teams, Outlook, Word, or SharePoint, that organizations use for work. Every day, millions of people use Microsoft 365 to chat, meet, send emails, create documents, and more. </p>
<p>But Microsoft 365 isn't just a set of apps. It's also a platform that enables developers, like yourself, to build applications. These apps can tap into data and insights stored on Microsoft 365 and bring them into people's workflows.</p>
<h2 id="heading-you-can-build-your-first-microsoft-365-app-in-under-10-minutes">You Can Build your First Microsoft 365 App in Under 10 minutes</h2>
<p>Following is a short tutorial that'll show you how to build a simple single-page app that integrates with Microsoft 365. The app will let users sign in with their Microsoft 365 account, and see their profile information.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/09/microsoft-365-app-user-profile-information-1.png" alt="Browser window showing a web page with user profile information" width="600" height="400" loading="lazy">
<em>Microsoft 365 application</em></p>
<p>It doesn't seem like much, but while building this simple app, you'll learn the basics of building Microsoft 365 apps.</p>
<h3 id="heading-what-youll-need">What you'll need</h3>
<ul>
<li><a target="_blank" href="https://nodejs.org">Node.js LTS</a> (at the time of writing this article, it's 16.17.1)</li>
<li>a Microsoft 365 developer tenant. You can get one for free from <a target="_blank" href="https://developer.microsoft.com/microsoft-365/dev-program">Microsoft 365 developer program</a>, and it'll give you access to all Microsoft 365 APIs you need to build your apps, along with some demo data to get started</li>
<li>10 minutes of your time</li>
</ul>
<p>Ready? Let's go!</p>
<h2 id="heading-register-your-application-on-the-microsoft-cloud">Register your Application on the Microsoft Cloud</h2>
<p>Create a folder for your application, where you'll store all app files. Open a terminal and change the working directory to that folder.</p>
<p>In the terminal, run the following command:</p>
<pre><code class="lang-bash">npx -p @pnp/cli-microsoft365 -- m365 login --authType browser
</code></pre>
<p>In your web browser, sign in with your newly created Microsoft 365 developer account:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/09/Screenshot-2022-09-30-at-12.12.08.png" alt="Microsoft 365 login screen" width="600" height="400" loading="lazy">
<em>Sign into your Microsoft 365 developer account</em></p>
<p>Next, back in the terminal, run the following command:</p>
<pre><code class="lang-bash">appId=$(npx -p @pnp/cli-microsoft365 -- m365 aad app add --name <span class="hljs-string">"Hello world"</span> --multitenant --redirectUris <span class="hljs-string">"http://localhost,http://localhost/index.html"</span> --platform spa --query <span class="hljs-string">"appId"</span> -o text)
</code></pre>
<p>With these two commands, you've used the <a target="_blank" href="https://aka.ms/cli-m365">CLI for Microsoft 365</a> to sign in to Microsoft 365 and register your new app on the Microsoft Cloud. </p>
<p>Every app that integrates with Microsoft 365 must be registered and provide information such as the application's name and type (platform). For single-page apps, you also need to specify the application's URL, which is used to ensure that users are signing in to the right app.</p>
<p>Next, write the ID of the newly created app to a file that you'll reference in your app. In the terminal, run:</p>
<pre><code class="lang-bash"><span class="hljs-built_in">echo</span> <span class="hljs-string">"const appId = '<span class="hljs-variable">$appId</span>';"</span> &gt; env.js
</code></pre>
<h2 id="heading-create-your-app">Create your App</h2>
<p>Open your app folder in your code editor. Create a new file named <code>index.html</code> and paste the following code:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
  // TODO #1: add libraries
<span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Hello Microsoft 365<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"auth"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">pre</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">pre</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="javascript">
    <span class="hljs-comment">// TODO #2: add app code</span>
  </span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
</code></pre>
<p>This code is a simple HTML page with two placeholders: one for the libraries that you'll use to build your app, and another for the app's code. It also contains a <code>div</code> where you'll show the login/logout button and a <code>pre</code> element where you'll show the user's profile information.</p>
<h2 id="heading-add-libraries">Add Libraries</h2>
<p>Replace the <code>TODO #1</code> comment with the following code:</p>
<pre><code class="lang-html">  <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"https://alcdn.msauth.net/browser/2.28.3/js/msal-browser.min.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"https://cdn.jsdelivr.net/npm/@microsoft/microsoft-graph-client/lib/graph-js-sdk.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"https://cdn.jsdelivr.net/npm/@microsoft/microsoft-graph-client/lib/graph-client-msalBrowserAuthProvider.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"./env.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></pre>
<p>To build this app you'll use a few libraries:</p>
<ul>
<li><a target="_blank" href="https://learn.microsoft.com/azure/active-directory/develop/msal-overview?WT.mc_id=m365-78653-wmastyka">MSAL.js</a> which helps you handle signing users in with their Microsoft 365 account</li>
<li><a target="_blank" href="https://learn.microsoft.com/graph/sdks/sdk-installation#install-the-microsoft-graph-javascript-sdk">Microsoft Graph JavaScript SDK</a> which simplifies calling Microsoft Graph – the API to access data and insights on Microsoft 365</li>
<li>MSAL Browser Auth Provider which integrates MSAL.js with the Microsoft Graph JS SDK</li>
<li>the previously created <code>env.js</code> file with the ID of your app</li>
</ul>
<p>Using these libraries will help you build your app faster, and you won't have to worry about the details of how to sign users in, get an access token, or properly handle API errors.</p>
<h2 id="heading-sign-users-in-with-their-microsoft-365-account">Sign Users In with their Microsoft 365 Account</h2>
<p>Replace the <code>TODO #2</code> comment with the following code:</p>
<pre><code class="lang-javascript">    (<span class="hljs-function">() =&gt;</span> {
      <span class="hljs-comment">// TODO #3: create MSAL client</span>

      <span class="hljs-comment">// TODO #5: handle login/logout</span>

      <span class="hljs-comment">// TODO #6: create Microsoft Graph client</span>

      <span class="hljs-comment">// TODO #7: get Microsoft 365 user profile</span>

      <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">render</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-comment">// TODO #4: render UI</span>
      }

      render();
    })();
</code></pre>
<p>This code is an immediately invoked function expression (IIFE) that encapsulates the app's code and runs when the app loads. It also contains several placeholders for the code that you'll write in the next steps.</p>
<p>Replace the <code>TODO #3</code> comment with the following code:</p>
<pre><code class="lang-javascript">      <span class="hljs-keyword">const</span> msalConfig = {
        <span class="hljs-attr">auth</span>: {
          <span class="hljs-attr">clientId</span>: appId
        }
      };
      <span class="hljs-keyword">const</span> msalClient = <span class="hljs-keyword">new</span> msal.PublicClientApplication(msalConfig);
</code></pre>
<p>In this fragment, you're creating a new configuration object for the MSAL.js library which includes a reference to the ID of the app you created earlier. </p>
<p>Next, you pass this object to the <code>PublicClientApplication</code> constructor to create a new instance of the MSAL client, which you'll use to sign users into your app with their Microsoft 365 account.</p>
<p>Right now, the app shows an empty page. Let's change that by replacing the <code>TODO #4</code> comment with the following code:</p>
<pre><code class="lang-javascript">        msalClient
          .handleRedirectPromise()
          .then(<span class="hljs-function"><span class="hljs-params">response</span> =&gt;</span> {
            <span class="hljs-keyword">const</span> accounts = msalClient.getAllAccounts();

            <span class="hljs-keyword">if</span> (accounts.length === <span class="hljs-number">0</span>) {
              <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'#auth'</span>).innerHTML = <span class="hljs-string">'&lt;button&gt;Login&lt;/button&gt;'</span>;
              <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'#auth button'</span>).addEventListener(<span class="hljs-string">'click'</span>, login);
              <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'pre'</span>).innerHTML = <span class="hljs-string">''</span>;
            }
            <span class="hljs-keyword">else</span> {
              <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'#auth'</span>).innerHTML = <span class="hljs-string">'&lt;button&gt;Logout&lt;/button&gt;'</span>;
              <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'#auth button'</span>).addEventListener(<span class="hljs-string">'click'</span>, logout);
              <span class="hljs-comment">// TODO #8: show user profile</span>
            }
          });
</code></pre>
<p>When signing users in with their Microsoft 365 account, you'll redirect them to the Microsoft 365 sign-in page. When they sign in, they'll be redirected back to your app. </p>
<p>The <code>handleRedirectPromise</code> function will handle processing the information that Microsoft 365 sends to your app. When users come to your app and haven't signed in yet, the <code>handleRedirectPromise</code> function will resolve with a <code>null</code> response.</p>
<p>After handling the redirect, you check using MSAL if there are any users signed in to your app. If there are none (<code>accounts.length === 0</code> ), you show the login button. If there are users signed in, you show the logout button. Later, you'll add the code to show the user's profile information.</p>
<p>Both, the login and the logout button are missing their click handlers, so let's add them by replacing <code>TODO #5</code> with the following code:</p>
<pre><code class="lang-javascript">      <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">login</span>(<span class="hljs-params">e</span>) </span>{
        e.preventDefault();
        msalClient.loginRedirect();
      }

      <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">logout</span>(<span class="hljs-params">e</span>) </span>{
        e.preventDefault();
        msalClient.logoutRedirect();
      }
</code></pre>
<p>In both cases, you're using MSAL to sign users in and out by redirecting them to the Microsoft 365 login/logout page.</p>
<p>At this stage, your app should let you sign in and out using your Microsoft 365 account. To verify that everything is working as intended, save your changes, and in the terminal run:</p>
<pre><code class="lang-bash">npx lite-server
</code></pre>
<p>In your web browser, navigate to <code>http://localhost:3000</code> and sign in to your app. You should see the following screen:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/09/microsoft-365-app-login.png" alt="Browser window with a web page showing a login button" width="600" height="400" loading="lazy">
<em>After signing into your app</em></p>
<p>When you click the login button, you will be asked to sign in with your Microsoft 365 account. Then, when you click the logout button, you will be signed out from Microsoft 365 and the app.</p>
<p>This concludes the first part of building the app, and you're ready to start retrieving data from Microsoft 365 using Microsoft Graph.</p>
<h2 id="heading-show-microsoft-365-user-profile">Show Microsoft 365 User Profile</h2>
<p>Now that your app supports signing in and out with Microsoft 365 accounts, the next step is to add the code to retrieve the user's profile information from Microsoft 365.</p>
<p>Replace the <code>TODO #6</code> comment with the following code:</p>
<pre><code class="lang-javascript">      <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getGraphClient</span>(<span class="hljs-params">account</span>) </span>{
        <span class="hljs-keyword">const</span> authProvider = <span class="hljs-keyword">new</span> MSGraphAuthCodeMSALBrowserAuthProvider.AuthCodeMSALBrowserAuthenticationProvider(msalClient, {
          account,
          <span class="hljs-attr">scopes</span>: [<span class="hljs-string">'user.read'</span>],
          <span class="hljs-attr">interactionType</span>: msal.InteractionType.Redirect,
        });

        <span class="hljs-keyword">return</span> MicrosoftGraph.Client.initWithMiddleware({ authProvider });
      }
</code></pre>
<p>This function takes as an argument the Microsoft 365 account that has been used to sign in to the app and uses it to create a Microsoft Graph client that you'll use to call Microsoft Graph APIs and get data from Microsoft 365.</p>
<p>Next, let's replace the <code>TODO #7</code> comment with the following code:</p>
<pre><code class="lang-javascript">      <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">loadUserProfile</span>(<span class="hljs-params">graphClient</span>) </span>{
        graphClient
          .api(<span class="hljs-string">'/me'</span>)
          .get()
          .then(<span class="hljs-function"><span class="hljs-params">res</span> =&gt;</span> {
            <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'pre'</span>).innerHTML = <span class="hljs-built_in">JSON</span>.stringify(res, <span class="hljs-literal">null</span>, <span class="hljs-number">2</span>);
          });
      }
</code></pre>
<p>This function takes as an argument an instance of the Microsoft Graph client as returned by the Microsoft Graph JavaScript SDK and uses it to call the Microsoft Graph API. </p>
<p>In this case, you're calling the <code>/me</code> Microsoft Graph API which returns profile information for the currently signed-in user. The retrieved data is then displayed in the <code>pre</code> element on the page.</p>
<p>The final piece is to tie it all together and call both functions after the user signs in to the app. Replace the <code>TODO #8</code> comment with the following code:</p>
<pre><code class="lang-javascript">              <span class="hljs-keyword">const</span> graphClient = getGraphClient(accounts[<span class="hljs-number">0</span>]);
              loadUserProfile(graphClient);
</code></pre>
<p>That's it! When you save your changes and go back to the browser, you'll see it automatically refreshed in the background, and you're prompted to grant the app access to your profile information.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/09/microsoft-365-app-profile-permissions-prompt.png" alt="Dialog prompting the user to grant the application access to user profile information" width="600" height="400" loading="lazy">
<em>Setting permissions on the app</em></p>
<p>After your grant access, by clicking the <strong>Accept</strong> button, you'll see the profile information displayed in the <code>pre</code> element on the page.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/09/microsoft-365-app-user-profile-information-2.png" alt="Browser window showing user profile information from Microsoft 365" width="600" height="400" loading="lazy">
<em>Profile information</em></p>
<p>Congratulations! You've just built your first app connected to Microsoft 365.</p>
<h2 id="heading-this-is-just-the-beginning">This is just the beginning</h2>
<p>You've just built your first app on Microsoft 365: a single-page app connected to Microsoft 365 that shows the Microsoft 365 profile of the current user. This app is a simple example to show you how to get started building apps on Microsoft 365.</p>
<p>There's a lot more <a target="_blank" href="https://learn.microsoft.com/graph/api/overview">data and insights stored in Microsoft 365</a> that your apps can access, and there are <a target="_blank" href="https://learn.microsoft.com/graph/overview">many types of apps</a> that you can build. The best part is that you can use the same techniques that you've learned in the last 10 minutes to build them.</p>
<p>You've just built a Microsoft 365 app using JavaScript, but you can build apps on Microsoft 365 using any programming language. One thing that all Microsoft 365 apps have got in common is that they bring in data and insights from Microsoft 365 helping people work together.</p>
<p>Curious to learn more? See what other <a target="_blank" href="https://adoption.microsoft.com/sample-solution-gallery/">developers</a> and <a target="_blank" href="https://adoption.microsoft.com/partner-solution-gallery/">Microsoft partners</a> are building on Microsoft 365. And if you want to learn further, check out the <a target="_blank" href="https://learn.microsoft.com/training/paths/m365-msgraph-fundamentals/">Microsoft Graph Fundamentals</a> learning path. And please, don't hesitate to reach out if you have any questions.  </p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ The Code Execution Cannot Proceed Because msvcp140.dll Was Not Found – How to Fix on a Windows 10 PC ]]>
                </title>
                <description>
                    <![CDATA[ msvcp140.dll is a Microsoft C Dynamic Linked Library file responsible for running certain Windows apps and games – especially those built on C++.  Sometimes, when you're trying to open an app or game, you might get the error “the code execution canno... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-fix-the-code-execution-cannot-proceed-because-msvcp140-dll-was-not-found/</link>
                <guid isPermaLink="false">66adf11ef452caf50fb1fdff</guid>
                
                    <category>
                        <![CDATA[ error handling ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Microsoft ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Windows 10 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Kolade Chris ]]>
                </dc:creator>
                <pubDate>Wed, 19 Jan 2022 17:47:26 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/01/msvcpdll-3.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>msvcp140.dll is a Microsoft C Dynamic Linked Library file responsible for running certain Windows apps and games – especially those built on C++. </p>
<p>Sometimes, when you're trying to open an app or game, you might get the error “the code execution cannot proceed because msvcp140.dll was not found”. </p>
<p>This error can come in another form, too – "The program can’t start because MSVCP140.dll was not found. Try reinstalling the program to fix this problem".</p>
<p>This could happen because the file is really missing, or it's available but corrupt. </p>
<p>You can scan your computer with Windows Defender or a third-party antivirus program, but this doesn’t always fix the error.</p>
<p>If you are getting this error while opening a game or app on your Windows 10 PC, you’ve come to the right place. Because in this article, I’m going to show you 3 ways you can fix the error and start using your app or playing your game once again.</p>
<h2 id="heading-solution-1-reinstall-the-app">Solution 1: Reinstall the App</h2>
<p>As suggested in the error message, reinstalling the program that's triggering the "msvcp140.dll was not found" error can fix the problem for you.</p>
<p>To reinstall an app, do the following:</p>
<p><strong>Step 1</strong>: Click on Start and select Settings.
<img src="https://www.freecodecamp.org/news/content/images/2022/01/opensettings-2.jpg" alt="opensettings-2" width="600" height="400" loading="lazy"></p>
<p><strong>Step 2</strong>: Select Apps from the menu tiles.
<img src="https://www.freecodecamp.org/news/content/images/2022/01/ss-1-3.jpg" alt="ss-1-3" width="600" height="400" loading="lazy"></p>
<p><strong>Step 3</strong>: Click on the app causing the error and select Uninstall.
<img src="https://www.freecodecamp.org/news/content/images/2022/01/ss-.jpg" alt="ss-" width="600" height="400" loading="lazy"></p>
<p><strong>Step 4</strong>: Restart your computer, then reinstall the app by downloading it from the vendor’s website or Microsoft store.</p>
<h2 id="heading-solution-2-run-the-sfc-scan">Solution 2: Run the SFC Scan</h2>
<p>Since the error could be triggered by a corrupt file, the System File Checker scan can help fix it. When you run this program, it checks your computer files for corruption and fixes them.</p>
<p>To run the SFC scan, follow the steps below:</p>
<p><strong>Step 1</strong>: Click on Start and search for “cmd”. Click on Run as Administrator on the right, because you need to run the scan as an admin.
<img src="https://www.freecodecamp.org/news/content/images/2022/01/cmd-admin-2.jpg" alt="cmd-admin-2" width="600" height="400" loading="lazy"></p>
<p><strong>Step 2</strong>: Paste in <code>sfc /scannow</code> and hit <code>ENTER</code>.
<img src="https://www.freecodecamp.org/news/content/images/2022/01/ss-2-1.png" alt="ss-2-1" width="600" height="400" loading="lazy"></p>
<p><strong>Step 3</strong>: When the scan is done, close the Command Prompt and restart your PC.</p>
<h2 id="heading-solution-3-install-microsoft-visual-c-redistributable">Solution 3: Install Microsoft Visual C++ Redistributable</h2>
<p>If any of the solutions above fail to work for you, then installing Microsoft Visual C++ redistributable package will fix it. </p>
<p>This is because <code>msvcp140.dll</code> and another DLL file called <code>vcruntime140.dll</code> are both constituents of the Microsoft Visual C++ package.</p>
<p>The following step by step guide shows you how to install Microsoft Visual C++ redistributable:</p>
<p><strong>Step 1</strong>: To download the file, go to the official Microsoft Visual C++ redistributable download page and click Download.
<img src="https://www.freecodecamp.org/news/content/images/2022/01/ss-3-2.png" alt="ss-3-2" width="600" height="400" loading="lazy"></p>
<p><strong>Step 2</strong>: On the next page, you will see the option to download the file for a 32-bit operating system and another for a 64-bit operating system. Select the one for your OS and click “Next”.
<img src="https://www.freecodecamp.org/news/content/images/2022/01/ss-4b-1.png" alt="ss-4b-1" width="600" height="400" loading="lazy"></p>
<p><strong>Step 3</strong>: Open the downloaded file and follow the installation Wizard to install it.
<img src="https://www.freecodecamp.org/news/content/images/2022/01/ss-5-2.png" alt="ss-5-2" width="600" height="400" loading="lazy"></p>
<p>If you have the Microsoft Visual Studio 2015 package installed already and you still get this error, you should uninstall and then reinstall the package.</p>
<p>I hope this guide helps you fix the error. </p>
<p>Thank you for reding.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Pass Microsoft’s Azure Data Engineer Certification – DP-203 Exam Guide ]]>
                </title>
                <description>
                    <![CDATA[ By Ryan Dawson Data Engineering jobs are in high demand. And getting a certification in the subject is a good way to learn and to deepen and prove your skills.  Each cloud provider offers a certification specialized to their Data Engineering services... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-pass-microsoft-azure-data-engineer-certification-dp-203/</link>
                <guid isPermaLink="false">66d460c947a8245f78752ab7</guid>
                
                    <category>
                        <![CDATA[ Azure ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Certification ]]>
                    </category>
                
                    <category>
                        <![CDATA[ data-engineering ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Microsoft ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Tue, 19 Oct 2021 16:02:51 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/10/ux-g6bea5bfef_1920.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Ryan Dawson</p>
<p>Data Engineering jobs are in <a target="_blank" href="https://insights.dice.com/2019/06/04/data-engineer-remains-top-demand-job/">high demand</a>. And getting a certification in the subject is a good way to learn and to deepen and prove your skills. </p>
<p>Each cloud provider offers a certification specialized to their Data Engineering services. They carry weight but are not easy to pass.</p>
<p>The Azure DP-203 is a pretty tough certification to pass. I spent about 20 hrs on an online course, 5hrs on practice exams, about 5 hrs reading, and another few hours figuring out what tools to use, how to sign-up, and so on.</p>
<p>My aim was to get to a pass quickly and I think it can be done quicker than I did it. Here are some tips on getting your Microsoft Azure Data Engineer certification as quickly as possible.</p>
<h1 id="heading-pre-requisites">Pre-requisites</h1>
<p>I have background in data engineering but I don’t think it’s required. If you don’t have this background then I’d suggest a <a target="_blank" href="https://www.xplenty.com/blog/etl-data-warehousing-explained-etl-tool-basics/">short primer</a> on key Data Engineering concepts (OLTP vs OLAP, data warehouses, and data lakes). </p>
<p>I was also very familiar with cloud computing before the course but not especially familiar with Azure’s core services. If you want a primer on cloud computing then <a target="_blank" href="https://docs.microsoft.com/en-us/learn/modules/intro-to-azure-fundamentals/">Microsoft has one</a>.</p>
<h1 id="heading-how-to-study-for-the-dp-203-exam">How to Study for the DP-203 Exam</h1>
<h3 id="heading-online-courses">Online Courses</h3>
<p>I used a <a target="_blank" href="https://www.udemy.com/course/data-engineering-on-microsoft-azure/">Udemy course</a> by Alan Rodrigues to work through the content. I liked that it showed the tools in action, illustrated the concepts, and contained exam tips and practice tests. </p>
<p>There is <a target="_blank" href="https://docs.microsoft.com/en-us/learn/certifications/exams/dp-203">official content from Microsoft</a> and that looks good too. The official content is a mixture of text and video with more weight towards text, whereas courses like Udemy (and there are plenty of them) are mostly video. </p>
<p>I would suggest to just pick whatever you like the look of and try not to overthink the decision.</p>
<h3 id="heading-books">Books</h3>
<p>I also bought a book to read on my kindle but I didn’t get much value from that and would say a course is enough. </p>
<p>I’d suggest checking when any material was last updated before choosing it, as the course content does change over time and books can get outdated quickly. I do find it helpful to have reading material to complement a course, I think I just didn't pick the right book for me this time.</p>
<h3 id="heading-getting-hands-on">Getting Hands-on</h3>
<p>Microsoft, on their website, points to an option of instructor-led training but I didn’t do that. I also didn’t do any practical labs in the course that I worked through. </p>
<p><a target="_blank" href="https://dhyanintech.medium.com/how-to-prepare-for-the-azure-data-engineer-associate-certification-4cf122f1937f">Others do recommend</a> getting hands-on. I suspect it depends how much background you have and whether you feel confident that you’ve grasped the material just from watching instructional content. </p>
<p>Some people take notes while watching videos to help organise thoughts and make sure they’re understanding. I didn’t take notes either, though I have on previous courses.</p>
<h1 id="heading-how-to-practice-for-the-exam">How to Practice for the Exam</h1>
<p>My top tip is to use the <a target="_blank" href="https://uk.mindhub.com/dp-203-data-engineering-on-microsoft-azure-microsoft-official-practice-test/p/MU-DP-203?utm_source=microsoft&amp;utm_medium=certpage&amp;utm_campaign=msofficialpractice">official practice exam tool</a>. It is worth the cost.</p>
<p>I used practice tests on Udemy and they were helpful. But with those you don’t get feedback until you’ve completed the test. </p>
<p>When learning I prefer to find out what I’ve got wrong straight away. If I don't find out the answer until the end of a test then I have to remember the context of the question, which involves more effort. I also want to ensure that what lodges in my brain is the right answer and not the wrong one. For that it's better to be corrected quickly.</p>
<h3 id="heading-features-of-the-official-practice-test">Features of the Official Practice Test</h3>
<p>The official practice test lets you choose test lengths for however long you’ve got to practice at that moment. You can configure whether it tells you answers straight away or at the end.</p>
<p><img src="https://lh5.googleusercontent.com/gvuQ1De2BRHBvvXQbJkn6RRXM7EoSA34WPZpxQmO_6VLx-F-toNyLWgjifowqJRyWKEJ2m5A_aaUJ5q7OUu-NWdSeft1xpugLzYi3IIM9XjOgTEbGgvsUUKXmEBnAP4hKm5b_eAP=s0" alt="Image" width="1986" height="1470" loading="lazy"></p>
<p>The format of the questions matches the exam, which you don’t get with all of the practice exam sites. The exam has some multi-part linked questions and a lot of sites aren’t able to do that.</p>
<h3 id="heading-getting-started-with-the-official-practice-test">Getting Started With the Official Practice Test</h3>
<p>The flow to buy and login to the practice test is a bit confusing. You click through from the Microsoft website and buy it from a third-party vendor (<a target="_blank" href="https://uk.mindhub.com/dp-203-data-engineering-on-microsoft-azure-microsoft-official-practice-test/p/MU-DP-203?utm_source=microsoft&amp;utm_medium=certpage&amp;utm_campaign=msofficialpractice">in the UK, where I am, this is mindhub</a>). But you don’t need a login there and if you do create one you can’t use it to login to the test. </p>
<p>Instead you login with your Microsoft or GitHub identity to <a target="_blank" href="https://marketplace.measureup.com/login">marketplace.measureup.com</a> and register a key from the purchase.</p>
<h3 id="heading-practice-test-books">Practice Test Books</h3>
<p>I also used a book of practice questions and answers. That way I could do some exam prep away from my laptop. </p>
<p>There’s several of these books out there and I suspect they’re pretty similar. They’re not as good on quality as the practice test. I found errors like an answer section following a different question than the one it belonged to (which may be a kindle thing). The explanations also aren’t as detailed but it’s still helpful. </p>
<p>The one I used had a format of question and options on one page and then answers on the next. I would recommend using a book like this.</p>
<h3 id="heading-topics-i-targeted">Topics I Targeted</h3>
<p>There are certain topics that it’s worth getting clear about because it seems to me like they come up a lot and the questions are mostly of a similar format. The ones that stood out for me are:</p>
<ul>
<li>Storage tiers. If you know hot, cold and archive you’ll get some marks.</li>
<li>Star schema.</li>
<li>Slowly changing dimension types. Wikipedia explains this well.</li>
<li>Distributions for Synapse dedicated tables. Expect to get asked a question with a big Fact table and small Dimension tables. The dimension tables will want replicated distribution and the big fact table will be hash-distributed with hashing on some foreign key type column used in joins.</li>
<li>Difference between Synapse (warehouse with some added processing features), Stream Analytics (real-time processing), Data Lake (large-scale unstructured storage), Data Factory (ETL) and Databricks (managed Spark plus notebooks, ML and delta lake).</li>
<li>When to use Parquet, Avro, Json and CSV formats. (The answer is almost always that parquet is best for querying data at scale but they also like to make sure you know avro is good for timestamped data.)</li>
<li>The syntax for writing to a file or stream using Spark.</li>
</ul>
<p>For me these were topics I felt I could bank on. There were other topics I was confident about after practicing, but for some topics there’s lots of different ways the questions can be approached. For these I felt I could see the patterns and they were fairly predictable. It’s reassuring to have some questions you can do from memory without having to think a lot.</p>
<h3 id="heading-learning-to-analyse-questions">Learning to Analyse Questions</h3>
<p>Learning how to read and analyse the questions is a skill. Often the questions contain some incidental detail around a scenario (for example, the fact that it’s a grocery company) and some clues that point to an answer (for example, the size of their sales transaction table). </p>
<p>I don’t always recognise where a question is going from a first read, so then I find it useful to quickly scan the answers. This is dangerous, though, as then you might find something you recognise and match it to a clue and jump on that. But the questions can require picking up on multiple clues. </p>
<p>You want to eliminate the wrong answers if you can (which is tricky if you try to go fast). Sometimes there’s also multiple right answers to select and you’ll miss marks if you choose just one when there’s two correct selections (the questions do tell you when you should select multiple but it’s easy to miss if you rush or get tired). </p>
<p>This is why I recommend the official practice exam tool – it’s great for learning the format of questions and the skill of how to read them.</p>
<h1 id="heading-when-to-tackle-the-real-thing">When to Tackle the Real Thing</h1>
<h3 id="heading-can-i-learn-it-all">Can I Learn It All?</h3>
<p>The scope of the exam is so broad that it’s hard to really know everything. You’ll even get occasional wildcard questions that bring in Azure services that don’t relate to data. </p>
<p>When that does happen and you don’t know about those services, you can typically guess your way through it so long as you’re clear enough about the data services.</p>
<p>Cosmos DB is a new part of the Azure data stack. It’s not explicitly part of the syllabus right now but the exam scope is broad and it does creep in. It’s worth knowing a little about it but don’t get sucked into learning all its ins and outs.</p>
<p>If you try to really learn everything that could come up then you’ll have an awful lot to learn. </p>
<p>Databricks is huge in itself. You don’t need to know any of the Databricks machine learning stuff. You basically just need to know about setting up clusters, working with files in Azure storage using Spark, authentication and differences between Databricks and other Azure services that happen to feature flavours of Spark (Synapse and HDInsights).</p>
<h3 id="heading-so-when-am-i-ready">So When Am I Ready?</h3>
<p>If you’re doing well consistently on practice exams, you’ve developed a knack for guessing and can make the guesses pretty quick, then you’re ready to give it a go.</p>
<p>But it’s also about your comfort level – don’t let me (or anyone) rush you into doing it before you feel ready.</p>
<h1 id="heading-how-to-tackle-the-exam">How to Tackle the Exam</h1>
<h3 id="heading-structure-and-timing">Structure and Timing</h3>
<p>You don’t get much time per question. For me it was 65 questions in 100 minutes. The total exam time is more than 100 minutes but 100 minutes is the time you get for answering questions. </p>
<p>Some questions are more than one mark per selection in the answers so the number of questions you get can vary (I believe with the number of marks available staying the same). </p>
<p>Basically expect to answer roughly one question every 90 seconds or so. But don’t worry about time while first practicing. You’ll get faster with practice.</p>
<p>I actually didn’t finish all the questions. I thought I had finished after about 60 questions and started reviewing answers. Then I realised I had to click through to a separate case study section. This happens right at the end, and although there is guidance I didn’t find it super clear. I didn’t miss out on many marks from it though as it’s not a big section.</p>
<h3 id="heading-online-proctored-vs-test-centre">Online Proctored vs Test Centre</h3>
<p>Traditionally these kinds of certification tests were taken in test centres under supervision. Now the online proctored versions are popular. This was my first online proctored exam.</p>
<p>When I first looked at the guidance on online proctored exams I thought it sounded complicated. I knew that at a test centre there would be someone in the room the whole time and they'd be watching in case anyone had snuck in notes. I kept wondering how you can replicate this in an online proctored exam?</p>
<p>There are some instructions for the online proctored test about keeping your room clear and showing that you don't have any notes. These confused me and for a while thought I would need to buy an extra webcam to show that my room was clear and that I didn't have any notes at any point. </p>
<p>But it’s actually much simpler. I only needed to take photos of the room (using a link that gets sent) at the beginning and stay on my main webcam (a built-in one was enough). So it's just a check of the room at the beginning and then you just stay on webcam.</p>
<h2 id="heading-good-luck">Good Luck!</h2>
<p>I hope this advice is helpful to you and I wish you good luck! Feel free to ask me questions <a target="_blank" href="https://twitter.com/ryandawsongb">via Twitter</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Speed Up Your Website with Azure CDN ]]>
                </title>
                <description>
                    <![CDATA[ By Arjav Dave What is a CDN? A Content Delivery Network (CDN) helps you deliver your content more quickly. You can serve any type of content that remains unchanged over a period of time, like images, videos, CSS, JavaScript, HTML files, PDFs, and mor... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-speed-up-your-website-with-azure-cdn/</link>
                <guid isPermaLink="false">66d84de829e30bc0ad477541</guid>
                
                    <category>
                        <![CDATA[ Azure ]]>
                    </category>
                
                    <category>
                        <![CDATA[ content delivery network  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Microsoft ]]>
                    </category>
                
                    <category>
                        <![CDATA[ web performance ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Fri, 26 Mar 2021 15:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/03/cdn-cover.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Arjav Dave</p>
<h2 id="heading-what-is-a-cdn">What is a CDN?</h2>
<p>A Content Delivery Network (CDN) helps you deliver your content more quickly. You can serve any type of content that remains unchanged over a period of time, like images, videos, CSS, JavaScript, HTML files, PDFs, and more. </p>
<p>A CDN is a group of servers that are spread across the world to deliver the content from the <em>Edge servers</em>. Edge servers are servers located closest to the place from where the request is being made. </p>
<p>Depending on the request, edge servers may either return the content from its cache or they can fetch it from the <em>Origin Server</em>. The servers that serve the actual content are called Origin servers.</p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0i7t9e95tryv3mi44ghc.png" alt="CDN Overview" width="1002" height="552" loading="lazy"></p>
<p>In the above image, the Edge Servers are located around the world and the Origin Server is located in California, USA. When a request is made, the Edge Server located at Mumbai, India may contact the Origin Server if it's not able to serve the content.</p>
<h2 id="heading-how-does-a-cdn-work">How Does a CDN Work?</h2>
<p>CDNs have four main parts: a Consumer, a DNS, an Edge Server, and an Origin Server.</p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gni65528kxlmciivhnyw.png" alt="CDN Detail" width="872" height="552" loading="lazy"></p>
<p>When the Consumer makes a request, it is at first accepted by its Internet Service Provider (ISP). The ISP will then hit the content provider's <em>Authoritative DNS</em>.</p>
<blockquote>
<p>An Authoritative DNS converts the DNS request to an IP request.</p>
</blockquote>
<p>When the Authoritative DNS is made, it returns the IP address of the closest Edge Server. The Edge Server will then check in its own cache to see if the requested content is available. </p>
<p>If it is, then it returns the content. If the content is not available, it requests the content from the Origin Server and on retrieval caches it.</p>
<h2 id="heading-benefits-of-a-cdn">Benefits of a CDN</h2>
<h3 id="heading-low-bandwidth-consumption">Low Bandwidth Consumption</h3>
<p>Many web hosts have a limited bandwidth allocation per month. If you go beyond that you will be charged extra. </p>
<p>With a CDN most of your bandwidth will be saved since the content will be served by the edge servers.</p>
<h3 id="heading-low-latency">Low Latency</h3>
<p>The Edge Servers cache the content. So anytime cached content is requested the latency is reduced drastically. This is because the request doesn't go all the way to the Origin Server.</p>
<h3 id="heading-security-against-ddos">Security against DDoS</h3>
<p>Almost all the popular CDN's have the capability to protect your webserver against Distributed denial of service (DDos) attacks.</p>
<h3 id="heading-improves-seo">Improves SEO</h3>
<p>Loading time is one of the factors that can affect your site's SEO rankings. If you are serving most of your content via CDN, the loading times are drastically reduced and can help improve your SEO.</p>
<h2 id="heading-deep-dive-into-azure-cdn">Deep Dive into Azure CDN</h2>
<p>Let's say you have created an Azure Storage Account and hosted a very simple site that displays Hello World as h1. Now that you know the benefits of CDNs, you want to serve your simple site over CDN. </p>
<p>You will have an endpoint like <em><a target="_blank" href="https://demostorageaccountarjav.z29.web.core.windows.net/">https://demostorageaccountarjav.z29.web.core.windows.net/</a></em> (where instead of demostorageaccountarjav it would be your storage account's name). Here are more details on how to <a target="_blank" href="https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-static-website">setup a static website</a>.</p>
<p>Login to your Azure Portal and click on <em>Create a resource</em> from you dashboard. Search for <em>CDN</em> which will open the resource in the marketplace as below.</p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ravgtt3j0xmeu5osd9d2.png" alt="CDN Create Resource" width="1045" height="473" loading="lazy">
<em>Create CDN</em></p>
<p>This will open up a form to create a CDN profile. A CDN profile is a set of CDN endpoints. There is not much to fill in here except the name, resource group, and the pricing tier.</p>
<p>Next, select the checkbox to create a CDN endpoint. An endpoint is where the Consumer will be requesting content. So if you have multiple sites you can create multiple endpoints as well.</p>
<p>I have attached a screenshot for your reference on what values to put in. Since CDN is a global service the region selection will be disabled.</p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z35xu3l7ox243ea6ecfj.png" alt="CDN Details" width="996" height="881" loading="lazy">
<em>CDN Details</em></p>
<p>You can now click on <em>Create</em> to generate the profile and endpoint. It will take a couple of minutes to create. After it is created and when you go to the home screen, you will have these 4 resources:</p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o6bxldg59sqod68o4kq1.png" alt="Azure Resources" width="1000" height="286" loading="lazy">
<em>Azure Resources</em></p>
<p>As discussed earlier, the CDN Profile is a group of <em>Endpoints</em>. To view the details click the *<em>Endpoint</em> resource. You will see an overview with a link to the <em>Endpoint hostname</em>.</p>
<p><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vt4t5uxyv6u0i5llicwp.png" alt="Endpoint Overview" width="1300" height="318" loading="lazy">
<em>Endpoint Overview</em></p>
<p>When you open the endpoint hostname it might show "404 not found" initially. You might have to wait another 10-15 minutes before your actual site is visible.</p>
<p>As discussed in the <a class="post-section-overview" href="#heading-benefits-of-a-cdn">benefits</a> section you can configure the Endpoint for security, caching, routing, and a lot of other things. You can explore more options <a target="_blank" href="https://docs.microsoft.com/en-us/azure/cdn/cdn-how-caching-works">here</a>.</p>
<h2 id="heading-how-to-access-via-sas-token">How to Access via SAS Token</h2>
<p>You may be wondering what to do if your resource is in a private container and can only be accessed via a <em>Shared Access Signature</em> (SAS) Token. Well you are in luck! The query strings are passed on as they are and since SAS is as a query string you are good.</p>
<p>Go ahead and create a new storage account (with static website disabled). Add a new Endpoint in the CDN profile that points to the newly created storage account.</p>
<p>For demo purposes I have created a container named <em>site</em> with private access level. And I've uploaded a Blob to it named <em>Photo.jpeg</em> in a Storage Account with the URL <a target="_blank" href="https://demostorageaccountarjav.blob.core.windows.net">https://demostorageaccountarjav.blob.core.windows.net</a>.</p>
<p>You can of course get a SAS token from the Azure portal directly for testing, but that's not how you would usually do in the real world. For that, you'll find below a simple snippet to create a SAS token in Node.js.</p>
<pre><code><span class="hljs-keyword">const</span> azureSasToken = <span class="hljs-built_in">require</span>(<span class="hljs-string">'azure-sas-token'</span>);

<span class="hljs-comment">// default token validity is 7 days</span>
<span class="hljs-keyword">let</span> sasToken = azureSasToken.createSharedAccessToken(<span class="hljs-string">'https://&lt;service namespace&gt;.servicebus.windows.net/&lt;topic name or queue&gt;'</span>,
                                <span class="hljs-string">'&lt;signature key name&gt;'</span>,
                                <span class="hljs-string">'&lt;signature hash&gt;'</span>);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">`sasToken: <span class="hljs-subst">${sasToken}</span>`</span>);

<span class="hljs-comment">// Specify your own validity in secs, two hours in this example</span>
sasToken = azureSasToken.createSharedAccessToken(<span class="hljs-string">'https://&lt;service namespace&gt;.servicebus.windows.net/&lt;topic name or queue&gt;'</span>,
                                <span class="hljs-string">'&lt;signature key name&gt;'</span>,
                                <span class="hljs-string">'&lt;signature hash&gt;'</span>, 
                                <span class="hljs-number">60</span> * <span class="hljs-number">60</span> * <span class="hljs-number">2</span>);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">`sasToken: <span class="hljs-subst">${sasToken}</span>`</span>);
</code></pre><p>We have used a simple npm package named <a target="_blank" href="https://www.npmjs.com/package/azure-sas-token">azure-sas-token</a>. Once the SAS is generated your URL will look something like this:</p>
<pre><code>https:<span class="hljs-comment">//demostorageaccountarjav.blob.core.windows.net/site/Photo.jpeg?sp=r&amp;st=2021-03-25T07:28:45Z&amp;se=2022-02-02T15:28:45Z&amp;spr=https&amp;sv=2020-02-10&amp;sr=b&amp;sig=PD4HlRI8bDEirMevpYQgpx6drwh%2BE5EpILfXkQOMlvw%3D</span>
</code></pre><p>The above URL is pointing directly to the storage account. So go ahead and change the origin so that it uses the origin endpoint.</p>
<pre><code>https:<span class="hljs-comment">//demowebsitearjav.azureedge.net/site/Photo.jpeg?sp=r&amp;st=2021-03-25T07:28:45Z&amp;se=2022-02-02T15:28:45Z&amp;spr=https&amp;sv=2020-02-10&amp;sr=b&amp;sig=PD4HlRI8bDEirMevpYQgpx6drwh%2BE5EpILfXkQOMlvw%3D</span>
</code></pre><p>When you visit this site you will now be able to view the protected resource via CDN. You might have to wait a few minutes and/or purge your Endpoint to see the updated content.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>In my opinion everyone should be using a Content Delivery Network. There are lots of other providers like Cloudflare, S3, and so on. But Microsoft is one of the major players emerging with a wide variety of services. </p>
<p>If you are an Azure fan like I am, you should definitely give Azure CDN a try.</p>
<p>For any feedback or questions you can get in touch with me.</p>
<p>Check <a target="_blank" href="https://arjavdave.com">here</a> for more tutorials like this.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Use Join and String_agg in Microsoft SQL Server ]]>
                </title>
                <description>
                    <![CDATA[ By Thanoshan MV In this article, we’ll look at how to use join on more than two tables and aggregate the result using the function STRING_AGG() in Microsoft SQL Server. If you don’t know about Microsoft SQL Server, I’ll briefly explain to you what it... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-use-join-and-string-agg-in-microsoft-sql-server/</link>
                <guid isPermaLink="false">66d46151ffe6b1f641b5fa99</guid>
                
                    <category>
                        <![CDATA[ database ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Microsoft ]]>
                    </category>
                
                    <category>
                        <![CDATA[ SQL ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 22 Mar 2021 13:49:51 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/03/Untitled-design.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Thanoshan MV</p>
<p>In this article, we’ll look at how to use join on more than two tables and aggregate the result using the function <code>STRING_AGG()</code> in Microsoft SQL Server.</p>
<p>If you don’t know about Microsoft SQL Server, I’ll briefly explain to you what it is😃. Let's get started.</p>
<h2 id="heading-what-is-microsoft-sql-server">What is Microsoft SQL Server?</h2>
<p>Microsoft SQL Server is a Relational Database Management System that revolutionized how businesses handle data. It helps you store and manage data.</p>
<p>If you’re familiar with other relational database management systems such as MySQL or PostgreSQL, then picking up Microsoft SQL Server should be pretty easy.</p>
<p>I’m running on the <a target="_blank" href="https://docs.microsoft.com/en-us/sql/relational-databases/lesson-1-connecting-to-the-database-engine?view=sql-server-ver15#connect">default instance of SQL server</a>.</p>
<p>Now, let’s consider a problem.</p>
<h3 id="heading-the-problem-how-to-get-employee-details-and-projects">The Problem: How to Get Employee Details and Projects</h3>
<p>Let’s say we have three tables, namely <code>Employee</code>, <code>Project</code>, and <code>EmployeeProject</code>. The below image is the relational database design:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/msssql--1-.png" alt="Image" width="600" height="400" loading="lazy">
<em>Figure 1: Relational Database Design for the problem</em></p>
<p>The problem is to get all the employee details and their corresponding projects.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Employee-1.png" alt="Image" width="600" height="400" loading="lazy">
<em>Figure 2: Employee table</em></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/EmployeeProject-1.png" alt="Image" width="600" height="400" loading="lazy">
<em>Figure 3: EmployeeProject table</em></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Project1.png" alt="Image" width="600" height="400" loading="lazy">
<em>Figure 4: Project table</em></p>
<p>Things to consider: not all the employees from table <code>Employee</code> mapped with table <code>EmployeeProject</code> and not all the projects in table <code>Project</code> mapped with table <code>EmployeeProject</code> .</p>
<p>Our main goal is to retrieve all the employee details from table <code>Employee</code> whether they are mapped with <code>EmployeeProject</code> or not.</p>
<p>We can try to solve this problem by using joins. As you can see, we have to join three tables in order to solve this problem. First, we need to join tables <code>Employee</code> and <code>EmployeeProject</code> . Then we'll join the resulting table with <code>Project</code> .</p>
<p>Let’s go through some scenarios to solve this problem.</p>
<h3 id="heading-solution-1-use-inner-join">Solution #1: Use Inner Join</h3>
<p>Let’s go with <code>INNER JOIN</code> everywhere!</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> e.Id, e.FirstName, e.LastName, e.Designation, e.City, ep.ProjectId 
<span class="hljs-keyword">FROM</span> Employee <span class="hljs-keyword">AS</span> e <span class="hljs-keyword">INNER</span> <span class="hljs-keyword">JOIN</span> EmployeeProject <span class="hljs-keyword">AS</span> ep 
<span class="hljs-keyword">ON</span> e.Id = ep.EmployeeId
</code></pre>
<p>This will give us:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/innerjoin1.png" alt="Image" width="600" height="400" loading="lazy">
<em>Figure 5</em></p>
<p>Let’s think of the above table as <code>Employee-EmployeeProject</code> . It contains all the employee details as well as their corresponding project ids.</p>
<p>With the help of <code>Employee-EmployeeProject</code>, we’ll be able to access the <code>Project</code> table. Let’s do that:</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> abc.FirstName, abc.LastName, abc.City, abc.Designation, p.Name <span class="hljs-keyword">AS</span> <span class="hljs-keyword">Project</span> <span class="hljs-keyword">FROM</span> <span class="hljs-keyword">Project</span> <span class="hljs-keyword">AS</span> p 
<span class="hljs-keyword">INNER</span> <span class="hljs-keyword">JOIN</span>
(<span class="hljs-keyword">SELECT</span> e.Id, e.FirstName, e.LastName, e.Designation, e.City, ep.ProjectId
<span class="hljs-keyword">FROM</span> Employee <span class="hljs-keyword">AS</span> e <span class="hljs-keyword">INNER</span> <span class="hljs-keyword">JOIN</span> EmployeeProject <span class="hljs-keyword">AS</span> ep
<span class="hljs-keyword">ON</span> e.Id = ep.EmployeeId) <span class="hljs-keyword">AS</span> abc 
<span class="hljs-keyword">ON</span> p.Id = abc.ProjectId
</code></pre>
<p>Output:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/innerjoin2.png" alt="Image" width="600" height="400" loading="lazy">
<em>Figure 6</em></p>
<p>Great! 😃 Now we are able to retrieve employee details as well as their corresponding projects. But our main goal is missing (that is, to get all the employee details) as we’re missing Sophia Ashley’s details.</p>
<p>Scenario 1 worked, but we didn't accomplish our goal. 😆</p>
<h3 id="heading-solution-2-use-left-join">Solution #2: Use Left Join</h3>
<p>Let’s get all the details from employees whether they are mapped with <code>EmployeeProject</code> or not (our goal) by using <code>LEFT JOIN</code> with <code>Employee</code> table:</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> e.Id, e.FirstName, e.LastName, e.Designation, e.City, ep.ProjectId <span class="hljs-keyword">FROM</span> Employee <span class="hljs-keyword">AS</span> e <span class="hljs-keyword">LEFT</span> <span class="hljs-keyword">JOIN</span> EmployeeProject <span class="hljs-keyword">AS</span> ep <span class="hljs-keyword">ON</span> e.Id = ep.EmployeeId
</code></pre>
<p>This query will give us:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/leftjoin-emp-empProj-.png" alt="Image" width="600" height="400" loading="lazy">
<em>Figure 7</em></p>
<p>As you can see from the above figure, we are able to retrieve Sophia Ashley’s details since we’re using <code>LEFT JOIN</code> on <code>Employee</code> table with <code>EmployeeProject</code> table.</p>
<p>Let’s think of the above table as <code>Employee-EmployeeProject</code> . It contains all the employee details as well as their corresponding project ids (including <code>NULL</code> for when it doesn’t contain any <code>ProjectId</code> value).</p>
<p>Similar to scenario 1, now we can access project names since we know <code>ProjectId</code> . Remember, our goal is to retrieve all the employee details whether they have a project or not.</p>
<p>To ensure that, we’ll need to retrieve all the values from <code>Employee-EmployeeProject</code> when joining with <code>Project</code> table:</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> abc.FirstName, abc.LastName, abc.City, abc.Designation, p.Name <span class="hljs-keyword">AS</span> <span class="hljs-keyword">Project</span> <span class="hljs-keyword">FROM</span> <span class="hljs-keyword">Project</span> <span class="hljs-keyword">AS</span> p <span class="hljs-keyword">RIGHT</span> <span class="hljs-keyword">JOIN</span> (<span class="hljs-keyword">SELECT</span> e.Id, e.FirstName, e.LastName, e.Designation, e.City, ep.ProjectId <span class="hljs-keyword">FROM</span> Employee <span class="hljs-keyword">AS</span> e <span class="hljs-keyword">LEFT</span> <span class="hljs-keyword">JOIN</span> EmployeeProject <span class="hljs-keyword">AS</span> ep <span class="hljs-keyword">ON</span> e.Id = ep.EmployeeId) <span class="hljs-keyword">AS</span> abc <span class="hljs-keyword">ON</span> p.Id = abc.ProjectId
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Figure-6.png" alt="Image" width="600" height="400" loading="lazy">
<em>Figure 8</em></p>
<p>Great work! We achieved our goal. 😃</p>
<p>This is good stuff. But it would be great if we were able to group these rows and return one row per employee. This is our new wish! 😉</p>
<p>This leads us to question how we can group these results. We can group these rows by using <code>GROUP BY</code> .</p>
<p>So, we’ll <code>GROUP BY</code> the results in rows by <code>FirstName</code> :</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> abc.FirstName, abc.LastName, abc.City, abc.Designation, p.Name <span class="hljs-keyword">AS</span> <span class="hljs-keyword">Project</span> <span class="hljs-keyword">FROM</span> <span class="hljs-keyword">Project</span> <span class="hljs-keyword">AS</span> p <span class="hljs-keyword">RIGHT</span> <span class="hljs-keyword">JOIN</span> (<span class="hljs-keyword">SELECT</span> e.Id, e.FirstName, e.LastName, e.Designation, e.City, ep.ProjectId <span class="hljs-keyword">FROM</span> Employee <span class="hljs-keyword">AS</span> e <span class="hljs-keyword">LEFT</span> <span class="hljs-keyword">JOIN</span> EmployeeProject <span class="hljs-keyword">AS</span> ep <span class="hljs-keyword">ON</span> e.Id = ep.EmployeeId) <span class="hljs-keyword">AS</span> abc <span class="hljs-keyword">ON</span> p.Id = abc.ProjectId <span class="hljs-keyword">GROUP</span> <span class="hljs-keyword">BY</span> abc.FirstName
</code></pre>
<p>And the output is:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/groupby-error.png" alt="Image" width="600" height="400" loading="lazy">
<em>Figure 9</em></p>
<p>What happened?</p>
<p>It says column <code>LastName</code> is invalid in the select list because it is <strong>not contained</strong> in either an <strong>aggregate function</strong> or the <strong>GROUP BY clause</strong>. This error is applicable to all the remaining columns in the selected list except <code>FirstName</code> .</p>
<p>When we try to select values of <code>FirstName</code> and group by <code>FirstName</code>, it means that we’re going to group all the rows based on <code>FirstName</code> only and select the <code>FirstName</code> column. For example, let’s select only <code>FirstName</code> and group by <code>FirstName</code>:</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> abc.FirstName <span class="hljs-keyword">FROM</span> <span class="hljs-keyword">Project</span> <span class="hljs-keyword">AS</span> p <span class="hljs-keyword">RIGHT</span> <span class="hljs-keyword">JOIN</span> 
(<span class="hljs-keyword">SELECT</span> e.Id, e.FirstName, e.LastName, e.Designation, e.City, ep.ProjectId <span class="hljs-keyword">FROM</span> Employee <span class="hljs-keyword">AS</span> e <span class="hljs-keyword">LEFT</span> <span class="hljs-keyword">JOIN</span> EmployeeProject <span class="hljs-keyword">AS</span> ep <span class="hljs-keyword">ON</span> e.Id = ep.EmployeeId) <span class="hljs-keyword">AS</span> abc <span class="hljs-keyword">ON</span> p.Id = abc.ProjectId <span class="hljs-keyword">GROUP</span> <span class="hljs-keyword">BY</span> abc.FirstName
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/groupbyfirstname.png" alt="Image" width="600" height="400" loading="lazy">
<em>Figure 10</em></p>
<p>As you can see in figure 10, we’ve grouped all the rows by <code>FirstName</code> . Here, there’s no ambiguity.</p>
<p>Now, let’s select <code>FirstName</code>, <code>LastName</code>, and group all the rows by <code>FirstName</code> :</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> abc.FirstName, abc.LastName <span class="hljs-keyword">FROM</span> <span class="hljs-keyword">Project</span> <span class="hljs-keyword">AS</span> p <span class="hljs-keyword">RIGHT</span> <span class="hljs-keyword">JOIN</span> (<span class="hljs-keyword">SELECT</span> e.Id, e.FirstName, e.LastName, e.Designation, e.City, ep.ProjectId <span class="hljs-keyword">FROM</span> Employee <span class="hljs-keyword">AS</span> e <span class="hljs-keyword">LEFT</span> <span class="hljs-keyword">JOIN</span> EmployeeProject <span class="hljs-keyword">AS</span> ep <span class="hljs-keyword">ON</span> e.Id = ep.EmployeeId) <span class="hljs-keyword">AS</span> abc <span class="hljs-keyword">ON</span> p.Id = abc.ProjectId <span class="hljs-keyword">GROUP</span> <span class="hljs-keyword">BY</span> abc.FirstName
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/groupby-error1.png" alt="Image" width="600" height="400" loading="lazy">
<em>Figure 11</em></p>
<p>If we check out what the values of <code>LastName</code> are in Figure 8, we can see that we have two employees with the same <code>FirstName</code> but different <code>LastName</code>: James Johnson and James Smith.</p>
<p>So, when we try to group all the rows by <code>FirstName</code> and select the values of <code>FirstName</code> and <code>LastName</code>, <strong>it leads us to an ambiguity state.</strong></p>
<p>Imagine that MSSQL asks us, “You’re selecting <code>FirstName</code> ,<code>LastName</code> and trying to group all the rows by <code>FirstName</code>. But the <code>FirstName</code> James has two different <code>LastName</code>s, Johnson and Smith. When selecting James’s last name, what should his <code>LastName</code> be? Johnson? Smith? or both?” There's ambiguity in MSSQL regarding which one to select.</p>
<p>To solve this FirstName and LastName issue, we can either (option 1) group all the rows by both <code>FirstName</code> and <code>LastName</code> or (option 2) enclose <code>LastName</code> into an <a target="_blank" href="https://docs.microsoft.com/en-us/sql/t-sql/functions/aggregate-functions-transact-sql?view=sql-server-ver15#:~:text=An%20aggregate%20function%20performs%20a,All%20aggregate%20functions%20are%20deterministic.">aggregate function</a> to select only one value.</p>
<p>Option 1:</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> abc.FirstName, abc.LastName <span class="hljs-keyword">FROM</span> <span class="hljs-keyword">Project</span> <span class="hljs-keyword">AS</span> p <span class="hljs-keyword">RIGHT</span> <span class="hljs-keyword">JOIN</span> (<span class="hljs-keyword">SELECT</span> e.Id, e.FirstName, e.LastName, e.Designation, e.City, ep.ProjectId <span class="hljs-keyword">FROM</span> Employee <span class="hljs-keyword">AS</span> e <span class="hljs-keyword">LEFT</span> <span class="hljs-keyword">JOIN</span> EmployeeProject <span class="hljs-keyword">AS</span> ep <span class="hljs-keyword">ON</span> e.Id = ep.EmployeeId) <span class="hljs-keyword">AS</span> abc <span class="hljs-keyword">ON</span> p.Id = abc.ProjectId <span class="hljs-keyword">GROUP</span> <span class="hljs-keyword">BY</span> abc.FirstName, abc.LastName
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/option1.png" alt="Image" width="600" height="400" loading="lazy">
<em>Figure 12</em></p>
<p>Option 2:</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> abc.FirstName, <span class="hljs-keyword">MAX</span>(abc.LastName) <span class="hljs-keyword">AS</span> LastName <span class="hljs-keyword">FROM</span> <span class="hljs-keyword">Project</span> <span class="hljs-keyword">AS</span> p <span class="hljs-keyword">RIGHT</span> <span class="hljs-keyword">JOIN</span> (<span class="hljs-keyword">SELECT</span> e.Id, e.FirstName, e.LastName, e.Designation, e.City, ep.ProjectId <span class="hljs-keyword">FROM</span> Employee <span class="hljs-keyword">AS</span> e <span class="hljs-keyword">LEFT</span> <span class="hljs-keyword">JOIN</span> EmployeeProject <span class="hljs-keyword">AS</span> ep <span class="hljs-keyword">ON</span> e.Id = ep.EmployeeId) <span class="hljs-keyword">AS</span> abc <span class="hljs-keyword">ON</span> p.Id = abc.ProjectId <span class="hljs-keyword">GROUP</span> <span class="hljs-keyword">BY</span> abc.FirstName
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Figure-11.png" alt="Image" width="600" height="400" loading="lazy">
<em>Figure 13</em></p>
<p>In the above FirstName and LastName issue, although both options work, option 1 makes more sense than option 2.</p>
<p>For more detailed information on ambiguity, check out this <a target="_blank" href="https://stackoverflow.com/questions/13999817/reason-for-column-is-invalid-in-the-select-list-because-it-is-not-contained-in-e">stack overflow question and answer</a>!</p>
<p><strong>NOTE:</strong> when you have a <code>GROUP BY</code> query, the selected list must be part of either the grouping criteria or must appear in aggregate functions such as <code>SUM</code> , <code>MAX</code> , <code>COUNT</code> and so on.</p>
<p>Again, back to our wish, we’ll try to <code>GROUP BY</code> all the rows by all columns:</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> abc.FirstName, abc.LastName, abc.City, abc.Designation, p.Name <span class="hljs-keyword">AS</span> <span class="hljs-keyword">Project</span> <span class="hljs-keyword">FROM</span> <span class="hljs-keyword">Project</span> <span class="hljs-keyword">AS</span> p <span class="hljs-keyword">RIGHT</span> <span class="hljs-keyword">JOIN</span> (<span class="hljs-keyword">SELECT</span> e.Id, e.FirstName, e.LastName, e.Designation, e.City, ep.ProjectId <span class="hljs-keyword">FROM</span> Employee <span class="hljs-keyword">AS</span> e <span class="hljs-keyword">LEFT</span> <span class="hljs-keyword">JOIN</span> EmployeeProject <span class="hljs-keyword">AS</span> ep <span class="hljs-keyword">ON</span> e.Id = ep.EmployeeId) <span class="hljs-keyword">AS</span> abc <span class="hljs-keyword">ON</span> p.Id = abc.ProjectId <span class="hljs-keyword">GROUP</span> <span class="hljs-keyword">BY</span> abc.FirstName, abc.LastName, abc.City, abc.Designation, p.Name
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Figure-12.png" alt="Image" width="600" height="400" loading="lazy">
<em>Figure 14</em></p>
<p>We’ve successfully grouped all the rows but we couldn’t retrieve one row per each employee, as each row is distinct from others if we consider all columns. This means that grouping them by all columns won’t work.</p>
<p>According to our new goal, we need records for Emma Cooper, James Johnson, James Smith, Maria Garcia, and Sophia Ashley (five rows). </p>
<p><code>GROUP BY</code> <code>FirstName</code> , <code>LastName</code> , <code>City</code> and <code>Designation</code> will give us these five rows, but what about <code>Project</code> ? We can't <code>GROUP BY</code> it (if we do that then the result would be similar to figure 14), but we can use an aggregate (adding together) function to aggregate <code>Project</code>.</p>
<p>Actually, we can use the <code>[STRING_AGG()](https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-ver15#syntax)</code> MSSQL aggregate function to return one row per each employee by concatenating the <code>Name</code> column in the <code>Project</code> table and <code>GROUP BY</code> the remaining columns:</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> abc.FirstName, abc.LastName, abc.Designation, STRING_AGG (p.Name, <span class="hljs-string">','</span>) <span class="hljs-keyword">WITHIN</span> <span class="hljs-keyword">GROUP</span> (<span class="hljs-keyword">ORDER</span> <span class="hljs-keyword">BY</span> p.Name) <span class="hljs-keyword">AS</span> <span class="hljs-keyword">Project</span> <span class="hljs-keyword">FROM</span> <span class="hljs-keyword">Project</span> <span class="hljs-keyword">AS</span> p <span class="hljs-keyword">RIGHT</span> <span class="hljs-keyword">JOIN</span> (<span class="hljs-keyword">SELECT</span> e.Id, e.FirstName, e.LastName, e.Designation, e.City, ep.ProjectId <span class="hljs-keyword">FROM</span> Employee <span class="hljs-keyword">AS</span> e <span class="hljs-keyword">LEFT</span> <span class="hljs-keyword">JOIN</span> EmployeeProject <span class="hljs-keyword">AS</span> ep <span class="hljs-keyword">ON</span> e.Id = ep.EmployeeId) <span class="hljs-keyword">AS</span> abc <span class="hljs-keyword">ON</span> p.Id = abc.ProjectId <span class="hljs-keyword">GROUP</span> <span class="hljs-keyword">BY</span> abc.FirstName, abc.LastName, abc.City, abc.Designation
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Figure-13.png" alt="Image" width="600" height="400" loading="lazy">
<em>Figure 15</em></p>
<p>Yay! We’ve done it. 😃 😃</p>
<p>The problem we discussed in this article helped us understand some of the main concepts behind Microsoft SQL Server.</p>
<p>Now we have a basic understanding of how to use join and <code>STRING_AGG</code>in Microsoft SQL Server.</p>
<p>Please feel free to let me know if you have any suggestions or questions.</p>
<p>Photo by <a target="_blank" href="https://unsplash.com/@phammi?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">MI PHAM</a> on <a target="_blank" href="https://unsplash.com/s/photos/happy?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</p>
<p>Connect with me on <a target="_blank" href="https://mvthanoshan.medium.com/">Medium</a>.</p>
<p><strong>Please support freeCodeCamp in their <a target="_blank" href="https://www.freecodecamp.org/news/building-a-data-science-curriculum-with-advanced-math-and-machine-learning/">Data Science Curriculum Pledge Drive</a>.</strong> </p>
<p>Thank you 😇</p>
<p><strong>Happy Coding ❤️</strong></p>
<h3 id="heading-to-explore-further">To Explore Further</h3>
<ol>
<li><code>[STRING_AGG](https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-ver15)</code> <a target="_blank" href="https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-ver15">(Transact-SQL) — Microsoft Docs</a></li>
<li><a target="_blank" href="https://docs.microsoft.com/en-us/sql/t-sql/functions/aggregate-functions-transact-sql?view=sql-server-ver15">Aggregate Functions — Microsoft Docs</a></li>
<li><a target="_blank" href="https://www.sqlshack.com/string_agg-function-in-sql/">An overview of the</a> <code>[STRING_AGG](https://www.sqlshack.com/string_agg-function-in-sql/)</code><a target="_blank" href="https://www.sqlshack.com/string_agg-function-in-sql/">function in SQL — SQLShack</a></li>
<li><a target="_blank" href="https://www.freecodecamp.org/news/sql-group-by-clauses-explained/">An in-depth guide to <code>GROUP BY</code></a></li>
</ol>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Add Page Numbers in Word – Microsoft Word Number Pages Tutorial ]]>
                </title>
                <description>
                    <![CDATA[ If you're writing a book or a paper for school, you'll likely want to include page numbers. They'll help readers keep track of how far along they are, and allow them to reference specific spots in the text.  And if you're writing in Microsoft Word, t... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/page-numbers-in-word-tutorial-how-to-insert-a-page-number-in-microsoft-word/</link>
                <guid isPermaLink="false">66b1fa5a125aeccef6f65c4a</guid>
                
                    <category>
                        <![CDATA[ Microsoft ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technical writing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ writing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ writing tips ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Abigail Rennemeyer ]]>
                </dc:creator>
                <pubDate>Tue, 02 Feb 2021 06:35:00 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/604148afa7946308b7681dc7.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>If you're writing a book or a paper for school, you'll likely want to include page numbers. They'll help readers keep track of how far along they are, and allow them to reference specific spots in the text. </p>
<p>And if you're writing in Microsoft Word, there's an easy way to add page numbers to your work. Let's see what it is.</p>
<h2 id="heading-how-to-add-page-numbers-in-word">How to Add Page Numbers in Word</h2>
<p>When you have a Word document open, you'll see the main Word menu along the top of your screen, like this:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screen-Shot-2021-03-04-at-12.56.18-PM.png" alt="Image" width="600" height="400" loading="lazy">
<em>Main Word menu at the top of your screen.</em></p>
<h3 id="heading-step-1-click-the-insert-tab-in-the-main-word-menu">Step 1: Click the "Insert" Tab in the Main Word Menu</h3>
<p>Just click on the "Insert" tab, and you'll get a dropdown menu with lots of options. About two thirds of the way down, you'll see a "Page Numbers" option, like this:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screen-Shot-2021-03-04-at-12.59.02-PM.png" alt="Image" width="600" height="400" loading="lazy">
<em>Just click on "Insert" on the main menu and then scroll down to "Page Numbers".</em></p>
<h3 id="heading-step-2-scroll-down-and-select-the-page-numbers-option">Step 2: Scroll Down and Select the "Page Numbers" Option</h3>
<p>When you click on "Page Numbers" a little box will pop up asking you how you want to format your page numbers. </p>
<h3 id="heading-step-3-format-your-page-numbers">Step 3: Format Your Page Numbers</h3>
<p>You'll have options for where you want to place the numbers ("Position"), how you want them aligned on the page ("Alignment"), and other formatting options. It'll look like this:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screen-Shot-2021-03-04-at-1.02.04-PM.png" alt="Image" width="600" height="400" loading="lazy">
<em>How you can format your page numbers.</em></p>
<h3 id="heading-step-4-optional-customize-your-page-numbers">Step 4 (Optional): Customize Your Page Numbers</h3>
<p>If you just click on the dropdowns by each option, you'll be able to choose exactly where and how you want your numbers to appear.</p>
<p>For example, if I want my numbers to appear at the bottom right, I'll just leave those options at the default. But if I want them, say, at the top and insides of each page, I can make the following adjustments:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screen-Shot-2021-03-04-at-1.40.25-PM.png" alt="Image" width="600" height="400" loading="lazy">
<em>How to customize your page numbering.</em></p>
<p>You can also choose whether you want a number to show on the first page (perhaps not if it's a title page, and so on).</p>
<p>If you really want to get into the details of your page numbers, you can click the "Format..." button. There you can choose how your numbers look (you can have Roman numerals if you want!), whether you want to include chapter numbers, and how your numbers should start.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screen-Shot-2021-03-04-at-2.19.33-PM.png" alt="Image" width="600" height="400" loading="lazy">
<em>More page number options.</em></p>
<p>And voilà – now your pages are numbered!</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screen-Shot-2021-03-04-at-5.18.53-PM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<h2 id="heading-how-to-find-the-page-numbers-tab-in-word">How to Find the Page Numbers Tab in Word</h2>
<p>Here's something cool about Word: if you go to the "Help" tab to search for some functionality, it'll show you where to find it in the main menu.</p>
<p>Here's what I mean:</p>
<p>Say I want to find where to add page numbers (and didn't have this handy tutorial). I could just click on the "Help" tab in the main menu and type in "Page numbers".</p>
<p>But that's not the cool part – as you're typing, you'll see a match pop up (highlighted in pink below). When you hover over that option (don't click yet), Word displays where to find that tool or feature (in the red box below) and points to your query with a pulsing blue arrow! Like this:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screen-Shot-2021-03-04-at-2.46.58-PM.png" alt="Image" width="600" height="400" loading="lazy">
<em>Click "Help", type in "page numbers", hover over "Page Numbers", and the menu will pop up to the left.</em></p>
<p>Then if you actually click on your page numbers query in the Help tool, it'll just take you straight there and you'll see the "Page Numbers" box pop up.</p>
<p>Now you know how to add page numbers in Microsoft Word and you can customize those numbers to your heart's content. Happy writing!</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Microsoft Word Keyboard Shortcuts – the Ultimate Guide ]]>
                </title>
                <description>
                    <![CDATA[ By Adam Naor According to Microsoft's first quarter results, Office 365 has 200 million monthly active users. That is a lot of users leveraging a subscription service to access Microsoft Office products.  The core apps and services included in Office... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/microsoft-word-keyboard-shortcuts/</link>
                <guid isPermaLink="false">66d45d77cc7f04d2549a370a</guid>
                
                    <category>
                        <![CDATA[ Microsoft ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Productivity ]]>
                    </category>
                
                    <category>
                        <![CDATA[ writing ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 30 Nov 2020 17:38:35 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5fbe94c249c47664ed825916.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Adam Naor</p>
<p>According to Microsoft's first quarter results, Office 365 has 200 million monthly active users. That is a lot of users leveraging a subscription service to access Microsoft Office products. </p>
<p>The core apps and services included in Office 365 include:</p>
<ul>
<li>Word</li>
<li>Excel</li>
<li>PowerPoint</li>
<li>Outlook</li>
<li>OneNote</li>
<li>OneDrive</li>
<li>Teams</li>
</ul>
<p>In this article we will dive deeper into one of these products, Microsoft Word.</p>
<p>Perhaps Word was the first word processor you learned how to type on. Maybe you use it daily at work to conduct research, draft important documents, or write essays. Clearly companies love and experience the benefits Word affords because this tool keeps staff thinking, communicating, and writing.</p>
<p>In college I remember sending myself Word files and saving each with a laughably hard to understand name (like Final Draft 1.21a). Regardless of your past associations with Word, there are ways you can start using this popular tool better today. Specifically you can use keyboard shortcuts to greatly accelerate your typing and word processing speeds.</p>
<p>I consider myself something of a keyboard shortcut guru and want to pass some of these lessons on to you. Unlike webinar software which is largely web based and requires simple click and point interactions, Word can be fully immersive. </p>
<p>Believe it or not, Word is more akin to augmented reality in that regard. When you play a piano you can push keys or you can have a more full body experience and deeply interact with the instrument. Word is similar.</p>
<p>If you are working from home and want to expedite the speed and accuracy of your engagement with Word, you can take time to learn about keyboard shortcuts that follow.</p>
<p>Of course which shortcuts to learn and when to use each depends on the type of computer you are using - and your goals.</p>
<p>First, a disclaimer.</p>
<p>Writing an article about general Word shortcuts reminds me of a quote attributed to the poet John Lydgate and later adapted by President Lincoln: </p>
<blockquote>
<p>“You can please some of the people all of the time, you can please all of the people some of the time, but you can't please all of the people all of the time”.  </p>
</blockquote>
<p>These shortcuts will work on <strong>most</strong> of your computers for <strong>most</strong> of your use-cases <strong>most</strong> of the time.</p>
<p>A friendly note that it is possible that your keyboard layout, operating system (Windows or Mac), and version of the software (desktop, client, version, and so on) you are running will impact some shortcuts and the utility of this advice.</p>
<p>I often think about different versions of Word like Dropbox vs Box: similar but different.</p>
<p>With this disclaimer complete, here are a number of Microsoft Word keyboard shortcuts that you can learn today to enhance your word processing experience. So grab a seat and get comfortable as I will start with a deep dive of my favorite Word shortcuts and then cover how to leverage the Word Ribbon as well.</p>
<h2 id="heading-microsoft-word-keyboard-shortcuts">Microsoft Word Keyboard Shortcuts</h2>
<h3 id="heading-ia"> </h3>
<p>Font Style </p>
<p>The three most popular formatting options for font style and emphasis are italics (Ctrl+I), bold (Ctrl+B), and underlining (Ctrl+U). </p>
<h3 id="heading-capitalization">Capitalization</h3>
<p>There may be times when, for the purposes of clarity or emphasis, you want all of the text to be UPPER CASE. But what if you just typed out a whole paragraph with caps lock on, and now it looks like you’re screaming?</p>
<p>There’s no need to delete it all and type it out again: just highlight the relevant text and press Ctrl+Shift+A to turn it all into regular lower case/upper case.</p>
<h3 id="heading-text-alignment">Text Alignment</h3>
<p>Do you need text right in the middle of the page for a title? You can center text with Ctrl+E. After that, you’ll most likely want to return to normal formatting for the main body of your text, in which case you can align left with Ctrl+L.</p>
<h3 id="heading-hyperlinking">Hyperlinking</h3>
<p>This one is handy in a number of situations - not just in Word, but also in PowerPoint and Excel. </p>
<p>Highlight a word or sentence that you want to link to a webpage and press Ctrl+K. A dialog box will appear for you to input the web address that the text is to be linked to. Once you’ve entered the information, the selected text will turn into a blue, underlined hyperlink.</p>
<h3 id="heading-navigation">Navigation</h3>
<p>Are you trying to find a specific section in a long document? Hit Ctrl+F for Find, which allows you to enter the word or phrase that you’re looking for and be taken directly to it. </p>
<p>Ctrl+F is also extremely useful in web browsers and across the Office suite.</p>
<h3 id="heading-deep-search">Deep Search</h3>
<p>Pressing F5 in Word opens a more comprehensive search tool that allows you to navigate to a specific page, section, or line of your document, as well as use the Find and Replace function.</p>
<h3 id="heading-selecting-text">Selecting Text</h3>
<p>There’s no need to always use the mouse to highlight selected text. The Shift+Arrow keys will also perform this function. </p>
<p>Shift+Left/Right will highlight one character at a time, Shift+Alt+Left/Right one word at a time, and Shift+Ctrl+Left/Right an entire line at a time. </p>
<h3 id="heading-word-count">Word Count</h3>
<p>Pressing Ctrl+Shift+G will instantly bring up your word count to provide you with that all-important visual affirmation that you are, indeed, moving steadily towards your goal.</p>
<h3 id="heading-save-open-and-print-files">Save, Open, and Print Files</h3>
<p>Use Ctrl + S to save whatever file you're working on – and do it often so you don't lose your work! </p>
<p>In a browser, you can also use this to save a page for offline viewing. The keyboard shortcut for Save As (saving a file with a new name) depends on the app you're using. In Word it's F12. But many other programs use Ctrl + Shift + S. Ctrl + O will open a file into whatever program you're using.</p>
<h3 id="heading-cut-copy-and-paste-using-the-keyboard-personal-favorites">Cut, Copy, and Paste Using the Keyboard (personal favorites)</h3>
<ul>
<li>Ctrl + X to cut highlighted text (remove it and place it on the clipboard).</li>
<li>Ctrl + C to copy text (place a copy of the text on the clipboard).</li>
<li>Ctrl + V to paste text (copy the clipboard to the cursor position, and very handy for converting large amounts of content or when engaging in copywriting.</li>
<li>Select All: To select everything in the current space, use Ctrl + A.</li>
<li>Undo: Ctrl + Z will undo any action.</li>
</ul>
<h2 id="heading-word-also-has-a-ribbon-much-like-other-microsoft-products">Word also has a Ribbon, much like other Microsoft products.</h2>
<p>The Ribbon is the menu that appears when you click on each tab in the main Word menu (check out the image below if you're not sure). Here are some useful Ribbon keyboard shortcuts when writing documents in Word.</p>
<p>You can combine the Key Tips letters with the Alt key to make shortcuts called Access Keys for the ribbon options. </p>
<p>When building templates or newsletter examples with lots of colors, formatting, and design requirements, the Ribbon shortcuts are particularly powerful and helpful.</p>
<p>For example, press Alt+H to open the Home tab, and Alt+Q to move to the Tell me or Search field. </p>
<p>Press Alt again to see Key Tips for the options for the selected tab.</p>
<p>The ribbon groups related options on tabs. For example, on the Home tab, the Font group includes the Font Color option. </p>
<p>Press the Alt key to display the ribbon shortcuts, called Key Tips, as letters in small images next to the tabs and options as shown in the image below.</p>
<p><img src="https://lh3.googleusercontent.com/dWokWJh3tTNRwNE4d5faiv-ILx3jFODUQEpUISE1fsNNMDHglMX79fzebmouMk9NM8I1HhSf3IK9LLcqRpv_yUsPCklbZFGpsqcaSuhx7l89iY0-eocWOvFRfYP0hQv_1ItYVGja" alt="Key Tips in the ribbon in Word 365" width="872" height="128" loading="lazy"></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ VLOOKUP Example – How to Do VLOOKUP in Excel ]]>
                </title>
                <description>
                    <![CDATA[ By Gregory V. Chapman Microsoft Excel includes a variety of different functions that help users with calculations of any kind. The functionality of Excel is so comprehensive that average users don't even take advantage of most utilities. However, if ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/vlookup-in-excel/</link>
                <guid isPermaLink="false">66d45edd706b9fb1c166b92e</guid>
                
                    <category>
                        <![CDATA[ excel ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Microsoft ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Thu, 11 Jun 2020 18:06:38 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2020/06/pexels-photo-4050320-1.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Gregory V. Chapman</p>
<p>Microsoft Excel includes a variety of different functions that help users with calculations of any kind. The functionality of Excel is so comprehensive that average users don't even take advantage of most utilities.</p>
<p>However, if you often scroll through columns and rows looking for the same information, chances are that you will appreciate the VLOOKUP function. VLOOKUP, which stands for “vertical lookup,” can help you quickly find the data associated with a certain value that you enter.</p>
<p>For example, you may have a table that contains products with unique IDs and prices. VLOOKUP can show you the price of a certain product if you enter its ID. </p>
<p>You can use VLOOKUP in many different ways and it will simplify your work significantly, especially when dealing with large tables.</p>
<p>You don’t need to spend a lot of time looking for a certain cell because this function will find it for you. However, beginner users often find it difficult to set up VLOOKUP. Therefore, I decided to help you by preparing this detailed guide.</p>
<h2 id="heading-what-is-vlookup">What is VLOOKUP?</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/06/m-b-m-ZzOa5G8hSPI-unsplash.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<p>First of all, VLOOKUP is a function. Therefore, if you’re new to Excel, you may want to familiarize yourself with some basic functions, like AVERAGE, SUM, or TODAY. This way it will be easy for you to understand how this function works.</p>
<p>VLOOKUP is a database function, so it’s intended for database tables. Such tables are basically lists of different items. For instance, you may use this function when working with lists of products, employees, customers, etc.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/06/photo_2020-06-11_20-26-54.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Let’s say, you have a list of products that consists of four columns. It might include the item code in the first column, the name or description of the product in the second column, and the price and the number of items available in stock in the third and fourth columns, respectively.</p>
<p>Database tables usually have some sort of unique identifier for each item. In this case, it’s the item code. This column is necessary for the VLOOKUP function to operate, and it must be the first column in your table.</p>
<p>If you’re a beginner, the first thing you should do is to understand what exactly VLOOKUP does. Simply put, it shows information from a list or database based on the unique identifier entered by the user.</p>
<p>If we consider the example above, this function could show the price, description, or availability of a product based on its item code. What exactly it will show depends on the formula you write. VLOOKUP supports both exact and approximate matching, as well as wildcards for partial matches.</p>
<h2 id="heading-how-vlookup-works">How VLOOKUP Works</h2>
<p>Here is the syntax for formulas that describe the VLOOKUP function:</p>
<p><code>=VLOOKUP(value, table, column_index, [range])</code></p>
<ul>
<li><code>value</code> is what this function will look for in the first column</li>
<li><code>table</code> is the table from which the function will retrieve the necessary information</li>
<li><code>column_index</code> is the number of the column from which the function will retrieve the information</li>
<li><code>range</code> is a Boolean parameter that can be either TRUE or FALSE. TRUE is the default value, and it corresponds to approximate matching. FALSE will show you exact matches only.</li>
</ul>
<p>Even the name of this function includes “vertical,” and VLOOKUP is only intended for tables where data is organized in vertical columns. Therefore, if you’re organizing your data horizontally, this function will be useless. In this case, you can use a similar function for horizontal lookup — <a target="_blank" href="https://support.office.com/en-us/article/hlookup-function-a3034eec-b719-4ba3-bb65-e1ad662ed95f">HLOOKUP</a>.</p>
<p>You should also keep in mind that this function only works from left to right. In other words, if the unique identifier is not in the first column of your table, the function won’t be able to retrieve information from the columns to the left of the identifier.</p>
<p>Every column has its number, and all columns are numbered from left to right. If you want to obtain a value from a certain column, you should specify its number in your formula. In the formula template above, this number is called <code>column_index</code>. </p>
<p>For instance, if you want to retrieve the name of the product from the example above, the column index should be 2.</p>
<p>As I've already mentioned above, the VLOOKUP function supports two matching modes: approximate and exact. This parameter is the fourth argument in the formula. Approximate matching is set by default. If you want to choose exact matching, you should set the lookup range to <code>FALSE</code>.</p>
<p>Therefore, both of the formulas below will retrieve data using approximate matching:</p>
<p><code>=VLOOKUP(value, table, column_index)</code></p>
<p><code>=VLOOKUP(value, table, column_index, TRUE)</code></p>
<p>As you can see, if you want to use the exact match mode you should be careful. If you don’t provide any lookup range value, the function will still use the approximate match mode.</p>
<p>The following formula will force the exact matching mode:</p>
<p><code>=VLOOKUP(value, table, column_index, FALSE)</code></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/06/mika-baumeister-Wpnoqo2plFA-unsplash.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Make sure to set the value to <code>FALSE</code> if you’re going to use the exact match mode. Chances are that you’ll need exact matching in most cases, so if you’re new to Excel don’t forget about this detail. </p>
<p>Exact match is the right choice if you have a column with the item identifier. It may also be any unique value that can be used for an exact lookup. For example, it may be a unique title of a book or movie, as well as any other unique keyword. Keep in mind that VLOOKUP is not case-sensitive.</p>
<p>However, sometimes you may need not the exact match but the best match possible one. In this case, you can use the approximate match mode. </p>
<p>For instance, you may use this mode when dealing with data tables where the necessary information corresponds to certain numerical values, and you want to retrieve results for a value that isn’t included in the table.</p>
<p>You can use this approach when making calculations based on the existing data. If you enter a value and the function finds the exact match, it will retrieve information from the corresponding row. However, if there’s no exact match in the table, the function will match the previous row.</p>
<p>Why would it match the previous row, not another one? Well, it won’t if you don’t organize your table in the right way. To enable VLOOKUP to look for the best approximate value, you should make sure that all the values in this column are sorted in ascending order. In this case, the function will just step back and retrieve the nearest value.</p>
<h2 id="heading-na-errors">#N/A Errors</h2>
<p>When using the VLOOKUP function, as well as many other functions in Excel, you may often get #N/A errors. This error means that the value was not found. </p>
<p>You can get this error for several reasons. Here are some of the most common cases:</p>
<ul>
<li>you’ve misspelled the value or added an extra space</li>
<li>the necessary value doesn’t exist in the table</li>
<li>you’re using the exact match mode when searching for an approximate value</li>
<li>you haven’t entered the correct table range</li>
<li>you’ve copied VLOOKUP while the table reference isn’t locked.</li>
</ul>
<p>If your table has an absolute reference, it means that the rows and columns won’t change if copied. However, this isn’t the case with a relative reference. In this case, you will need to <a target="_blank" href="https://support.office.com/en-us/article/switch-between-relative-absolute-and-mixed-references-dfec08cd-ae65-4f56-839e-5f0d8d0baca9">switch to the absolute reference</a>.</p>
<p>You can customize the text of the #N/A error by using the <a target="_blank" href="https://support.office.com/en-ie/article/ifna-function-6626c961-a569-42fc-a49d-79b4951fd461">IFNA function</a>. In this case, you have to write a longer formula with IFNA that includes VLOOKUP. </p>
<p>Here’s an example of a formula that will return “not found” instead of #N/A:</p>
<p><code>=IFNA(VLOOKUP(value, table, column_index, FALSE), "not found")</code></p>
<p>And here is a formula that will return a blank result:</p>
<p><code>=IFNA(VLOOKUP(value, table, column_index, FALSE), "")</code></p>
<p>Although you can customize the message, you may consider using the #N/A error because it will immediately attract your attention and let you know if something goes wrong.</p>
<h2 id="heading-how-to-use-vlookup">How to Use VLOOKUP</h2>
<p>You may write formulas from scratch, or you may also use the Excel menu. Select the cell where you want to display the result, and then select the “Formulas” tab. </p>
<p>After this, click “Insert Function.” You will see a box where you can select categories of functions and choose the VLOOKUP function. You can also use the “Search for a function” box, and enter “vlookup.”</p>
<p>Select the function, and the “Function Argument” box will appear. Here you can enter the necessary parameters of the function. In this window, you should specify the unique identifier you’re looking for, database location, and the information that corresponds to the identifier that you want to retrieve.</p>
<p>These arguments are “Lookup_value,” “Table_array,” and “Col_index_num.” These fields are written in bold because these arguments are mandatory. </p>
<p>The fourth argument if for the lookup mode, and you may or may not specify it. The approximate mode is set by default.</p>
<p>To enter the first argument, which is the unique identifier, you can select the necessary cell and press Enter. In this case, the value of this cell will be automatically entered as the first argument of the VLOOKUP function.</p>
<p>Now you have to enter the second argument. The database shouldn’t necessarily start at the top left corner. For instance, you may also have a row that describes columns, which serves as a header. </p>
<p>“One of the best things about the VLOOKUP function is that the location of the database can also be customized,” notes Bridget Allen, an accountant at a <a target="_blank" href="http://bestwritersonline.com/">Best Writers Online</a>.</p>
<p>Given that VLOOKUP only works with numbers of columns, you should specify what area of your table you want to use for lookup. This is what the “Table_array” box is for. </p>
<p>For example, if your table starts at the top left corner, and its first row is a header, you can select the whole database without the first line. If your database has four columns (A-D) and five items in it, the table array will be A2:D6, because cells A1-D1 will contain the header.</p>
<p>You can click on the necessary worksheet tab, and select the area with the database. Press Enter and the selected range of cells will be automatically added to the second argument of the VLOOKUP function. Here is an example of a function argument:</p>
<p><code>‘database_name’!A2:D6</code></p>
<p>In this case, “database_name” is the name of the worksheet tab.</p>
<p>Now you only need to specify what information you want to retrieve and provide the number of the necessary column. </p>
<p>For example, if you want to retrieve the price of an item from the table at the beginning of this article, you should use the third row, and the “Col_index_num” value will be 3.</p>
<h2 id="heading-wrapping-up">Wrapping Up</h2>
<p>Microsoft Excel has a vast variety of functions that can help users deal with different calculations and other tasks. VLOOKUP is a very useful function that can retrieve information that corresponds to a certain value from a database table. </p>
<p>If you’re new to Excel, you may experience difficulties with this function because it has four arguments.</p>
<p>However, if you follow our guide, you’ll be able to select the right arguments and to use the right formulas. If you use this function a few times in practice, you will quickly understand how it works so you’ll be able to use VLOOKUP whenever you need it.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How I Passed the AZ-900 Microsoft Azure Fundamentals Exam ]]>
                </title>
                <description>
                    <![CDATA[ By Johan Rin You've probably heard about Amazon Web Services and the #AWSCertified challenge. But did you know that Microsoft is also a cloud provider and offers professional certifications as well? After passing 3 AWS certifications, I wanted to lea... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-i-passed-the-az-900-microsoft-azure-fundamentals-exam/</link>
                <guid isPermaLink="false">66d45f688812486a37369ce3</guid>
                
                    <category>
                        <![CDATA[ Azure ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Certification ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Microsoft ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 27 May 2020 14:00:00 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5f9c9acc740569d1a4ca27cd.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Johan Rin</p>
<p>You've probably heard about Amazon Web Services and the #AWSCertified challenge. But did you know that Microsoft is also a cloud provider and offers professional certifications as well?</p>
<p>After passing <a target="_blank" href="https://www.freecodecamp.org/news/how-i-passed-the-aws-certified-developer-associate-exam/">3 AWS certifications</a>, I wanted to learn new things and start with another cloud provider: Azure. </p>
<p>My objectives were to understand how Azure works and also pass a new certification. I decided to take the first exam, AZ-900: Microsoft Azure Fundamentals, to give myself a smooth transition from AWS to Azure.</p>
<p>In this post, I'm going to explain the Azure certifications as well as how to become Microsoft Certified.</p>
<p>Let's begin.</p>
<h2 id="heading-what-is-azure">What is Azure?</h2>
<p>Before explaining Microsoft certifications, I'll briefly introduce Azure.</p>
<p>Azure is Microsoft's cloud computing platform, which gives you the freedom to build, manage, and deploy applications on a massive global network using your favorite tools and frameworks.</p>
<p>Azure capabilities can be broken down in 8 main categories:</p>
<ol>
<li>Compute Services</li>
<li>Cloud Storage</li>
<li>Networking</li>
<li>App Hosting</li>
<li>Artificial Intelligence</li>
<li>Internet of Things</li>
<li>Integration</li>
<li>Security</li>
</ol>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/05/image-121.png" alt="Image" width="600" height="400" loading="lazy">
<em>Big-picture view of the available services and features in Azure</em></p>
<h2 id="heading-microsoft-certifications">Microsoft Certifications</h2>
<p>Microsoft offers certifications on their different products: Azure, Dynamics 365, Microsoft 365, Office, Power Platform, SQL Server, and Windows.</p>
<p>If we consider only the Azure product, we have 13 certifications grouped into 2 categories:</p>
<ul>
<li>Apps and Infrastructure</li>
<li>Data and IA</li>
</ul>
<p>Referring to the following technical job roles:</p>
<ul>
<li>Administrator</li>
<li>AI Engineer</li>
<li>Data Engineer</li>
<li>Data Scientist</li>
<li>Database Administrator</li>
<li>Developer</li>
<li>DevOps Engineer</li>
<li>Security Engineer</li>
<li>Solutions Architect</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/05/certs.png" alt="Image" width="600" height="400" loading="lazy">
<em>Microsoft Azure Certifications</em></p>
<h3 id="heading-developer-certification-path">Developer certification path</h3>
<p>For each certification, you can find the associated path in the <a target="_blank" href="https://docs.microsoft.com/en-us/learn/certifications/">documentation</a>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/05/Capture-d-e-cran-2020-05-16-a--14.41.05.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>The developer certification path requires two exams:</p>
<ol>
<li>Exam AZ-900: Microsoft Azure Fundamentals (optional)</li>
<li>Exam AZ-204: Developing Solutions for Microsoft Azure</li>
</ol>
<h3 id="heading-solutions-architect-certification-path">Solutions Architect certification path</h3>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/05/Capture-d-e-cran-2020-05-16-a--14.47.49.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>The solutions Architect certification path requires three exams:</p>
<ul>
<li>Exam AZ-900: Microsoft Azure Fundamentals (optional)</li>
<li>Exam AZ-300: Microsoft Azure Architect Technologies</li>
<li>Exam AZ-301: Microsoft Azure Architect Design</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/05/Capture-d-e-cran-2020-05-16-a--14.26.16-1.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>If you're familiar with AWS exams, you've probably noticed there was no Associate level for the Solutions Architect role. I've summarized the exam equivalence between AWS and Azure in this table:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/05/Capture-d-e-cran-2020-05-16-a--14.31.12.png" alt="Image" width="600" height="400" loading="lazy">
<em>Comparison between AWS and Azure exams</em></p>
<h2 id="heading-focus-on-az-900-microsoft-azure-fundamentals">Focus on AZ-900: Microsoft Azure Fundamentals</h2>
<p>Microsoft says the objective of this exam is to demonstrate foundational level knowledge of cloud services and how those services are provided with Azure. </p>
<p>No prior technical IT experience is required. Both technical and non-technical background candidates can take the exam.</p>
<h2 id="heading-what-skills-are-measured-during-the-exam">What skills are measured during the exam?</h2>
<p>From the skills outline, the skills tested during this exam are the following:</p>
<h3 id="heading-describe-cloud-concepts-15-20">Describe Cloud Concepts (15-20%)</h3>
<ul>
<li>Describe the benefits and considerations of using cloud services</li>
<li>Describe the differences between Infrastructure-as-a-Service (IaaS), Platform-as-a-Service (PaaS) and Software-as-a-Service (SaaS)</li>
<li>Describe the differences between Public, Private and Hybrid cloud models</li>
</ul>
<h3 id="heading-describe-core-azure-services-30-35">Describe Core Azure Services (30-35%)</h3>
<ul>
<li>Describe the core Azure architectural components</li>
<li>Describe some of the core products available in Azure</li>
<li>Describe some of the solutions available on Azure</li>
<li>Describe Azure management tools</li>
</ul>
<h3 id="heading-describe-security-privacy-compliance-and-trust-25-30">Describe Security, Privacy, Compliance, and Trust (25-30%)</h3>
<ul>
<li>Describe securing network connectivity in Azure</li>
<li>Describe core Azure Identity services</li>
<li>Describe security tools and features of Azure</li>
<li>Describe Azure governance methodologies</li>
<li>Describe monitoring and reporting options in Azure</li>
<li>Describe privacy, compliance and data protection standards in Azure</li>
</ul>
<h3 id="heading-describe-azure-pricing-service-level-agreements-and-lifecycles-20-25">Describe Azure Pricing, Service Level Agreements, and Lifecycles (20-25%)</h3>
<ul>
<li>Describe Azure subscriptions</li>
<li>Describe planning and management of costs</li>
<li>Describe Azure Service Level Agreements (SLAs)</li>
<li>Understand service lifecycle in Azure</li>
</ul>
<h2 id="heading-how-much-does-the-exam-cost">How much does the exam cost?</h2>
<p>If you were lucky enough to have attended Microsoft Azure Virtual Training Day: Fundamentals, you received a voucher allowing you to sit the exam for free.</p>
<p>Otherwise, it will cost you $99 USD, and you can <a target="_blank" href="https://docs.microsoft.com/en-us/learn/certifications/exams/az-900">schedule your online exam</a> with Pearson VUE.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/05/Capture-d-e-cran-2020-05-16-a--18.02.49.png" alt="Image" width="600" height="400" loading="lazy"></p>
<h3 id="heading-what-does-the-exam-look-like">What does the exam look like?</h3>
<p>From the <a target="_blank" href="https://www.microsoft.com/en-us/learning/certification-exam-policies.aspx">FAQ</a>, you have 60 minutes to answer between 40-60 questions. But I only had 32 questions in my exam. It was quite a nice surprise!</p>
<p>The exam presents several <a target="_blank" href="https://www.microsoft.com/en-us/learning/certification-exams.aspx">question types</a>:</p>
<ul>
<li>Multiple choice in different forms: one correct response and three incorrect responses, select correct description, two or more correct responses out of five or more options</li>
<li>Drag and drop: move the response to the correct description</li>
<li>Hot area: answer questions (screenshot, picture, or diagram) in a graphical form</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/05/image-118.png" alt="Image" width="600" height="400" loading="lazy"></p>
<h2 id="heading-how-to-prepare-for-the-exam">How to prepare for the exam</h2>
<p>There are a ton of resources to help with your exam preparation. Microsoft recommends using its online platform, Microsoft Learn, which provides learning paths and modules you can read at your own pace for free.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/05/Capture-d-e-cran-2020-05-17-a--10.45.43-1.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><a target="_blank" href="https://docs.microsoft.com/en-us/learn/paths/azure-fundamentals/">Azure fundamentals learning path</a> is the recommended course to prepare the AZ-900 exam. It's a 10-hour course containing 12 modules:</p>
<ol>
<li>Cloud Concepts - Principles of cloud computing</li>
<li>Create an Azure account</li>
<li>Core Cloud Services - Introduction to Azure</li>
<li>Core Cloud Services - Azure architecture and service guarantees</li>
<li>Core Cloud Services - Manage services with the Azure portal</li>
<li>Core Cloud Services - Azure compute options</li>
<li>Core Cloud Services - Azure data storage options</li>
<li>Core Cloud Services - Azure networking options</li>
<li>Security, responsibility, and trust in Azure</li>
<li>Apply and monitor infrastructure standards with Azure Policy</li>
<li>Control and organize Azure resources with Azure Resource Manager</li>
<li>Predict costs and optimize spending for Azure</li>
</ol>
<p>If you usually watch Andrew Brown's courses, you'll be disappointed by Microsoft Learn. The modules are plain text without any videos. Be ready to read and take notes!</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/05/Capture-d-e-cran-2020-05-17-a--11.10.45.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>I strongly recommend that you:</p>
<ol>
<li>Create a <a target="_blank" href="https://azure.microsoft.com/en-us/">free account</a></li>
<li>Read Azure services overview</li>
<li>Practice on your own with Azure quickstarts</li>
<li>Monitor your progress with the skills outline</li>
<li>Take practice exams</li>
</ol>
<p>Microsoft explains what you need to know for each service in the documentation. The explanations include, amongst others, a service overview and quickstarts you can experiment to have a better understanding.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/05/Capture-d-e-cran-2020-05-17-a--11.57.13.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Note: using the Azure portal is enough to practice because it's not an in-depth exam.</p>
<p>All these steps were enough to let me pass the AZ-900 ?</p>
<div class="embed-wrapper">
        <blockquote class="twitter-tweet">
          <a href="https://twitter.com/johanrin/status/1265221875183038464"></a>
        </blockquote>
        <script defer="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
<p>This exam is not difficult to pass! It takes time and practice to prepare but nothing impossible. The thing is to find your learning routine and progress by baby steps.</p>
<h2 id="heading-differences-from-the-aws-certified-cloud-practitioner-exam">Differences from the AWS Certified Cloud Practitioner exam</h2>
<p>You shouldn't underestimate how much preparation you'll need just because you have already passed the AWS Certified Cloud Practitioner exam.</p>
<p>You have to start from the beginning because 80% of the exam validates the Azure ecosystem, which is different from AWS.</p>
<p>I don't want you to make the same mistake I made. Don't compare each new service you learn with AWS. It will confuse you more than anything else. Some Azure services don't have their equivalent in AWS and vice versa.</p>
<p>Forget about AWS (while you're studying) to learn Azure!</p>
<p>Any questions? Feel free to contact me on <a target="_blank" href="https://twitter.com/johanrin">Twitter</a> or directly on the freeCodeCamp Discord channel. I will try my best to answer you.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How I landed offers from Microsoft, Amazon, and Twitter without an Ivy League degree ]]>
                </title>
                <description>
                    <![CDATA[ By Zhia Chong This is for those of you out there who are about to start your job search and who may be worried that you can’t land a top-tier tech job without a Stanford CS degree. Someone told you that you’re not good enough to get a job at ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-i-landed-offers-from-microsoft-amazon-and-twitter-without-an-ivy-league-degree/</link>
                <guid isPermaLink="false">66d461c857503cc72873deea</guid>
                
                    <category>
                        <![CDATA[ Backend Development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ career advice ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Career development  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ careers ]]>
                    </category>
                
                    <category>
                        <![CDATA[ coding ]]>
                    </category>
                
                    <category>
                        <![CDATA[ coding interview ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Facebook ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Google ]]>
                    </category>
                
                    <category>
                        <![CDATA[ internships ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Interviews ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Microsoft ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Twitter ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Sun, 23 Feb 2020 08:14:06 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2020/02/1_QuyFfwka5D5j7Z2IR4mcCQ.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Zhia Chong</p>
<p>This is for those of you out there who are about to start your job search and who may be worried that you can’t land a top-tier tech job without a Stanford CS degree. Someone told you that you’re not good enough to get a job at Microsoft or Facebook. </p>
<p>But I’m here to tell you that you can get that job. Here’s how I landed my dream job at Twitter.</p>
<p>Read more about my courses <a target="_blank" href="https://docs.google.com/document/d/1PeK69h4H82rwKjhactiE_sAIorCcZgXgXTY7k-nXpnE/edit?usp=sharing">here</a> to learn how I prepared.</p>
<p>You can read about my experiences after a year at Twitter <a target="_blank" href="https://www.freecodecamp.org/news/what-ive-learned-in-1-year-at-twitter-65150f5d4af2/">here</a>.</p>
<h3 id="heading-what-this-article-covers">What this article covers:</h3>
<ul>
<li>My background</li>
<li>How I landed interviews with top tech companies in the world: Facebook Google, Amazon, LinkedIn, Microsoft, Twitter, Pinterest, Snapchat, and others.</li>
<li>How I landed multiple offers as a full-time software engineer</li>
<li>Lessons from my interview experience</li>
<li>Subscribe <a target="_blank" href="http://eepurl.com/dnt9Sf">here</a> for more article updates from me</li>
</ul>
<p>If you prefer to watch my story instead, I made a video here:</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/83Reyvrs-VQ" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<h2 id="heading-background">Background</h2>
<p>I did not graduate from an Ivy league school. I went to a community college in Idaho for two years, and then finished my CS degree at a small Catholic university.</p>
<p>I started learning computer science in my junior year of college, because it sounded fun to me at the time. The only thing resembling a computer I had growing up was a Chinese copycat of the Nintendo SNES. Even then, it would break every time I put a cartridge in it.</p>
<p>To support myself through college, I took multiple part-time jobs like cleaning floors and working stand-up concessions.</p>
<p>When I graduated, I didn’t have a job lined up. I applied to as many big tech companies as I could, and had the good fortune of landing a few phone interviews.</p>
<p>At this point, I didn’t have a single notion of what a technical screen would be like, much less how to prepare for it. I headed into these interviews thinking that the interviewer would ask me what a linked list or binary tree was.</p>
<p>I <strong>didn’t pass</strong> any of those interviews.</p>
<h2 id="heading-moving-forward">Moving forward</h2>
<p>I didn’t delve too much into whether I was good. I knew that I could learn things fast. I just needed an opportunity.</p>
<p>As the saying goes, cast your net far and wide. So that’s what I did.</p>
<p>What I did next is something I’m particularly proud of. I wrote a simple Python script that scraped job listings on Craigslist with titles containing keywords from a list, and collected the emails in a spreadsheet. For the actual war story, you can read the article <a target="_blank" href="https://www.freecodecamp.org/news/how-i-built-a-web-crawler-to-automate-my-job-search-f825fb5af718/">here</a>.</p>
<p>It wasn’t the smartest solution, but people who post on Craigslist are surprisingly accurate with their titles.</p>
<p>Craigslist, however, didn’t like people scraping their website. To work around this, I ran my script through a VPN, and had a timer that would pause the script every few minutes or so. It wasn’t perfect, but it worked well enough.</p>
<p>In the end I collected about 500 emails from around San Francisco, Portland, Spokane, and Seattle. I filtered the results by how specific and recent they were, and kept improving it by adding more and more features.</p>
<p>As it turned out, there were a few bots in the market already that crawled Craigslist and sent out automated emails. These were mostly offshore companies that were looking to pitch their company to the US market.</p>
<p>One of my workarounds was that I crafted emails that used keywords from their listings in the title of my emails. I then added more details using the body of the postings to make it seem more personable. I did a quick A/B test, and the replies I received had increased quite a bit from around 2–3% to 10%.</p>
<p>Out of the 500 or so emails, I received about 50 replies, and landed phone screens with a small percentage of those. I stopped at 500 because I was short on time and needed to finalize a job as soon as possible. I was optimizing for results rather than reach at that point.</p>
<p>As luck would have it, I finally landed a job at a startup in Seattle as a junior software engineer. The startup was located in Kirkland at the time, so I had to take a 45-min bus ride to make it in time for the interview.</p>
<p>I then stayed there for the next 3.5 years, where I learned a great deal of stuff like Amazon AWS, EC2, DynamoDB, SQS, and Docker. I grew a lot during this period. I learned how to write modular, maintainable code. I learned how to reason about software design. And I learned how to handle people problems.</p>
<p>I was working next to a group of smart people who held jobs at Microsoft, Amazon, and LinkedIn, and I tried to be the “sponge” in the group. I absorbed anything and everything they threw at me. I believe this made a huge impact in my career.</p>
<h2 id="heading-startup-days">Startup Days</h2>
<p>During my stint at the startup, I worked almost exclusively on backend development, with some dev-ops in between. I started out writing some functions to add/modify a feature that were mostly small in scope. But it was a great opportunity to understand the codebase and get some code reviews.</p>
<p>A year into it, I started owning parts of the codebase, and then I was tasked with turning a set of features into a service. That was the start of the SOA phase for the startup. We started turning various components of the site into services, and that’s how I started learning more about RESTful services, authentication, AWS services, pub-sub, distributed systems and so forth.</p>
<p>The interesting part here is that <em>I didn’t learn about any of these through books or formal education.</em> Rather, I needed to get that set of features done and there were the bottlenecks.</p>
<p>So I thought, let’s go solve it!</p>
<p>There were many times where I was stuck in analysis paralysis — a state where I over-analyzed scenarios and ended up not able to make progress.</p>
<p>Those trying times were the <strong>greatest</strong> learning opportunities. I started to learn feature scoping, negotiations, monitoring, alerting, and documentation. Each step of the process revealed more things I needed to learn. I grew the most during these 2–3 years, both as an individual and software engineer.</p>
<h2 id="heading-how-i-prepared-for-my-interviews">How I prepared for my interviews</h2>
<p>After suffering through my first job search, I told myself that I must be prepared in future interviews.</p>
<p>I started preparing for interviews by charting out an overview of what I was good at, bad at, and where I could improve. I broke it down into three categories: <strong>data structures, algorithms, and system design.</strong></p>
<p>Having worked in PHP for most of my professional career, and C++ in college, I wanted to try something a little simpler and less verbose for interviewing.</p>
<p>For this reason, I picked Python. It is a great language to learn, easy to pick up, supports many data structures out of the box, and can be written quickly on the whiteboard. I learned Python by going through YouTube tutorials like <a target="_blank" href="https://www.youtube.com/watch?v=Z1Yd7upQsXY">these</a>, and also reading their documentation. I prefer Python 2.x, but you can go for either 2.x or 3.</p>
<p>Also, another reason why I picked Python is that it’s highly readable and easy to write on a whiteboard. Here’s a trivial comparison between C++ and Python.</p>
<p>A C++ program to sort in descending order:</p>
<pre><code class="lang-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;bits/stdc++.h&gt;</span></span>
<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> <span class="hljs-built_in">std</span>; 
<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{   
    <span class="hljs-keyword">int</span> arr[] = {<span class="hljs-number">1</span>,<span class="hljs-number">10</span>,<span class="hljs-number">0</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>};
    <span class="hljs-keyword">int</span> n = size(arr)/<span class="hljs-keyword">sizeof</span>(arr[<span class="hljs-number">0</span>]);   
    sort(arr, arr + n, greater&lt;<span class="hljs-keyword">int</span>&gt;());   
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i &lt; n; i++) {       
        <span class="hljs-built_in">cout</span> &lt;&lt; arr[i] &lt;&lt; <span class="hljs-string">" "</span>;   
    }    
    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
}
</code></pre>
<p>Compare that with Python’s version:</p>
<pre><code class="lang-py">a = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>,<span class="hljs-number">1000</span>]
a.sort(reverse=<span class="hljs-literal">True</span>)
<span class="hljs-keyword">print</span> a
</code></pre>
<p>I’ve received feedback from interviewers to <strong>err on the side of brevity</strong> in an interview. In a 45-minute interview, you want to use most of your time solving the actual problem.</p>
<p>Pro tip: pick a language that’s less verbose so that you can write the code more quickly on the whiteboard.</p>
<h2 id="heading-preparation-mode">Preparation mode</h2>
<p>I spent about a week going through simple challenges on LeetCode, HackerRank, and Project Euler to familiarize myself with their interfaces, and to get used to writing code in Python.</p>
<p>The first week gave me insights into my competence level at certain programming languages. I spent another week going through some design challenges like “design X” and went as wide and deep as I could.</p>
<p>This was a lot of fun for me, because I often looked at iOS apps and tried to figure out how they did it. For example, how would you build Instagram from scratch? (I was asked this at Facebook.)</p>
<p>My background is in API designs and service-oriented architecture, so I took this opportunity to show how I would design my own version of Instagram. And because I have some iOS programming experience from my side-projects, I could talk a little bit about callbacks and push/long-polls here.</p>
<p>I started the conversation with some features I’d like to have on my own version of Instagram: likes, upload a photo, and a simple timeline. Feature scoping enabled me to build a very solid API because I know these scenarios well.</p>
<p>I then drew some pictures of a high-level design, of how the client would interact with the backend, and of how the backend would store the data.</p>
<p>I started small, and then added more components where needed and proactively sought where the bottlenecks were. I made educated guesses (read <strong>educated, not blind guesses</strong>) on what the requirements would be, and how each technology would fit in well. And also equally important, what technologies would <em>not fit well.</em></p>
<p>For example, why would you use Cassandra over MySQL to store certain information (hint: scale, speed of development, schema reviews), why use OAuth over simple authentication, Redis vs Memcached for caching data, streaming vs batch processing, and so on.</p>
<p>There are many areas you can explore here, so typically a one-hour session is not enough. To do well on these questions, you have to read and learn about trade-offs. Pros and cons of technologies in the industry. For this, I recommend a site like <a target="_blank" href="http://highscalability.com/all-time-favorites/">HighScalability</a>.</p>
<p>Take it like a typical brainstorming session with a coworker, so explore <em>as widely and as deeply</em> as you can.</p>
<p>It’s crucial to know that these design interviews are meant to explore how much you know and how well you know it, and it’s <strong>an opportunity for you to shine.</strong> I watched this YouTube <a target="_blank" href="https://www.youtube.com/watch?v=ZgdS0EUmn70">video</a> from an ex-Facebook engineer about how to solve design problems, and it gave me insights that helped me tremendously with my design interviews. My two main lessons from it: <strong>drive the design conversation,</strong> and <strong>show what you know</strong>.</p>
<p>I listed out my competency level for: <strong>data structures</strong> (linked list, hash map, binary tree, binary search tree, heap, array), <strong>algorithms</strong> (binary search, hashing, dynamic programming, sorting), and <strong>language-specific syntax and libraries</strong> (like sort, lambda for Python, appending, indexing).</p>
<p>I picked the area I was worst at, and started working on it: <strong>algorithms</strong>.</p>
<p>Algorithms have never been my forte. It’s been a while since my college days, and I didn’t spend much time doing binary search in my day-to-day career. I had an inkling of how each algorithm would perform, and in what scenarios to use them. But I wasn’t 100% comfortable with writing a binary search in under 10 mins. On a whiteboard. In front of an interviewer.</p>
<p>I also picked up a bunch of fine-point markers from <a target="_blank" href="https://www.amazon.com/86601-Low-Odor-Markers-Assorted-8-Count/dp/B000Z88D2E/ref=sr_1_3?ie=UTF8&amp;qid=1518801079&amp;sr=8-3&amp;keywords=white+board+pens">Amazon</a>, which work amazingly well. Perhaps it’s just me, but the fine-point markers in interviewing rooms usually don’t work at all. I’d usually scramble for 2–3 mins looking for a working pen, and that’s 2–3 mins you can’t afford to waste. Plus, fine-point markers allow you to write 5–8 more lines of code on a typical whiteboard vs. thicker ones. :)</p>
<p>Pro tip: Get your own set of fine-point markers.</p>
<p>I got a whiteboard from Costco for $50, some books from Amazon (listed in the tools I recommend section below), and started practicing. I made sure I ramped up on binary search, recursion, dynamic programming, BFS and DFS. A lot of interviewing questions revolved around recursion and binary search or some variations of it.</p>
<p>The best interviewing questions I’ve seen had many different solutions to them, and there’s an additional layer added on top as you progress through.</p>
<p>One Google question I had was related to file-system directories, and how to traverse them (hint: recursion). I solved that relatively quickly, and the interviewer asked how to identify a missing file in that directory. That was a little more difficult, but I got through it. And we then moved into how to rebuild the directory, how to serialize/deserialize it, and we spent a good chunk of time debating how file directories work underneath the hood. It was a very enjoyable session for me.</p>
<h2 id="heading-interviewing-at-top-tier-companies">Interviewing at top-tier companies</h2>
<p>It was a nerve-wracking experience, to say the least, and a real roller-coaster.</p>
<p>I allocated my time in the following manner: 20% resume, 20% research and 60% interview preparation.</p>
<p>I spent 20% of my time fixing up my resume, which hadn’t been updated in at least three years. I took a hard look at the stuff I’ve done in the past, and picked projects I handled end-to-end, <strong>regardless of complexity.</strong></p>
<p>The reason for doing this is two-fold. Taking a project from start to completion demands discipline and leadership — two of the traits I’d like to be identified with.</p>
<p>Secondly, ownership of a project end-to-end means I can talk about each aspect of the project <strong>at length and in depth.</strong> This proved critical in helping me navigate my design round at Twitter, where they grilled me hard on not only the designs of my projects, but also the decisions behind them.</p>
<p>20% of my time was used for research. Research in this case meant doing due diligence on companies I was interested in and reaching out for referrals. Having referrals helps with return calls.</p>
<p>From my experience, I sent out 20 or so cold messages to startups and mid-stage companies, and only heard back from a handful. But, almost all the companies I was referred to by an existing employee sent me a message within a week. This is anecdotal, but there’s value to be had there.</p>
<p>I am not that sociable, and I didn’t know many people who’d be able to refer me to a company I was interested in. To solve that problem, I went on LinkedIn. They have a search functionality that I used to search for 1st and 2nd-level connections. 2nd-level connections are people who’re one hop away from your immediate circle. In other words, we have mutual friends who can <strong>vouch for my credibility</strong>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/02/linkedin-search.png" alt="Image" width="600" height="400" loading="lazy">
<em>LinkedIn search</em></p>
<p>This is incredibly important, because cold-calling someone for a job is very, very hard, especially in today’s market. People tend to err on the side of caution when it comes to cold-callers. Using LinkedIn was super helpful for my research phase.</p>
<p>Looking back at all the companies I interviewed at, here are my thoughts on each of them:</p>
<ul>
<li><strong>Facebook/Google</strong> — very mechanical. The standard interviewing process, and I didn’t feel any personal connection to them.</li>
<li><strong>Pinterest</strong> — not the best interviewing experience, but a cool product and company.</li>
<li><strong>Microsoft</strong> — loved the team and especially the manager and her manager. Standard interviewing questions, but very personable. Close-second choice. Your mileage may vary, though — each team at Microsoft interviews differently.</li>
<li><strong>Amazon</strong> — standard interviewing process. About 50% of the people love it, the others don’t.</li>
<li><strong>Twitter</strong> — incredibly fun and personal. Loved the interviewing process, gave a lot of emphasis on the individual and what I’d done in the past.</li>
<li><strong>Snapchat</strong> — cool office in LA, great bunch of people who decided to jump on the startup bandwagon. Felt like things were shrouded under a cloud of secrecy.</li>
<li><strong>Lyft</strong> — near to where I live, nice office, standard interviewing process. No strong feelings about it.</li>
</ul>
<h2 id="heading-lets-talk-about-my-favorite">Let’s talk about my favorite</h2>
<p>In many ways, I’d say Twitter’s interviewing style was hard. But at the same time, it was more interesting and personable than other companies I’ve interviewed at.</p>
<p>Their interviewing process starts with an introductory phone call with an engineering manager. That’s followed up by one or two technical phone screens, depending on how you perform. If you do well, they’ll fly you out to the office you’re interviewing for, which was Seattle in my case. There are three 1-hour-and-15-minute rounds, each with two interviewers.</p>
<p>The first two technical phone screens are the standard, run-of-the-mill technical screens where you solve coding problems on a shared coding doc.</p>
<p>The onsite rounds, however, are much more conversational and feel much less intimidating. The interviewers will ask you in-depth questions about your past projects, and they’ll grill you on what you’ve done in the past. If you claim ownership of a project, you should expect some questions about it. You’re encouraged to use them for references and to bounce ideas off of.</p>
<p>I never felt any pressure to magically come up with a fully working solution, and it felt highly collaborative.</p>
<h2 id="heading-the-others">The others</h2>
<p>In comparison, interviewing at Facebook and Google felt much more mechanical. They have one or two technical phone screens, and five to six onsite coding rounds. Each round involves some coding on a whiteboard, and you’re expected to come up with a near-perfect solution in a reasonable amount of time.</p>
<p>Facebook has two coding rounds, one design round, and one behavioral round.</p>
<p>I went through an additional shadow round at the end of the day, which didn’t count towards my overall score.</p>
<p>Google had five coding rounds, none of which focused on designs, and not a single interviewer asked about my previous projects. I don’t necessarily think this is bad. But I think it felt very mechanical and didn’t give much opportunity for the engineer to show what they’re capable of. Some people do well in these scenarios, much like some students do well in exams.</p>
<p>I <strong>did not enjoy</strong> my interview with Pinterest. I think the product itself is interesting, and their engineering team seems to be working on very cool technical <a target="_blank" href="https://medium.com/@Pinterest_Engineering">problems</a>. But I definitely had a negative experience during my interview there.</p>
<p>Pinterest has three coding rounds and one design round. Of those four rounds, the design round was most disappointing to me. Here’s why:</p>
<p>The interviewer came in late, and he spent a few minutes glancing over my resume before proceeding to draw some APIs on the board. He gave a short description of what he expected the API to do, and asked how I would solve it. We clarified the features of the API, and I started describing my solution using the whiteboard. About 5 minutes into it, I turned around and <strong>saw him taking a nap!</strong></p>
<p>Not cool.</p>
<p>I gave the recruiter my feedback in a survey, and I didn’t hear back from them after that.</p>
<p>I won’t delve into specifics of the questions I was asked during all the interviews. Instead, I’ll share some of the insights and useful tips I learned from my preparation process.</p>
<h2 id="heading-what-i-learned">What I learned:</h2>
<ul>
<li>Be <strong>honest</strong> on your resume. Most companies <em>will</em> ask you questions about your resume, and they can tell if you made it up. It’s better to be able to know <strong>100% about one project than to know 10% about 10 different projects.</strong></li>
<li>One-page resumes are <strong>recommended</strong>. This is especially true for tech companies, and it seems that the wisdom within the tech sphere is that you should reserve two pages and longer for post-doctoral work, or if you’ve done a lot of projects that you know and care deeply about. A friend of mine runs a <a target="_blank" href="https://www.jobscan.co/">company called Jobscan</a> that scans resumes and makes <em>specific, actionable</em> improvements on them. They’re pretty awesome, so try them out :)</li>
<li><strong>Socialize and establish a network</strong>. There’s a lot of competition for software engineering jobs, and these top tech companies are filtering through thousands of resumes a day. Having a referral will help you get some eyes on your resume.</li>
<li><strong>Nail</strong> your pitch. Every company that’s interested in you wants to know why you’re interested in them. <strong>A bad answer</strong>: I just need a job right now to pay bills. <strong>A less-bad answer</strong>: I was browsing online and found you guys. Sounds like you’re working on interesting things. <strong>A good answer</strong>: I know you’re doing some interesting work in X to achieve Y. I’ve done some work in the past and here’s what I learned about A, B, C that might be related to X. I am passionate about Y because blah. (<em>Don’t</em> use this as a template. Instead, you should see the pattern here — do your research, use your background, and show the company why both of you would fit well together.)</li>
</ul>
<h2 id="heading-some-more-advice">Some more advice</h2>
<p>Technical interviews are incredibly difficult, and sometimes it’s a hit-or-miss. The best opportunities, however, are reserved for those <em>who are prepared.</em></p>
<ul>
<li><strong>Prepare early, prepare <em>well</em></strong>. Everyone knows that they should prepare for an interview, but most don’t know how to do it <em>well</em>. As with anything worth doing, it takes deliberate practice to do well at something. And deliberate practice means you need to have a system.</li>
<li><strong>Build a system</strong> to practice technical skills. I started by rating myself from 1–10 on how good I was, and worked on the ones I was worst at. I spent days on different types of questions until I fully mastered each concept. And I <strong>wrote notes daily on Evernote</strong>. I had a note that serves as a brain dump for all things programming. It is full of programming tips &amp; tricks, common errors and misconceptions, frameworks for solving specific types of questions, and much more.</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/02/my-notebook.png" alt="Image" width="600" height="400" loading="lazy">
<em>My notebook</em></p>
<ul>
<li><strong>Keep a notebook</strong> of the things you’ve learned. I use both <a target="_blank" href="http://evernote.com">Evernote</a> and <a target="_blank" href="http://onenote.com">OneNote</a> to keep track of things. OneNote for technical stuff/code, because I like that I can easily format the note any way I like. I use Evernote for essays/thoughts. The image above shows a note I keep on architecture and system designs.</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/02/evernote.png" alt="Image" width="600" height="400" loading="lazy">
<em>Evernote for thoughts/tips</em></p>
<ul>
<li><strong>Jot everything down</strong>, even if you don’t think you’ll use it. I tend to forget very easily, so anything that I learn I write it down, including shell commands. I read technical blogs from time-to-time, and if I find anything interesting I jot it down on Evernote right away. I’ll revise it every week or month and reorganize accordingly. This has helped me tremendously over my career.</li>
<li><strong>Get mock interviews</strong>. This was definitely very valuable and I highly advise it. I had mock interviews with friends and tried to practice as much as I could. If you can’t find friends to practice with, then I recommend Refdash, which is an Interview-As-A-Service. They have a group of interviewers who work at big tech companies like Google, Facebook, and Microsoft. These interviewers will assess you on your coding and design skills. The best part of it is they’ll give you a score at the end of it with specific actionable items on how to improve.</li>
<li>It’s <strong>OK to fail. I failed multiple interviews during this whole process.</strong> Sometimes you just have a bad day. It’s not the end of the world if you fail. Companies are biased towards saying no because it’s a lower risk for them. A false positive costs more than a false negative in the long run. The first few rejections definitely stung the most. I failed multiple phone screens when I first started interviewing, and my confidence level sunk. I had doubts in my mind about my abilities and started fearing that my skills weren’t relevant in today’s job market. However, I gave myself a tip: If you fail 10 times, then try 10 times more. <em>All you need is one success.</em> That reassurance gave me a lot of confidence to keep pushing through and when my first offer came through, the other offers came much more easily.</li>
</ul>
<p>It took me about <strong>2 months</strong> of deliberate practice and preparation for my interviews. I spent about <strong>20 hours/week, or 80 hours/month,</strong> learning and writing notes on top of a full time job.</p>
<p>To build up my resume, it took 3.5 years of focused, deliberate work. I intentionally picked things that were tough and icky so that I could learn more than anyone else. Even though I don’t have a brand name university or top-tier tech company on my resume, I made up for it with a clear, thorough understanding of the projects I worked on. And this was possible because I researched and wrote down notes of everything I learned, and have a system to review them.</p>
<p>Remember: the strong survives, the tough thrives.</p>
<p>TL;DR: Don’t give up, set yourself up for opportunities, practice a lot, and stay hopeful. Focus on the process, and take a disciplined, dedicated approach to the process.</p>
<h3 id="heading-tools-i-recommend">Tools I Recommend</h3>
<ul>
<li><a target="_blank" href="https://amzn.to/2I80wup">Designing Data-Intensive Applications</a>: Awesome book for learning about scaling distributed systems! Highly recommended.</li>
<li><a target="_blank" href="http://amzn.to/2Dcs6Qd">Elements of Programming Interviews</a>: Great for solving coding problems.</li>
<li><a target="_blank" href="http://amzn.to/2Hj91OH">Cracking The Coding Interview</a>: Great for covering foundational CS coding problems.</li>
<li><a target="_blank" href="https://www.dailycodingproblem.com/zhiachong">Daily Coding Problem.com</a>: This is a free-to-try website that offers free daily coding problems. You can sign up for interesting daily coding challenges, and you can pay for solutions if you want.</li>
<li><a target="_blank" href="https://db.tt/tdUSP79S">Dropbox</a>: I keep all my files, pictures, resume here. Easy access, installed once and available everywhere. Love it ❤️ (If you sign up thru this link, both of us will get free 500MB!</li>
<li><a target="_blank" href="https://coderunnerapp.com/">CodeRunner</a>: I love this Mac app! I used this multiple times to run ad-hoc Python scripts/functions and it just works amazingly well. ?</li>
<li><a target="_blank" href="https://amzn.to/2D8FUxS">Kafka the Guide</a>: I used this book as a reference guide, and enjoyed it for the high-level description.</li>
</ul>
<p>(I share more resources I personally have used and recommend on <a target="_blank" href="http://zhiachong.com/resources">zhiachong.com</a>, if you’re interested in learning more.)</p>
<p>Thanks for reading my story! You can find me on <a target="_blank" href="https://twitter.com/zhiachong">Twitter</a> and <a target="_blank" href="https://www.linkedin.com/in/zhiachong/">LinkedIn</a>. I would love to connect and talk more about tech, startups, travel :D</p>
<p><strong>Credits:</strong></p>
<p><a target="_blank" href="https://twitter.com/hakczar">Brandon O’brien</a>, my mentor and good friend, for proof-reading and providing valuable feedback on how to improve this article.</p>
<p><a target="_blank" href="https://medium.com/@yksugi">YK Sugishita</a>, an up-and-coming Youtube star who left his job at Google to pursue his dreams, for proof-reading and giving critical feedback.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
