Searching everything is slow. Luckily there are a number of optimizations we can apply in order to speed up our searching. In this article we'll look into alpha-beta pruning and significantly speed up our Tic-Tac-Toe bot!
Games allow for easy testing of a program's intelligence. Lets implement a simple search algorithm to create a tic-tac-toe bot that never loses. Tic-tac-toe is a simple game, but MiniMax is an affect way to cut down search trees in a variety of situations.
Lets solve an actual problem with your neural network. It will learn to recognize handwritten digits. It's a class intro to Machine Learning. But always useful to help understand what's really going on with Machine Learning and how it works.
Python is the best way to learn Machine Learning. NumPy is one of the most useful libaries in Python. Lets take a look at NumPy and how understanding it can help us in our understanding of Machine Learning.
Machine Learning is transforming our world. It's a topic that every programmer, every person, should be familiar with. Lets build our first neural network for a first hand experience with this technology.
Giraffe is an F# ASP.NET Core web framework. It has quirks and patterns that I've never encountered before in C# or web programming. The HttpHandler is one of the patterns new to me. Lets take a look at one way to unit test these handlers to ensure our application is working as expected.
The HttpClient is the standard way to make web requests in .NET. Because F# is a functional language, it's usage is different than what you'd find in C#. Here are some examples of how to use the HttpClient in F#.
We all try to escape or avoid reality. But until we face it, we'll never grow. We not only need to face it, but embrace it. So many of our errors in life come from not properly understanding or avoiding reality. How can I get better at it?
State is the root of a lot of problems in a multi threaded environment. One of F# solves this problem is by it's MailboxProcessor. It's a technique that allows for communication in a way that avoids the inherent problems of storing and sharing state.
Async programming is awesome! It's fundamental to create scalable and performant web applications. One problem I've run into often is how to catch exceptions when using a Task.WhenAll(). Lets take a look at one approach that ensures individual exceptions are caught and then handled or logged.
How I think directly impacts my day to day, obviously! Open mindedness is a better way of thinking, but it's not my default. Lets explore a bit about why it's so important and how I can become a more open thinker.
Level up with the easiest way to measure the performance of your .NET Code. Stop wondering whether your code is slow, start testing to ensure the code you're shipping doesn't have any crippling speed or memory issues. BenchmarkDotNet is the go-to choice for anything performance related in the C#/.NET environment.
UI work is the wild west! Often it's just iterate until it works. Elmish provides a better set of tools to ensure your UI is working as expected. Why is it so useful? How does it allow you to write UIs that can be checked to ensure they're working as expected? Lets write a simple Elmish app to demonstrate it's many advantages.
Types Provides allows compile time checks for your application. Is your SQL syntax right? Are you correctly using the columns from that csv file? It provides a higher level of correctness in your code by having the compiler check your work. Lets walkthrough on what it takes to get a SQL type provider running in F# to ensure your SQL usage is accurate.
There are a lot of ways to return a collection of things. List, IList, IEnumerable, ICollection. Which collection type gives the best performance? Which one should you be using in your code? We benchmark them all to figure out the tidbits of what the costs of each are.
IEnumerable and IQueryable show up everywhere in C#. Looking at the definitions and their usage, in one aspect they're pretty similar, but fundamentally they solve difference problems. Lets take a dive into both of these types and see what use case they're designed for.
Functional Programming has certain design principles that make it better suited for solving problems with code. Currying is one of those features. Coming from C#, it might not be something that's ever seen on your radar. Knowing it and using it will make your code more readable and more composable.
What type of for loop is the fastest? The regular for loop, the foreach loop? Using BenchmarkDotNet, we'll answer that question and give you the information you need to know when choosing the best for loop for your situation.
C# is a typed language, and generally requires explicit casting when moving between types. But one language feature, implicit conversion, allows you to implicitly move between types. It's a handy feature that probably shouldn't be overused.
Every C# developer uses the built in types; string, bool or int. But there also exists another set of types, String, Boolean and Int32. What's the difference? Which one should you use? Lets explore how C# namespaces resolve types and examine C#'s alias types.
Sometimes async programming can be confusing. Sometimes programming tutorials can be pretty confusing. Both can be simple when explained through a delicious medium that we all love and enjoy, Pizza! No more confusion, no more synchronous programming.
Github actions help you create easy and useful workflows. Want to build/test on every checking, PR that's opened, or code that's merged? Github actions have you covered. See what life can be like with some Github actions in your project.
Entity Framework is a useful and complex library. One aspect I've always been curious about is the AddAsync v. Add method. I finally put the time into researching what the difference is, why you'd use one or the other and some other EF tidbits.
Swagger is an awesome tool for using and testing APIs. Swagger integrates seamlessly with C# and will automatically generate an API interface for your API project. See how easy it is to plug into .NET Core API and start using.
Every programming language is compiled or interpreted to render an output. Learn the basics of how this process works by writing your own interpreter for the brainfuck langauge. A Turing complete language that is only useful for how-to articles like this one.
The visitor pattern is commonly used with expression trees. It's designed to separate data from algorithm. This separation allows for interesting uses, we'll demonstrate how to print simple mathematical equations in different formats.
Entity Framework takes C# queries and turns them into SQL queries. Expression trees power that mapping and transformation. Expression trees are a nerdy language feature you may not know about, but they power a surprising amount of things in C#.
Async methods are one of the best tools to write performant and scalable web applications. But what is the cost of having async methods that don't actually have any asynchronous functionality? I'm sure you've written one before. Lets take a look at how it degrades the performance of the function.
Pure functions make your life and code better. Every function you write is either Pure or Impure. It's an important distinction that is never really taught in school or at most jobs. Learn about how writing pure functions can make your code easier to test and free from side effects.