Agile’s Early Evangelists Wouldn’t Mind Watching It Die

“Way too much of agile has been not about technology, but about people and about managing things and about getting stuff done — not necessarily getting the right stuff done, but getting stuff done — rather than what engineering is about.

Agile has come to mean anything but the fundamental, underlying technical capability necessary to do really good software engineering.”

Source: Agile’s Early Evangelists Wouldn’t Mind Watching It Die

.NET 5 – One .NET to rule them all

There is No More .NET Core, it’s .NET 5

Here’s the umbrella of .NET 5 to the rescue. It’s a MAJOR change because of the following reasons:

As the first part of this unification scheme, Microsoft’s Xamarin mobile development platform will switch from using the Mono BCL to join other components leveraging the .NET Core BCL. With that move, Xamarin mobile development will be folded into .NET 5. That means that for the first time, one BCL-based framework will handle all app models:

  • ASP.NET Core
  • Entity Framework Core
  • Blazor
  • WinForms
  • WPF
  • Xamarin
  • ML.NET

Wait, WPF and WinForms made it into .NET 5? Yes, it’s true. Hello there, old friends! Nice to see them included in this runtime. The idea of using one SDK to build apps with is pretty exciting stuff, if you ask me.

Source: The Most Exciting Promise of .NET 5 | Okta Developer

PowerShell snippet: Get-Choice

You know when you want the user to make a choice, and you want him to type it out and get it right?

class Choice {    
    [string] $Key;
    [string] $Option;
    Choice($Key, $Option) {
        $this.Key = $Key
        $this.Option = $Option
  Read userinput and validate against choices
  Read userinput and validate against choices. Must match one of the keys. Not case sensitive.
 .Parameter Prompt
  Text to show when waiting for input
 .Parameter Choices
  List of Choice elements
 .Parameter NoHints
  Don't show list of hints for Choices
  $MyChoices = @(
      [Choice]::new('yes', 'Let me continue'), 
      [Choice]::new('no', 'I want to stop')
  $key = Get-Choice -Prompt "Do you want to continue?" -Choices $MyChoices
function Get-Choice {
    #    [OutputType([string])]
    param (
    $Hints = ""
    $Comma = ""
    $Opts = ""
    $Sep = ""
    $Choices | ForEach-Object {
        $Hints = $Hints + $Comma + '[' + $_.Key + '] ' + $_.Option
        $Comma = ', '
        $Opts = $Opts + $Sep + $_.Key 
        $Sep = '|'
    if (-not $NoHints) {
        Write-Host $Hints
    $pattern = $Opts.ToLower()
    $pattern = "¤¤$pattern¤¤" -replace "\|", "¤¤|¤¤"
    $ok = $false
    while (-not $ok) {
        [string]$userinput = (Read-Host -Prompt "$Prompt ($Opts)").ToLower()
        $userinput = ("¤¤$userinput¤¤" | Select-String -Pattern $pattern) -replace "¤¤" , ""
        $ok = ("$userinput" -ne "")
    return $userinput
} # Get-Choice

PowerShell snippet: Show-TextFile

You know those times that you need to show a log file or some text file?

  Open NotePad with the specified filename
  Open NotePad with the specified filename
 .Parameter FileName
  Name of text file to open
 .Parameter ScrollToEnd
  Scroll to the bottom of the opened file
 .Parameter Wait
  Wait for Notepad to close before continuing script
 .Parameter Kill 
  Kill Notepad after Timeout -Requires Wait
 .Parameter TimeOut 
  Timeout period in seconds - default = 300 - Requires Wait
  Show-TextFile -FileName 'C:\Some path\folder\filename.txt' -ScrollToEnd -Wait -Kill -TimeOut 30 
function Show-TextFile {
    param (
        [int]$TimeOut = 300
    if (Test-Path -Path $FileName) {
        $proc = Start-Process -FilePath 'NotePad.exe' -ArgumentList "$FileName" -NoNewWindow -PassThru
        if ($ScrollToEnd) { 
            # Use VBScript to send Ctrl-End keystroke to Notepad
            $wshell = New-Object -ComObject
            $title = Split-Path -path $FileName -Leaf
            Start-Sleep -seconds 0.5
            $wshell.AppActivate($title) | Out-Null
            $wshell.SendKeys('^{END}') | Out-Null
        if ($Wait) {
            Write-Host "To continue, close Notepad for '$FileName'"
            if (-not (Wait-Process -InputObject $proc -Timeout $TimeOut -ErrorAction SilentlyContinue)) {
                if (-not $Proc.HasExited) {
                    if ($Kill) {
                        Write-Host "Closed Notepad for $FileName"
                        Stop-Process -InputObject $proc -Force
                    } }
    else {
        Write-Warning "Show-TextFile -FileName not found: $FileName"
} # Show-TextFile

Embarcadero Launches, a Delphi-Centric Learning Ecosystem, to Promote Delphi Education provides a platform for Delphi developers and educators, along with free licensing options and ways to get involved. Embarcadero (a division of Idera, Inc.), a provider of cross-platform app development productivity tools, today announced the launch of, a learning ecosystem for Delphi developers, a teaching platform for Delphi educators, and a key destination for all things related to the Delphi is a collection of resources and free content for teaching and learning software development curated by and for Delphi developers. The site includes Delphi licensing options and resources such as ebooks, slideshows, and video tutorials, as well as ways to get involved. The content is compiled and supported by Embarcadero’s MVPs, community members, subject matter experts, and employees, and will be available in multiple languages over time. Potential contributors, educational liaisons, and educators are always welcome and encouraged to get involved.

Source: Embarcadero Launches, a Delphi-Centric Learning Ecosystem, to Promote Delphi Education