Curious About Technology

Welcome to Coding Explorations, your go-to blog for all things software engineering, DevOps, CI/CD, and technology! Whether you're an experienced developer, a curious beginner, or simply someone with a passion for the ever-evolving world of technology, this blog is your gateway to valuable insights, practical tips, and thought-provoking discussions.

Recent Posts

Testing GORM with SQLMock
go, golang, programming, testing Noah Parker go, golang, programming, testing Noah Parker

Testing GORM with SQLMock

GORM is one of the most popular ORM (Object-Relational Mapper) libraries in Go, providing a simplified and consistent way to interact with databases. As with all application code, it's imperative to ensure that your database operations are thoroughly tested. However, hitting a real database during unit tests isn't ideal. This is where SQLMock comes in. SQLMock provides a way to mock out your SQL database so you can test your GORM code without needing a live database.

Read More
Package Design: Crafting Clear and Encapsulated Code
programming, best practice Sophia Davis programming, best practice Sophia Davis

Package Design: Crafting Clear and Encapsulated Code

Software development isn't just about writing functional code; it's about structuring that code in a manner that promotes maintainability, scalability, and comprehension. One of the pivotal methods to achieve this structure is through effective package design. The art of packaging can be likened to the compartments in a well-organized closet. You wouldn't want to jumble up your winter clothes with summer wear, would you? Similarly, in software, coherent organization is the key to sanity and efficiency.

Read More
Defensive Programming in Go: The Power of defer and Nil Checks
go, golang, programming, safety, best practice Noah Parker go, golang, programming, safety, best practice Noah Parker

Defensive Programming in Go: The Power of defer and Nil Checks

In the vast ecosystem of software development, safety and robustness are two of the primary goals every developer should aspire to achieve. As our software becomes an integral part of modern infrastructure, the margin for error narrows. Ensuring that our software behaves predictably even under unexpected conditions is crucial. In this blog post, we’ll delve into two core techniques that bolster safety in the Go programming language: using the defer statement to ensure resources are cleaned up and guarding against nil pointer dereferences.

Read More
A Closer Look at Python Collections: Making the Most of namedtuple, deque, and Counter
python, collections, programming Sophia Davis python, collections, programming Sophia Davis

A Closer Look at Python Collections: Making the Most of namedtuple, deque, and Counter

Python, a versatile and widely used programming language, boasts a rich standard library that caters to a plethora of use cases. One such module that stands out for its utility is the collections module. This module provides alternatives to built-in types that offer additional functionality and performance benefits.

Read More
Introduction to TypeScript: Adding Static Typing to JavaScript
javascript, typescript, intro Amelia Hayes javascript, typescript, intro Amelia Hayes

Introduction to TypeScript: Adding Static Typing to JavaScript

JavaScript has been the language of the web for decades, driving interactive web experiences, powering frontend frameworks, and even running server-side applications. While its flexibility is one of its greatest strengths, it can also be a source of bugs and confusion, especially when applications scale. Enter TypeScript—a superset of JavaScript that introduces static typing.

Read More
Graceful Shutdown in Go: Safeguarding Containerized Applications
go, golang, microservice, programming Noah Parker go, golang, microservice, programming Noah Parker

Graceful Shutdown in Go: Safeguarding Containerized Applications

In today's container-driven world, applications must be prepared to handle interruptions and terminations with grace and elegance. Especially in orchestrated environments like Kubernetes, an application could be rescheduled, moved, or terminated due to a myriad of reasons. For developers, this emphasizes the importance of ensuring their application can handle shutdown signals gracefully. Go (or Golang), with its lightweight concurrency model and robust standard library, offers tools to achieve a graceful shutdown. Let's delve into how we can implement this in a Go application.

Read More
Reducing Binary Size in Go: Strip Unnecessary Data with -ldflags "-w -s"
go, golang Noah Parker go, golang Noah Parker

Reducing Binary Size in Go: Strip Unnecessary Data with -ldflags "-w -s"

When building Go applications, the generated binary can sometimes be larger than what you might expect, especially when it contains debug information for the Go runtime and symbols for the linker. Fortunately, Go provides a handy way to reduce the binary size by stripping away unnecessary data. In this post, we'll dive into how to use the -ldflags "-w -s" option with go build to achieve this.

Read More
Setting Up an API Gateway Using NGINX
docker, api, nginx, devops Benjamin Hughes docker, api, nginx, devops Benjamin Hughes

Setting Up an API Gateway Using NGINX

An API Gateway acts as a single point of entry for all your API clients. It's like a facade that forwards API requests to one or more internal microservices. One of the benefits of using an API Gateway is the abstraction of your backend services. Clients need not know about your backend's microservices; they only need to communicate with the gateway.

Read More
Utilizing Protocol Buffers (Protobuf) to Create API Contracts Between Web Server and Client
go, golang, protobuf, web Noah Parker go, golang, protobuf, web Noah Parker

Utilizing Protocol Buffers (Protobuf) to Create API Contracts Between Web Server and Client

As web applications continue to evolve, so does the necessity for efficient, scalable, and clear communication protocols between the server and the client. Traditional methods like RESTful APIs using JSON or XML have been popular, but there's another player in the arena: Protocol Buffers, or "Protobuf" for short. In this blog post, we'll explore how Protobuf can be used to establish clear API contracts between a web server and a client.

Read More
Mastering Metrics and Logs in Kubernetes: Tools You Need to Know
kubernetes, k8s, monitoring, logging Benjamin Hughes kubernetes, k8s, monitoring, logging Benjamin Hughes

Mastering Metrics and Logs in Kubernetes: Tools You Need to Know

Kubernetes (often abbreviated as K8s) has rapidly become the de facto standard for container orchestration. As organizations scale their containerized applications using Kubernetes, the need for effective monitoring and logging becomes paramount. In this blog post, we'll delve into the importance of these practices and explore some of the most popular tools and setups, including Prometheus, Grafana, the ELK stack, and the Loki-Stack.

Read More
Packages and Modularization in Go: A Comprehensive Guide
go, golang, programming, modules Noah Parker go, golang, programming, modules Noah Parker

Packages and Modularization in Go: A Comprehensive Guide

In the world of software development, modularization is a key principle that ensures maintainability, reusability, and clarity. In the Go programming language, this principle is embodied through the use of packages and modules. In this blog post, we'll delve deep into the world of Go packages, Go Modules, and the best practices surrounding them.

Read More
Swift Functions and Closures: A Comprehensive Guide
swift, programming, basics Andrew Garcia swift, programming, basics Andrew Garcia

Swift Functions and Closures: A Comprehensive Guide

Swift, Apple's powerful and intuitive programming language, has gained immense popularity since its inception. One of the core components of Swift that makes it so versatile is its approach to functions and closures. In this blog post, we'll dive deep into the world of Swift functions and closures, exploring their definitions, usages, and intricacies.

Read More
Introduction to Swift Programming Language
swift, programming Andrew Garcia swift, programming Andrew Garcia

Introduction to Swift Programming Language

Swift is a powerful and intuitive programming language developed by Apple for iOS, macOS, watchOS, and tvOS. Since its introduction in 2014, Swift has gained immense popularity due to its performance, modern syntax, and safety features. It's designed to be more concise and resilient against erroneous code, making it an excellent choice for both beginners and experienced developers.

Read More