From 0cc7d7fe42411430a765ad710816f344c0c0f87d Mon Sep 17 00:00:00 2001 From: Andrew Tomaka Date: Sun, 5 Feb 2023 21:07:24 -0500 Subject: [PATCH] Migrate to jekyll for static gen --- .gitignore | 9 +- .ruby-version | 1 + 404.html | 25 ++ Gemfile | 44 +++ Gemfile.lock | 152 +++++++++ README.md | 23 ++ _config.yml | 60 ++++ _data/menu.yml | 27 ++ ...25-force-print-document-on-11x17-scaled.md | 61 ++++ .../2013-02-02-serious-regular-expressions.md | 14 + _posts/2013-09-25-password-checking-in-c.md | 58 ++++ _posts/2014-01-19-intro-to-puppet.md | 300 ++++++++++++++++++ .../2014-02-11-get-away-from-me-you-creep.md | 78 +++++ _posts/2015-11-21-dockerizing-lubot.md | 143 +++++++++ ...sting-your-docker-images-with-gitlab-ci.md | 86 +++++ ...ural-rails-routes-for-the-same-resource.md | 72 +++++ ...01-a-more-flexible-dockerfile-for-rails.md | 150 +++++++++ _posts/2017-04-18-write-good-git-commits.md | 106 +++++++ archive/index.md | 4 + assets/gui-git.webp | Bin 0 -> 40102 bytes atomaka.jpg | Bin 0 -> 26633 bytes build.sh | 11 +- colors.png | Bin 37286 -> 0 bytes favicon.ico | Bin 0 -> 15406 bytes index.html | 92 ------ index.markdown | 6 + requirements.txt | 2 + 27 files changed, 1424 insertions(+), 100 deletions(-) create mode 100644 .ruby-version create mode 100644 404.html create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 README.md create mode 100644 _config.yml create mode 100644 _data/menu.yml create mode 100644 _posts/2012-10-25-force-print-document-on-11x17-scaled.md create mode 100644 _posts/2013-02-02-serious-regular-expressions.md create mode 100644 _posts/2013-09-25-password-checking-in-c.md create mode 100644 _posts/2014-01-19-intro-to-puppet.md create mode 100644 _posts/2014-02-11-get-away-from-me-you-creep.md create mode 100644 _posts/2015-11-21-dockerizing-lubot.md create mode 100644 _posts/2016-11-05-testing-your-docker-images-with-gitlab-ci.md create mode 100644 _posts/2016-11-18-singular-and-plural-rails-routes-for-the-same-resource.md create mode 100644 _posts/2017-03-01-a-more-flexible-dockerfile-for-rails.md create mode 100644 _posts/2017-04-18-write-good-git-commits.md create mode 100644 archive/index.md create mode 100644 assets/gui-git.webp create mode 100644 atomaka.jpg delete mode 100644 colors.png create mode 100644 favicon.ico delete mode 100644 index.html create mode 100644 index.markdown create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore index ec74154..6108f22 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,7 @@ -build/* -blog/* +_site +.sass-cache +.jekyll-cache +.jekyll-metadata +vendor + +old diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 0000000..ef538c2 --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +3.1.2 diff --git a/404.html b/404.html new file mode 100644 index 0000000..086a5c9 --- /dev/null +++ b/404.html @@ -0,0 +1,25 @@ +--- +permalink: /404.html +layout: default +--- + + + +
+

404

+ +

Page not found :(

+

The requested page could not be found.

+
diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..ac74f27 --- /dev/null +++ b/Gemfile @@ -0,0 +1,44 @@ +source "https://rubygems.org" +# Hello! This is where you manage which Jekyll version is used to run. +# When you want to use a different version, change it below, save the +# file and run `bundle install`. Run Jekyll with `bundle exec`, like so: +# +# bundle exec jekyll serve +# +# This will help ensure the proper Jekyll version is running. +# Happy Jekylling! +gem "jekyll", "~> 4.3.2" +# This is the default theme for new Jekyll sites. You may change this to anything you like. +gem "minima", "~> 2.5" +gem "no-style-please", git: "https://github.com/atomaka/no-style-please", branch: "atomaka" +# If you want to use GitHub Pages, remove the "gem "jekyll"" above and +# uncomment the line below. To upgrade, run `bundle update github-pages`. +# gem "github-pages", group: :jekyll_plugins +# If you have any plugins, put them here! +group :jekyll_plugins do + gem "jekyll-feed", "~> 0.12" + gem "jekyll-gist" + gem "jekyll-tidy" +end + +group :development do + # import for medium + gem "jekyll-import", git: "https://github.com/jekyll/jekyll-import" + gem "mdl" + gem "rss" + gem "safe_yaml" +end + +# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem +# and associated library. +platforms :mingw, :x64_mingw, :mswin, :jruby do + gem "tzinfo", ">= 1", "< 3" + gem "tzinfo-data" +end + +# Performance-booster for watching directories on Windows +gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin] + +# Lock `http_parser.rb` gem to `v0.6.x` on JRuby builds since newer versions of the gem +# do not have a Java counterpart. +gem "http_parser.rb", "~> 0.6.0", :platforms => [:jruby] diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..5749a92 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,152 @@ +GIT + remote: https://github.com/atomaka/no-style-please + revision: e281fa0bbecc82e84fe61be9a92baad5a1a46763 + branch: atomaka + specs: + no-style-please (0.4.7) + jekyll + jekyll-feed + jekyll-seo-tag + +GIT + remote: https://github.com/jekyll/jekyll-import + revision: 6499317a81aeda119b6ceefb37ab81c9f6219659 + specs: + jekyll-import (0.21.0) + jekyll (>= 3.7, < 5.0) + nokogiri (~> 1.0) + reverse_markdown (~> 2.1) + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.1) + public_suffix (>= 2.0.2, < 6.0) + chef-utils (18.1.0) + concurrent-ruby + colorator (1.1.0) + concurrent-ruby (1.2.0) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) + eventmachine (1.2.7) + faraday (2.7.4) + faraday-net_http (>= 2.0, < 3.1) + ruby2_keywords (>= 0.0.4) + faraday-net_http (3.0.2) + ffi (1.15.5) + forwardable-extended (2.6.0) + google-protobuf (3.21.12-x86_64-linux) + htmlbeautifier (1.4.2) + htmlcompressor (0.4.0) + http_parser.rb (0.8.0) + i18n (1.12.0) + concurrent-ruby (~> 1.0) + jekyll (4.3.2) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 1.0) + jekyll-sass-converter (>= 2.0, < 4.0) + jekyll-watch (~> 2.0) + kramdown (~> 2.3, >= 2.3.1) + kramdown-parser-gfm (~> 1.0) + liquid (~> 4.0) + mercenary (>= 0.3.6, < 0.5) + pathutil (~> 0.9) + rouge (>= 3.0, < 5.0) + safe_yaml (~> 1.0) + terminal-table (>= 1.8, < 4.0) + webrick (~> 1.7) + jekyll-feed (0.17.0) + jekyll (>= 3.7, < 5.0) + jekyll-gist (1.5.0) + octokit (~> 4.2) + jekyll-sass-converter (3.0.0) + sass-embedded (~> 1.54) + jekyll-seo-tag (2.8.0) + jekyll (>= 3.8, < 5.0) + jekyll-tidy (0.2.2) + htmlbeautifier + htmlcompressor + jekyll + jekyll-watch (2.2.1) + listen (~> 3.0) + kramdown (2.4.0) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.4) + listen (3.8.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + mdl (0.12.0) + kramdown (~> 2.3) + kramdown-parser-gfm (~> 1.1) + mixlib-cli (~> 2.1, >= 2.1.1) + mixlib-config (>= 2.2.1, < 4) + mixlib-shellout + mercenary (0.4.0) + minima (2.5.1) + jekyll (>= 3.5, < 5.0) + jekyll-feed (~> 0.9) + jekyll-seo-tag (~> 2.1) + mixlib-cli (2.1.8) + mixlib-config (3.0.27) + tomlrb + mixlib-shellout (3.2.7) + chef-utils + nokogiri (1.14.1-x86_64-linux) + racc (~> 1.4) + octokit (4.25.1) + faraday (>= 1, < 3) + sawyer (~> 0.9) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (5.0.1) + racc (1.6.2) + rake (13.0.6) + rb-fsevent (0.11.2) + rb-inotify (0.10.1) + ffi (~> 1.0) + reverse_markdown (2.1.1) + nokogiri + rexml (3.2.5) + rouge (4.0.1) + rss (0.2.9) + rexml + ruby2_keywords (0.0.5) + safe_yaml (1.0.5) + sass-embedded (1.58.0) + google-protobuf (~> 3.21) + rake (>= 10.0.0) + sawyer (0.9.2) + addressable (>= 2.3.5) + faraday (>= 0.17.3, < 3) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + tomlrb (2.0.3) + unicode-display_width (2.4.2) + webrick (1.8.1) + +PLATFORMS + x86_64-linux + +DEPENDENCIES + http_parser.rb (~> 0.6.0) + jekyll (~> 4.3.2) + jekyll-feed (~> 0.12) + jekyll-gist + jekyll-import! + jekyll-tidy + mdl + minima (~> 2.5) + no-style-please! + rss + safe_yaml + tzinfo (>= 1, < 3) + tzinfo-data + wdm (~> 0.1.1) + +BUNDLED WITH + 2.3.26 diff --git a/README.md b/README.md new file mode 100644 index 0000000..c5b76ee --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# atomaka.com + +Website managed by jekyll. + +## Pre-requisites + +* Python + * whatever version lets you install `requirements.txt` +* Ruby + * Preferably the version in `.ruby-version` + +## Setup + +1. `pip install -r requirements.txt` +2. `bundle install` + +## Testing + +* `bundle exec jekyll serve` + +## Deployment + +* `./build.sh` diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..9e855e9 --- /dev/null +++ b/_config.yml @@ -0,0 +1,60 @@ +# Welcome to Jekyll! +# +# This config file is meant for settings that affect your whole blog, values +# which you are expected to set up once and rarely edit after that. If you find +# yourself editing this file very often, consider using Jekyll's data files +# feature for the data you need to update frequently. +# +# For technical reasons, this file is *NOT* reloaded automatically when you use +# 'bundle exec jekyll serve'. If you change this file, please restart the server process. +# +# If you need help with YAML syntax, here are some quick references for you: +# https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml +# https://learnxinyminutes.com/docs/yaml/ +# +# Site settings +# These are used to personalize your new site. If you look in the HTML files, +# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. +# You can create any custom variable you would like, and they will be accessible +# in the templates via {{ site.myvariable }}. + +title: Andrew Tomaka +email: atomaka@atomaka.com +description: >- # this means to ignore newlines until "baseurl:" + Personal website of Andrew Tomaka +baseurl: "" # the subpath of your site, e.g. /blog +url: "https://www.atomaka.com" # the base hostname & protocol for your site, e.g. http://example.com +github_username: atomaka +favicon: favicon.ico + +# Build settings +theme: no-style-please +theme_config: + appearance: "auto" # can be "light", "dark" or "auto" +plugins: + - jekyll-feed + - jekyll-gist + +# Exclude from processing. +# The following items will not be processed, by default. +# Any item listed under the `exclude:` key here will be automatically added to +# the internal "default list". +# +# Excluded items can be processed by explicitly listing the directories or +# their entries' file path in the `include:` list. +# +exclude: + - .ruby-version + - build.sh + - old/ + - README.md +# - .sass-cache/ +# - .jekyll-cache/ +# - gemfiles/ +# - Gemfile +# - Gemfile.lock +# - node_modules/ +# - vendor/bundle/ +# - vendor/cache/ +# - vendor/gems/ +# - vendor/ruby/ diff --git a/_data/menu.yml b/_data/menu.yml new file mode 100644 index 0000000..f46c3bf --- /dev/null +++ b/_data/menu.yml @@ -0,0 +1,27 @@ +# For documentation on this file, see: +# https://github.com/riggraz/no-style-please#customize-the-menu + +entries: + - title: info + url: false + entries: + - title: coding + url: https://github.com/atomaka + - title: emailing + url: mailto:atomaka@atomaka.com + - title: speaking + url: https://slides.com/atomaka + - title: tooting + url: https://pub.atomaka.com/@atomaka + - title: working + url: https://www.linkedin.com/in/atomaka + + - title: all posts + post_list: + limit: 5 + show_more: true + show_more_text: See archive... + show_more_url: archive + + - title: rss + url: feed.xml diff --git a/_posts/2012-10-25-force-print-document-on-11x17-scaled.md b/_posts/2012-10-25-force-print-document-on-11x17-scaled.md new file mode 100644 index 0000000..2908300 --- /dev/null +++ b/_posts/2012-10-25-force-print-document-on-11x17-scaled.md @@ -0,0 +1,61 @@ +--- +layout: post +title: Force "Print Document on" 11x17 Scaled +tag: + - technical +--- + +The Print Spooler API in Windows does not seem to have an option to force +scaling to another paper size. Formerly, we would install the printer save the +registry key in `HKCU\Printers\DevModePerUser`. Then, we could check the "Print +Document On" option, apply the settings, and save the registry key again. +Performing a diff of between the two sets of roughly 4000 hex values should give +a subset of values that relate to "Print Document On." Finally, on installation +we could read in the registry key after everything else had been setup, cycle +through it changing the appropriate values based on our diff and then save the +registry key. This stopped working. + +No new diffs could be collected that would update the scale to fit functionality +that we needed. However, if the "Print Document On" option is manually set and +the registry key is collected, that key can be used as the "diff" and the newly +added printer would print scaled as desired. This has the unfortunate side +effect of modifying all other settings on the printer including the name and +color settings. As a work around, two different registry key "diffs" are used: +one for color and one for black&white. Then, the first 30 hex characters can be +chopped off in each key to make sure the printer name is not overwritten. + +``` +#include ; + +int stf[][2] = { + {8, 0}, + {10, 0}, + // and more keys +}; + +int setPrintDocumentOn(char *printerName) { + HKEY hkey; + + // find the tree where the key we need to change resides + RegOpenKey(HKEY_CURRENT_USER, "Printers\\DevModePerUser", &hkey); + + DWORD requiredSize = 0; + DWORD dataType; + + // read in the key + RegQueryValueEx(hkey, printerName, 0, &dataType, NULL, &requiredSize); + char *DevModePerUserData = malloc(requiredSize); + RegQueryValueEx(hkey, printerName, 0, &dataType, (BYTE *)DevModePerUserData, &requiredSize); + + // update the key + int i = 0; + for(i = 0; i < sizeof(stf) / 8; i++) { + DevModePerUserData[stf[i][0]] = stf[i][1]; + } + + // and save our updates + RegSetValueEx(hkey, printerName, 0, REG_BINARY, (BYTE *)DevModePerUserData, requiredSize); + RegFlushKey(hkey); + RegCloseKey(hkey); +} +``` diff --git a/_posts/2013-02-02-serious-regular-expressions.md b/_posts/2013-02-02-serious-regular-expressions.md new file mode 100644 index 0000000..59e912e --- /dev/null +++ b/_posts/2013-02-02-serious-regular-expressions.md @@ -0,0 +1,14 @@ +--- +layout: post +title: Serious Regular Expressions +tag: + - humor +--- + +``` +$n = '[0-9]'; +$reg = '/^[AZ]'.$n.$n.$n.$n.$n.$n.$n.$n.'$/'; +if(preg_match($reg, $id)) { + // ... +} +``` diff --git a/_posts/2013-09-25-password-checking-in-c.md b/_posts/2013-09-25-password-checking-in-c.md new file mode 100644 index 0000000..7c1745f --- /dev/null +++ b/_posts/2013-09-25-password-checking-in-c.md @@ -0,0 +1,58 @@ +--- +layout: post +title: Password Checking in C +tag: + - humor +--- + +``` +if (strlen(encrytedenteredpassword) != 13) { + passwordcorrect=0; +} else { + for (i=0; i<13;i++) { + switch (i) { + case 0: + if (encrytedenteredpassword[i] != 'f') passwordcorrect=0; + break; + case 1: + if (encrytedenteredpassword[i] != 'J') passwordcorrect=0; + break; + case 2: + if (encrytedenteredpassword[i] != 'c') passwordcorrect=0; + break; + case 3: + if (encrytedenteredpassword[i] != 'l') passwordcorrect=0; + break; + case 4: + if (encrytedenteredpassword[i] != 'Q') passwordcorrect=0; + break; + case 5: + if (encrytedenteredpassword[i] != 'v') passwordcorrect=0; + break; + case 6: + if (encrytedenteredpassword[i] != 'P') passwordcorrect=0; + break; + case 7: + if (encrytedenteredpassword[i] != 'i') passwordcorrect=0; + break; + case 8: + if (encrytedenteredpassword[i] != 'l') passwordcorrect=0; + break; + case 9: + if (encrytedenteredpassword[i] != 'N') passwordcorrect=0; + break; + case 10: + if (encrytedenteredpassword[i] != 'A') passwordcorrect=0; + break; + case 11: + if (encrytedenteredpassword[i] != 'z') passwordcorrect=0; + break; + case 12: + if (encrytedenteredpassword[i] != '.') passwordcorrect=0; + break; + default: passwordcorrect=0; break; + } + if (!passwordcorrect) break; + } +} +``` diff --git a/_posts/2014-01-19-intro-to-puppet.md b/_posts/2014-01-19-intro-to-puppet.md new file mode 100644 index 0000000..8763904 --- /dev/null +++ b/_posts/2014-01-19-intro-to-puppet.md @@ -0,0 +1,300 @@ +--- +layout: post +title: 'Intro to Puppet: The Bare Minimum' +tag: + - puppet + - technical +--- + +Last month, some of my coworkers were looking for a brief introduction to +[Puppet](http://www.puppetlabs.com/). Puppet is a type of configuration manager +for your servers. It allows you to create definitions of your server that can +then be automatically maintained. Puppet is mostly self documenting so it makes +it easy to know what your servers are doing while giving you a great way to +automate setting up large numbers of servers. + +This is that brief talk. All code is available on +[Github in my puppet-walkthru repository](https://github.com/atomaka/puppet-walkthru). +You will need [Git](http://www.git-scm.com/), +[Virtual Box](https://www.virtualbox.org/) and +[Vagrant](http://www.vagrantup.com/) installed. To begin, clone the repository +and launch the Vagrantfile: + +``` +git clone https://github.com/atomaka/puppet-walkthru.git +cd puppet-walkthru +vagrant up +``` + +This will setup a virtual machine on your computer with Puppet installed. All +code can be found on the virtual machine in the /vagrant directory. + +``` +vagrant ssh +sudo su cd /vagrant +``` + +You are now ready to work through the first example. + +## 1. Managing Users + +Puppet maintains state on your computer using what are referred to as +[resources](http://docs.puppetlabs.com/references/latest/type.html). The +built-in resources provided by Puppet provide a good start. In +[example one](https://github.com/atomaka/puppet-walkthru/blob/master/manifests/1-user-type.pp), +you can see how to use a Puppet resource to add and remove a user. + +``` +user { 'tm': + ensure => present, +} +user { 'fowlks': + ensure => absent, +} +``` + +You can run this code on your virtual machine with +`puppet apply manifests/1-user-type.pp`. Afterward, you should notice that the +user "tm" exists on your system. + +The [user resource](http://docs.puppetlabs.com/references/latest/type.html#user) +type manages local users on your system. This works on a wide variety of +systems, although some do not support some of the more specific features. In +this example, we make sure the user "tm" is present on the system and make sure +the user "fowlks" is not present. + +ensure is a keyword for all Puppet resources. present and absent are the most +common values although some resource types have others. ensure will make sure +that definition exists on your server and absent will obviously do the opposite. + +## 2. Managing Files + +Managing files is one of the most common tasks for server administration and +Puppet offers many ways to handle this. We’ll explore these in the +[next example](https://github.com/atomaka/puppet-walkthru/blob/master/manifests/2-file-type.pp). + +``` +file { '/tmp/test1.txt': + ensure => present, + content => 'Hello', +} +file { '/tmp/test2.txt': + ensure => present, + source => '/vagrant/files/test2.txt', +} +$something = "Hello" +file { '/tmp/test3.txt': + ensure => present, + content => template('/vagrant/templates/test3.txt.erb'), +} +``` + +Run this on your virtual machine using `puppet apply manifests/2-file-type.pp` +and you should be alerted that three files were created. You can verify this by +viewing the contents of the tmp directory with `ls /tmp`. + +The first +[file resource](http://docs.puppetlabs.com/references/latest/type.html#file) +simply creates a file at the specified location that says "Hello." +Unfortunately, this isn’t very useful since we do not want to have to type our +entire cnfiguration file in our Puppet definition. The second resource is +slightly more useful. This allows us to copy a file from our Puppet repository +to a specified location. + +Finally, we can also create templates. The last example uses a file from our +repository and copies it to the specified location. However, we can also include +variables that can be used in our file. In this case, we set a variable to +something and it is then displayed in the file: `You said: Hello`. The contents +of `$something` are used in the file. + +## 3. Installing Packages + +The last common task we’ll look at is installing packages. Puppet provides a way +to define which +[packages](http://docs.puppetlabs.com/references/latest/type.html#package) can +be installed. By default, this uses your distributions built-in package manager +although there are ways to specify various providers. Our example +[shows the most basic usage](https://github.com/atomaka/puppet-walkthru/blob/master/manifests/3-package-type.pp). + +``` +package { 'vim': + ensure => present, +} +package { 'alpine-pico': + ensure => absent, +} +``` + +Try to open vim and you will notice it cannot run. Once you run this code with +`puppet apply manifests/3-package-type.pp`, the vim package will then be +present. + +## 4. Ordering (or lack thereof) + +The trickest thing for beginners to Puppet is dealing with its +[non-deterministic behavior](http://puppetlabs.com/blog/inside-puppet-about-determinism). +This is easier to +[show than explain](https://github.com/atomaka/puppet-walkthru/blob/master/manifests/4-order-example.pp). + +``` +notify { 'First': } +notify { 'Second': } +notify { 'Third': } +notify { 'Fourth': } +notify { 'Fifth': } +notify { 'Sixth': } +notify { 'Seventh': } +``` + +When run, you would expect this to spit out First, Second, …, Seventh in order. +Invoke this code with `puppet apply manifests/4-order-example.pp` and be +surprised at the results. The order of the code is much different than what is +in the file. Furthermore, if you were to add `notify { 'Eighth': }` the ordering +might change completely. + +## 5. But I Need Order + +But there are dependencies when setting up systems. Puppet allows for this, you +just are required to +[explicitly define them](https://github.com/atomaka/puppet-walkthru/blob/master/manifests/5-ordered-example.pp). +The biggest advantage here is that if one line of dependencies fails, your +entire configuration does not. It takes some getting used to and can be +frustrating, but it is worth it. + +``` +notify { 'First': } +notify { 'Second': + require => Notify['First'], +} +notify { 'Third': + require => Notify['Second'], +} +notify { 'Fourth': + require => Notify['Third'], +} +notify { 'Fifth': + require => Notify['Fourth'], +} +notify { 'Sixth': + require => Notify['Fifth'], +} +notify { 'Seventh': + require => Notify['Sixth'], +} +``` + +By using the `require` parameter, we have have forced ordering. If you run this +code with `puppet apply manifests/5-ordered-example.pp`, you will see the order +you expected in example number four. + +## 6. Know Your Environment + +Puppet also provides a way for you to know about the system that the Puppet code +is running on with a system called Facter. + +``` +notify { "${::osfamily}": } +notify { "${::ipaddress}": } +notify { "${::uptime}": } +``` + +When run with `puppet apply manifests/6-facts-example.pp`, +[this code](https://github.com/atomaka/puppet-walkthru/blob/master/manifests/6-facts-example.pp) +will display the information about the virtual machine you are running on. We +will look at why this is useful later. + +## 7. Doing Something Useful + +Now that we have seen some quick forced examples of how to use Puppet, we now +have enough knowledge to do something that is actually useful. Using Puppet, we +can +[configure an entire service](https://github.com/atomaka/puppet-walkthru/blob/master/manifests/7-full-example.pp). +If you are not familiar, [NTP](http://www.ntp.org/) is a networking protocol for +time management. It is useful for mainitaining the same system time across all +of your servers. And we can use Puppet to install it! + +``` +package { 'ntp': + ensure => present, +} +file { '/etc/ntp.conf': + ensure => present, + require => Package['ntp'], + source => '/vagrant/files/ntp.conf.debian', +} +service { 'ntp': + ensure => running, + enable => true, + subscribe => File['/etc/ntp.conf'], +} +``` + +When running this code with `puppet apply manifest/7-full-example.pp`, you +should notice three things happen. First, the ntp package will be installed. +Since we are on Ubuntu, this is done using apt-get. Secondly, a configuration +file was copied from our Puppet repository to the location specified. Finally, +the ntp service was started. + +Install, configure, start is one of the most common patterns in Linux/UNIX +systems administration and we can easily automate it with Puppet. + +Something to note is our use of subscribe when using the +[service resource](http://docs.puppetlabs.com/references/latest/type.html#service) +type. This makes sure that the ntp service is restarted only if the +configuration file has changed. + +## 7. Managing Multiple Operating Systems + +Before this section, be sure to reset what we did in the previous example by +running bash support/cleanup7.sh. We just need to uninstall ntp and our config +file so we can do it all again. + +Unfortunately, our environments are never uniform and we are stuck dealing with +different versions of operating systems. Luckily, we have tools that we can use +to deal with it. We touched on this in section six, but now we will actually use +them +[to install ntp again](https://github.com/atomaka/puppet-walkthru/blob/master/manifests/8-independent-example.pp). +This time, our code will work on both Debian and RedHat family Linux +distributions. + +``` +case $::osfamily { + 'RedHat': { + $service = 'ntpd' + $conf = 'ntp.conf.redhat' + } + 'Debian': { + $service = 'ntp' + $conf = 'ntp.conf.debian' + } +} +notify { 'OS Information': + message => "${::osfamily}: Setting service to ${service} and conf to ${conf}", + before => Package['ntp'], +} +package { 'ntp': + ensure => present, +} +file { '/etc/ntp.conf': + ensure => present, + require => Package['ntp'], + source => "/vagrant/files/${conf}", +} +service { $service: + ensure => running, + enable => true, + subscribe => File['/etc/ntp.conf'], +} +``` + +When on our Ubuntu virtual machine, running this code with +`puppet apply manifest/8-independent-example.pp` will setup NTP just as we did +in example seven. However, this code can also run on RedHat / CentOS machines +without any adjustments. + +This is handled using the facts we discussed in section six. We check to see +what distribution we are using with `$::osfamily` and make choices based on +that. Since the service and the config file are different on RedHat, we assign +variables to these and adjust them as needed. + +You now have enough knowledge to get started with Puppet! diff --git a/_posts/2014-02-11-get-away-from-me-you-creep.md b/_posts/2014-02-11-get-away-from-me-you-creep.md new file mode 100644 index 0000000..e306789 --- /dev/null +++ b/_posts/2014-02-11-get-away-from-me-you-creep.md @@ -0,0 +1,78 @@ +--- +layout: post +title: Get Away From Me You Creep +tag: + - humor +--- + +Almost ten years ago, I took a telecommunication history with course with one of +the most eccentric people I had ever met. Unfortunately, it was during a time +where I was attending very few courses and I missed most of my opportunities to +listen to him speak. Still, I managed to make it to enough classes to have +distinct memories of him. Dr. Barry Litman passed away a few years ago and these +are his stories. + +I attended the first day of class just as I did the first day of every class I +took. I sat down and was probably scribbling in the notepad I purchased that I +knew would never be used or barely staying awake. He began giving a brief +overview the history of telecommunication in extreme story telling mode with an +unprecedented excitement. I don’t remember anything from that day except for the +way he ended class: “And just like that, the entire industry evolved into a star +just waiting to supernova.” + +I explained this to a couple of students I was working with and they immediately +knew who I was talking about. They warned me about David Sarnoff but would not +give me any other information. I was forced to attend class for several sessions +before the story was revealed. + +David Sarnoff was a corporate kingpin during the pioneering of radio and +television serving as an executive for the Radio Corporation of America. Dr. +Litman was visibly agitated as he explained this and other RCA history to the +class. And then he began talking about Edwin Armstrong. + +Edwin Armstrong was an employee of RCA and eventually credited inventor of FM +radio. He developed this while working for RCA, but Sarnoff saw it as a threat +to the AM technology that the company was already producing. Because of this and +their focus on television, Sarnoff and RCA chose not to purchase the patents for +the technology. But after hearing the quality and seeing its success, RCA first +tried to have the FCC ban usage of the wave and eventually claimed the invention +of the technology and won the patent. Armstrong spent nearly all his time and +money fighting for the rights to his own technology. + +As he was explaining these details, Litman went from agitated to infuriated. His +face reddened, he began sweating and spoke louder and louder. The entire class +was looking around at each other and no one knew how to respond. + +He eventually came to the close of the story. Armstrong ended up committing +suicide. And even though he was eventually given the credit he deserved, it came +too late. The professor was visibly exhausted and saddened but managed to +literally spit out one final angry yell: “And it was all because of that son of +a bitch, David Sarnoff.” He then walked out of the room. + +I mostly stopped going to class after that. I don’t know why. He was an +incredible teacher and his enthusiasm kept me interested during most lectures. +In the few classes I did attend he frequently referenced Vanna White as someone +who used to be one of his favorite people, but never expanded the story. The +last day before finals I went to class in hopes of getting some hints for the +final. Instead, he shared his story. + +He explained to us that once a year, he and one of his close friends/colleagues +would attend a conference related to telecommunication. A few years prior, Vanna +White was attending something loosely related and he managed to convince his +friend to attend. Vanna White’s booth was highly trafficked and Litman was +forced to wait in line for three hours to see her. During this time, he was +extremely nervous which led to him soaking through his shirt with sweat. When it +was finally his turn to meet her, he walked up and blurted out about how big of +a fan he was and how long he had followed her. + +And then he paused. I remember it feeling like ten minutes, but it was probably +closer to one. Finally, he asked the class “And do you know what that bitch said +to me?” He walked over to the side of the classroom and held the button to +retract the overhead. Slowly, the words she spoke were revealed having been +written in chalk on the board before the class had begun: + +"Get away from me, you creep." + +I wish I had written about these ten years ago. Even then, I wouldn’t have done +the man justice. Truly great speakers are rare and it’s unfortunate he passed so +soon. diff --git a/_posts/2015-11-21-dockerizing-lubot.md b/_posts/2015-11-21-dockerizing-lubot.md new file mode 100644 index 0000000..70dbc4c --- /dev/null +++ b/_posts/2015-11-21-dockerizing-lubot.md @@ -0,0 +1,143 @@ +--- +layout: post +title: Dockerizing Lubot +tag: + - docker + - technical +--- + +Lubot is the [Lansing Codes](http://lansing.codes/) chat bot responsible for +bringing updates about all local events to chatters everywhere…or just in +Lansing. Previously, it resided on a Heroku Free instance and was required to +sleep for six hours out of every twenty-four hours. After some issues with him +waking up, we began looking for alternatives. Since I already had a server +hosting several Docker containers, it seemed like the best choice. + +Docker is basically a way to create a container that can be easily distributed +across many operating systems. Using it, we can take the code, runtime, and +libraries that Lubot requires and put them in a package. You can read more about +it in the +[Official “What is Docker” article](https://www.docker.com/what-docker). + +To begin, we need to determine the necessary dependencies for our application. +Lubot is built using NodeJS and uses npm to manage dependencies. Specifically, +we are using Node v5.0.0 and npm v3.3.9. There’s an official Node Dockerfile to +use to begin with so it is pretty easy to start. + +``` +FROM node + +ENV NODE_VERSION 5.0.0 +ENV NPM_VERSION 3.3.9 +``` + +After that, we want to take care of the dependencies for our application. +Because of the way Docker works, we want to cache this step so when our +packages.json file does not change, we do not have to rebuild our dependencies. + +``` +ADD package.json /tmp/ +RUN cd /tmp && npm install +RUN mkdir -p /opt/hubot && cp -a /tmp/node_modules /opt/hubot +``` + +Then, we need to add the application code to the container. + +``` +ADD . /opt/hubot +WORKDIR /opt/hubot +``` + +Finally, we can start the service. + +``` +CMD ["/opt/hubot/bin/hubot", "--adapter", "slack"] +``` + +Combine these steps and we end up with a +[Dockerfile](https://github.com/lansingcodes/lubot/blob/master/Dockerfile). This +gets added to the repisitory so that we can build the application. Building an +image is easy. + +``` +docker build -t lansingcodes/lubot . +``` + +This will download and build the necessary filesystems, caching where necessary +and giving us a runable container image. Starting the container is also simple. + +``` +docker run lansingcodes/lubot +``` + +Lubot expects some environment variables to be there. But since we are in a +container, no environment variables exist on the system and we need to pass them +in. Our new run command accounts for this. + +``` +docker run -d --restart=always --name lubot \ + -e HUBOT_SLACK_TOKEN=$HUBOT_SLACK_TOKEN \ + -e TWITTER_LANSINGCODES_CONSUMER_KEY=$TWITTER_LANSINGCODES_CONSUMER_KEY \ + -e TWITTER_LANSINGCODES_CONSUMER_SECRET=$TWITTER_LANSINGCODES_CONSUMER_SECRET \ + -e TWITTER_LANSINGCODES_ACCESS_TOKEN=$TWITTER_LANSINGCODES_ACCESS_TOKEN \ + -e TWITTER_LANSINGCODES_ACCESS_TOKEN_SECRET=$TWITTER_LANSINGCODES_ACCESS_TOKEN_SECRET \ + -e GOOGLE_API_KEY=$GOOGLE_API_KEY \ + -e LUBOT_MEETUP_API_KEY=$LUBOT_MEETUP_API_KEY \ + -e TZ=$TZ \ + -e REDIS_URL=$REDIS_URL \ + lansingcodes/lubot +``` + +Lubot is now running in a container. However, Heroku also provided easy +continuous deployment when combined with [Circle CI](https://circleci.com/). +Being able to have changes deployed when the master branch changes is handy. +Circle CI allows us to specify post-build commands to run. Typically, we’d want +to build the container on our CI server and then push to a Docker registry, butI +didn’t have one of those available. We can still use Circle CI to execute +commands on a remote server with SSH. This makes our deploy process simple. + +- clone the repository on our remote server +- build the docker image from that repositry +- run the docker image that was build + +Our CI build file will trigger these actions via a script. + +``` +scp deploy/deploy.sh lubot@app.atomaka.com:/home/lubot +ssh lubot@app.atomaka.com "bash /home/lubot/deploy.sh" +``` + +And then, deploy.sh will take care of the parts we already discussed. + +``` +#!/bin/bash + +cd $HOME +source lubotrc + +git clone https://github.com/lansingcodes/lubot.git + +cd $HOME/lubot +sudo docker build -t lansingcodes/lubot . +cd $HOME +rm -rf $HOME/lubot + +sudo docker rm -f lubot +sudo docker run -d --restart=always --name lubot \ + -e HUBOT_SLACK_TOKEN=$HUBOT_SLACK_TOKEN \ + -e TWITTER_LANSINGCODES_CONSUMER_KEY=$TWITTER_LANSINGCODES_CONSUMER_KEY \ + -e TWITTER_LANSINGCODES_CONSUMER_SECRET=$TWITTER_LANSINGCODES_CONSUMER_SECRET \ + -e TWITTER_LANSINGCODES_ACCESS_TOKEN=$TWITTER_LANSINGCODES_ACCESS_TOKEN \ + -e TWITTER_LANSINGCODES_ACCESS_TOKEN_SECRET=$TWITTER_LANSINGCODES_ACCESS_TOKEN_SECRET \ + -e GOOGLE_API_KEY=$GOOGLE_API_KEY \ + -e LUBOT_MEETUP_API_KEY=$LUBOT_MEETUP_API_KEY \ + -e TZ=$TZ \ + -e REDIS_URL=$REDIS_URL \ + lansingcodes/lubot +``` + +Deploying Lubot is now just as easy as it was with Heroku and he never has to +sleep again. + +- [Other details surrounding the deployment](https://github.com/lansingcodes/lubot/tree/master/deploy) +- [Lubot repository](https://github.com/lansingcodes/slackbot) diff --git a/_posts/2016-11-05-testing-your-docker-images-with-gitlab-ci.md b/_posts/2016-11-05-testing-your-docker-images-with-gitlab-ci.md new file mode 100644 index 0000000..c77e98c --- /dev/null +++ b/_posts/2016-11-05-testing-your-docker-images-with-gitlab-ci.md @@ -0,0 +1,86 @@ +--- +layout: post +title: Testing Your Docker Images with GitLab CI +tag: + - continuous-integration + - gitlab + - docker + - devops +--- + +I have been using [GitLab](https://about.gitlab.com) for over four years. My +[first commit](https://github.com/gitlabhq/gitlabhq/commit/0760ba3efb7566b9f56bb066f4b15ba8ea34e1e7) +to the project came nearly three years ago. And although I was pretty +disappointed when they began +[releasing an enterprise edition](https://about.gitlab.com/2013/07/22/announcing-gitlab-enterprise-edition/), +the community edition of the project remains impressive. More recently, GitLab +has included a +[continuous integration software](https://about.gitlab.com/gitlab-ci/) along +with their code collaboration solution. + +Recently, I have been using this to produce [Docker](https://www.docker.com/) +images for my production environment. Although I had been using Docker for all +of my build stages, I was never using the image I was producing for validation. +Since I want to be as sure as I can that my production images are functioning, I +decided to update my build to use the project Dockerfile to run tests. + +I looked around and found a +[few](http://sirile.github.io/2016/09/29/minimal-go-containers-with-docker-and-gitlab-ci.html) +[articles](https://www.andrewmunsell.com/blog/ci-cd-with-docker-containers/) on +using Docker with Gitlab CI. Unfortunately, they all outlined methods that +[did not test the image](https://www.stefanwienert.de/blog/2015/11/07/gitlab-ci-with-docker-starting-guide/) +directly or did so in a +[complicated way](http://blog.lwolf.org/post/How-to-build-and-test-docker-images-in-gitlab-ci/). +I thought I could do better. + +We always want to use Docker for our builds, but running Docker inside of Docker +is not recommended. To resolve this, we can mount the host system’s Docker +socket inside the container when creating our test runner for building images. + +``` +[[runners]] + name = "docker-runner" + url = "https://gitlab.example.com/ci" + token = "YOUR_TOKEN" + executor = "docker" + [runners.docker] + tls_verify = false + image = "docker:latest" + privileged = false + disable_cache = false + volumes = ["/var/run/docker.sock:/var/run/docker.sock"] +``` + +Now that we are using the host Docker, we can leverage its image storage and +caching for our build. We can also use that image in our other build tasks. + +``` +stages: + - prepare + - test + - deploy + +build-test-container: + stage: prepare + script: + - docker build -t your-image . + tags: + - your-docker-tag + +spec: + stage: test + script: + - bundle exec rake db:create db:migrate + - bundle exec rspec + image: your-image + services: + - postgres:latest + +# ... +``` + +The container built from our project Dockerfile is now being directly tested by +our continuous integration. As you can see, we can also use any container links +without writing extra code. + +Clean and simple! diff --git a/_posts/2016-11-18-singular-and-plural-rails-routes-for-the-same-resource.md b/_posts/2016-11-18-singular-and-plural-rails-routes-for-the-same-resource.md new file mode 100644 index 0000000..877cf14 --- /dev/null +++ b/_posts/2016-11-18-singular-and-plural-rails-routes-for-the-same-resource.md @@ -0,0 +1,72 @@ +--- +layout: post +title: Singular and Plural Rails Routes for the Same Resource +tag: + - api + - ruby-on-rails + - restful +--- + +Sometimes when building your API with Rails, +[following best practices](http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api) +may seem difficult. I recently came across one of these cases and was tempted to +take a shortcut. However, I held strong and eventually came to a quality RESTful +solution — but not without issue. + +I wanted to allow users of my API to quickly access their own user profile. Our +application had already implemented a route to allow this via +`GET /profiles/:id` and simply implemented with +`resources :profiles, only: [:show]` in our routes configuration. + +Unfortunately, our API users wanted to be able to access their profile without +providing their ID. My first pass at resolving this was passed in a "fake +resource" to accomplish this. + +{% gist 1a056f8dca8931d8872c6cfefebb2d1a %} + +But I had broken one of the RESTful best practices. /profiles/me is not an +actual resource but we are pretending it is. So I looked to the +[Rails routes documentation](http://guides.rubyonrails.org/routing.html) for +guidance and came across +[singular resources](http://guides.rubyonrails.org/routing.html#singular-resources). + +> Sometimes, you have a resource that clients always look up without referencing +> an ID. For example, you would like /profile to always show the profile of the +> currently logged in user. + +I should not have been surprised that my exact use case was cited! + +Now we are back on track! I get to go back to my simple route declaration with +`resource :profile, only: :show` and without changing my controller code at all. + +But now I needed users to be able to access each other’s profiles. Again, the +Rails documentation had me covered. + +> Because you might want to use the same controller for a singular route +> (/account) and a plural route (/accounts/45), singular resources map to plural +> controllers. So that, for example, resource :photo and resources :photos +> creates both singular and plural routes that map to the same controller +> (PhotosController). + +And our implementation stays clean. + +{% gist e8d6641349e4d0ea7e68d22dd3755e9d %} + +This was awesome until I needed to use path helpers. With this implementation, +`profile_path(:id)` works as expected but `profile_path` does not. If the order +is reversed in the routes configuration, `profile_path` will work and +`profile_path(:id)` will not. This is the result of a bug in the Rails core that +touches some pretty intricate code that is linked to other issues. +[One has even been open for five years](https://github.com/rails/rails/issues/1769)! + +And we can work around that one as well by +[overriding the named helpers](http://guides.rubyonrails.org/routing.html#overriding-the-named-helpers). +Passing as: to our resource definition creates the helpers with a new name. + +Our final code is ready! + +{% gist e9dcc4cd4bad89554fb01be6627c7b63 %} + +In our application, we can reference a generic profile with `profile_path(:id)` +while still having `current_profile_path` to direct the user to their +own profile. diff --git a/_posts/2017-03-01-a-more-flexible-dockerfile-for-rails.md b/_posts/2017-03-01-a-more-flexible-dockerfile-for-rails.md new file mode 100644 index 0000000..0fe8e81 --- /dev/null +++ b/_posts/2017-03-01-a-more-flexible-dockerfile-for-rails.md @@ -0,0 +1,150 @@ +--- +layout: post +title: A More Flexible Dockerfile for Rails +tag: + - rails + - docker + - devops +--- + +One of my primary motivations for working with [Docker](https://www.docker.com/) +was creating a single artifact that I could toss into any environment. It has +been fantastic at this. I can throw together a simple Dockerfile that will build +my [Rails](http://rubyonrails.org/) application as an image for production in +about five minutes. + +``` +FROM ruby:2.3-alpine + +ADD Gemfile* /app/ + +RUN apk add --no-cache --virtual .build-deps build-base \ + && apk add --no-cache postgresql-dev tzdata \ + && cd /app; bundle install --without test production \ + && apk del .build-deps + +ADD . /app +RUN chown -R nobody:nogroup /app +USER nobody + +ENV RAILS_ENV production + +WORKDIR /app +CMD ["bundle", "exec", "rails", "s", "-b", "0.0.0.0", "-p", "8080"] +``` + +Except now that when I need to run the application’s test suite, I do not have +the dependencies I need. That Dockerfile might look something like this. + +``` +FROM ruby:2.3-alpine + +RUN apk add --no-cache build-base postgresql-dev tzdata + +ADD Gemfile* /app/ + +RUN cd /app; bundle install + +ADD . /app +RUN chown -R nobody:nogroup /app +USER nobody + + +WORKDIR /app +CMD ["bundle", "exec", "rails", "s", "-b", "0.0.0.0", "-p", "8080"] +``` + +Many people decide to include both of these Dockerfiles in their repository as +Dockerfile and Dockerfile.dev. This works perfectly fine. But now we have a +production Dockerfile that never gets used during development. Of course, it is +going through at least one staging environment (hopefully) but it would be nice +if we had a little more testing against it. + +Much like Docker provides us the ability to have a single artifact to move from +system to system, I wanted to have a single Dockerfile shared between all +environments. Luckily, Docker provides us with +[build arguments](https://docs.docker.com/engine/reference/builder/#/arg). A +build argument allows us to specify a variable when building the image and then +use that variable inside our Dockerfile. + +In our current Rails Dockerfile, we have two primary differences between our +environments: + +- The gem groups that are installed +- The environment that the application runs as + +Bundler’s +[BUNDLE_WITHOUTBUNDLE_WITHOUT](http://bundler.io/man/bundle-config.1.html#LIST-OF-AVAILABLE-KEYS) +allows us to specify the gem groups to skip via an environment variable making +both of these resolvable through environment configuration. Using this, our +shared Dockerfile could look like this: + +``` +FROM ruby:2.3-alpine + +ARG BUNDLE_WITHOUT=test:development +ENV BUNDLE_WITHOUT ${BUNDLE_WITHOUT} + +ADD Gemfile* /app/ + +RUN apk add --no-cache --virtual .build-deps build-base \ + && apk add --no-cache postgresql-dev tzdata \ + && cd /app; bundle install \ + && apk del .build-deps + +ADD . /app +RUN chown -R nobody:nogroup /app +USER nobody + +ARG RAILS_ENV=production +ENV RAILS_ENV ${RAILS_ENV} + +WORKDIR /app + +CMD ["bundle", "exec", "rails", "s", "-b", "0.0.0.0", "-p", "8080"] +``` + +The secret sauce here is `ARG BUNDLE_WITHOUT=test:development`. Running +`docker build -t rails-app .` will use the default value provided for the +`BUNDLE_WITHOUT` build argument, test:development, and a production Docker image +will be built. And if we specify the appropriate build arguments, we can +generate an image suitable for development. + +``` +docker build -t rails-app --build-arg BUNDLE_WITHOUT= --build-arg RAILS_ENV=development . +``` + +will generate our Docker image with all test and development dependencies +available. Typing this for building in development would get pretty tedious so +we can use docker-compose to make it easier + +``` +version: '2' +services: + app: + build: + context: . + args: + - BUNDLE_WITHOUT= + - RAILS_ENV=development + links: + - database + ports: + - "3000:8080" + env_file: + - .env + volumes: + - .:/app + tty: true + stdin_open: true +``` + +Now, `docker-compose up -d` is all we need in development to both build and +launch our development image. + +Finally, we have a single Dockerfile that can be used to build an image for any +of our application’s needs. Of course, there are some trade-offs. For example, +build time in development will suffer in some cases. But I have found only +maintaining a single Dockerfile to be worth these costs. + +Have another way to deal with this issue? Please share! diff --git a/_posts/2017-04-18-write-good-git-commits.md b/_posts/2017-04-18-write-good-git-commits.md new file mode 100644 index 0000000..cc083ad --- /dev/null +++ b/_posts/2017-04-18-write-good-git-commits.md @@ -0,0 +1,106 @@ +--- +layout: post +title: Write Good Git Commits +tag: + - git + - github +--- + +Writing quality Git commits has been written about to death, but it is so +important that I could not help myself from sharing my thoughts on the subject. +Mostly, I will be rehashing what +[Tim Pope has shared](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html), +but I will also include a few of the things that I have used to improve my +source histories. + +### Limit the subject of your commit to 50 characters + +Many people live life as I do: at the command line. Limiting to 50 characters +allows room for us to use an 80 character width for commands such as git rebase +--interactive without width concerns. Even for those in a more modern IDE, the +limit is important. + +![My helpful screenshot](/assets/gui-git.webp) + +As commit messages get longer, it becomes more difficult for everyone to +traverse your history. + +### Use the commit body for important details + +It is very rare that I see people extend their commit histories into the body +portion of a commit but it is the perfect place to offer extra details. Things +like what resources you used to make a specific decision are better left in the +commit history than in code comments most of the time. In a +[recent commit to my dotfiles](https://github.com/atomaka/dotfiles/commit/28a3897995ff21f63f7893f43582532e4717b8d9), +I added a quick alias to correct a TouchBar issue I was having. + +``` +Fix TouchBar when it (frequently) breaks + +From http://osxdaily.com/2017/01/11/manually-refresh-touch-bar-mac/ this +will reset the control portion of the touch bar which has been +frequently breaking in New and Interesting Ways™. +``` + +Without these details, I might never be able to find the source for why I +added this. + +Also, limit the line length in the body to 72 characters. + +### Do not use the --message option + +Pretty much everyone I watch make a commit will do so directly at their command +prompt with git commit -m. Forcing yourself into an editor will encourage you to +add additional details about a commit message. Additionally, your editor can +configured to alert you to the 50/72 rule. Simply add au FileType gitcommit set +t==72 to your vimrc to auto wrap git messages at 72 characters if vim is +configured as your Git editor. [vim-git](https://github.com/tpope/vim-git) is +also a fantastic option that will highlight based on these rules. + +If you are struggling with breaking your -m habit, try creating a bash function +to prevent its usage. + +``` +function git { + if [[ $@ == "commit -m" ]]; then + echo "Do not specify -m for commit" + else + command git "$@" + fi +} +``` + +### Commit as if giving a command + +[How to Write a Git Commit Message](https://chris.beams.io/posts/git-commit/) +made me consider the subject of my commits a little more. In bullet point 5, +Chris says "Use the imperative mood in the subject line." Considering Git itself +follows this rule, it made perfect sense to jump on board. + +``` +Merge branch 'bugfix/correct-spacing' +``` + +And + +``` +Revert "Implement person CRUD" +``` + +The best advice I picked up was write your commit as if you are completing the +following sentence: "If applied, this commit will..." + +### Rebase your branches, but leave master alone + +Rebasing is a heated topic in the community but the one thing that everyone can +agree on is leaving master alone. Once your commit has made it there, it is +history and should never be changed. However, your branch is your story. You get +to tell it however you want so craft it in a way that is useful to the reader. + +For me, this is particularly important because the second thing I do when +reviewing a new code base is look at the commit history to see to story of the +application. Unfortunately, most are riddled with messages like "fixed typo" or +"asdf" and the history becomes unreadable. + +Take care in crafting your git messages and you will find much more value in +your git logs! diff --git a/archive/index.md b/archive/index.md new file mode 100644 index 0000000..4989fff --- /dev/null +++ b/archive/index.md @@ -0,0 +1,4 @@ +--- +layout: archive +title: Archive +--- diff --git a/assets/gui-git.webp b/assets/gui-git.webp new file mode 100644 index 0000000000000000000000000000000000000000..1a84488ed623d156a5a6c3740b274dd0c9707f67 GIT binary patch literal 40102 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 diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c6664bfa411936000dca19715759cc66d97ee971 GIT binary patch literal 15406 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html deleted file mode 100644 index 4e7bde6..0000000 --- a/index.html +++ /dev/null @@ -1,92 +0,0 @@ - - - Personal Website of Andrew Tomaka - - - - - - - - - - -
-
-
-
-

Andrew Tomaka

-
- -
-
-
- - diff --git a/index.markdown b/index.markdown new file mode 100644 index 0000000..0671507 --- /dev/null +++ b/index.markdown @@ -0,0 +1,6 @@ +--- +# Feel free to add content and custom Front Matter to this file. +# To modify the layout, see https://jekyllrb.com/docs/themes/#overriding-theme-defaults + +layout: home +--- diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..c05569e --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +mdformat +mdformat-frontmatter