Blog

Learning on Innovative Teams

I've been reading the book Failure is Not an Option by Gene Kranz. Gene Kranz was the flight director for the Apollo missions, and came up through the Mercury and Gemini missions.

C# Programming

Spot the Bug - FOR Loops

The next bug in the Spot the Bug series is one that is seen quite often from new programmers. Can you spot the bug?

C# Powershell Programming Scripting

Spot the Bug - File Globbing

The bug in this post comes from the world of scripting. Powershell is used for the code below, but this bug could be introduced in any scripting language that is commonly used for task automation. Can you spot the bug?

C# Programming

Spot the Bug - Using Statement Part 2

I introduced the "Spot the Bug" exercise previously. This is the next bug in the series.

Azure Cloud F# Programming Serverless

Accessing Config Data in Azure Functions with F#

I've been building an application using Azure Functions with F# as the API backend. The Azure Functions access data in Azure Storage to return to a single page web application. For development purposes, I've had the connection string hard-coded in the F# files that needed it. I'm at a point where I need to start deploying this app in a production manner, so I need to get the connection strings out of my code. The documentation for Azure Functions recommends using environment variables in production, and the local.settings.json file for development. Reading these values should have been trivial, but wasn't. This post documents how I was finally able to read data from environment variables.

C# Programming

Spot the Bug - Using Statement Part 1

Several months ago, I was reviewing some C# code of one of my teammates when I realized there was a subtle bug in the program. The bug was not easy to see right away. I realized that C# had certain constructs in place to make it difficult to create bugs like this. These constructs are great, but they mask certain design principles and make it possible to learn programming without learning the underlying design principles. I reviewed the bug in question with my team during a code review and made it kind of a game to find the bug and talk about the underlying design principles.

F# Programming

Moving to Functional Thinking

I've been working on an educational-based site to help teachers evaluate students. I'm using F# for the backend API, and the regular use of a functional programming language has me thinking differently about how I code.

F# kata

F# Kata - Merging Two Lists

I recently did a C# kata where I had to write a function that merged two arrays of strings together, ensuring that the resulting array only contained distinct strings. It was straightforward to write in C#, but I kept thinking I could do it easier in F#. I was right. My code is below:

Cloud CloudNative Programming

Cloud-Native Design Techniques - Scale

Designing systems for the cloud, or to be cloud-native, is all the rage right now. There are numerous articles written about this, but most of them come across like partial cooking instructions where the reader is expected to know the recipe already. I want to talk about cloud-native design, but not make any assumptions about prior knowledge.

Azure Cloud F# Programming Serverless

F# and Azure Functions

Lately I've been creating tools for my wife to use with her classroom to help with distance learning. I've implemented these tools using Azure Functions. Azure Functions are the serverless computing option on the Azure platform. I picked these because I'm familiar with Azure and they are a quick, cheap option for standing up an API.

F# Programming

F# Records

My previous post F# - Refactoring to Functional - Part 1 garnered some attention for my use of the struct data type.

Microsoft's Project Tye

I just read through a blog post about Microsoft's Project Tye. This is an experimental project that helps developers run multiple apps under a single command. It also has some service discovery elements and a deployment capability for Kubernetes.

F# Programming

F# - Refactoring to a Functional Design - Part 1

Shortly after the coronavirus pandemic started, I started trying to create web-based tools for my wife (who is a preschool teacher) to evaluate the progress her students are making with distance learning. I reached for Azure Functions first since they are quick for implementing a publicly visible API. As I created and worked with this new API, I needed a way to test the end points to make sure they worked the way I needed them to work. I decided to create a tool in F# to do this testing.

Cloud Programming Serverless

Quick Intro to Azure Functions

I've been working on a small web application for my wife to help her evaluate her preschool students. I created this application as a single page application (SPA) and backing APIs. For the SPA, I used VueJS. For the backing API, I used Azure Functions.

F# Programming

F# Active Patterns

My company deals with file parsing quite a bit, and I've been playing around with F# to see if I could write a better file parsing library using it instead of what we currently use in the C# world. This experimentation led me to F# Active Patterns.

F# Programming

F# Sequence

When I was learning how to work with files, I was introduced to the seq keyword. This keyword is used to create a Sequence in F#. Sequences are powerful because they basically implement the IEnumerable <T> data structure in .NET.

F# Programming

Learning F# - Odds and Ends

Now that I've gotten through my basic steps to "learn" a new programming language, I'm ready to actually start learning the language. What do I mean by this? When I studied martial arts, my teacher always said "You don't start learning something until you've done it 10,000 times." This seems like an exaggeration, but it's true!

F# Programming

Learning F# - Step 6

The next step in my learning journey for a new language is to figure out how to access web APIs.

F# Programming

Learning F# - Step 5

The next step for me in learning a new language is interacting with a database. This step has kicked my butt!

Programming Testing

Question about Automated Tests

I received a question from a friend about end-to-end testing. The question was: "Is it wise to try to build end to end test automation around an intermittently unstable web app?" Instead of sending him my answer directly, I thought I would put my answer in a blog post.

F# Programming

Learning F# - Step 4 Revisited

I know I should be writing about using F# to connect to a database, but I had to come back to working with files. (Learning the database interaction is taking me longer, and I'll explain why in that post.)

F# Programming

Learning F# - Step 4

In this next step of learning F#, I want to interact with the file system. Once I can read and write files, I can use a programming language for day-to-day scripting needs, which helps me get more comfortable with the language's features.

F# Programming

Learning F# - Step 3

This next step for me is an important one. Unit testing. I use unit testing, especially test driven development, a lot. For me TDD is a design tool that helps me design good code. Unit tests provide an awful lot of feedback about code that helps a developer learn, grow, and get better. (I'll try to create a separate post about the benefits of unit testing.)

F# Programming

Learning F# - Step 2

My second step in learning a new programming language is understanding the build system for the project: how to get an actual working program from my code.

F# Programming

Learning F# - Step 1

With COVID-19 forcing everyone inside and cancelling events, I suddenly find myself with a lot of extra time. For the first few days, I just enjoyed having my weeknights free. Now, I want to use that time to learn something new. There are several things that I may bite off, but I've decided to start by learning F#.

Google Search Tips

Gaining Root Access on Windows Subsystem for Linux

Recently I corrupted my /etc/sudoers file in bash on Windows Subsystem for Linux (WSL). I was unable to fix the file from the bash prompt because the corrupted file prevented me from running anything with elevated privileges. I found the commands below from this post.

Notes on User Story Breakdown

This post is really for myself to capture the links and information from a Twitter thread with me, Ron Jeffries, and Neil Killick. The original thread is here.

Microsoft Build 2018 Trip Report

Microsoft Build 2018 Report

Installing OpenSSH Client and Server on Windows 10

I've been trying to install the Beta version of the OpenSSH Client and OpenSSH Server on Windows 10 without luck. The feature simply didn't appear as an option for me.

SQL Operations Studio on Mac

Microsoft recently released SQL Operations Studio for the Mac. It is a SQL Server management tool based on VS Code. I was lukewarm about this release because I use a Mac that is not associated with our domain and the SQL Servers I interact with don't have SQL Login enabled. After a little internet searching (i.e. Google), I found that I could issue Kerberos tickets via the command line and authenticate to Windows domain resources with Windows Authentication. Woo Hoo!

Find a File with Certain Contents

I was trying to search for a file with a particular class name inside it, and I could not remember the syntax of the command to save my life.  I knew I had it in a note somewhere, but I couldn't find that either.

Running Apps in Docker for Mac

In an earlier post I wrote instructions for running graphical applications out of Docker containers on my Mac. Since I wrote that post, I have wiped my Mac and reinstalled everything, including Docker for Mac. This post is an update of those instructions.

Skills Atrophy

This morning at the Gateway to Innovation Conference in St. Louis, Scott McNealy of Sun Microsystems fame gave the keynote presentation. One of the points he hammered home was a fact where he stated that an IT person loses 20% of their skills per year. This theme was repeated by other conference speakers as well.

Bash Scripting

Working with Files in Bash

I always forget how to loop through files in a Bash shell. Below are two snippets for looping through files using Bash.

OWASP Vulnerability #9

This post is a continuation from my first Developer Blog post "PCI Check Up" – outlining the OWASP Top 10 web security vulnerabilities. We keep these security vulnerabilities in mind as we build out our own payments platform and provide integration points to our partner developers. In this post, I will review the number 9 OWASP web security vulnerability.

Software Developer Career Progression

Career development for software developers is a tricky subject. Most people start their career in a job with a title similar Junior Programmer or Software Engineer I. If this person is lucky, the company has a few next steps defined such as Senior Programmer or Software Engineer II. Unfortunately there is no definition of what is required to be a "senior" programmer or what it takes to achieve Software Engineer II. There is also no correlation between one company's Senior Programmer and another company's Software Engineer III.

OWASP Top 10 Vulnerabilities Review

This article was originally posted at the Clearent Developer Blog.

OWASP Vulnerability 10 - Unvalidated Redirects and Forwards

This article was originally published on the Clearent Developer blog.

Navigate Tags in Emacs

Here are some quick key chords for navigating TAGS in Emacs.

Next Step Using Docker for Development

I'm trying to use Docker to build my local development environment on my Mac. (I don't want to have to rebuild my laptop as I try new things and experiment. That usually dirties up my laptop.) To that end, I'm working with two containers to implement different technology stacks for development.

Product Management and Software Development

I recently attended a training session on writing requirements that was geared for product managers. I sat in on the third day of a 3-day course. The day consisted mostly of how to create and prioritize requirements for feeding into development teams.

Building a Cordova App

In an earlier post I wrote about the golf score tracking application I created to learn ASP.NET Core and AngularJS. Since the initial inspiration was my son playing golf, I thought it would be good to put the application on his tablet so he could track his own scores. Cordova looked like the technology to allow me to turn my "experiment" into something my son could practically use.

Innovation and Competition in St. Louis

I read Walter L. Metcalfe Jr.'s editorial this morning in the St. Louis Post-Dispatch. In his editorial, he calls on St. Louis to start a new competition similar to the one that brought us the Gateway Arch to spur collaboration and innovation. While reading this article, I couldn't help but think of hackathons.

ASP.NET Core App with AngularJS

I've been trying to learn the new ASP.NET Core technology along with AngularJS. I always find it easier to learn new technology if I have some problem that I'm trying to solve. The problem that presented itself to me was a golf score tracking application. My middle son plays golf for his school team. I thought it would be great to build a mobile app to keep track of his golf score on the course. Since I've never been great at UI work, I thought this was a good opportunity to learn a front-end technology too.

Running GUI Apps in Docker on Mac OS X

I've been trying to figure out how to run GUI apps in a Docker container on my Mac running OS X El Capitan. As a developer, I try out many different software packages and configurations. I would love to be able to try out certain things in a well-contained environment where I won't leave bits and pieces lying around if something doesn't work or if I get bored with the package. I have also been enamored with using Docker for development environments to make them portable and self-contained. After many searches and experiments, I finally stumbled on what I needed to do.

Setting Future File Permissions in Linux

Here is a link to a StackOverflow article outlining how to do this.

Traversing TFS Links

Recently, Team Foundation Server (TFS) has added some new features that my team is using. One of these features is the new Epic work item. We are using epics to track high-level business initiatives, with features underneath the epics to track user requirements. Underneath the features, we have user stories, which are self-contained units of work that can be tested and deployed independently. My team works with user stories and tracks everything through user stories. I need to drive my reporting by user stories but relate the data to the epics that they are under.

Pinewood Derby and Arduino Coding

My middle son's Pinewood Derby for Cub Scouts was about a month ago. His pack usually has an "outlaw" division for dads, siblings, and other family members to submit cars. Usually I don't submit a car for the derby, but this year I decided to create a car powered by Arduino.

Evangelization

The St. Ferdinand Men's Club has been reviewing the four signs of a Dynamic Catholic from the book by Matthew Kelly. I was supposed to do a brief presentation at our February meeting, but it got bumped due to a full schedule. Since I'm not sure if it will get rescheduled or not, I thought I would convert it into a blog post.

Exercises for New Developers

Over the course of my career, I have needed to guide newer developers learning either general programming practices or a specific topic. I usually have the developer work through a sample project with some specific instructions intended to push that person along a path. I was recently asked to find my notes from one of these exercises to share with another individual. Instead of just emailing the instructions, I wanted to capture them more permanently.

Calculator Project

This is the first write-up of a software development exercise that I have used to help train developers. This post should be viewed as instructions for the instructor, more than a step-by-step guide for someone trying to learn.

Creating a Sample ASP.NET 5 App to Run in DNX

In my on-going quest to better understand the .NET Execution Environment (DNX) and all of its goodness, I've been creating sample applications. Recently I've been experimenting with the Yeoman generators for ASP.NET. In this post, I want to introduce Yeoman and run through the steps necessary to quickly create a simple MVC application that can be run with DNX.

Understanding DNX

Getting a handle on the new .NET Execution Environment (DNX) is difficult. I've been following the project for a while, and still get twisted around trying to explain it to people. I believe the following analogy and diagram help to understand the environment.

First Node.js App in Azure

I read Ted Neward's article about deploying a simple Node.js app to Microsoft Azure and wanted to give it a try.

Highlights of My Faith Journey

I decided to write this for the benefit of some people that I know that may have lost their faith in God. This is not an extensive treatise on my faith journey, but a quick summary of the major elements that have me where I am.

Building/Running the omnisharp-roslyn Project

I've been trying to get involved in the Omnisharp project. Omnisharp is actually a set of projects that are tools to provide many of the experiences present in Visual Studio for other editors like Emacs, Vim, or Sublime. This post is me capturing some of the steps I've gone through to get a part of the Omnisharp project building. Most of this post assumes the reader has an understanding of the DNX environment and its utilities.

Splunk Searching and Grouping

I'm starting to play with Splunk searching. We process multiple large files every night as the bulk of our work. Our system writes numerous log messages during this processing activity. Every file processed gets a unique identifier. I needed to sort through these logs and group all entries for a given file together. Here is the search I used:

Consolidation