What is Happiness?

The Prophet Joseph Smith taught, “Happiness is the object and design of our existence; and will be the end thereof, if we pursue the path that leads to it; and this path is virtue, uprightness, faithfulness, holiness, and keeping all the commandments of God” (Teachings of the Prophet Joseph Smith, sel. Joseph Fielding Smith [1976], 255–56).

I believe him.

Keith D. Jensen - My Father

Dad is a mountain of a man. At 79 his grip is still firm. His hands are made from the large bones and rawhide of decades of daily hard work. His eyes pierce you as he looks through your exterior to see your soul with love beyond comprehension, as if to say, "It'll be alright. Just keep'a goin'."

Born the second youngest of four boys and four girls, Dad grew up working at the saw mill and on the farm. His own father suffered from allergies and alcoholism, so Dad spent his teen years taking care of the farm by himself. He learned quickly to rely on himself to solve the problems that come with running a farm. 

As a boy he responded to the invitation of a neighbor to attend church and became a devoted servant of God, attending his meetings, reading the scriptures and serving others. He wanted to serve a mission but funds were scarce. Instead he attended Carbon College, married his high school sweetheart, LaRue McElprang, and started a family.

Dad and Mom raised eight kids on a farm just outside of Roosevelt, Utah -- Todd, me, Ruth, Melissa, Rebecca, Maria, David, and Leo. We all learned to work and shoulder responsibility. We learned to love one another and to get along (not always perfectly). 

Dad raised a lot of hay. He fed some of it to his own cows and horses. He sold most of it to pay the bills. And he gave much of it away to neighbors who promised to pay one day but never could. He never bothered them about it. Eventually, when David was old enough to go to school, Mom went to work at the hospital to make up for the dwindling of the farm income. But Dad never gave up on the farm. He worked and worked and some years were good and others not so much.

As Alzheimer's began to take it's toll, Dad did the bravest and most humble thing I have ever witnessed. He agreed with Mom to sell all the equipment he had accumulated over the years to pay off the farm and house and hang up his farmer's hat. It may have been the most difficult thing I ever saw him do. He put on a brave face as friends, neighbors and relatives attended the auction to take away the instruments of his livelihood, the tools and machines that had come to symbolize and define so much of his life.

Even then for years after that, Dad would put on his hat and coat twice a day to venture out to the corrals to feed the dwindling number of horses and cows. He wore a trail through to the ground making this trip more than 700 times a year. This ritual is such a part of him, that he still puts on his hat and coat to go out. He gets as far as the garage and cannot remember what's next, eventually returning to the house, not knowing why.

Now with his memories beyond his reach, I introduce myself to him when I visit and tell him, "I'm Tyler. I'm your son," and he smiles with sweet surprise and joy, hugs me and asks, "Did I do a good job?" 

Yes, Dad, you did a very good job!

Happy Father's Day!

Hello World in D, Go and Rust in VS Code

A few days ago a friend asked me what languages I’m learning. I told him I had been rather lazy of late and was not currently studying any new languages in my programming repertoire. So he said something like this:

每天早上刷牙后研究一种新语言。
Měitiān zǎoshang shuāyá hòu yánjiū yī zhǒng xīn yǔyán.

When I told him I had no idea what he just said, he laughed and explained that he is learning Mandarin and had just told me, “Study a new language after you brush your teeth every morning.” To be honest, I pulled the above Mandarin from Google Translate because I had no way to remember exactly how he had said what he said. But he had successfully goaded me into getting back on the polyglot track. We talked about Rust and Go and D. I’ve played with D some years ago, but have never done anything real with Rust, Go or D.

Here’s Part 1 of my journey through these three languages. The Hello World with a tiny input twist looks like this:

image

I decided to get each of them working in Visual Studio Code. I’m a Windows user, so if you’re on a Mac or using Linux, your mileage will vary. Hopefully what I’ve found here will help you get a start on one or all of these languages as well.

Visual Studio Code

First things first. If you don’t already have it installed, follow the link in the header above and get and install it. It’s simple so I won’t walk you through it here. My first love is the big old fashioned Visual Studio and I’ll continue using it for most of my work, but I wanted to learn more about VS Code as I learn more about these three programming languages. Here’s the version I’m using:

image

Of course you can use your own favorite editor. We’re not going to use any special integrations in VS Code for the Hello World examples here.

Hello in DLang

You can get a pretty good history of DLang here. There are three compilers that support D. In this post, we will only use the DMD compiler, the reference compiler for the language. Download and install DMD. Once installed, open a new console and enter the command DMD. You should get something like this:

[path]>dmd 

DMD32 D Compiler v2.086.0
Copyright (C) 1999-2019 by The D Language Foundation, All Rights Reserved written by Walter Bright

Once you have the compiler installed, install the DLang VS Code extension for D. (There are several. After some experimentation, I found that I liked this one the best but this is by no means a comparison of them, so I’m not mentioning the ones I decided not to use.)

I created the following Hello World in app.d and ran the DMD app.d command in the terminal window in VS Code.

import std.stdio;

void main()
{
	string name;
	write("Hello, what's your name? ");
	readf("%s\n", &name);
	writeln("Hello, ", name);
}

The app.exe produced was 312KB in file size. At run time, it consumed 1,728KB.

Hello in GoLang

I downloaded and installed Go and then the Go VS Code extension. The extension is built by Microsoft, so I expected the VS Code experience to be superior to the other two languages. I was right. This included the automatic suggestion to install several additional Go related extensions which I did.

I was able to run the following code through the debugger, but rather than get into debugging these languages for this post, I wanted to focus on building an executable that would be as close to the same modified Hello World as I could get.

package main

import "fmt"

func main() {
	var name string
	fmt.Printf("Hello, what's your name? ")
	fmt.Scanf("%s\n", &name)
	fmt.Printf("Hello, %s\n", name)
}

The command line to build the executable was a little more tricky but not bad. There are many sites that can help you here. The command go build -o app.exe app.go produced an app.exe that 2,164KB file size but only consumed 1,424KB at runtime. That surprised me a bit. I expect that Go is packing in a whole lot of things into the executable that my little code base is not using.

Hello in Rust-Lang

Next I downloaded and installed Rust for Windows and then added the Rust(rls) VS Code extension. When I first tried to compile this bit of code, I got an error error[E0601]: `main` function not found in crate `app` which seemed odd since there was definitely a main function. After closing and starting VS Code again, the rustc app.rs command line compiled the executable just fine. Perhaps a path had not been picked up.

use std::io;

fn main() {
	let mut name = String::new();
	println!("Hello, what's your name? ");
	io::stdin().read_line(&mut name).expect("Failed to read line.");
	println!("Hello, {}", name);
}

The Rust compiler wins the size competition with an executable coming in at on 154KB for a file size and only 324KB at runtime. Call me impressed.

Video Tutorials

If you like to learn by watching, here are three fairly good YouTube tutorials that I’ve found. There are many more of course. I’m not saying these are the best, but I liked them. I will return to them a few more times as I continue to learn each of these languages.

What’s Next

Most programming language documentation will take you on a journey of variables, control flow, etc. I figure you can read those on your own. Google works just as well for you as it does for me. So next I want to explore the following. Hold me to it.

  1. How to write object oriented code
  2. How to write SOLID code
  3. How to write a RESTful service client and server
  4. How to write scalable code (threading, message passing, etc.)

That seems like a fair number of things to explore. There are a multitude of others that may emerge as I walk down these three learning paths.

Update

In preparation for more on this language exploration, I have create a GitHub repo here.