Well, the cluster of five nuts I’ve been tracking are some of the nuts from the ground.
Author: Lisa
Hazelnuts – Almost Ready
PEX-A
Who Deserves Benefits?
I blame Reagan for the public “knowing” who actually deserves benefits. Instead of showing the “welfare queen” as an extreme outlier who got caught and prosecuted because that’s an important part of government function along with “success stories” of people who survived on welfare for a few years whilst they got job training and reentered the workforce?
They wanted people to think that was a norm – your hard earned money is being stolen by the government and handed over to these frauds. Since there are so many lazy people out there stealing your money, odds are decent that anyone person getting benefits is a fraud. Obviously the people you like aren’t frauds – you are a good, loving, considerate person who wouldn’t like frauds. So it is conveniently all those people you don’t like stealing from us all.
And people manage to find something to create an ‘other’. If everyone has the same skin color, those folks are the wrong religion, descend from Irish/Italian/whatever immigrants, or are a bunch of McCoys/Hatfield’s/whatever’s.
For some reason, the ten thousand dollar toilet seats in the military budget didn’t get people thinking that military contracts are a scam misappropriating your hard earned money.
And the military one is kind of a straw man too – they eventually started 3d printing the thing and cut the cost to a couple hundred bucks (https://www.washingtonpost.com/business/capitalbusiness/the-air-forces-10000-toilet-cover/2018/07/14/c33d325a-85df-11e8-8f6c-46cb43e3f306_story.html).
Rainbow
Handmade Crochet Hook
Peach Butter
Using Templates in Azure Build Pipelines
I inherited a Java application that is actually five applications — and the build pipeline had a lot of repetition. Tell maven to use this POM file, now use that one, and now the other one. It wasn’t great, but it got even more cumbersome when I needed to split the production and development builds to use a different pool (network rule: prod and dev servers may not communicate … so the dev agent talks to the dev image repo which is used by the dev deployment. The prod agent talks to the prod image repo which is used by the prod deployment). Instead of having five “hey, maven, do this build” blocks, I now have ten.
So I created a template for the build step — jdk-path and maven-path are pipeline variables. The rest is the Maven build task with parameters to supply the step display name, pom file to use, and environment flag.
Maven Build Template:
# maven-build-step.yml
parameters:
- name: pomFile
type: string
- name: dockerEnv
type: string
- name: displayName
type: string
steps:
- task: Maven@3
displayName: '${{ parameters.displayName }}'
inputs:
mavenPomFile: '${{ parameters.pomFile }}'
mavenOptions: '-Xmx3072m'
javaHomeOption: 'Path'
jdkDirectory: $(jdk-path)
mavenVersionOption: 'Path'
mavenDirectory: $(maven-path)
mavenSetM2Home: true
jdkArchitectureOption: 'x64'
publishJUnitResults: true
testResultsFiles: '**/surefire-reports/TEST-*.xml'
goals: 'package -Denv=${{ parameters.dockerEnv }} jib:build'
Then my build pipeline uses the template and supplies a few parameters
Pipeline:
# azure-pipelines.yml
trigger: none
variables:
appName: 'NPM'
stages:
- stage: Build
jobs:
- job: NonProdBuild
condition: ne(variables['Build.SourceBranchName'], 'production')
displayName: 'Build non-production branch'
variables:
DockerFlag: 'docker_dev'
pool:
name: 'Engineering NPM'
steps:
- template: maven-build-template.yml
parameters:
pomFile: 'JAVA/KafkaStreamsApp/npm/pom.xml'
dockerEnv: $(DockerFlag)
displayName: 'Building Kafka Streams App'
- template: maven-build-template.yml
parameters:
pomFile: 'JAVA/DataSync/npmInfo/pom.xml'
dockerEnv: $(DockerFlag)
displayName: 'Building Data Sync App'
- template: maven-build-template.yml
parameters:
pomFile: 'JAVA/GroupingRules/pom.xml'
dockerEnv: $(DockerFlag)
displayName: 'Building Grouping Rules App'
- template: maven-build-template.yml
parameters:
pomFile: 'JAVA/Errorhandler/pom.xml'
dockerEnv: $(DockerFlag)
displayName: 'Building Error Handler App'
- template: maven-build-template.yml
parameters:
pomFile: 'JAVA/Events/pom.xml'
dockerEnv: $(DockerFlag)
displayName: 'Building Events App'
- job: ProdBuild
condition: eq(variables['Build.SourceBranchName'], 'production')
displayName: 'Build production branch'
variables:
DockerFlag: 'docker_prod'
pool:
name: 'Engineering NPM Prod'
steps:
- template: maven-build-template.yml
parameters:
pomFile: 'JAVA/KafkaStreamsApp/npm/pom.xml'
dockerEnv: $(DockerFlag)
displayName: 'Building Kafka Streams App'
- template: maven-build-template.yml
parameters:
pomFile: 'JAVA/DataSync/npmInfo/pom.xml'
dockerEnv: $(DockerFlag)
displayName: 'Building Data Sync App'
- template: maven-build-template.yml
parameters:
pomFile: 'JAVA/GroupingRules/pom.xml'
dockerEnv: $(DockerFlag)
displayName: 'Building Grouping Rules App'
- template: maven-build-template.yml
parameters:
pomFile: 'JAVA/Errorhandler/pom.xml'
dockerEnv: $(DockerFlag)
displayName: 'Building Error Handler App'
- template: maven-build-template.yml
parameters:
pomFile: 'JAVA/Events/pom.xml'
dockerEnv: $(DockerFlag)
displayName: 'Building Events App'
I think this could be made more concise … but it will do for now!
Homemade Jerky — Take 2
This time, I got larger cuts of meat and was able to cut with the grain for a chewier jerky. I also used setting ‘6’ on the slicer for thicker jerky that wasn’t as crunchy/dry. I used the same beef recipe as last time, and this time I used a pork loin to make pork jerky
- 1 cup soy sauce
- 1/3 cup Worcestershire sauce
- 1 cup water
- 1/2 cup maple syrup
- 3 Tbsp cracked peppercorns
- 2 Tbsp lemon juice
- 1 Tbsp hot pepper flakes
Beef Jerky:
And pork jerky:
Docker Registry: Listing Images and Timestamps
I wanted a quick way to verify that Docker images have actually been pushed to the registry … I’m using Distribution, and only wanted to report on images that start with sample (because the repository is shared & I don’t want to read through the very long list of other people’s images)
#!/bin/bash
registry="registryhost.example.net:5443"
authHeader="Authorization: Basic AUTHSTRINGHERE"
# List all repositories
repositories=$(curl -s -H "$authHeader" https://$registry/v2/_catalog | jq -r '.repositories[]')
for repo in $repositories; do
# Check if the repository name starts with "npm"
if [[ $repo == sample* ]]; then
# List all tags for the repository
tags=$(curl -s -H "$authHeader" https://$registry/v2/$repo/tags/list | jq -r '.tags[]')
for tag in $tags; do
# Get the manifest for the tag
manifest=$(curl -s -H "$authHeader" -H "Accept: application/vnd.docker.distribution.manifest.v2+json" https://$registry/v2/$repo/manifests/$tag)
# Extract the digest for the config
configDigest=$(echo $manifest | jq -r '.config.digest')
# Get the config blob
configBlob=$(curl -s -H "$authHeader" https://$registry/v2/$repo/blobs/$configDigest)
# Extract the last modified date from the config history
lastModifiedDate=$(echo $configBlob | jq -r '[.history[].created] | max')
echo -e "$repo\t$tag\t$lastModifiedDate"
done
fi
done