Ukiah Smith Ukiah Smith

  • Blog
  • Resume
  • Contact
  • Twitter
  • GitHub
  • LinkedIn
  • RSS
TDD Red Red Green

TDD: Red Red Green

Testing gets easier the more you do it. I guess it’s like most things in that regard. For me my comfort level has risen as I have forced myself to practice the small steps that make up Test Driven Development. That was the next step in my TDD journey. If you recall from my previous TDD blog post I was starting from nothing. No experience dong TDD or testing. My uncomfortableness was physical, a mini anxiety attack, a moment of doubt.
DockerCon 2018

DockerCon 2018

This post was originally published here. You would think the world is falling apart; or rather it seems that way, and I’m only really talking about the world of software. I’ll leave politics out of this. It’s not that the world of software is falling apart; or rather our applications are. What once were gleaming monoliths, monuments to our own achievement are now being hacked and splintered into microservices. Rather this is the natural cycle that our industry seems to follow every few decades.
Journey into TDD

Journey Into TDD: I have no idea what I'm doing

There is something small and tiny that I feel I am missing about Test Driven Development. I understand the basic principle of the matter; write a test that fails, then write the code to make it pass, rinse and repeat; red, green, then refactor. Knowing that basic truth of what TDD is has not translated into actually being able to use it as a practice in my day to day coding.

How to Read 12 Books in a Year

Yikes, I am behind in my reading goal. It is lat in the month of January and I am not far enough along in my reading to hit my goal. I am reading the first book to reach my goal that is my New Year’s resolution to read twelve books this year. It is a small step up from the seven books I read last year. The challenge though is that I am already behind.
hugo improved asset cache busting

Hugo: Improved static asset cache busting

Previously I was using a quick fix solution to bust cache on my static css files. Briefly, cache busting is a strategy of uniquely naming CSS and Javascript assets to improve page loads, and speed up propagation of changes when updates to the layout are made. More on cache busting. My previous technique worked as needed but suffered from a couple limitation. I was using random numbers appended to the CSS filename to get a unique filename.
orangetext15

Semantic Class Naming

How we name html class names is important. Naming in general is important. A class name is a little story we can tell ourselves. Later in the development process we can quickly and easily know what an element is for based on the name. We learn from a class name what something is, and what we can expect from it. Semantic class naming is a style in which we use class names that describe what an element is, or it’s intended purpose, rather than how it looks.
Gears turning

Hugo static asset cache busting

Hugo is a great static site generator. It is crazy fast and has tons of options, but one thing I had not been able to discover was how to use variable data in make, my build tool, and pass it to a Hugo template. I wanted a way to create unique CSS filenames, and use those filenames in my Hugo templates.

Go: Marshal and Unmarshal JSON with time and URL data

Go has a robust JSON library for consuming and outputting JSON. The standard json.Marshal() and json.Unmarshal() functions do a great job of aligning primitive types and converting them from Go into JSON, and vise versa. Beyond the basic types you will have to create custom marshaling methods on your types and write some logic to handle the conversion process. We will go over writing these custom methods for types that contain time and URL data.
The front of the Everyday Messenger

Peak Design Everyday Messenger Review

The most frustrating part of the Everyday Messenger is that it is damn near perfect; not quite, but almost. The unique locking latch, a thoughtful strap, and quality construction make this bag a great everyday carry. The Everyday Messenger is intended to be a photographers bag; with the main compartment set to house a camera and extra lenses. The bag is intended for carrying camera gear, but remove the padded dividers and it works for a laptop and “office” stuff.
Tracce di Stelle

Quick and easy web server for local development

Sometimes I want a quick way to build some web pages. A way that does not require installing a lot of servers locally, but is still better than opening the file directly in my web browser. When I start a new web project I break it up into small steps. These steps form a natural set of milestones, and helps me to reason about the project as a whole. Focusing on each step helps me make progress on the entire project.

Initializing channels in Go

With most variables in Go we can declared them in a couple of different ways. Using the var keyword, initialize them as we declare them with the := operator; or using the new or make keywords. Most variables can be declared with var, which only reserves storage for a named variable. If no assignment accompanies the statement, the variable is set to it’s zero value. Using var to declare a channel crates a nil channel.

fmt.Scanf Introduction

From the fmt package; the Scanf function is used to read input from stdin. When you run this snippet of code the main() function will wait for user input a string, a number, and a second string. Which it puts into variables, and then uses to print some information. Scanf woul be used when you want to write a command line program that requires user input during the running process.

Firefox to integrate Pocket

I was shocked when I saw news of Mozilla’s Firefox native integration with Pocket; the popular read-it-later bookmarking service. This is the first time I can remember when Mozilla has integrated a commercial third-party service. It feels a little odd. I understand why they might have done this. My guess is that Pocket is another revenue stream for Mozilla. I can appreciate the need for money; it keeps the employees happy, and the Firefox updates rolling out in a timely fashion.
Sähköä ilmassa sunset behind power lines

Building Go projects with gb

gb is a new build tool for Go created by Dave Cheney. It address the problem of reproducible builds. Building the same functional binary anywhere at any time is a problem of dependency management. Of knowing exactly which library version to use, and having it at hand. gb is a radical tool compared to current dependency solutions, which work with the existing Go toolchain and idioms. gb takes a different approach, it replaces not only dependency management tools, but the Go build tools themselves.
Understanding Go Dependency Management

Understanding Go Dependency Management

Right now there is a discussion thread on the golang-dev mailing list about formalizing how Go manages dependencies. The Go Team is putting forward that Go use vendoring to manage dependencies, and asked the community to formalize a configuration format that tools can use to manage vendored code.

For sometime the Go team has been very passive in directing how Go manages dependencies. When Go was first released to the public the only mechanism or best practice was to use go get which is not much more than a simple tool to fetch code.

Can you tell which one of these keyboards will input uppercase or lowercase letters?

The iOS keyboard is terrible

The iPhone, and iOS, brought about a revolution in mobile network connected pocket computers. It did a lot of things right, but it did one thing terribly wrong. When using the keyboard the letter on the key does not show the true character that will be input. The letters on the keyboard are always capitalized, even when pressing the key will input a lowercase letter.

It has been a very long time since I’ve used an iPhone day to day, but this still annoys me. Simply put the lack of accurately displaying the key to be input, capital or lowercase, is a disgrace. In part because of the years that iOS devices have been around, and the years that this features has been available on many Android phone. Though most importantly because it was Steve Jobs himself who cajoled his competitors and their fixed, never changing, keyboards.

Beautiful Tab Pro 8.4 screen.

Galaxy Tab Pro 8.4 Review

Reading on mobile devices is something I have done for a long time. I have read novels on some low quality screens; such as the Palm III, with it’s spinach green tint. Recently I’ve been looking at trading up from my Kindle Keyboard to a device with a better reading experience. I wanted something that was comfortable while reading for long periods of time, had a better screen, and access to more books and articles than the Kindle.

In the Samsung Galaxy Tab Pro 8.4 I have found a great device that give me joy to use. It is comfortable to hold, has a super sharp screen, and access to everything I’d want to read.

Leather notebook cover

Garny leather notebook cover

Field Notes makes a quality notebook, but it’s still paper and card stock. Given enough use it will become ragged, making it frail and eventually unusable. The solution is to write more often so that I use up a notebook before it starts to fall apart. While appealing, I do not want to be rushed with my words. So I found another solution, use a leather notebook cover.

Go frameworks and libraries

Go frameworks and libraries

Go makes it easy to not use frameworks. Instead, small tool libraries used together achieve the same utility. The resulting applications are less complex, easier to reason about, and nimble in their modularity.

Frameworks are themselves collections of libraries. How do they differ from discrete libraries that have only one functional use, and how does using one or the other affect application development?

T-mobile Note 4 unopened

T-Mobile Note 4 unboxing

TDD Red Red Green

TDD: Red Red Green

Testing gets easier the more you do it. I guess it’s like most things in that regard. For me my comfort level has risen as I have forced myself to practice the small steps that make up Test Driven Development. That was the next step in my TDD journey. If you recall from my previous TDD blog post I was starting from nothing. No experience dong TDD or testing. My uncomfortableness was physical, a mini anxiety attack, a moment of doubt.

How to Read 12 Books in a Year

Yikes, I am behind in my reading goal. It is lat in the month of January and I am not far enough along in my reading to hit my goal. I am reading the first book to reach my goal that is my New Year’s resolution to read twelve books this year. It is a small step up from the seven books I read last year. The challenge though is that I am already behind.
Gears turning

Hugo static asset cache busting

Hugo is a great static site generator. It is crazy fast and has tons of options, but one thing I had not been able to discover was how to use variable data in make, my build tool, and pass it to a Hugo template. I wanted a way to create unique CSS filenames, and use those filenames in my Hugo templates.

Tracce di Stelle

Quick and easy web server for local development

Sometimes I want a quick way to build some web pages. A way that does not require installing a lot of servers locally, but is still better than opening the file directly in my web browser. When I start a new web project I break it up into small steps. These steps form a natural set of milestones, and helps me to reason about the project as a whole. Focusing on each step helps me make progress on the entire project.

Firefox to integrate Pocket

I was shocked when I saw news of Mozilla’s Firefox native integration with Pocket; the popular read-it-later bookmarking service. This is the first time I can remember when Mozilla has integrated a commercial third-party service. It feels a little odd. I understand why they might have done this. My guess is that Pocket is another revenue stream for Mozilla. I can appreciate the need for money; it keeps the employees happy, and the Firefox updates rolling out in a timely fashion.
Can you tell which one of these keyboards will input uppercase or lowercase letters?

The iOS keyboard is terrible

The iPhone, and iOS, brought about a revolution in mobile network connected pocket computers. It did a lot of things right, but it did one thing terribly wrong. When using the keyboard the letter on the key does not show the true character that will be input. The letters on the keyboard are always capitalized, even when pressing the key will input a lowercase letter.

It has been a very long time since I’ve used an iPhone day to day, but this still annoys me. Simply put the lack of accurately displaying the key to be input, capital or lowercase, is a disgrace. In part because of the years that iOS devices have been around, and the years that this features has been available on many Android phone. Though most importantly because it was Steve Jobs himself who cajoled his competitors and their fixed, never changing, keyboards.

Go frameworks and libraries

Go frameworks and libraries

Go makes it easy to not use frameworks. Instead, small tool libraries used together achieve the same utility. The resulting applications are less complex, easier to reason about, and nimble in their modularity.

Frameworks are themselves collections of libraries. How do they differ from discrete libraries that have only one functional use, and how does using one or the other affect application development?

DockerCon 2018

DockerCon 2018

This post was originally published here. You would think the world is falling apart; or rather it seems that way, and I’m only really talking about the world of software. I’ll leave politics out of this. It’s not that the world of software is falling apart; or rather our applications are. What once were gleaming monoliths, monuments to our own achievement are now being hacked and splintered into microservices. Rather this is the natural cycle that our industry seems to follow every few decades.
hugo improved asset cache busting

Hugo: Improved static asset cache busting

Previously I was using a quick fix solution to bust cache on my static css files. Briefly, cache busting is a strategy of uniquely naming CSS and Javascript assets to improve page loads, and speed up propagation of changes when updates to the layout are made. More on cache busting. My previous technique worked as needed but suffered from a couple limitation. I was using random numbers appended to the CSS filename to get a unique filename.

Go: Marshal and Unmarshal JSON with time and URL data

Go has a robust JSON library for consuming and outputting JSON. The standard json.Marshal() and json.Unmarshal() functions do a great job of aligning primitive types and converting them from Go into JSON, and vise versa. Beyond the basic types you will have to create custom marshaling methods on your types and write some logic to handle the conversion process. We will go over writing these custom methods for types that contain time and URL data.

Initializing channels in Go

With most variables in Go we can declared them in a couple of different ways. Using the var keyword, initialize them as we declare them with the := operator; or using the new or make keywords. Most variables can be declared with var, which only reserves storage for a named variable. If no assignment accompanies the statement, the variable is set to it’s zero value. Using var to declare a channel crates a nil channel.
Sähköä ilmassa sunset behind power lines

Building Go projects with gb

gb is a new build tool for Go created by Dave Cheney. It address the problem of reproducible builds. Building the same functional binary anywhere at any time is a problem of dependency management. Of knowing exactly which library version to use, and having it at hand. gb is a radical tool compared to current dependency solutions, which work with the existing Go toolchain and idioms. gb takes a different approach, it replaces not only dependency management tools, but the Go build tools themselves.
Beautiful Tab Pro 8.4 screen.

Galaxy Tab Pro 8.4 Review

Reading on mobile devices is something I have done for a long time. I have read novels on some low quality screens; such as the Palm III, with it’s spinach green tint. Recently I’ve been looking at trading up from my Kindle Keyboard to a device with a better reading experience. I wanted something that was comfortable while reading for long periods of time, had a better screen, and access to more books and articles than the Kindle.

In the Samsung Galaxy Tab Pro 8.4 I have found a great device that give me joy to use. It is comfortable to hold, has a super sharp screen, and access to everything I’d want to read.

T-mobile Note 4 unopened

T-Mobile Note 4 unboxing

Journey into TDD

Journey Into TDD: I have no idea what I'm doing

There is something small and tiny that I feel I am missing about Test Driven Development. I understand the basic principle of the matter; write a test that fails, then write the code to make it pass, rinse and repeat; red, green, then refactor. Knowing that basic truth of what TDD is has not translated into actually being able to use it as a practice in my day to day coding.
orangetext15

Semantic Class Naming

How we name html class names is important. Naming in general is important. A class name is a little story we can tell ourselves. Later in the development process we can quickly and easily know what an element is for based on the name. We learn from a class name what something is, and what we can expect from it. Semantic class naming is a style in which we use class names that describe what an element is, or it’s intended purpose, rather than how it looks.
The front of the Everyday Messenger

Peak Design Everyday Messenger Review

The most frustrating part of the Everyday Messenger is that it is damn near perfect; not quite, but almost. The unique locking latch, a thoughtful strap, and quality construction make this bag a great everyday carry. The Everyday Messenger is intended to be a photographers bag; with the main compartment set to house a camera and extra lenses. The bag is intended for carrying camera gear, but remove the padded dividers and it works for a laptop and “office” stuff.

fmt.Scanf Introduction

From the fmt package; the Scanf function is used to read input from stdin. When you run this snippet of code the main() function will wait for user input a string, a number, and a second string. Which it puts into variables, and then uses to print some information. Scanf woul be used when you want to write a command line program that requires user input during the running process.
Understanding Go Dependency Management

Understanding Go Dependency Management

Right now there is a discussion thread on the golang-dev mailing list about formalizing how Go manages dependencies. The Go Team is putting forward that Go use vendoring to manage dependencies, and asked the community to formalize a configuration format that tools can use to manage vendored code.

For sometime the Go team has been very passive in directing how Go manages dependencies. When Go was first released to the public the only mechanism or best practice was to use go get which is not much more than a simple tool to fetch code.

Leather notebook cover

Garny leather notebook cover

Field Notes makes a quality notebook, but it’s still paper and card stock. Given enough use it will become ragged, making it frail and eventually unusable. The solution is to write more often so that I use up a notebook before it starts to fall apart. While appealing, I do not want to be rushed with my words. So I found another solution, use a leather notebook cover.

blurry programming code

Programming is terrible so learn to enjoy it

I ran across an anonymous opinion piece on how programming is terrible. It was posted a while ago, but it resonated with my own journey through programming. From when I was young and nothing was impossible and everything was magical, through disenchantment once in the real world, and through finding joy and solace in my craft. But what I learned through my journey has helped me find the joy again.
ukiahsmith.com
  • Terms of Service
  • Privacy Policy
© 2005-2018 Ukiah Smith