Azure Data Studio is officially retired

What happened


👉 What should you use now?

1. ✅ Primary replacement (Microsoft recommendation)

👉 Visual Studio Code + MSSQL extension

This is the official path forward.

  • Microsoft explicitly recommends migrating to VS Code (Microsoft Azure)
  • Use the MSSQL extension for SQL Server / Azure SQL
  • Supports:
    • Query editor
    • Connections & results
    • Azure SQL + SQL Server
  • Includes migration tools to import your ADS settings (Microsoft Learn)

💡 Reality check:
It’s not a 1:1 replacement yet, but it’s where all new features are going.


2. 🧱 Traditional (full-featured GUI)

👉 SQL Server Management Studio (SSMS)

Best if you want:

  • Full admin GUI
  • Mature tooling
  • Deep SQL Server features

Good for:

  • DBAs
  • Heavy admin work

3. 🌍 Cross-platform / multi-database tools

If you liked ADS for being lightweight + cross-platform:

  • DBeaver
  • Beekeeper Studio
  • DbGate

These often:

  • Support many DBs (Postgres, MySQL, SQL Server, etc.)
  • Feel closer to ADS simplicity
  • Are actively maintained (Beekeeper Studio)

4. 🍏 Native client alternatives (optional)

  • SQLPro for MSSQL
    • Fast, native app (especially on macOS)
    • Simpler than VS Code setup (SQLPro for MSSQL)

🧭 How to choose (quick guide)

  • You want “official + future-proof” → VS Code + MSSQL
  • You want full SQL Server power → SSMS
  • You want ADS-like simplicity → DBeaver / Beekeeper
  • You hate Electron apps → SQLPro / native tools

⚠️ Bottom line

Azure Data Studio isn’t being replaced by a single tool — it’s being split into:

  • VS Code (modern, extensible dev workflow)
  • SSMS (heavy-duty admin)
  • Third-party tools (if you want simplicity)

Upgrade the GitHub CLI


Step 1: Check Your Current Version

Before upgrading, it’s helpful to know which version you are currently running. Open your terminal and type:

Bash

gh --version

If you see a version number and a notification that a newer version is available, it’s time to update!


Step 2: Upgrade Based on Your OS

macOS

If you installed GitHub CLI using Homebrew (the most common method for Mac users), upgrading is a simple one-liner:

Bash

brew upgrade gh

Windows

On Windows, your upgrade path depends on how you originally installed it:

  • WinGet:PowerShellwinget upgrade --id GitHub.cli
  • Chocolatey:PowerShellchoco upgrade gh
  • Scoop:PowerShellscoop update gh
  • MSI Installer: If you used the .msi installer, simply download the latest version from the official releases page and run it; it will overwrite the old version.

Linux

For Linux users, you’ll typically use your package manager.

  • Ubuntu / Debian / Raspberry Pi OS:Bashsudo apt update sudo apt install gh
  • Fedora / CentOS:Bashsudo dnf upgrade gh
  • Arch Linux:Bashsudo pacman -Syu github-cli

Step 3: Verify the Upgrade

Once the process finishes, verify that you are on the latest version by running the version command again:

Bash

gh --version

Bonus: Keeping Authenticated

Upgrading shouldn’t affect your login status, but if you ever run into permission issues after an update, you can re-authenticate easily:

Bash

gh auth login

Virtual Box- startup Options

The following is a summary of startup options available in virtual box start up .

Start with GUI

This launches the VM in a standard window, complete with 3D graphics support—provided 3D acceleration is enabled, Guest Additions are installed, and the OS supports it.

Detachable vs. Headless

These modes are essentially the same: neither provides 3D acceleration, even if it’s enabled in the VM settings.

Start without GUI (Headless)

Think of this as “monitorless.” The VM’s graphics system runs, but no window appears—like a monitor turned off and tucked away. The guest OS still renders the GUI, which you can access remotely via native protocols or VirtualBox RDP/VNC. To display the window, click Show in VirtualBox Manager, which switches to Detachable mode. To hide it again, use Machine → Detach GUI. You can toggle between visible and hidden as needed.

Start with Detachable GUI

This is simply a headless VM with its monitor visible in a window. You can show or hide the window at will, using the same toggle options as in headless mode.

Git hub co pilot – A simple Introduction

Git Hub Copilot: A Simple Introduction

If you’re a software developer, chances are you’ve heard of GitHub and its ecosystem of tools and services. Recently, GitHub introduced Copilot, a powerful new feature that aims to change the way developers write code. In this blog post, we’ll explore what GitHub Copilot is, how it works, and what benefits it offers to the development community.

What is GitHub Copilot?

GitHub Copilot is an AI-powered pair programmer developed by GitHub and Microsoft. It suggests code snippets as you type, helping you to write more efficient and elegant code. The idea behind Copilot is to assist developers in their coding process by automating repetitive tasks and providing insights that can enhance the overall quality of the codebase.

How Does Copilot Work?

Copilot operates by analyzing the code in your repository and the vast amount of open-source code available on GitHub. It then uses this information to generate relevant code suggestions based on the context of your current work. The suggestions are dynamically updated as you code, offering real-time assistance throughout your development process.

Key Features

  • Code Completion: Copilot predicts and suggests code as you type, saving you time and effort.
  • Contextual Suggestions: The suggestions are contextually relevant, making them more useful and applicable to your specific coding situation.
  • Integration: Copilot integrates seamlessly with GitHub and Visual Studio Code, making it easy to use alongside your existing tools.
  • Customization: You can control the suggestions and fine-tune the AI to better suit your coding style.

Benefits of Using GitHub Copilot

  1. Enhanced Productivity: By automating the generation of code snippets, Copilot allows developers to focus more on the high-level logic of their applications rather than the minutiae.
  2. Code Quality: Copilot suggests well-structured and optimized code, which can lead to a more maintainable and efficient codebase.
  3. Learning Opportunities: For beginners or those looking to improve their coding skills, Copilot can provide valuable insights and examples.
  4. Collaborative Coding: Copilot can be used in pair programming scenarios, where multiple developers can work together on a codebase, improving the overall quality of the code.

Getting Started with GitHub Copilot

To start using Copilot, you’ll need to sign up for a GitHub account and install the GitHub desktop app or integrate it with Visual Studio Code. Once set up, simply open your repository and start coding. Copilot will begin offering suggestions as you type.

Tips for Using Copilot Effectively

  • Experiment with Suggestions: Try accepting and integrating Copilot’s suggestions to see how they fit into your code.
  • Customize Settings: Adjust Copilot’s preferences to better align with your coding style and preferences.
  • Review and Modify: While Copilot can save time, always review and modify the suggested code to ensure it meets your project’s requirements.

Conclusion

GitHub Copilot is a fascinating tool that leverages AI to assist developers in their coding journey. By providing real-time code suggestions and insights, Copilot can significantly enhance productivity and code quality. Whether you’re a seasoned developer or just starting out, Copilot is worth exploring to see how it can benefit your projects.

Are you ready to try GitHub Copilot? Sign up for a GitHub account and give it a go. Who knows, it might just change the way you write code!

Adding a Local Repository to GitHub Using GitHub CLI

 Create a new repository with GitHub CLI

  • Use the gh repo create command to create a repository for your project directly from the command line.
  • When prompted, choose “Push an existing local repository to GitHub” and enter your preferred repository name.
  • If you want the project to be created under an organization rather than your personal account, specify it as:gh repo create ORGANIZATION-NAME/PROJECT-NAME
  • Follow the interactive prompts
    • The CLI will guide you through setup options.
    • When asked whether to add the remote and push commits to your current branch, select Yes to complete the setup.
  • Skip prompts with command flags (optional)
    • To automate the process, include flags directly in your command:gh repo create --source=. --public --remote=origin --push
    • Here’s what each flag does:
      • --source=. → Uses your current directory as the repository source.
      • --public--private, or --internal → Sets repository visibility.
      • --remote → Specifies the remote name (commonly origin).
      • --push → Pushes all existing commits to GitHub automatically.
  • Learn more
    • See the official GitHub CLI Manual for additional flags, examples, and usage tips.

Adding a local repository to GitHub using Git

🚀 Steps to Add a Local Repository to GitHub Using Git

  • Authenticate to GitHub on the command line
  • Create a new repository on GitHub
  • Copy the remote repository URL
    • On the repository’s Quick Setup page, click the copy icon next to the URL to copy it to your clipboard.
    • (You’ll use this URL in the next command.)
  • Open Git Bash
  • Navigate to your local project directory
    • Use the cd command to switch to the folder containing your local repository.cd path/to/your/project
  • Add the remote repository URL
    • Run the following command to link your local repo to the remote GitHub repo:git remote add origin REMOTE-URL
    • Replace REMOTE-URL with the actual GitHub repository URL you copied earlier.
    • More info: Managing remote repositories
  • Verify the remote connection
    • Confirm that the remote URL is set correctly by running:git remote -v
  • Push your local repository to GitHub
    • Upload your local files to the GitHub repository using:git push origin main
    • If your default branch is named something other than main (e.g., master or dev), replace main with your branch name.
    • Learn more: About branches

How to Install and run small language Models Locally

You can use Ollama to run small language models locally on your laptop with ease! Here’s how to get started:

1. Install Ollama

  • Download Ollama from its official website.
  • For macOS/Linux, run this command in your terminal:curl -fsSL https://ollama.com/install.sh | sh
  • For Windows, download the installer and follow the setup instructions.
  • Note: To specify a custom location during installation , please refee Specify custom location for Ollama CLI

2. Download a Model

  • Ollama supports various models like Llama 3.2, Mistral, and Gemma.
  • To download a model, use:ollama pull llama3.2 This will store the model locally.

3. Run the Model

  • Once downloaded, you can run the model with:ollama run llama3.2
  • This will start an interactive session where you can input text and get responses.

4. Optimize Performance

  • Hardware Requirements:
    • At least 8GB RAM for smaller models.
    • 16GB+ RAM recommended for larger models.
    • GPU (NVIDIA/AMD) improves performance but is optional.

5. Explore More Features

  • Ollama provides an API for integration with tools like LangChain.
  • You can also run models in CPU-only mode, though it may be slower.

Specify custom location for Ollama CLI

You’ll need to use the installer’s executable file along with the /DIR parameter to specify your desired directory. For example, if you’re using windows & ollamasetup.exe and you want to install the software in a folder called ollama on your D: drive, you would enter the following command: ollamasetup.exe /DIR="d:/ollama"

To know all parameters type cd to the directory of ollamasetup and type ollamasetup.exe /help or ollamasetup.exe /?


Connect to Dynamics 365 CRM Online using a client ID and secret in a C# console app


1. Prerequisites

  • Install the Dynamics 365 SDK assemblies. You can install the necessary NuGet packages, such as:
  • Microsoft.CrmSdk.CoreAssemblies
  • Microsoft.CrmSdk.XrmTooling.CoreAssembly
  • Register your app in Azure Active Directory (AAD) to retrieve the client ID, client secret, and tenant ID.

2. Code Implementation

The following code demonstrates how to authenticate and interact with Dynamics 365 CRM using the CRM SDK:

using System;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Tooling.Connector;

class Program
{
    static void Main(string[] args)
    {
        string clientId = "Your_Client_ID";
        string clientSecret = "Your_Client_Secret";
        string tenantId = "Your_Tenant_ID";
        string crmUrl = "https://Your_CRM_Organization.crm.dynamics.com/";

        // Create connection string
        string connectionString = $@"
            AuthType=ClientSecret;
            ClientId={clientId};
            ClientSecret={clientSecret};
            TenantId={tenantId};
            Url={crmUrl};";

        // Establish connection
        CrmServiceClient serviceClient = new CrmServiceClient(connectionString);

        if (serviceClient.IsReady)
        {
            Console.WriteLine("Connected to CRM successfully!");

            // Example: Retrieve accounts
            IOrganizationService service = serviceClient.OrganizationServiceProxy;
            QueryExpression query = new QueryExpression("account")
            {
                ColumnSet = new ColumnSet("name", "accountnumber")
            };

            EntityCollection results = service.RetrieveMultiple(query);

            foreach (var entity in results.Entities)
            {
                Console.WriteLine($"Account Name: {entity.GetAttributeValue<string>("name")}, Account Number: {entity.GetAttributeValue<string>("accountnumber")}");
            }
        }
        else
        {
            Console.WriteLine($"Failed to connect: {serviceClient.LastCrmError}");
        }
    }
}

3. Explanation

  • Authentication: The connection string uses AAD authentication with the client ID, client secret, and tenant ID.
  • Connection: CrmServiceClient establishes a connection to Dynamics 365.
  • Query: The QueryExpression retrieves data from the CRM, such as accounts in this example.

Note : This article was created with assistance from AI and there could be mistakes / error

Statistics and Data Analysis Terminnologies-I

Variance

Variance in mathematics is a measure of how spread out the values in a set of data are. It quantifies the average squared deviation of each data point from the mean (average) of the dataset. In simpler terms, it tells us how far individual data points are from the center of the data.

The formula for variance is:

Where:

Higher variance means the data points are more spread out, while lower variance indicates they are closer to the mean.

Standard Deviation

Standard deviation tells us how much data points tend to deviate from the mean on average. A small standard deviation indicates that the data points are clustered closely around the mean, whereas a large standard deviation shows that the data points are spread out.

Example

Alright, let’s walk through an example to make the concept of standard deviation clearer!

Imagine you have the test scores of five students in a math exam: 80, 85, 90, 95, and 100. Here’s how we calculate the standard deviation step by step:

Step 1: Find the Mean

The mean ((\mu)) is the average of the data:
$$\mu = \frac{80 + 85 + 90 + 95 + 100}{5} = 90$$

Step 2: Calculate Deviations from the Mean

Subtract the mean from each score to find the deviations:

  • (80 – 90 = -10)
  • (85 – 90 = -5)
  • (90 – 90 = 0)
  • (95 – 90 = 5)
  • (100 – 90 = 10)

Step 3: Square Each Deviation

Square the deviations to eliminate negative values:


Step 4: Find the Average of the Squared Deviations

Add up the squared deviations and divide by the total number of data points ((n = 5)):
$$\text{Variance} (\sigma^2) = \frac{100 + 25 + 0 + 25 + 100}{5} = 50$$

Step 5: Take the Square Root of the Variance

The square root of the variance gives us the standard deviation:
$$\sigma = \sqrt{50} \approx 7.07$$

Final Result:

The standard deviation is approximately 7.07. This means that, on average, the test scores deviate from the mean by about 7.07 points.

Now, with this example, you see how the standard deviation helps visualize the spread of scores

Moving Averages

The moving averages method is a statistical technique used to analyze time-series data by smoothing out short-term fluctuations and highlighting trends or patterns over time. It’s often applied in fields like finance, economics, and sales forecasting.

Here’s how it works:

  1. Determine the Window: Choose the number of data points (known as the “window”) you want to consider for calculating the average. For example, you might decide on a 3-month or 5-day moving average.
  2. Calculate the Average: For each period, calculate the average of the chosen number of data points. This average is the moving average for that period.
  3. Shift the Window: Move the window one period forward (e.g., from days 1–5 to days 2–6) and calculate the next average.
  4. Repeat: Continue shifting the window and calculating averages across the entire dataset.

The result is a new series of data (the moving averages), which smooths out random variations in the original data, allowing you to better understand trends.

There are different types of moving averages:

  • Simple Moving Average (SMA): Equal weight is given to all data points in the window.
  • Weighted Moving Average (WMA): More weight is given to recent data points.
  • Exponential Moving Average (EMA): Uses a formula to give progressively more weight to recent data points.
sample c# code for moving averages
// Simple moving average calculation 
double[] data = { 10, 12, 14, 16, 18, 20, 22, 24, 26, 28 }; 
int windowSize = 3; 
double[] movingAverages = new double[data.Length - windowSize + 1]; 
for (int i = 0; i < movingAverages.Length; i++) { 
              movingAverages[i] = data.Skip(i).Take(windowSize).Average(); 
} 
Console.WriteLine("Moving Averages: " + string.Join(", ", movingAverages));
Explanation

Sure! Let me break down the code for you step by step:

Purpose

This code calculates the Simple Moving Average (SMA) of an array of numbers, given a specified window size.


Variables and Initialization

  1. double[] data:
    This array holds the input data (in this case, {10, 12, 14, 16, 18, 20, 22, 24, 26, 28}), which represents a time-series or sequential dataset.
  2. int windowSize:
    This is the size of the moving average window, set to 3. It determines how many consecutive numbers are used to calculate each average.
  3. double[] movingAverages:
    This array will store the computed moving averages. Its length is:
    $$\text{Length of data array} – \text{windowSize} + 1$$
    This ensures that the moving average calculation stops when the remaining data is insufficient to fill the window.

Loop Logic

The for loop iterates through the data array to calculate the moving averages:

  1. Iteration:
    The loop runs from i = 0 to i < movingAverages.Length. During each iteration, it computes the average of a specific slice (sub-array) of the input data.
  2. data.Skip(i).Take(windowSize):
  • Skip(i): Skips the first i elements of the data array.
  • Take(windowSize): Takes the next windowSize elements starting from the current position.
    For example:
  • At i = 0: Takes {10, 12, 14}
  • At i = 1: Takes {12, 14, 16}
  • At i = 2: Takes {14, 16, 18}, and so on.
  1. .Average():
    Computes the average of the selected windowSize elements and stores it in the movingAverages[i] array.

Output

After the loop finishes, all the calculated moving averages are stored in the movingAverages array. Finally, the code prints them using:

Console.WriteLine("Moving Averages: " + string.Join(", ", movingAverages));

This will output the moving averages as a comma-separated list.


Example

For the given data array and windowSize = 3:

  • Moving average for {10, 12, 14} = ((10 + 12 + 14) / 3 = 12)
  • Moving average for {12, 14, 16} = ((12 + 14 + 16) / 3 = 14)
  • Moving average for {14, 16, 18} = ((14 + 16 + 18) / 3 = 16)
  • And so on.

The final output will be:

Moving Averages: 12, 14, 16, 18, 20, 22, 24, 26

The Skip(i) function is used to shift the starting position of the window when calculating moving averages. Here’s why it’s necessary:

  • In the first iteration (i = 0), we want to start the window at the beginning of the data array, which includes the first three elements (e.g., {10, 12, 14}).
  • In the next iteration (i = 1), we want the window to move forward by one position, so it starts at the second element and includes the next three elements (e.g., {12, 14, 16}).
  • This shifting process continues for each subsequent iteration, ensuring that each moving average is calculated using the right set of consecutive numbers.

Without Skip(i), the function would always start from the beginning of the array, and you’d end up calculating the same average repeatedly instead of progressively shifting the window. By skipping i elements, the window moves forward as intended, covering all possible sets of data points.

In the first iteration ((i = 0)), nothing is skipped because (Skip(0)) means “skip zero elements”—essentially, it starts at the beginning of the array, so it includes 10, 12, and 14 as intended.

The confusion might stem from interpreting Skip(i) too literally. Here’s what happens step by step:

  • At (i = 0), data.Skip(0) takes the array as-is (no skipping), so it starts with {10, 12, 14}.
  • At (i = 1), data.Skip(1) skips the first element (10), resulting in {12, 14, 16} being taken.
  • At (i = 2), data.Skip(2) skips the first two elements (10, 12), resulting in {14, 16, 18} being taken.

The Skip(i) ensures the window shifts correctly as the loop progresses. But in the first iteration, nothing is skipped, and 10 is included in the moving average calculation.

Convolution

What is Convolution?

Convolution is a mathematical operation that combines two sequences (arrays) to produce a new sequence. It essentially slides one sequence (called the “kernel” or “filter”) across another sequence (the “input data”) and calculates weighted sums at each step.

Simple Example

Let’s use a very basic case:

Input Data:

Imagine you have the sequence:

Kernel (Filter):

The kernel is a smaller sequence:

How Convolution Works:

The kernel slides across the input data. At each position, we multiply the kernel values by the corresponding input values and sum them up.


Step-by-Step Calculation

Step 1: First Position

Align the kernel with the first three values of the input:
[ [1, 2, 3] ]
Multiply each input value by the corresponding kernel value:

So, the first result is -2.


Step 2: Second Position

Move the kernel one step to the right:
[ [2, 3, 4] ]
Multiply and sum:

The second result is -2.


Step 3: Third Position

Move the kernel again:
[ [3, 4, 5] ]
Multiply and sum:

The third result is -2.


Final Result:

The output of the convolution is:
[ [-2, -2, -2] ]


Why Is This Useful?

Convolution is used in many fields:

  • Moving Averages: To smooth data or detect trends.
  • Image Processing: To apply filters like blurring or edge detection.
  • Machine Learning: In convolutional neural networks for feature extraction.