<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Atahan C.</title>
    <description>The latest articles on DEV Community by Atahan C. (@atahanceylan).</description>
    <link>https://dev.to/atahanceylan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F26802%2Fe65c18e4-d400-47a8-94f2-21e33d11f04e.JPG</url>
      <title>DEV Community: Atahan C.</title>
      <link>https://dev.to/atahanceylan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/atahanceylan"/>
    <language>en</language>
    <item>
      <title>Track Spotify Metrics: Using Prometheus and Grafana</title>
      <dc:creator>Atahan C.</dc:creator>
      <pubDate>Mon, 29 Dec 2025 18:25:33 +0000</pubDate>
      <link>https://dev.to/atahanceylan/track-spotify-metrics-use-docker-with-prometheus-and-grafana-6g1</link>
      <guid>https://dev.to/atahanceylan/track-spotify-metrics-use-docker-with-prometheus-and-grafana-6g1</guid>
      <description>&lt;p&gt;After adding .Net Aspire Service Defaults and .Net Aspire AppHost to WinampToSpotify project I have added following code to run Prometheus and Grafana on local with Docker Desktop. Docker Desktop is required to run to start code below.&lt;/p&gt;

&lt;p&gt;// Prometheus container scraping the app&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var prometheus = builder.AddContainer("prometheus", "prom/prometheus")
.WithBindMount("./prometheus/prometheus.yml", "/etc/prometheus/prometheus.yml")
.WithEndpoint(port: 9090, targetPort: 9090)
.WithArgs("--config.file=/etc/prometheus/prometheus.yml",
"--web.enable-otlp-receiver");

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

&lt;/div&gt;



&lt;p&gt;// Grafana container using Prometheus as data source&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var grafana = builder.AddContainer("grafana", "grafana/grafana")
.WithVolume("grafana-storage", "/var/lib/grafana") // Persists dashboards, users, DB
.WithVolume("grafana-provisioning", "/etc/grafana/provisioning", isReadOnly: true) // Optional: Provisioning YAML/JSON
.WithEndpoint(port: 3000, targetPort: 3000);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;prometheus.yml is the default prometheus configuration&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;global:
  scrape_interval: 15s
  evaluation_interval: 15s
scrape_configs:
  - job_name: "otel-collector"
    static_configs:
      - targets: ["localhost:9090"]  # Adjust if using Docker, e.g., host.docker.internal:9464
    metrics_path: /metrics
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I created OpenTelemetryLib project and created ServiceCollection extension method which configures OTEL export endpoints. OpenTelemetry, OpenTelemetry.Exporter.Console, OpenTelemetry.Exporter.OpenTelemetryProtocol, OpenTelemetry.Exporter.Prometheus.HttpListener, OpenTelemetry.Instrumentation.Process nuget packages installed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
var meterProviderBuilder = Sdk.CreateMeterProviderBuilder()
              .SetResourceBuilder(
                ResourceBuilder.CreateDefault().AddService("winamptospotifyweb", serviceVersion: "1.0.0"))
              .AddMeter(WinamptoSpotifyMetricsManager.MeterName)
              .AddOtlpExporter((options, metricReader) =&amp;gt;
              {
                  options.Protocol = OtlpExportProtocol.Grpc; // 4317 as the grpc port.
                  options.ExportProcessorType = ExportProcessorType.Batch;
                  options.Endpoint = endpoint;
                  metricReader.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds = 60000; // 1 minute
                  metricReader.PeriodicExportingMetricReaderOptions.ExportTimeoutMilliseconds = 30000; // half a minute
              }) //Aspire Dashboard export
              .AddOtlpExporter((exporterOptions, metricReaderOptions) =&amp;gt;
              {
                  exporterOptions.Endpoint = new Uri("http://localhost:9090/api/v1/otlp/v1/metrics");
                  exporterOptions.Protocol = OtlpExportProtocol.HttpProtobuf;
                  metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds = 1000;
              }); //Prometheus export
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Spotify metrics class created to register spotify service related metrics. I started to keep track number of total tracks added by each folder.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
public class SpotifyServiceMetrics : IWinampToSpotifyWebMetrics
{
    private readonly ISpotifyService _spotifyService;
    public SpotifyServiceMetrics(ISpotifyService spotifyService)
    {
        _spotifyService = spotifyService; 
    }
    public void RegisterMetrics(Meter meter)
    {
        var tracksAddedMetric = meter.CreateObservableGauge("winamptospotifyweb.spotifyservice.totaltracksadded", () =&amp;gt; _spotifyService.GetPlaylistSummary().TotalTracksAdded,
        "unitless", "Number of tracks added");        
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;WinamptoSpotifyMetricsManager class helps to register metrics which uses IMeterFactory to register.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public WinamptoSpotifyMetricsManager(IEnumerable&amp;lt;IWinampToSpotifyWebMetrics&amp;gt; metrics, IMeterFactory meterFactory)
{
    _metrics = metrics.ToImmutableList();
    _meter = meterFactory.Create(new MeterOptions(MeterName));
}`

`/// &amp;lt;summary&amp;gt;
///     Registers all custom metrics contained within the WinampToSpotify instance.
/// &amp;lt;/summary&amp;gt;
public void Start()
{
    foreach (var metric in _metrics)
    {
        metric.RegisterMetrics(_meter);
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;winamptospotifyweb.spotifyservice.totaltracksadded metric exported to Aspire Dashboard, Prometheus and Grafana.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8stvlzatwdftl8qwwpe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8stvlzatwdftl8qwwpe.png" alt="Aspire Dashboard" width="780" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8sb5jbgaxx3u1i1lce3h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8sb5jbgaxx3u1i1lce3h.png" alt="Prometheus" width="780" height="148"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh3bazqyyb2j45um87o2y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh3bazqyyb2j45um87o2y.png" alt="Grafana" width="780" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Code changes can be found &lt;a href="https://github.com/atahanceylan/WinamptoSpotifyWeb/commit/7bc40569e66ccf93f4d6f9a9e00036402529836b" rel="noopener noreferrer"&gt;dotnet aspire added&lt;/a&gt; and &lt;a href="https://github.com/atahanceylan/WinamptoSpotifyWeb/commit/73731765e5c46556cd5225ff7c62badfcc5a95df" rel="noopener noreferrer"&gt;opentelemetry and metrics added&lt;/a&gt; commits.&lt;/p&gt;

</description>
      <category>aspire</category>
      <category>prometheus</category>
      <category>monitoring</category>
      <category>programming</category>
    </item>
    <item>
      <title>Integrating .NET Aspire with WinampToSpotify Project</title>
      <dc:creator>Atahan C.</dc:creator>
      <pubDate>Mon, 29 Dec 2025 10:19:33 +0000</pubDate>
      <link>https://dev.to/atahanceylan/integrating-net-aspire-with-winamptospotify-project-1-3c3m</link>
      <guid>https://dev.to/atahanceylan/integrating-net-aspire-with-winamptospotify-project-1-3c3m</guid>
      <description>&lt;p&gt;First of all, I have a hobby project called WinampToSpotify which helps you transfer your local mp3 folder archieve to spotify as a playlist. I decided to add .Net Aspire to WinampToSpotifyWeb solution. First article will be about adding .Net Aspire to project and second article will be about sending custom metrics to Aspire Dashboard and Prometheus.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is .Net Aspire?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://visualstudiomagazine.com/articles/2025/02/19/introduction-to-net-aspire.aspx" rel="noopener noreferrer"&gt;.NET Aspire is a cloud-native application stack designed to simplify the development of distributed systems in .NET. Introduced at Microsoft's 2024 Build developer conference, it provides a set of tools, templates, and libraries to help developers build and manage interconnected services efficiently. It streamlines cloud-native development by automating service discovery, managing configurations, and handling dependencies between services. It provides NuGet packages for seamless integration with services like Redis and PostgreSQL, complete with built-in telemetry and health checks. Developers benefit from tailored project templates and CLI tools for Visual Studio, along with a web-based dashboard that offers real-time observability through logs, metrics, and distributed tracing, simplifying monitoring and debugging.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adding Service Defaults&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/adding-dotnet-aspire-to-your-existing-dotnet-apps/#configure-service-defaults" rel="noopener noreferrer"&gt;The ASP.NET Core team has been lighting up features for cool features for things like tracing, health checks, and resiliency for years. That’s what Service Defaults does for you. You can just turn on Service Defaults and you’ve got smart logging, health checks, resiliency, etc. based on what the .NET team recommends for ASP.NET Core apps and services. If you want, you can easily edit the Program.cs file in the ServiceDefaults project, but you don’t have to. Just turn it on.&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Right-click on the solution and select Add &amp;gt; New Project.&lt;/li&gt;
&lt;li&gt;Select the .NET Aspire Service Defaults project template.&lt;/li&gt;
&lt;li&gt;Name the project ServiceDefaults (any name would work if you’re             feeling creative, but the instructions in this post assume you’re using ServiceDefaults).&lt;/li&gt;
&lt;li&gt;Click Next &amp;gt; Create.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu6r32q41alxjg7xw6xwm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu6r32q41alxjg7xw6xwm.png" alt="Service Defaults" width="780" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configure Service Defaults&lt;/strong&gt;&lt;br&gt;
Add a reference to the ServiceDefaults project in the  WinampToSpotifyWeb  project:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Right-click on the Api project and select Add &amp;gt; Reference.
Check the ServiceDefaults project and click OK.&lt;/li&gt;
&lt;li&gt;Right-click on the MyWeatherHub project and select Add &amp;gt; Reference.&lt;/li&gt;
&lt;li&gt;Check the ServiceDefaults project and click OK.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In WinampToSpotifyWeb  project, update their Program.cs files,adding the following line immediately after their &lt;code&gt;var app = builder.Build();&lt;/code&gt; line:&lt;br&gt;
&lt;code&gt;app.MapDefaultEndpoints();&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In WinampToSpotifyWeb project, update their Program.cs files, adding the following line immediately after their&lt;code&gt; var builder = WebApplication.CreateBuilder(args);&lt;/code&gt; line:&lt;br&gt;
&lt;code&gt;builder.AddServiceDefaults();&lt;/code&gt;&lt;br&gt;
Simplify launch and add a fancy dashboard with AppHost&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/adding-dotnet-aspire-to-your-existing-dotnet-apps/#step-2.-simplify-launch-and-add-a-fancy-dashboard-with-apphost" rel="noopener noreferrer"&gt;The AppHost has a lot of great features, but two of my favorite are the solutions to the problems above: it simplifies project launch and it adds an amazing dashboard to monitor and manage my app in my development environment. The best way to understand what it’s doing it to just add it to our solution.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adding an AppHost project&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the standard “add project” steps we ran through before with ServiceDefaults, but this time we’re going to pick “.NET Aspire App Host” as the project template. In Visual Studio 2022 or Visual Studio Code with the C# DevKit installed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Right-click on the solution and select Add &amp;gt; New Project.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the .NET Aspire App Host project template.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Name the project AppHost (again, any name would work).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click Next &amp;gt; Create.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz84x6apldsgjjqmz57y1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz84x6apldsgjjqmz57y1.png" alt="AppHost project" width="780" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add project references&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add a reference to the  WinampToSpotifyWeb  projects in the new AppHost project:&lt;/li&gt;
&lt;li&gt;Right-click on the AppHost project and select Add &amp;gt; Reference.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check the WinampToSpotifyWeb  project and click OK.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwg4nhljhtehasifdukgi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwg4nhljhtehasifdukgi.png" alt="project reference" width="780" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Orchestrate the Application&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the AppHost project, update the Program.cs file, adding the following line immediately after the &lt;code&gt;var builder = DistributedApplication.CreateBuilder(args);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;var app = builder.AddProject&amp;lt;WinampToSpotifyWeb&amp;gt;("winamptospotifyweb");&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We got the dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4o177ua8zr4vqn27sa2y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4o177ua8zr4vqn27sa2y.png" alt=".net aspire dashboard" width="780" height="141"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have Resources Tab,Console Tab for console logs, Structured Tab for structured logs, Traces tab for traces, Metrics tab for metrics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://aspire.dev/get-started/add-aspire-existing-app/?lang=csharp#bonus-content" rel="noopener noreferrer"&gt;Key advantages of Aspire over Docker Compose:&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Literally, less verbose — Yet, more expressive and powerful.&lt;/li&gt;
&lt;li&gt;No manual URL configuration — Services discover each other automatically.&lt;/li&gt;
&lt;li&gt;Type-safe references — Compile-time checking for service dependencies.&lt;/li&gt;
&lt;li&gt;Built-in dashboard — Observability without additional tools like Prometheus/Grafana.&lt;/li&gt;
&lt;li&gt;Development and deployment — Same orchestration code works locally and can generate Docker Compose or deploy anywhere.&lt;/li&gt;
&lt;li&gt;Integration libraries — Pre-built support for databases, caches, message queues with best practices.&lt;/li&gt;
&lt;li&gt;Language-agnostic — Works with C#, Python, JavaScript, many more, and containerized services.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can see my code changes on my github repo commit &lt;a href="https://github.com/atahanceylan/WinamptoSpotifyWeb/commit/7bc40569e66ccf93f4d6f9a9e00036402529836b" rel="noopener noreferrer"&gt;code changes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I will continue article with sending custom metrics to Aspire Dashboard and Prometheus, Grafana.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://visualstudiomagazine.com/articles/2025/02/19/introduction-to-net-aspire.aspx" rel="noopener noreferrer"&gt;(https://visualstudiomagazine.com/articles/2025/02/19/introduction-to-net-aspire.aspx)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/adding-dotnet-aspire-to-your-existing-dotnet-apps/" rel="noopener noreferrer"&gt;https://devblogs.microsoft.com/dotnet/adding-dotnet-aspire-to-your-existing-dotnet-apps/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aspire.dev/get-started/add-aspire-existing-app/?lang=csharp" rel="noopener noreferrer"&gt;https://aspire.dev/get-started/add-aspire-existing-app/?lang=csharp&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>programming</category>
      <category>aspire</category>
      <category>dotnet</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>OWASP Dependency Check</title>
      <dc:creator>Atahan C.</dc:creator>
      <pubDate>Wed, 05 Feb 2025 08:34:26 +0000</pubDate>
      <link>https://dev.to/atahanceylan/owasp-dependency-check-383a</link>
      <guid>https://dev.to/atahanceylan/owasp-dependency-check-383a</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/atahanceylan" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F26802%2Fe65c18e4-d400-47a8-94f2-21e33d11f04e.JPG" alt="atahanceylan"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/atahanceylan/owasp-dependency-check-on-azure-devops-5ap" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;OWASP Dependency Check on Azure DevOps&lt;/h2&gt;
      &lt;h3&gt;Atahan C. ・ Jan 27&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#azure&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#security&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#owasp&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#azuredevops&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>azure</category>
      <category>security</category>
      <category>owasp</category>
      <category>azuredevops</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Atahan C.</dc:creator>
      <pubDate>Tue, 28 Jan 2025 19:13:31 +0000</pubDate>
      <link>https://dev.to/atahanceylan/-bal</link>
      <guid>https://dev.to/atahanceylan/-bal</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/atahanceylan" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F26802%2Fe65c18e4-d400-47a8-94f2-21e33d11f04e.JPG" alt="atahanceylan"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/atahanceylan/owasp-dependency-check-on-azure-devops-5ap" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;OWASP Dependency Check on Azure DevOps&lt;/h2&gt;
      &lt;h3&gt;Atahan C. ・ Jan 27&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#azure&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#security&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#owasp&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#azuredevops&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>azure</category>
    </item>
    <item>
      <title>OWASP Dependency Check on Azure DevOps</title>
      <dc:creator>Atahan C.</dc:creator>
      <pubDate>Mon, 27 Jan 2025 20:22:18 +0000</pubDate>
      <link>https://dev.to/atahanceylan/owasp-dependency-check-on-azure-devops-5ap</link>
      <guid>https://dev.to/atahanceylan/owasp-dependency-check-on-azure-devops-5ap</guid>
      <description>&lt;p&gt;I will start this blog post with what is OWASP? And I will continue with OWASP Top 10 known security vulnerabilities. I will provide an example pipeline that has OWASP Dependency Check on Azure DevOps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is OWASP?&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/OWASP" rel="noopener noreferrer"&gt;The Open Worldwide Application Security Project is an online community that produces freely available articles, methodologies, documentation, tools, and technologies in the fields of IoT, system software and The OWASP provides free and open resources. It is led by a non-profit called The OWASP Foundation.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://owasp.org/www-project-top-ten/" rel="noopener noreferrer"&gt;The OWASP Top 10 is a standard awareness document for developers and web application security. It represents a broad consensus about the most critical security risks to web applications.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://owasp.org/www-project-top-ten/" rel="noopener noreferrer"&gt;Globally recognized by developers as the first step towards more secure coding.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://owasp.org/www-project-top-ten/" rel="noopener noreferrer"&gt;Companies should adopt this document and start the process of ensuring that their web applications minimize these risks. Using the OWASP Top 10 is perhaps the most effective first step towards changing the software development culture within your organization into one that produces more secure code.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next OWASP Top 10 will be published this year 2025. It seems they have 4 years of cycle for it. OWASP Top 10 websites &lt;a href="https://owasp.org/Top10/" rel="noopener noreferrer"&gt;https://owasp.org/Top10/&lt;/a&gt;, &lt;a href="https://www.owasptopten.org/" rel="noopener noreferrer"&gt;https://www.owasptopten.org/&lt;/a&gt; and Github repo is &lt;a href="https://github.com/OWASP/Top10" rel="noopener noreferrer"&gt;https://github.com/OWASP/Top10&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is OWASP Dependency Check?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;OWASP Dependency Check is a Software Composition Analysis (SCA) tool that attempts to detect publicly disclosed vulnerabilities contained within a project's dependencies.&lt;/p&gt;

&lt;p&gt;Dependency-Check is a software composition analysis utility that identifies project dependencies and checks if there are any known, publicly disclosed, vulnerabilities. Currently, Java and .NET are supported; additional experimental support has been added for Ruby, Node.js, Python, and limited support for C/C++ build systems (autoconf and cmake). The tool can be part of a solution to the OWASP Top 10 2017 A9-Using Components with Known Vulnerabilities previously known as OWASP Top 10 2013 A9-Using Components with Known Vulnerabilities.&lt;/p&gt;

&lt;p&gt;The OWASP Dependency Check Azure DevOps Extension enables the following features in an Azure Build Pipeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Software composition analysis runs against package references during build on both Windows and Linux build agents.&lt;/li&gt;
&lt;li&gt;Export vulnerability data to HTML, JSON, XML, CSV, JUnit formatted reports&lt;/li&gt;
&lt;li&gt;Download vulnerability reports from the build's artifacts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The OWASP Dependency Check Azure DevOps Extension can be added to your AzureDevops organization from this link &lt;a href="https://marketplace.visualstudio.com/items?itemName=dependency-check.dependencycheck" rel="noopener noreferrer"&gt;https://marketplace.visualstudio.com/items?itemName=dependency-check.dependencycheck&lt;/a&gt; Github repos is &lt;a href="https://github.com/dependency-check/azuredevops" rel="noopener noreferrer"&gt;https://github.com/dependency-check/azuredevops&lt;/a&gt; It is a free tool.&lt;/p&gt;

&lt;p&gt;I searched OWASP Dependency Check Azure DevOps Extension and added to my Azure DevOps organization.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frrn0gcf5b5alcdul7z9r.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frrn0gcf5b5alcdul7z9r.PNG" alt="Azure DevOps Marketplace" width="800" height="628"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is better to request NVD API key &lt;a href="https://nvd.nist.gov/developers/api-key-requested" rel="noopener noreferrer"&gt;https://nvd.nist.gov/developers/api-key-requested&lt;/a&gt; After filling the form they will send you API Key via e-mail. It took over 15 min to run OWASP dependency check without NVD API key. Adding API shortened the OWASP Dependency Check runtime.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0iffgfrxe9ocbnhpntgv.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0iffgfrxe9ocbnhpntgv.PNG" alt="NVD API Key field" width="800" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After adding extension, first I added Dependency Task to my WinampToSpotify Classic Pipeline. From Classic Pipeline Editor search for dependency and click add to the pipeline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvd856lrefn0xcq12q6gn.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvd856lrefn0xcq12q6gn.PNG" alt="Adding Dependecy Check Task to Classic Pipeline" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OWASP Dependency Check currently using .Net 8 so make sure your pipeline includes .Net 8 with Use Dotnet Task with version "8.x".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4cppx98xkw0yb3mjbvep.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4cppx98xkw0yb3mjbvep.PNG" alt="Classic Pipeline Successful Run after Dependency Check added" width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It took 3 minutes 22 seconds to finish Dependency Check.&lt;br&gt;
From Classic Pipeline we can see yaml version of OWASP Dependency check.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzmznjvtv76vy3wavz7cl.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzmznjvtv76vy3wavz7cl.PNG" alt="yaml of dependency task" width="761" height="658"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For yaml pipeline we need to store NVD API Key as secret variable not to reveal sensitive information outside. We can reach this secret variable with $(myNvdApiKey) in yaml file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ey7u4bcp91ju8qjv46a.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ey7u4bcp91ju8qjv46a.PNG" alt="myNvdApiKey" width="614" height="851"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can see below yaml changes to add OWASP Dependency. First task is to include .Net 8. Second task is dependency check task.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- task: UseDotNet@2
  displayName: 'Use .NET Core sdk 8.x'
  inputs:
    version: 8.x

- task: dependency-check.dependencycheck.dependency-check-build-task.dependency-check-build-task@6
  displayName: 'Dependency Check'
  inputs:
    projectName: WinamptoSpotifyWeb
    scanPath: WinamptoSpotifyWeb
    nvdApiKey: $(myNvdApiKey)

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fruv8769jay27nayxvrly.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fruv8769jay27nayxvrly.PNG" alt="Dependency Check on yaml based pipeline" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Successful yaml based pipeline run can be seen above. Yaml file is here &lt;a href="https://github.com/atahanceylan/WinamptoSpotifyWeb/blob/master/WinamptoSpotify.yml" rel="noopener noreferrer"&gt;https://github.com/atahanceylan/WinamptoSpotifyWeb/blob/master/WinamptoSpotify.yml&lt;/a&gt; if you want to have a look.&lt;/p&gt;

&lt;p&gt;Dependency check report can be found under Artifacts. I created report with HTML format. But it supports HTML, JSON, XML, CSV, JUnit formats as well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F23k48t1idkm5imqigg48.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F23k48t1idkm5imqigg48.PNG" alt="Artifacts -&amp;gt; Dependency Check -&amp;gt; dependency-check-report.html" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Report html can be viewed via browser. Report can be found &lt;a href="https://github.com/atahanceylan/WinamptoSpotifyWeb/blob/master/dependency-check-report.html" rel="noopener noreferrer"&gt;https://github.com/atahanceylan/WinamptoSpotifyWeb/blob/master/dependency-check-report.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa73nua562apyrpj3az8j.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa73nua562apyrpj3az8j.PNG" alt="dependency check report html on browser" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ko-fi.com/atahanceylan" rel="noopener noreferrer"&gt;Buy me a coffee&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/OWASP" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/OWASP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://owasp.org/www-project-top-ten/" rel="noopener noreferrer"&gt;https://owasp.org/www-project-top-ten/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.owasptopten.org/" rel="noopener noreferrer"&gt;https://www.owasptopten.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://owasp.org/Top10/" rel="noopener noreferrer"&gt;https://owasp.org/Top10/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/OWASP/Top10" rel="noopener noreferrer"&gt;https://github.com/OWASP/Top10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=dependency-check.dependencycheck" rel="noopener noreferrer"&gt;https://marketplace.visualstudio.com/items?itemName=dependency-check.dependencycheck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nvd.nist.gov/developers/api-key-requested" rel="noopener noreferrer"&gt;https://nvd.nist.gov/developers/api-key-requested&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>azure</category>
      <category>security</category>
      <category>owasp</category>
      <category>azuredevops</category>
    </item>
    <item>
      <title>Software Bill of Materials on Azure Devops</title>
      <dc:creator>Atahan C.</dc:creator>
      <pubDate>Mon, 13 Jan 2025 14:05:25 +0000</pubDate>
      <link>https://dev.to/atahanceylan/software-bill-of-materials-on-azure-devops-1on8</link>
      <guid>https://dev.to/atahanceylan/software-bill-of-materials-on-azure-devops-1on8</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/atahanceylan" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F26802%2Fe65c18e4-d400-47a8-94f2-21e33d11f04e.JPG" alt="atahanceylan"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/atahanceylan/creating-sbom-with-sbom-tool-and-cyclonedx-on-azure-devops-1de" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Creating SBOM with sbom-tool and CycloneDX on Azure DevOps&lt;/h2&gt;
      &lt;h3&gt;Atahan C. ・ Jan 8&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#azure&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#azuredevops&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#azurepipelines&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Creating SBOM with sbom-tool and CycloneDX on Azure DevOps</title>
      <dc:creator>Atahan C.</dc:creator>
      <pubDate>Wed, 08 Jan 2025 22:27:20 +0000</pubDate>
      <link>https://dev.to/atahanceylan/creating-sbom-with-sbom-tool-and-cyclonedx-on-azure-devops-1de</link>
      <guid>https://dev.to/atahanceylan/creating-sbom-with-sbom-tool-and-cyclonedx-on-azure-devops-1de</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq3zg8pfzr83oweenlyiq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq3zg8pfzr83oweenlyiq.png" alt="SBOM" width="800" height="178"&gt;&lt;/a&gt;&lt;br&gt;
What is SBOM?&lt;/p&gt;

&lt;p&gt;[A software bill of materials (SBOM) declares the inventory of components used to build a software artifact, including any open source and  proprietary software components. It is the software analogue to the traditional manufacturing Bill of Materials (BOM), which is used as part of supply chain management.&lt;/p&gt;

&lt;p&gt;An SBOM allows builders to make sure open-source and third-party software components are up to date and respond quickly to new vulnerabilities. Buyers and other stakeholders can use an SBOM to perform vulnerability or license analysis, which can be used to evaluate and manage risk in a product.&lt;/p&gt;

&lt;p&gt;While many companies use a spreadsheet for general BOM management, there are additional risks and issues in an SBOM written to a spreadsheet. It is best practice for SBOMs to be collectively stored in a repository that can be part of other automation systems and easily queried by other applications.](&lt;a href="https://en.wikipedia.org/wiki/Software_supply_chain" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Software_supply_chain&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;[Why do organizations need a Software Bill of Materials?&lt;/p&gt;

&lt;p&gt;High-profile security breaches like Codecov, Kaseya, and most recently Apache Log4j - all supply chain attacks -  prompted President Biden to issue a cybersecurity executive order (EO) detailing guidelines for how federal departments, agencies, and contractors doing business with the government must secure their software. Among the recommendations was a requirement for SBOMs, to ensure the safety and integrity of software applications used by the federal government.](&lt;a href="https://www.blackduck.com/blog/software-bill-of-materials-bom.html" rel="noopener noreferrer"&gt;https://www.blackduck.com/blog/software-bill-of-materials-bom.html&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;We covered so far what is Software Bill of Materials and what is used for. Let's add SBOM creation to our existing Azure DevOps Pipeline. I will start creating SBOM json with &lt;a href="https://github.com/microsoft/sbom-tool" rel="noopener noreferrer"&gt;Microsoft's SBOM Tool&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Adding SBOM generation to an Azure Devops Pipeline with SBOM Tool&lt;/p&gt;

&lt;p&gt;SBOM tool has a documentation for adding &lt;a href="https://github.com/microsoft/sbom-tool/blob/main/docs/setting-up-ado-pipelines.md" rel="noopener noreferrer"&gt;SBOM generation to an Azure DevOps Pipeline&lt;/a&gt;. I followed this documentation. And I changed my pool to vmImage to ubuntu-latest and add following 2 tasks under the steps of my &lt;a href="https://github.com/atahanceylan/WinamptoSpotifyWeb/blob/master/WinamptoSpotify.yml" rel="noopener noreferrer"&gt;WinamptoSpotify.yml&lt;/a&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pool:
  vmImage: ubuntu-latest
- task: UseDotNet@2      
inputs:
  packageType: 'sdk'
  version: '8.x'
- script: |
    dotnet build 
    $(System.DefaultWorkingDirectory)/WinamptoSpotifyWeb/
    WinampToSpotifyWeb.csproj --output 
    $(Build.ArtifactStagingDirectory)
  displayName: 'Build the project'
 - script: |
     curl -Lo $(Agent.TempDirectory)/sbom-tool 
     https://github.com/microsoft/sbom- 
     tool/releases/latest/download/sbom-tool-linux-x64
     chmod +x $(Agent.TempDirectory)/sbom-tool
     $(Agent.TempDirectory)/sbom-tool generate -b 
     $(Build.ArtifactStagingDirectory) -bc 
     $(System.DefaultWorkingDirectory)/WinamptoSpotifyWeb/ -pn Test - 
     pv 1.0.0 -ps MyCompany -nsb https://sbom.mycompany.com -V 
     Verbose
 displayName: Generate SBOM with sbom-tool

  - task: PublishBuildArtifacts@1
    inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;We can see SBOM report is created under Artifacts -&amp;gt; drop -&amp;gt; _manifest -&amp;gt; spdx_2.2 -&amp;gt; manifest.spdx.json.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzlspm9iszmsrj48auo6o.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzlspm9iszmsrj48auo6o.PNG" alt="Imanifest.spdx.json" width="800" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I discovered a website by &lt;a href="https://apps.rancher.io/sbom-viewer" rel="noopener noreferrer"&gt;Rancher SBOM Viewer&lt;/a&gt; that visualize json format SBOM reports.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhg3kre4hh6cb4qbhiajc.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhg3kre4hh6cb4qbhiajc.PNG" alt="Rancher SBOM Viewer" width="800" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After downloading json to my computer. I upload json file to Rancher SBOM Viewer. Output is below. Shows all package references with version and license.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fms0xudvyqnt35g3nmxzi.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fms0xudvyqnt35g3nmxzi.PNG" alt="Rancher SBOM Viewer Output" width="800" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Adding SBOM generation to an Azure Devops Pipeline with CycloneDX module for .Net&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/CycloneDX/cyclonedx-dotnet" rel="noopener noreferrer"&gt;The CycloneDX module for .NET creates a valid CycloneDX bill-of-material document containing an aggregate of all project dependencies. CycloneDX is a lightweight BOM specification that is easily created, human readable, and simple to parse.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Usage&lt;/p&gt;

&lt;p&gt;CycloneDX for .NET is distributed via NuGet and Docker Hub.&lt;/p&gt;

&lt;p&gt;Installing via NuGet&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dotnet tool install --global CycloneDX
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The following code will recursively scan the directory structure for packages.config and create a BOM:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dotnet CycloneDX /path/to/project -o /output/path
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The following will recursively scan the directory structure for packages.config and create a BOM:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dotnet CycloneDX /path/to/project -o /output/path
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Based on these instructions I added following 2 tasks to my &lt;a href="https://github.com/atahanceylan/WinamptoSpotifyWeb/blob/master/WinamptoSpotify.yml" rel="noopener noreferrer"&gt;WinamptoSpotify.yml&lt;/a&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- task: CmdLine@2
  displayName: 'Install CycloneDX dotnet tool'
  inputs:
      script: 'dotnet tool install --global CycloneDX -g'

- script: |
      dotnet CycloneDX  
$(System.DefaultWorkingDirectory)/WinamptoSpotifyWeb/
WinampToSpotifyWeb.csproj --json --output 
$(Build.ArtifactStagingDirectory)
  displayName: Generate SBOM with CycloneDX
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Default format for dotnet CycloneDX was XML but you can change it to json with "--json" argument in dotnet CycloneDX code.&lt;/p&gt;

&lt;p&gt;Artifacts -&amp;gt; drop -&amp;gt; bom.json&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjxtwy9wfksvrnkqezun.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjxtwy9wfksvrnkqezun.PNG" alt="bom.json" width="800" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rancher SBOM Viewer output of bom.json is below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6qwk9mwz9f3n15nkqouq.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6qwk9mwz9f3n15nkqouq.PNG" alt="Rancher SBOM Viewer output of bom.json" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ko-fi.com/atahanceylan" rel="noopener noreferrer"&gt;Buy me a coffee&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/Software_supply_chain" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Software_supply_chain&lt;/a&gt;&lt;br&gt;
[2]&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/Software_supply_chain" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Software_supply_chain&lt;/a&gt;&lt;br&gt;
[3]&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/Software_supply_chain" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Software_supply_chain&lt;/a&gt;&lt;br&gt;
[4]&lt;br&gt;
&lt;a href="https://www.blackduck.com/blog/software-bill-of-materials-bom.html" rel="noopener noreferrer"&gt;https://www.blackduck.com/blog/software-bill-of-materials-bom.html&lt;/a&gt;&lt;br&gt;
[5]&lt;br&gt;
&lt;a href="https://github.com/CycloneDX/cyclonedx-dotnet" rel="noopener noreferrer"&gt;https://github.com/CycloneDX/cyclonedx-dotnet&lt;/a&gt;&lt;/p&gt;

</description>
      <category>azure</category>
      <category>azuredevops</category>
      <category>azurepipelines</category>
    </item>
    <item>
      <title>Migrate from Classic to yaml pipelines on Azure Pipelines</title>
      <dc:creator>Atahan C.</dc:creator>
      <pubDate>Tue, 31 Dec 2024 18:26:02 +0000</pubDate>
      <link>https://dev.to/atahanceylan/azure-devops-converting-classic-pipelines-to-yaml-based-pipeline-44ii</link>
      <guid>https://dev.to/atahanceylan/azure-devops-converting-classic-pipelines-to-yaml-based-pipeline-44ii</guid>
      <description>&lt;p&gt;In this tutorial blog post, I will mention about how to transform old build, release classic pipelines to yaml based pipelines. Classic Pipeline is GUI based pipeline creator that you use drag and drop pipeline steps. In old versions of these pipelines you don’t have view as yaml option. So, you need to transform this GUI based pipelines to yaml pipelines.&lt;br&gt;
Prerequisites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Azure Devops account &lt;a href="https://dev.azure.com/yourusername/" rel="noopener noreferrer"&gt;https://dev.azure.com/yourusername/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Classic pipeline based build or release pipeline&lt;/li&gt;
&lt;li&gt;  yamlizr tool 
I created learning_azure_devops project under my &lt;a href="https://dev.azure.com/atahanceylan/" rel="noopener noreferrer"&gt;https://dev.azure.com/atahanceylan/&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl4hosgbwoepk24ru7ecx.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl4hosgbwoepk24ru7ecx.PNG" alt="Azure Devops Organizations" width="638" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I created a classic pipeline with WinampToSpotifyClassicPipeline from my Github WinampToSpotifyWeb repository.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F96wtjns74vx3oojs23sb.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F96wtjns74vx3oojs23sb.PNG" alt="Use the classic editor to create a pipeline without YAML." width="744" height="718"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfpg8t7mk1qx8kpb3m1y.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfpg8t7mk1qx8kpb3m1y.PNG" alt="Classic Pipeline GUI" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I ran the newly created pipeline and finished successfully.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjm2dkyru2081uf47b5ja.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjm2dkyru2081uf47b5ja.PNG" alt="Successful pipeline run" width="800" height="369"&gt;&lt;/a&gt;&lt;br&gt;
Now we need to use yamlizr tool for transformation. yamlizr is a .NET Global Tool which converts Azure DevOps Classic Designer Build/Release Definitions and any referenced Task Groups en-masse into their YAML Pipeline or GitHub Action equivalent.&lt;br&gt;
Installation/Set-up&lt;br&gt;
1-) We need to create a Personal Access Token from Azure Devops Settings with following scopes:&lt;br&gt;
Build - Read ,  Deployment Groups - Read &amp;amp; Manage, Release – Read, Task Groups - Read, Variable Groups - Read &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw054g5f9q6dngycgc7ol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw054g5f9q6dngycgc7ol.png" alt="Personal Access Token" width="407" height="523"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2olwux3lwuicooo83sgg.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2olwux3lwuicooo83sgg.PNG" alt="Personal Access Token Scopes" width="800" height="845"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2-) Download and install either;&lt;br&gt;
.NET 8.0 SDK&lt;br&gt;
.NET 9.0 SDK&lt;br&gt;
3-) From a command line shell install the tool;&lt;br&gt;
&lt;code&gt;dotnet tool update --global yamlizr&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjwpbaot00z5glajvj7ex.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjwpbaot00z5glajvj7ex.PNG" alt="Dotnet tool update globally" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4-) CLI Operation&lt;br&gt;
To generate YAML files in the c:/temp/myoutputfolder output folder execute the following command;&lt;br&gt;
&lt;code&gt;yamlizr generate -pat your personal access token -org https://dev.azure.com/atahanceylan/ -proj&lt;br&gt;
learning_azure_devops -out c:/temp/myoutputfolder&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjj8512uiaidka8luneft.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjj8512uiaidka8luneft.PNG" alt="Yamlzr cli code run output" width="800" height="282"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can see created yaml files under C:\Temp\myoutputfolder folder.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqn9n78bl5rj1bvhm14ih.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqn9n78bl5rj1bvhm14ih.PNG" alt="output folder" width="800" height="189"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frkcm1tt8ro4x18e48htd.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frkcm1tt8ro4x18e48htd.PNG" alt="build pipeline yaml" width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3n4cyrl2h1b5dqsj97eb.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3n4cyrl2h1b5dqsj97eb.PNG" alt="release pipeline output" width="800" height="156"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you can use yaml files in your pipelines.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>azuredevops</category>
      <category>azurepipelines</category>
      <category>yaml</category>
    </item>
    <item>
      <title>Azure Developer Certification AZ-204 Exam Preparation</title>
      <dc:creator>Atahan C.</dc:creator>
      <pubDate>Tue, 18 Jul 2023 10:26:46 +0000</pubDate>
      <link>https://dev.to/atahanceylan/azure-developer-certification-az-204-exam-preparation-17f9</link>
      <guid>https://dev.to/atahanceylan/azure-developer-certification-az-204-exam-preparation-17f9</guid>
      <description>&lt;p&gt;In this article I will try to give tips about preparing yourself for AZ-204 Azure Developer Certification Exam.&lt;br&gt;
&lt;a href="https://learn.microsoft.com/en-us/certifications/exams/az-204/" rel="noopener noreferrer"&gt;Main page of AZ-204 on Microsoft&lt;/a&gt;, this page should be your home during your AZ-204 preparation time 😊 You can get detailed information about exam and tips.&lt;br&gt;
Briefly described in this page: “Candidates should have at least 2 years of professional development experience and experience with Azure. They should be able to program in an Azure-supported language, and should be proficient using Azure CLI, Azure PowerShell, and other tools”&lt;br&gt;
Passing score is 700. You can get information about how score is calculated from &lt;a href="https://learn.microsoft.com/en-us/certifications/exam-scoring-reports" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcu1ukq2wpdmrqn0e82gv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcu1ukq2wpdmrqn0e82gv.png" alt="Exam Tips" width="624" height="110"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In my current company we are member of Enterprise Skills Initiative &lt;a href="https://esi.microsoft.com/" rel="noopener noreferrer"&gt;https://esi.microsoft.com/&lt;/a&gt;&lt;br&gt;
You can login with your company mail if your company joined this initiative website. Under &lt;a href="https://esi.microsoft.com/getcertification" rel="noopener noreferrer"&gt;https://esi.microsoft.com/getcertification&lt;/a&gt; Section you will find available certification exams. As you saw below you can schedule exam.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp77o58qwlorsqqghj1yt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp77o58qwlorsqqghj1yt.png" alt="ESI AZ-204 Section" width="624" height="180"&gt;&lt;/a&gt;&lt;br&gt;
Exam Preparation section gives details about exam. Weighted average of topics covered. Topics group under 5 sections of skills measured. You can watch these videos as starting point. &lt;a href="https://www.linkedin.com/in/neilmcisaac/" rel="noopener noreferrer"&gt;Neil McIsaac&lt;/a&gt; is giving high level information about sections. You can reach from &lt;a href="https://learn.microsoft.com/en-us/shows/exam-readiness-zone/preparing-for-az-204-develop-azure-compute-solutions-1-of-5" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh2j19tn02jpz3qsklx7u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh2j19tn02jpz3qsklx7u.png" alt="Skills measured" width="624" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From this platform it is possible to do practice tests. If you think you prepared enough both theoretical and practical for exam. There is no limitation on number of practice exam you can take, but questions repeat itself.&lt;br&gt;
I started with Microsoft Learn AZ-204 learning path. I read all documents and I tried the example codes from either provided sandbox or on my local. Microsoft Learn platform is a gamification-based platform so that you get XPs, badges, trophies after completing learning path modules.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkhsanlvuvpwtb9bit4hj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkhsanlvuvpwtb9bit4hj.png" alt="Learning Path on Microsoft Learn Portal" width="624" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqzya90phv6s7osvu1lol.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqzya90phv6s7osvu1lol.PNG" alt="Throphies XPs Learn Profile" width="800" height="175"&gt;&lt;/a&gt;&lt;br&gt;
You can reach all related learning paths for AZ-204 from &lt;a href="https://learn.microsoft.com/en-us/training/browse/?resource_type=learning%20path&amp;amp;filter-products=AZURE&amp;amp;terms=AZ-204" rel="noopener noreferrer"&gt;here&lt;/a&gt; You can skip Prepare to teach AZ-204 Developing Solution for Microsoft Azure it is for teaching about exam.&lt;br&gt;
Microsoft Learn also provides &lt;a href="https://microsoftlearning.github.io/AZ-204-DevelopingSolutionsforMicrosoftAzure/" rel="noopener noreferrer"&gt;Learning Path Labs&lt;/a&gt; which has 12 modules. You can gain practical experience on Azure from these labs.&lt;br&gt;
Pluralsight also provides a learning path for AZ-204. I completed this learning path as well. In videos they are giving theoretical information about Azure. This path consists of 19 video courses and 1 guide. There are Exam Alerts that gives you example scenarios which very beneficial for exam. Because in exam you are not asked directly what is what and what is used for what instead of they are giving you example scenario and you will think and try to solve scenario based on giving information in the question.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi7zfyemberkufttw15jr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi7zfyemberkufttw15jr.png" alt="Pluralsight Certifacation Exam Preparation" width="624" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have Pluralsight Premium it also possible to take practice exam provided by CyberVista as well. I took one practice exam from CyberVista. Questions were very similar to original certificate questions. I recommend taking this practical test before exam. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fge8bhe9r4kgauaf0iby6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fge8bhe9r4kgauaf0iby6.png" alt="Pluralsight AZ-204 Exam Preparation Learning Path Completed" width="206" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I read Mustafa Erhan Ersoy’s blog post about AZ-204 exam before exam, and I convinced to buy &lt;a href="https://www.udemy.com/course/az204-azure-practice/" rel="noopener noreferrer"&gt;this practice exam set&lt;/a&gt; prepared by &lt;a href="https://www.linkedin.com/in/scottjduffy/?originalSubdomain=pt" rel="noopener noreferrer"&gt;Scott Duffy&lt;/a&gt; from Udemy. If you don’t have Pluralsight account, you can also buy Scott Duffy’s &lt;a href="https://www.udemy.com/course/70532-azure/" rel="noopener noreferrer"&gt;course about AZ-204&lt;/a&gt;&lt;br&gt;
Not just before this exam but in earlier times I completed several courses from LinkedIn Learning.&lt;br&gt;
&lt;a href="https://www.linkedin.com/learning/azure-microservices-with-dot-net-core-for-developers/making-sense-of-microservices-architecture-in-a-dot-net-core-and-azure-ecosystem" rel="noopener noreferrer"&gt;Azure Microservices with .NET Core for Developers&lt;/a&gt; , &lt;a href="https://www.linkedin.com/learning/azure-event-grid/event-routing-with-azure-event-grid" rel="noopener noreferrer"&gt;Azure Event Grid&lt;/a&gt;, &lt;a href="https://www.linkedin.com/learning/azure-administration-implement-and-manage-application-services-2019/azure-app-services-that-work-for-you" rel="noopener noreferrer"&gt;Azure Administration: Implement and Manage Application Services (2019)&lt;/a&gt;, &lt;a href="https://www.linkedin.com/learning/exam-tips-developing-solutions-for-microsoft-azure-az-204/developing-solutions-for-microsoft-azure" rel="noopener noreferrer"&gt;Exam Tips: Developing Solutions for Microsoft Azure (AZ-204)&lt;/a&gt;&lt;br&gt;
LinkedIn Learning is also providing Learning Path for AZ-204 exam you can reach from &lt;a href="https://www.linkedin.com/learning/paths/prepare-for-the-azure-developer-associate-az-204-certification" rel="noopener noreferrer"&gt;here&lt;/a&gt;. &lt;br&gt;
My last advice is, schedule your exam when you are not working or any time you have at least half day off. Questions has lots of text in it, and you shouldn’t be tired when reading questions.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>devops</category>
      <category>cloudskills</category>
      <category>microsoft</category>
    </item>
    <item>
      <title>Winamp to Spotify</title>
      <dc:creator>Atahan C.</dc:creator>
      <pubDate>Thu, 27 Feb 2020 08:49:06 +0000</pubDate>
      <link>https://dev.to/atahanceylan/winamp-to-spotify-14jh</link>
      <guid>https://dev.to/atahanceylan/winamp-to-spotify-14jh</guid>
      <description>&lt;p&gt;Digital transformation affected our music listening habits. Before Spotify or any other online music library we used to have mp3 archieves in our hard drives. The aim of this side project is collecting mp3 filenames from harddisk and create Spotify Playlist based on selected folder. So you will be able to listen old songs that you cannot remember.&lt;/p&gt;

&lt;p&gt;To use this application you need a Spotify Developer Account. To use the Web API, start by creating a Spotify user account (Premium or Free). To do that, simply sign up at &lt;a href="http://www.spotify.com" rel="noopener noreferrer"&gt;http://www.spotify.com&lt;/a&gt; After creating a spotify developer account you should register an application through Dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fs59sahi3ztjihphtl8m3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fs59sahi3ztjihphtl8m3.gif" alt="Creating Application on Spotify API" width="1200" height="673"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After these 3 steps your application should be created successfully.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffqvj3ml5cc8efmem3owo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffqvj3ml5cc8efmem3owo.png" alt="Dashboard view after creating application" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After creating you will have ClientID and Client Secret values. After creating app from Edit Settings tab you should set Redirection URLs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftprrn9g23aa0dnddccd8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftprrn9g23aa0dnddccd8.png" alt="Redirection URLs and other settings" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By using &lt;a href="https://developer.spotify.com/console/get-current-user/" rel="noopener noreferrer"&gt;https://developer.spotify.com/console/get-current-user/&lt;/a&gt; link you can get your UserID of Spotify account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Frx0vwg6ol9t6zf18a6jg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Frx0vwg6ol9t6zf18a6jg.png" alt="Getting UserId by calling Spotify API" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To make application work ClientID, SecretID and UserID should be placed in exampleappsettings.config file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fljpskwv7bhe8vg848403.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fljpskwv7bhe8vg848403.png" alt="exampleappsettings.config file." width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After setting these config values application is ready to run. You can reach codes from &lt;a href="https://github.com/atahanceylan/winamptospotifyforms" rel="noopener noreferrer"&gt;https://github.com/atahanceylan/winamptospotifyforms&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I learned Access Token based authorization .Net app by &lt;a href="https://github.com/bmsimons/dotnet-core-spotify-authentication" rel="noopener noreferrer"&gt;https://github.com/bmsimons/dotnet-core-spotify-authentication&lt;/a&gt; github repo. Many thanks to Bart Simons (&lt;a href="https://bartsimons.me/" rel="noopener noreferrer"&gt;https://bartsimons.me/&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Here is GUI of WinampToSpotify windows form app:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1c8e82m85qp8y4mhdt7d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1c8e82m85qp8y4mhdt7d.png" alt="Winamp To Spotify Windows App" width="800" height="758"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First step is getting Access Token. After getting access token select folder to process.To simulate Oauth process with callback I used webbrowser code from &lt;a href="https://adndevblog.typepad.com/cloud_and_mobile/2016/10/3-legged-oauth-on-desktop-apps-c-winform.html" rel="noopener noreferrer"&gt;https://adndevblog.typepad.com/cloud_and_mobile/2016/10/3-legged-oauth-on-desktop-apps-c-winform.html&lt;/a&gt; post.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1r0rhfda60nqco0l9z7s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1r0rhfda60nqco0l9z7s.png" alt="After get token finished successfully." width="800" height="773"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Access token stored in an invisible textbox.&lt;/p&gt;

&lt;p&gt;Example folder I selected Black Eyed Peas.From selected folder path I get the Black Eyed Peas as a playlist name. For creating playlist in Spotify I made a post request to &lt;a href="https://api.spotify.com/v1/users/%7BYourUserId%7D/playlists" rel="noopener noreferrer"&gt;https://api.spotify.com/v1/users/{YourUserId}/playlists&lt;/a&gt; endpoint.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6zkneb9kyqxeusx0t37w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6zkneb9kyqxeusx0t37w.png" alt="Selecting mp3 folder" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjw7l94snl9cz54ew9kk8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjw7l94snl9cz54ew9kk8.png" alt="Folder view" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In project, SpotifyClient.GetTrackUri method created for each track name &lt;a href="https://api.spotify.com/v1/search?q=%7Btrackname%7D" rel="noopener noreferrer"&gt;https://api.spotify.com/v1/search?q={trackname}&lt;/a&gt;  endpoint called and Returned trackuri stored in dictionary. TrackUri is unique identifier for tracks in Spotify API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwh5342c2xkkkuh3tgyti.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwh5342c2xkkkuh3tgyti.png" alt="Output of application" width="800" height="667"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In project SpotifyClient.AddTrackToPlaylist method created for after getting all trackuri values these tracks added to created playlist. This is done by a post call to &lt;a href="https://api.spotify.com/v1/playlists/%7Bplaylist_id%7D/tracks" rel="noopener noreferrer"&gt;https://api.spotify.com/v1/playlists/{playlist_id}/tracks&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fiva49ul9xy84376czj9j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fiva49ul9xy84376czj9j.png" alt="Spotify Output" width="800" height="544"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All codes reachable for Windows Form Winamp to Spotify porject &lt;a href="https://github.com/atahanceylan/winamptospotifyforms" rel="noopener noreferrer"&gt;https://github.com/atahanceylan/winamptospotifyforms&lt;/a&gt;&lt;br&gt;
I also created Web application of Winamp to Spotify.First page is below starts with authenticating to Spotify.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwp9wtla1bujylty7o8fz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwp9wtla1bujylty7o8fz.png" alt="Alt Text" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After authenticating to Spotify API next page will welcome you. You should enter the path full to search mp3s.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxki39fwno5rctaayv6bg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxki39fwno5rctaayv6bg.png" alt="Alt Text" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhpd8ad0qfeiq05sj1r2n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhpd8ad0qfeiq05sj1r2n.png" alt="Alt Text" width="687" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I selected Scorpions folder. And folder processed and created playlist in Spotify.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6y9b2rm4o5jbplh8wh1k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6y9b2rm4o5jbplh8wh1k.png" alt="Alt Text" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fb6bc51t4mitbe28gbiyu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fb6bc51t4mitbe28gbiyu.png" alt="Alt Text" width="800" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can reach Winamp To Spotify web application codes: &lt;a href="https://github.com/atahanceylan/winamptospotifyweb" rel="noopener noreferrer"&gt;https://github.com/atahanceylan/winamptospotifyweb&lt;/a&gt;&lt;br&gt;
Any comments and suggestions are welcome.&lt;/p&gt;

</description>
      <category>winamp</category>
      <category>spotify</category>
      <category>webdev</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Common Challenges when Adapting Agile Project Management</title>
      <dc:creator>Atahan C.</dc:creator>
      <pubDate>Sat, 04 Jan 2020 18:42:24 +0000</pubDate>
      <link>https://dev.to/atahanceylan/common-challenges-when-adapting-agile-project-management-5aip</link>
      <guid>https://dev.to/atahanceylan/common-challenges-when-adapting-agile-project-management-5aip</guid>
      <description>&lt;p&gt;In today’s software development environment, requirements has been changing during the product development cycle so that they can respond to changes from customers. Therefore, software development becomes a challenge, adapting changed requirements when development is going on. In the mid 90’s, agile development techniques for software became available. This discipline was strongly influenced by the Japanese industry best practices, mainly the lean manufacturing principles implemented by Honda and Toyota as well as the Knowledge Management strategies suggested by Takeuchi and Nonaka (2004) and Senge (1990).&lt;/p&gt;

&lt;p&gt;Agile software development bases itself on an iterative and incremental approach. Software developers work on small modules, and respond to users’ changed requirements rather than follow a specific or predetermined plan of action. The basic design is simple, and changes are made as work progresses. Agile methods stress two concepts: the unforgiving honesty of working code and the effectiveness of people working together with goodwill. Working code tells the developers and sponsors what they really have in front of them — as opposed to promises as to what they will have in front of them. The working code can be shipped, modified, or scrapped, but it is always real.&lt;/p&gt;

&lt;p&gt;Agile software management methodologies are gaining popularity rapidly nowadays. This popularity comes from its flexibility to change. This approach has proved to be effective at solving many problems and at forging attractive work environments in many organizations. While it is not suited for everyone, it is suited for many. If your company will use Agile methodologies adopting to it another problem. This article will give you information about difficulties, challenges, issues with a categorical manner and how to avoid them.&lt;/p&gt;

&lt;p&gt;Getting an organization to switch to agile processes takes a lot of time and patience. How to adapt Agile methodology it is with the education. Experienced people bring practical knowledge from other situations and environments that can be helpful in avoiding pitfalls, in recommending tips and techniques for executing the project, and in coaching or supporting individual team members.&lt;/p&gt;

&lt;p&gt;Going agile requires executive, senior management, and middle management awareness and buy-in that something will change in the project management practices. They need to understand the benefits of the change as well as the details of how the change will affect operational aspects of the business. Furthermore, they need to understand what will be expected from them and what should change in their behavior. Many cultural and communication problems can be avoided or at least mitigated by aligning with all levels of management before adopting an agile methodology. Of failed Agile implementations, 63% of respondents in one study blamed the clash between their business’s culture and Agile’s business philosophy.&lt;/p&gt;

&lt;p&gt;Here are the type of challenges: The problems include issues with (1) communicating; (2) managing day-to-day operational problems; (3) gaining buy-in from management, customers, and team members; (4) changing culture and mindset; and (5) gaining experience and making it work. Of course, some of the issues and challenges are unique and occur due to differences and idiosyncrasies in the organization or the project.&lt;/p&gt;

&lt;p&gt;Imposing agile principles on process-centric, non-collaborative, optimizing organizations is likely to fail. Imposing a change embracing process on sedate project teams may not be reasonable. Attempting to get close user collaboration with organizations that have little time to spend with developers won’t work. The biggest limitation of agile methodologies is how they handle larger teams. Agile methodologies rely heavily on communication, so large teams make it difficult to use agile methods. There is a clear inverse relationship between agile techniques and project complexity. Agile development is more difficult with larger teams. The average project has only nine people, well within the reach of the most basic agile processes.&lt;/p&gt;

&lt;p&gt;Nevertheless, it is interesting to occasionally find successful agile projects with 120 or even 250 people. Agile development excels in exploratory problem domains — extreme, complex, high-change projects — and operates best in a people-centered, collaborative, organizational culture. This approach has proved to be effective at solving many problems and at forging attractive work environments in many organizations. While it is not suited for everyone, it is suited for many. They state that “project success is measured not just by completion of the scope of work to time, cost, and quality, but also by performance of the projects outputs, outcomes, and impacts.&lt;/p&gt;

&lt;p&gt;Inadequate experience with agile methods:&lt;/p&gt;

&lt;p&gt;• Little understanding of the required broader organizational change&lt;br&gt;
  • Company philosophy or culture at odds with agile values&lt;/p&gt;

&lt;p&gt;To build an effective team, Agile project managers must constantly practice and reinforce effective communication. Getting feedback early and often is a cornerstone of Agile project management, so being an effective communicator is important for management and individuals to ensure the customer is getting exactly what is needed — nothing more and nothing less. Getting a deliverable in front of a customer early helps teams learn more about purpose behind what they are developing so they can do it better.&lt;/p&gt;

&lt;p&gt;• Educate and Align with the Management Team&lt;br&gt;
  • How to adapt Agile methodology it is with the education.&lt;/p&gt;

&lt;p&gt;Going agile requires executive, senior management, and middle management awareness and buy-in that something will change in the project management practices. They need to understand the benefits of the change as well as the details of how the change will affect operational aspects of the business. Furthermore, they need to understand what will be expected from them and what should change in their behavior. Many cultural and communication problems can be avoided or at least mitigated by aligning with all levels of management before adopting an agile methodology.&lt;/p&gt;

&lt;p&gt;• Hire external consultants:&lt;/p&gt;

&lt;p&gt;Experienced people bring practical knowledge from other situations and environments that can be helpful in avoiding pitfalls, in recommending tips and techniques for executing the project, and in coaching or supporting individual team members. While having many team members with experience is ideal, the Agile Coach, Product Owner, and Agile Tester are three roles where experience is most appreciated, as those are the topics where the most issues surface.&lt;/p&gt;

&lt;p&gt;You and your organization should consider carefully why you need to be agile, how agile you really need to be, and what kind of projects need to be agile. After answering these questions, you can start discussion and planning to decide the right agile methodology. If adopting an agile methodology is not right for all projects or for the organization, then individual agile practices should be adopted in projects to reach a desirable level of agility. Day-to-day operational problems will occur. Having team members with experience and management buy-in can help management mitigate the negative impact of any issues, problems, or challenges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is a literature review. I mentioned my references below:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.researchgate.net/publication/230634624_Scrum_agile_product_development_method_-literature_review_analysis_and_classification" rel="noopener noreferrer"&gt;https://www.researchgate.net/publication/230634624_Scrum_agile_product_development_method_-literature_review_analysis_and_classification&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.academia.edu/7999605/Agile_Software_Development_The_People_Factor" rel="noopener noreferrer"&gt;https://www.academia.edu/7999605/Agile_Software_Development_The_People_Factor&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.umsl.edu/%7Esauterv/analysis/challenges_of_migrating_to_agile_methodologies.pdf" rel="noopener noreferrer"&gt;http://www.umsl.edu/~sauterv/analysis/challenges_of_migrating_to_agile_methodologies.pdf&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.altexsoft.com/whitepapers/agile-project-management-best-practices-and-methodologies/" rel="noopener noreferrer"&gt;https://www.altexsoft.com/whitepapers/agile-project-management-best-practices-and-methodologies/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.dsc.ufcg.edu.br/%7Egarcia/cursos/ger_processos/seminarios/Crystal/Agile%20Software%20Development%202%20The%20People%20Factor.htm" rel="noopener noreferrer"&gt;http://www.dsc.ufcg.edu.br/~garcia/cursos/ger_processos/seminarios/Crystal/Agile%20Software%20Development%202%20The%20People%20Factor.htm&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.pmi.org/learning/library/agile-problems-challenges-failures-5869" rel="noopener noreferrer"&gt;https://www.pmi.org/learning/library/agile-problems-challenges-failures-5869&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.business2community.com/marketing/15-incredible-agile-project-management-statistics-2018-01939694" rel="noopener noreferrer"&gt;https://www.business2community.com/marketing/15-incredible-agile-project-management-statistics-2018-01939694&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>agile</category>
      <category>challenges</category>
      <category>projectmanagement</category>
      <category>project</category>
    </item>
    <item>
      <title>Why Python so popular now?</title>
      <dc:creator>Atahan C.</dc:creator>
      <pubDate>Thu, 05 Dec 2019 09:43:01 +0000</pubDate>
      <link>https://dev.to/atahanceylan/why-python-so-popular-now-4d6c</link>
      <guid>https://dev.to/atahanceylan/why-python-so-popular-now-4d6c</guid>
      <description>&lt;p&gt;I would like you to tell about why Python programming language is becoming more popular nowadays. Python language is invented by Guido van Rossum in 1991. Its main target was code readability. From 2003 Python programming language entered the most popular programming languages and this popularity increasing linearly. You willl see popularity of a programming language index graph between 2003–2013. This graph is created by Google Trends data which is based on how often language tutorials are searched on Google. Guido van Russom worked at Google between 2005–2012. After Google he started to work in Dropbox now he is working at Dropbox. While he was working at Google, Google became more interested in Python language and started to use in some projects and became an official language. Some of projects listed on &lt;a href="https://quintagroup.com/cms/python/google"&gt;https://quintagroup.com/cms/python/google&lt;/a&gt;. Google also has free Python class in &lt;a href="https://developers.google.com/edu/python"&gt;https://developers.google.com/edu/python&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0NzJEuic--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/nvvi6ektjqv2nkr2h36x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0NzJEuic--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/nvvi6ektjqv2nkr2h36x.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
And now in 2019 Popularity of Programming Language chart is below. Python is the first by share nearly %30 and gained +4.2 popularity from previous year.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zCjpv6_t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/gilckfuxr4d7rdbdap4m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zCjpv6_t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/gilckfuxr4d7rdbdap4m.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this site (&lt;a href="http://pypl.github.io/PYPL.html"&gt;http://pypl.github.io/PYPL.html&lt;/a&gt;) it is shown that Python passed Java and grew by %19 percentage.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SXBlKrFH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/0exfomdziyjxxwux0mo9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SXBlKrFH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/0exfomdziyjxxwux0mo9.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another indicator of popularity of a programming language TIOBE index results showed below. The TIOBE Programming Community index is an indicator of the popularity of programming languages. The index is updated once a month. The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. Popular search engines such as Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube and Baidu are used to calculate the ratings. It is important to note that the TIOBE index is not about the best programming language or the language in which most lines of code have been written. Python placed 3rd and gain 1 step from previous month.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qFF84Lf6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/w5b7vz00ou2bd8xatqha.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qFF84Lf6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/w5b7vz00ou2bd8xatqha.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Up to this point, I showed the increase of Python programming language let's start to identify why Python becoming more popular. Python is very easy to learn because its syntax very close to English language. Python is a dynamic language that has no strict rules. That's why it is very enjoyable for who is learning programming for the first time. Fun is a great motivator. There is a fun fact about Python that its name not coming from snake it is coming from an English comedy group Monty Python (&lt;a href="http://www.montypython.com/pythons"&gt;http://www.montypython.com/pythons&lt;/a&gt;). According to research in 2014 July, Python is currently the most popular language for teaching introductory computer science courses at top-ranked U.S. departments. Specifically, eight of the top 10 CS departments (80%), and 27 of the top 39 (69%), teach Python in introductory CS0 or CS1 courses. Another reason is for becoming popular Python programming language is so versatile. Python is a general-purpose language, which means it can be used to build just about anything, which will be made easy with the right tools/libraries. Professionally, Python is great for backend web development, data analysis, artificial intelligence, and scientific computing. Python is second language after R in data mining. Python has 5th most crowded developer community, in GitHub 4th most used programming language. Python has 3rd most crowded group in In Meetup.com. Community is another key factor for interest growth.&lt;br&gt;
Large organizations that make use of Python include Wikipedia, Google, Yahoo!, CERN, and some smaller entities like ILM, and ITA. The social news networking site Reddit is written entirely in Python.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Applications for Python&lt;/b&gt;&lt;br&gt;
Python is used in many application domains. Here's a sampling.&lt;br&gt;
The Python Package Index lists thousands of third party modules for Python.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;Web and Internet Development&lt;/i&gt;&lt;br&gt;
Python offers many choices for web development:&lt;br&gt;
Frameworks such as Django and Pyramid.&lt;br&gt;
Micro-frameworks such as Flask and Bottle.&lt;br&gt;
Advanced content management systems such as Plone and django CMS.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;Python's standard library supports many Internet protocols:&lt;/i&gt;&lt;br&gt;
HTML and XML&lt;br&gt;
JSON&lt;br&gt;
E-mail processing.&lt;br&gt;
Support for FTP, IMAP, and other Internet protocols.&lt;br&gt;
Easy-to-use socket interface.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;And the Package Index has yet more libraries:&lt;/i&gt;&lt;br&gt;
Requests, a powerful HTTP client library.&lt;br&gt;
BeautifulSoup, an HTML parser that can handle all sorts of oddball HTML.&lt;br&gt;
Feedparser for parsing RSS/Atom feeds.&lt;br&gt;
Paramiko, implementing the SSH2 protocol.&lt;br&gt;
Twisted Python, a framework for asynchronous network programming.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;Scientific and Numeric:&lt;/i&gt;&lt;br&gt;
Python is widely used in scientific and numeric computing:&lt;br&gt;
SciPy is a collection of packages for mathematics, science, and engineering.&lt;br&gt;
Pandas is a data analysis and modeling library.&lt;br&gt;
IPython is a powerful interactive shell that features easy editing and recording of a work session, and supports visualizations and parallel computing.&lt;br&gt;
The Software Carpentry Course teaches basic skills for scientific computing, running bootcamps and providing open-access teaching materials.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;References:&lt;/b&gt;&lt;br&gt;
&lt;a href="https://cacm.acm.org/blogs/blog-cacm/176450-"&gt;https://cacm.acm.org/blogs/blog-cacm/176450-&lt;/a&gt; python-is- now-the- most-popular-introductory-teaching- language-at- top-u- s-universities/fulltext&lt;br&gt;
&lt;a href="http://pypl.github.io/PYPL.html"&gt;http://pypl.github.io/PYPL.html&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiobe.com/tiobe-index/"&gt;https://www.tiobe.com/tiobe-index/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.monitis.com/blog/why-python-"&gt;https://www.monitis.com/blog/why-python-&lt;/a&gt; is-becoming- so-popular/&lt;br&gt;
&lt;a href="http://dataconomy.com/2015/01/python-packages-"&gt;http://dataconomy.com/2015/01/python-packages-&lt;/a&gt; for-data- mining/&lt;/p&gt;

</description>
      <category>python</category>
      <category>programminglanguages</category>
      <category>tiobe</category>
    </item>
  </channel>
</rss>
