Rick Cogley's Tech Logr

Short Technical Laser Bursts %%

Welcome

Here be my pithy, short, technical nuggets. Maybe I’m the only one who cares. Who says Hugo can’t be used for microblogging‽

10 Apr 2019

«09:30:15»

Saw @AdobeType post that they are adding the #Reiwa era single-kanji character to their Japanese type faces such as Source Han Sans. This is the single-kanji version of the era name, like the Unicode ㍻ U+337B «square era name heisei». 🇯🇵

RC Logr 20190410 093015 - Saw @AdobeType post that they … Rick Cogley

«07:51:01»

Turns out birds are not so bird-brained after all, per the «Birdsong» episode of the fantastic 20000 Hz podcast @20korg (20K Hz is the typical upper limit of human hearing). Birds have a pharynx like humans, but sing with their syrinx, an organ at the base of the trachea. 🐦🐧

Some awesome examples from the episode:

  • the New Zealand kokako can produce organ-like chords
  • the African Grey Parrot can mimic human speech
  • Mockingbirds can mimic other birds and even frogs
  • the Australian Lyre bird and its uber-complex syrinx can mimic whatever it hears!

It’s worth a listen, and birds are cooler than you might imagine!

RC Logr 20190410 075101 - Turns out birds are not so … Rick Cogley

09 Apr 2019

«22:45:21»

PSA: A serious bug was discovered in Apache, the web server that powers a lot of the internet. Vulnerability CVE-2019-0211 allows scripts to be executed with root privileges, allowing system takeover especially on shared hosting environments. 🐞☠️

Apache foundation released patched version 2.4.39, so confirm and update (or request an update):

1
2
3
4
5
6
7
8
~ > httpd -v  # or apache2 on some
Server version: Apache/2.4.34 (Unix)
Server built: Feb 22 2019 19:30:04
~ > curl --head https://thesite.com
HTTP/1.1 200 OK
Date: ...
Server: Apache/2.4.34
...

You might need to confirm from your “control panel” in a shared environment. Note that Apache sysadmins can make settings to block these tools from getting any details about the web server. Same caveat applies, but you can also put <?php phpinfo() ?> in a file like info.php, then serve and access it.

RC Logr 20190409 224521 - PSA: A serious bug was … Rick Cogley

«14:44:39»

After upgrading to static site generator «Hugo 0.55.0», building with hugo server -D returns a couple of non-fatal warnings that should be corrected. 🐞

  1. The .Site.Pages includes section pages so you might need to change it to .Site.RegularPages. I was building an index.json for searching and relying on it to supply data to a script, but after the upgrade, the index included pages with no content. To fix, I just changed to the latter.
  2. When you get Page's .Hugo is deprecated you just need to change from something like .Hugo.Generator to hugo.Generator in your <head>.
  3. .GetParam is being deprecated, so see if you can just access the param directly. For example, indicating what posts are in draft form:

    1
    2
    3
    4
    
    // before
    {{ if .GetParam "draft"}}<span class="bg-orange white">DRAFT</span>{{end}}
    // after
    {{ if .Site.BuildDrafts }}{{ if .Draft }}<span class="bg-orange white">DRAFT</span>{{ end }}{{ end }} 

RC Logr 20190409 144438 - After upgrading to static site … Rick Cogley

«07:19:04»

Static site generator «Hugo 0.55.0» was released, we got a lot of great new features to play with, and it is even faster and more flexible. Go static! 🚀

RC Logr 20190409 071904 - Static site generator «Hugo … Rick Cogley

08 Apr 2019

«14:55:01»

Today I learned about «Lynis», an agentless security auditing tool for *nix-based systems, that lets you do compliance testing e.g. for HIPAA or SOX, pen testing, vulnerability detection to help you harden systems. I ran it and it appears to work well and returns useful suggestions after it runs, e.g. install this, disable that, confirm the other. 🤖

This is what the first few lines of the results look like:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[+] System Tools
------------------------------------
  - Scanning available tools...
  - Checking system binaries...

[+] Program Details
------------------------------------
  - Verbose mode                                              [ YES ]
  - Debug mode                                                [ NO ]

[+] Plugins (phase 1)
------------------------------------
 Note: plugins have more extensive tests and may take several minutes to complete

  - Plugins enabled                                           [ NONE ]

[+] Boot and services
------------------------------------
  - Service Manager                                           [ launchd ]
    - Boot loader                                             [ NONE FOUND ]

[+] Kernel
------------------------------------
...

(via @binitamshah on Twitter)

RC Logr 20190408 145501 - Today I learned about «Lynis», … Rick Cogley

«06:11:37»

«Cargo Cult» programming is a waste of time and effort. The best way is to understand fully, so do not ritually include features that serve no purpose, nor copy-paste code you do not understand. ✈📦

RC Logr 20190408 061136 - «Cargo Cult» programming is a … Rick Cogley

06 Apr 2019

«18:17:30»

I often need to replace dates in the frontmatter of markdown files, in «RFC 3339» format for content in static site generator Hugo. A simple shell function using gnu date, sed, head and pbcopy puts the current timestamp on the clipboard easily. 👻

1
2
3
4
5
function date3339() {
   echo "Putting RFC3339 on Clipboard for Frontmatter"
   gdate --rfc-3339=seconds | sed 's/ /T/' | head -c -1 | pbcopy >&1
   echo "Date in RFC 3339 format on clipboard. Paste away"
}

Here is how it works:

  • Gnu date with the --rfc-3339 switch gives us a timestamp like 2019-04-06 18:38:19+09:00, is piped to…
  • sed which replaces the space with a T, then that is piped to…
  • head to remove the trailing newline, which is finally piped to pbcopy to put the result on the clipboard (MacOS only).

Then just paste it where you need it. By the way, the timestamp means “18:38:19 in the timezone +9 hours ahead of GMT”, or, Japan time.

RC Logr 20190406 181729 - I often need to replace dates … Rick Cogley

05 Apr 2019

«18:21:30»

You can use the Haversine formula to approximate the «great-circle» distance between points on the globe, to get, say, the distance between map locations expressed in latitude and longitude. 🗺

Haversine Distance Formula

You can see it in use in this javascript around line 247, the meat of which is this:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
...
calcDistance: function (loc1, loc2){
  var rad = function(x) {return x*Math.PI/180;}
  var R = 6371; // earth's mean radius in km
  var dLat  = rad(loc2.latitude - loc1.latitude);
  var dLong = rad(loc2.longitude - loc1.longitude);

  var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(rad(loc1.latitude)) * Math.cos(rad(loc2.latitude)) * Math.sin(dLong/2) * Math.sin(dLong/2);
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
  var d = R * c;

  return d.toFixed(3);
},
...

RC Logr 20190405 182129 - You can use the Haversine … Rick Cogley

«14:48:45»

To avoid storing a credential in command line history, you can store it in a file and use cat to insert it when you need it. 🤓 Say you have your API token stored in /path/to/token, here is how you might use that:

1
~$> curl -X "POST" "https://service.com/apiv3/msg?content=test" -u '$(cat /path/to/token)'

RC Logr 20190405 144845 - To avoid storing a credential … Rick Cogley

03 Apr 2019

«09:30:57»

If you use Win 10 64 bit, you can install the «Windows Subsystem for Linux» from Control Panel, Program, Turn Windows Features On or Off. Select it, OK and restart, then install your Linux distribution from the Windows Store - Ubuntu, Debian, openSUSE, even Kali for pen testing. 🤖 What else?

  • Install Linux programs sudo apt-get install jq
  • Switch to zsh
  • Mount drives sudo mount -t ...
  • Run shell scripts
  • Use Windows Run, Open to run Linux commands bash -c "somebin"
  • Upgrade your selected Linux

You can even possibly run graphical Linux programs, although this subsystem is not designed for that.

RC Logr 20190403 093056 - If you use Win 10 64 bit, you … Rick Cogley

01 Apr 2019

«13:46:47»

The new Japan era name is «Reiwa» 令和, the 239th such era, which comprises daily-use kanji rei 令 and wa 和, which could be translated as auspicious or orderly or calm or command, and peace or harmony, respectively. 🇯🇵 A couple of data points about the two characters are as follows:

令 Rei和 Wa
Past Eras Containing020
JIS Code4E614F42
UTF16 Unicode4EE4548C
Strokes58
Old Variant
Taught in Grade34
JLPT Level22

These details come from Jim Breen’s awesome WWWJDIC and Wikipedia. Software people can note also that there is a Perl library Date::Japanese::Era for Japan era conversion, by Twitter user @miyagawa. And the Unicode blog has a post about character code U+32FF, the one-character representation of the new name.

There were a few eras which were only a couple years long and even 1 year or less in the case of the Genji era, but the average for the last four is about 37 years. Will I last another era?! 🙀

RC Logr 20190401 134646 - The new Japan era name is … Rick Cogley

«07:35:44»

I was disappointed in this incredible article by Hans van «Hook», because it mentions the low angle of the sun in winter, without citing the angle. It is 30~46 degrees from vertical in Tokyo, so position those solar arrays with abandon. 🌞

RC Logr 20190401 073544 - I was disappointed in this … Rick Cogley

«05:51:28»

Welcome to April. The color palette on my Logr site this month was picked thinking of the pinks of 桃 «Momo», Sakura and Plum blossoms as well as the beautiful greens of breaking spring. The birds are singing in our back yard and the uguisu is back too. Ah spring! 🌸

Hugo Pipes is what enables weaving Sass variables into site code, to make it super simple to change the color scheme with a couple variables to define the scheme for the month.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
...
{{ else if eq $mnth "March" }}
$textHilite: #b385d6 !default;
$codeBgColor: #f3ecf8 !default;
$one: #66308e !default;
$two: #a0cf89 !default;
$three: #c804fe !default;
$four: #1c0d27 !default;
$topbannerimage: "Cogley-Banner-PapaBubble-Candy-2.jpg";

{{ else if eq $mnth "April" }}
$textHilite: #63fbef !default;
$textHilite: $yellow !default;
$codeBgColor: #fee9eb !default;
$one: #FB636F !default;
$two: #A9D14A !default;
$three: #f60619 !default;
$four: #230104 !default;
$topbannerimage: "Cogley-Banner-Hiratsuka-Beach-Windsurfers.jpg";
...

RC Logr 20190401 055127 - Welcome to April. The color … Rick Cogley

31 Mar 2019

«11:53:01»

An «L» on a sock is ambiguous as it could mean left or large assuming English, so if you pick one of a pair up and get an L, then the other must be checked. If you pick and get an R, chuck that puppy on your right foot. 🕵🏻‍

RC Logr 20190331 115301 - An «L» on a sock is ambiguous … Rick Cogley

28 Mar 2019

«17:28:46»

Ever need a super simple way to show hidden files in Mac Finder or a File Open dialog, just press cmd-shift-. to toggle. macOS and its predecessors are unix based, and unix hides files or folders that start with a period, hence its use in this binding. 🕵🏻‍

To make it permanent:

1
2
~$> defaults write com.apple.finder AppleShowAllFiles YES
~$> killall -kill Finder

Slap a NO on the defaults command to reverse it. Also, you can ctrl-opt-click the Finder icon in the Dock, to access the Relaunch command.

RC Logr 20190328 172846 - Ever need a super simple way … Rick Cogley

«16:51:03»

I love the zsh configuration framework «prezto». Browse the runcoms folder for all the basic rc-type config files, and the modules folder for functions that you can load. 🤠 Switch into a module folder to display its readme. Edit the zpreztorc runcom to select modules to load and make settings. Run the built-in function zprezto-update to update. It:

enriches the command line interface environment with sane defaults, aliases, functions, auto completion, and prompt themes.

RC Logr 20190328 165103 - I love the zsh configuration … Rick Cogley

27 Mar 2019

«16:07:02»

When there is a new macOS point release available like today, before you update I recommend running Maintain Cocktail first to clear caches, cruft and so on, and then install via the «Combo Update». The combo contains all the patches since the last major release, and maybe it is voodoo but I have always had better luck installing the combo. 🗿

RC Logr 20190327 160702 - When there is a new macOS … Rick Cogley

26 Mar 2019

«19:38:01»

When you use bash as your shell, normally your .bash_profile is run once when you log in, and your .bashrc runs for every new shell. But using bash on macOS is a bit odd, because Terminal app will run .bash_profile every time you open a tab or window. 🤔 To make it act more normal on Mac, source your .bashrc from your .bash_profile, and put all your settings in .bashrc:

1
2
3
4
~ $> cat .bash_profile
if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi

Also, as a matter of convention, chmod 700 those 2 files to make them accessible to your user only.

RC Logr 20190326 193800 - When you use bash as your … Rick Cogley

25 Mar 2019

«18:29:20»

macOS often lets you set the default app for something, from preferences in their canonical app for that function. For example, you can set the the default browser as Firefox in Safari.app prefs, the default email client as MailMate from within Mail.app, BusyCal as default in Calendar.app, and even the default shell as say zsh in Terminal.app. 👍

It doesn’t work 100% but it is a common Apple design pattern.

RC Logr 20190325 182919 - macOS often lets you set the … Rick Cogley