<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Musings Made Randomly]]></title><description><![CDATA[Awful things straight from my head]]></description><link>https://blog.cbrz.me/</link><image><url>https://blog.cbrz.me/favicon.png</url><title>Musings Made Randomly</title><link>https://blog.cbrz.me/</link></image><generator>Ghost 2.22</generator><lastBuildDate>Sun, 29 Mar 2026 16:22:56 GMT</lastBuildDate><atom:link href="https://blog.cbrz.me/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[30 Days of the Kinesis Advantage2]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Being attached to a keyboard for up to 16 hours a day (on a busy day) definitely takes a toll on wrists. After experiencing intermittent pain in my fingers/wrists, I decided to splurge on the <a href="https://kinesis-ergo.com/shop/advantage2/">Kinesis Advantage2</a>.</p>
<h2 id="day1">Day 1</h2>
<p>Keyboard delivered. Immediately switch keyboards (from my Das Keyboard 4</p>]]></description><link>https://blog.cbrz.me/kinesis-advantage-2/</link><guid isPermaLink="false">5d567060b3f46a0d83dd4950</guid><category><![CDATA[ergonomics]]></category><dc:creator><![CDATA[cbrz]]></dc:creator><pubDate>Tue, 01 Oct 2019 14:26:56 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Being attached to a keyboard for up to 16 hours a day (on a busy day) definitely takes a toll on wrists. After experiencing intermittent pain in my fingers/wrists, I decided to splurge on the <a href="https://kinesis-ergo.com/shop/advantage2/">Kinesis Advantage2</a>.</p>
<h2 id="day1">Day 1</h2>
<p>Keyboard delivered. Immediately switch keyboards (from my Das Keyboard 4 with Cherry MX Blue) and try to finish the rest of my work. This thing feels weird. The keys are squishier than I like too.</p>
<h2 id="day2">Day 2</h2>
<p>Typing slower than 6 year old me with &quot;Mavis Beacon Teaches Typing!&quot;. I have lots of project deadlines coming up which hopefully will provide me with ample practice time.</p>
<p>I'm beginning to wonder if the keyboard placement on some of the keys were always off, or if I was typing wrong for 30 years.</p>
<h2 id="day3">Day 3</h2>
<p><strong>Looks longingly at lifeless Das Keyboard</strong></p>
<h2 id="day4">Day 4</h2>
<p>I can sort of touch type, but there's definitely a few patterns where I'm messing things up. Typing in chats and e-mails is okay, however for programming it's a little annoying. Productivity is definitely slower since I'm thinking more of where the key I want to press is.</p>
<ul>
<li>My work laptop is a Mac and the Command Key being on the right hand side has me using two hands for certain actions instead of stretching out my left hand like a contortionist</li>
<li>It doesn't feel natural to highlight words with &quot;Shift&quot; + &quot;Arrow&quot; since my hand positioning is reversed</li>
<li>I edit a lot of JSON formatted files, and the bracket (&quot;[&quot;, &quot;]&quot;) keys make me want to die</li>
<li>With tmux I use the &quot;`&quot; key as the prefix key and I keep missing it</li>
<li>In fact all of the bottom row keys (like the &quot;Arrow&quot; keys) I mistype frequently</li>
<li>Using vim isn't bad except for using Ctrl + &quot;[&quot; as my escape</li>
<li>I also keep missing the &quot;X&quot;, &quot;C&quot;, &quot;V&quot;, &quot;N&quot;, &quot;M&quot; keys since they're shifted ever so slightly from my Das Keyboard</li>
</ul>
<p>On the plus side it feels easier (more accurate) to type if I lift my wrists slightly. Also I haven't felt any tinglyness.</p>
<h2 id="day9">Day 9</h2>
<p>Worked from home for a couple of days. This keyboard is starting to feel pretty comfortable. Beginning to re-do shortcuts in OSX programs now that I have a better feel for the keys.</p>
<h2 id="day11">Day 11</h2>
<p>Need to start to look into some key macros. This is might take a while since I use <code>vi</code> (or <code>vi</code> bindings) a lot and I don't want to interfere with those. Handling brackets would make my life a lot easier though.</p>
<h2 id="day15">Day 15</h2>
<p>After using this for a while, I'm going to skip key macros. I keep switching between multiple OS's and I'm not 100% sure I want to commit to something right now.</p>
<h2 id="day21">Day 21</h2>
<p>Went to work and used the work laptop keyboard. Since all of the keys are not in a matrix layout I keep mis-hitting the &quot;C&quot; and &quot;V&quot; keys...</p>
<h2 id="day30">Day 30</h2>
<p>I think it's safe to say I feel like I've acclimated to the layout of the Advantage2. There's still room for improvement in my usage, but I'd like to use this more before figuring out what I want to rebind.</p>
<h2 id="overview">Overview</h2>
<p>To sum up my experiences with the Advantage2...</p>
<h3 id="likes">Likes</h3>
<ul>
<li>Wrist pain/numbness is gone while typing. Yay!</li>
<li>It's easy to type quickly for standard documents (word docs/blogs/etc)</li>
</ul>
<h3 id="dislikes">Dislikes</h3>
<ul>
<li>Moving to other &quot;standard&quot; keyboard layouts takes a while to get used to, however it takes a couple of hours before I'm hitting keys accurately again.</li>
<li>I code for a living, so certain keys I have to hit a lot are placed in a position that still feels a little awkward:
<ul>
<li>In particular, the &quot;[&quot;, &quot;]&quot;, &quot;(&quot;, &quot;)&quot; and &quot;`&quot; are the ones I keep missing</li>
<li>If I mis-hit the key the first time, I usually get it on the second try.</li>
</ul>
</li>
</ul>
<h3 id="other">Other</h3>
<ul>
<li>There are some keys I still don't use often and will probably rebind. The &quot;Home&quot; and &quot;End&quot; keys are the biggest culprits, however the &quot;Page Up&quot; and &quot;Page Down&quot; keys also don't get a lot of use.</li>
<li>I still haven't used this for any gaming... however I don't know if I'll find the time to. I'd probably switch back to the Das for that :).</li>
</ul>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[(Local) Jenkins Instance with Multiple Slaves via Docker]]></title><description><![CDATA[<p>I have several jobs that I currently work on for a living (I've got serious bills to pay...), but my day-to-day job involves creating and maintaining test automation for some enterprise software (basically it's a bunch of microservices and a proprietary database). Currently one of my tasks is migrating our</p>]]></description><link>https://blog.cbrz.me/setting-up-jenkins-on-laptop-with-multiple-slaves-via-docker/</link><guid isPermaLink="false">5ce8ba29b3f46a0d83dd47d9</guid><category><![CDATA[docker]]></category><category><![CDATA[jenkins]]></category><category><![CDATA[docker-compose]]></category><dc:creator><![CDATA[cbrz]]></dc:creator><pubDate>Sat, 25 May 2019 04:50:30 GMT</pubDate><content:encoded><![CDATA[<p>I have several jobs that I currently work on for a living (I've got serious bills to pay...), but my day-to-day job involves creating and maintaining test automation for some enterprise software (basically it's a bunch of microservices and a proprietary database). Currently one of my tasks is migrating our older Jenkins Freestyle jobs to Jenkins Pipeline jobs (the benefit is questionable, but it pays the bills).</p><p>As part of a migration test for some parallel work, I wanted to run tests locally instead of on the work Jenkins instance.</p><p>There are a few reasons for this:</p><ul><li>I don't have permissions to install any plugins</li><li>I don't want to break anything I can't fix on a Friday</li></ul><p>As far as tools to do this, I figured Docker was a good enough choice since I have it on my laptop... but also I was far too lazy to start a new VM.</p><h2 id="setting-up-local-jenkins-with-docker">Setting up (Local) Jenkins with Docker</h2><p>I don't have any special instructions for setting up Jenkins master on a Docker host. However I did follow a <a href="https://jenkins.io/doc/tutorials/create-a-pipeline-in-blue-ocean/">tutorial for Jenkins BlueOcean</a> which installs a local Jenkins instance via the <code>docker run</code> command and saves your Jenkins information via a mount.</p><p>The command to do this is below:</p><!--kg-card-begin: code--><pre><code class="language-bash">docker run \
    --rm \
    -u root \
    -p 8080:8080 \
    -v jenkins-data:/var/jenkins_home \ 
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v "$HOME":/home \ 
    jenkinsci/blueocean</code></pre><!--kg-card-end: code--><p>Simple enough (right?). I should probably mention that I'm on Windows 10, so I substituted <code>$USERPROFILE</code> for <code>$HOME</code>. It seemed to work all the same though.</p><p>After clicking my way through the setup, I took that command and created a <code>docker-compose.yml</code> file in the same directory as my (newly created) jenkins-data folder:</p><!--kg-card-begin: code--><figure class="kg-card kg-code-card"><pre><code class="language-yml">version: '3.3'

services:
  jenkins-blueocean:
    image: jenkinsci/blueocean
    networks:
      jenkins:
        aliases:
          - jenkins
    ports:
      - 8080:8080
    user: root
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "./jenkins-data:/var/jenkins_home"
      - "$USERPROFILE:/home" # Windows 10 Again!

networks:
  jenkins:</code></pre><figcaption>./docker-compose.yml</figcaption></figure><!--kg-card-end: code--><p>Now it's possible to start up the Jenkins instance with <code>docker-compose up -d</code>. </p><p>This is great and all, however what I really want to do is test different parallel setups/plugins across a set of Jenkins slave nodes. How can we do that locally?</p><h2 id="creating-a-docker-image-to-use-with-local-jenkins">Creating a Docker image to use with (Local) Jenkins</h2><p>The normal process people use to start up Jenkins slave nodes is to create a new machine then set up the machine to be connected to via SSH. If I'm far too lazy for a VM (via Vagrant), I'm far too lazy to click through menus to add a new node. Enter the <a href="https://plugins.jenkins.io/swarm">Self-Organizing Swarm Modules Plugin</a>.</p><p>The plugin works by starting a Java CLI client that discovers your Jenkins master and joins it. You can install via the Plugin Manager (currently it's on version 3.16).</p><p>Now to create the nodes. I needed a way to create new nodes easily, but scale them for my purposes. So I created a new Dockerfile and entered the following:</p><!--kg-card-begin: code--><figure class="kg-card kg-code-card"><pre><code class="language-Dockerfile">FROM ubuntu:latest

ENV SWARM_PLUGIN_VERSION=3.16

WORKDIR /var/run/jenkins
COPY . .
RUN apt-get update \
    &amp;&amp; apt-get install -y default-jre git wget \
    &amp;&amp; rm -rf /var/lib/apt/lists* \
    &amp;&amp; wget "https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/swarm-client/${SWARM_PLUGIN_VERSION}/swarm-client-${SWARM_PLUGIN_VERSION}.jar" \
    &amp;&amp; chmod 755 entrypoint.sh

ENTRYPOINT [ "./entrypoint.sh" ]
</code></pre><figcaption>./jenkins-node/Dockerfile</figcaption></figure><!--kg-card-end: code--><p>This will perform the following:</p><ul><li>Use latest Ubuntu server (I'm more familiar with it)</li><li>Update/Install Java/Git/wget</li><li>Download the swarm-client for version 3.16</li><li>Run the <code>entrypoint.sh</code> script.</li></ul><p>Well, now I need an <code>entrypoint.sh</code> script...</p><!--kg-card-begin: code--><figure class="kg-card kg-code-card"><pre><code class="language-bash">#!/bin/bash

java -jar "swarm-client-$SWARM_PLUGIN_VERSION.jar" \
	-master "http://jenkins:8080/" \
    -name "$HOSTNAME" -labels "$HOSTNAME" \
    -username "my-jenkins-user" -password "my-jenkins-password"
</code></pre><figcaption>./jenkins-node/entrypoint.sh</figcaption></figure><!--kg-card-end: code--><p>This will start the plugin via Java, set the name/label to the container <code>$HOSTNAME</code> and try to connect the Jenkins master.</p><h2 id="bringing-it-all-together">Bringing it all together</h2><p>Docker is all about containerization of apps and just starting this randomly isn't going to have everything magically work. To do this, let's modify our <code>docker-compose.yml</code> file one last time</p><!--kg-card-begin: code--><figure class="kg-card kg-code-card"><pre><code class="language-yml">version: '3.3'

services:
  jenkins-blueocean:
    image: jenkinsci/blueocean
    networks:
      jenkins:
        aliases:
          - jenkins
    ports:
      - 8080:8080
    user: root
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "./jenkins-data:/var/jenkins_home"
      - "$USERPROFILE:/home"

  jenkins-node:
    build: ./jenkins-node
    image: jenkins-node
    networks:
      jenkins: {}

networks:
  jenkins:</code></pre><figcaption>./docker-compose.yml</figcaption></figure><!--kg-card-end: code--><p>Now if everything somehow worked smoothly, you should be able to run the following commands:</p><!--kg-card-begin: code--><pre><code class="language-bash">docker-compose up -d jenkins-blueocean
docker-compose up --build -d --scale jenkins-node=6</code></pre><!--kg-card-end: code--><p>And your Jenkins Executor Status should look like this (6 nodes!):</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://blog.cbrz.me/content/images/2019/05/image-3.png" class="kg-image"></figure><!--kg-card-end: image--><p>I would never run a production environment like this (hence why I put "Local" before Jenkins), however to test things like Lockable Resources and 100 parallel jobs it's kind of nice to have. At least I won't break our critical jobs (again).</p>]]></content:encoded></item><item><title><![CDATA[Starting a blog (again!)]]></title><description><![CDATA[<p>Have a few servers lying around, and figured... why not?</p><p>I intend to use this to hold any random thoughts that I deem interesting. I could probably try to use twitter instead but that's not gonna happen.</p><p>Hopefully I can keep this up for over a few months this time.</p>]]></description><link>https://blog.cbrz.me/starting-a-blog-again/</link><guid isPermaLink="false">5ce267fbb3f46a0d83dd47b0</guid><dc:creator><![CDATA[cbrz]]></dc:creator><pubDate>Mon, 20 May 2019 08:48:00 GMT</pubDate><content:encoded><![CDATA[<p>Have a few servers lying around, and figured... why not?</p><p>I intend to use this to hold any random thoughts that I deem interesting. I could probably try to use twitter instead but that's not gonna happen.</p><p>Hopefully I can keep this up for over a few months this time.</p>]]></content:encoded></item></channel></rss>