<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nick Huanca</title>
    <description>The latest articles on DEV Community by Nick Huanca (@nickhuanca).</description>
    <link>https://dev.to/nickhuanca</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F151705%2F1cfdfae6-a466-46ba-b9ff-cc43b35aea83.png</url>
      <title>DEV Community: Nick Huanca</title>
      <link>https://dev.to/nickhuanca</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nickhuanca"/>
    <language>en</language>
    <item>
      <title>Reckoner</title>
      <dc:creator>Nick Huanca</dc:creator>
      <pubDate>Thu, 15 Aug 2019 22:47:45 +0000</pubDate>
      <link>https://dev.to/nickhuanca/reckoner-1peg</link>
      <guid>https://dev.to/nickhuanca/reckoner-1peg</guid>
      <description>&lt;p&gt;Recently I've been working on shoring up some of the user-experience and functionality of &lt;a href="https://github.com/FairwindsOps/reckoner/releases"&gt;Reckoner&lt;/a&gt;, an open source tool that works in conjunction with &lt;a href="https://helm.sh"&gt;helm&lt;/a&gt; to enable repeatable, declarative of helm charts onto kubernetes clusters. It also supports pointing to git repositories as a chart source, something which helm alone currently doesn't support.&lt;/p&gt;

&lt;p&gt;A common use case is when you want to install &lt;code&gt;nginx-ingress&lt;/code&gt; on a cluster and you want to be able to check all your chart values into source control. Below is an example of a &lt;code&gt;course.yml&lt;/code&gt;, the definition file that reckoner uses to install charts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# course.yml&lt;/span&gt;
&lt;span class="na"&gt;charts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;nginx-ingress&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ingress-controllers&lt;/span&gt;
    &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1.15.1&lt;/span&gt;
    &lt;span class="na"&gt;values&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="s"&gt;controller.ingressClass&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-ingress-class-name"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Running reckoner with a &lt;code&gt;reckoner plot course.yml&lt;/code&gt; will make sure helm installs &lt;code&gt;nginx-ingress&lt;/code&gt; in your clusters with the settings you've provided.&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://www.fairwinds.com/"&gt;Fairwinds&lt;/a&gt; we use reckoner to install core infrastructure to all our clusters and manage chart values for things related to that core infrastructure.&lt;/p&gt;

&lt;p&gt;Since reckoner was started in python, we decided it would be too much work to port it to another language just for easier binary distribution. Luckily, &lt;a href="https://www.pyinstaller.org/"&gt;PyInstaller&lt;/a&gt; allowed us to "compile" a self-contained binary that could be run on Linux or OS X systems. This made our lives so much easier for the installation story and has also helped with our end to end testing, which we now do in &lt;a href="//circleci.com"&gt;CircleCI&lt;/a&gt; with &lt;a href="https://github.com/kubernetes-sigs/kind"&gt;kind&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you do try out reckoner and something is lacking, always feel free to reach out via dev.to or start a discussion in github issues! We've made changes to help people run reckoner in CI/CD and are always interested in how it can make people's lives just a tad easier. Thanks!&lt;/p&gt;

</description>
      <category>python</category>
      <category>kubernetes</category>
      <category>helm</category>
      <category>pyinstaller</category>
    </item>
    <item>
      <title>More easily leveraging bool's from a ptr</title>
      <dc:creator>Nick Huanca</dc:creator>
      <pubDate>Fri, 14 Jun 2019 00:34:49 +0000</pubDate>
      <link>https://dev.to/nickhuanca/more-easily-leveraging-bool-s-from-a-ptr-36l2</link>
      <guid>https://dev.to/nickhuanca/more-easily-leveraging-bool-s-from-a-ptr-36l2</guid>
      <description>&lt;p&gt;I am currently working on a project that leverages pointers to Bool values in golang. I am using &lt;a href="https://godoc.org/k8s.io/api/core/v1#SecurityContext"&gt;corev1.SecurityContext.RunAsNonRoot&lt;/a&gt; which is a &lt;code&gt;*bool&lt;/code&gt;. When I am doing comparisons, I have to wrap all the checks for true/false in &lt;a href="https://github.com/reactiveops/polaris/blob/c6e3550293d5067a0e2208b8daa93ac35c6cadcb/pkg/validator/bool_pointer_helpers.go#L10-L21"&gt;a helper function&lt;/a&gt; since I cannot be sure if the value will be unset (&lt;code&gt;nil&lt;/code&gt;) which will cause a fatal error.&lt;/p&gt;

&lt;p&gt;Is there some other golang trick or pro-tip I should be using? Or is there some other type of method I should consider when using libraries that have this type of struct referencing &lt;code&gt;*bool&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;Any discussion would be so great! Happy Thursday!&lt;/p&gt;

</description>
      <category>go</category>
      <category>kubernetes</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Linux for Work</title>
      <dc:creator>Nick Huanca</dc:creator>
      <pubDate>Sun, 07 Apr 2019 22:49:23 +0000</pubDate>
      <link>https://dev.to/nickhuanca/linux-for-work-g4h</link>
      <guid>https://dev.to/nickhuanca/linux-for-work-g4h</guid>
      <description>&lt;p&gt;I've been working on a Linux laptop now for about nine months and I wanted to retro my learnings for the benefit of others. &lt;/p&gt;

&lt;p&gt;So after these last nine months I've realized all the reasons I changed over aren't the the same reasons that have kept me on Linux. It's been extremely interesting finding the hidden costs in switching, but also the hidden gains. &lt;/p&gt;

&lt;p&gt;First, to outline some of my motivations, I should note that I'm an SRE/"DevOps" engineer who manages Linux and containerized distributed systems. I'm very comfortable with Linux and all the issues that might happen on a server. That said, I don't manage any systems that have X Windows installed nor Bluetooth or other "must haves" for a work environment (Spotify for instance). &lt;/p&gt;

&lt;p&gt;My Original Reasons for the Switch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mac hardware has some issues (I didn't want a touchbar but I did want the latest CPU and memory specs)&lt;/li&gt;
&lt;li&gt;A more native environment, akin to what I'm used to working on the servers I work with&lt;/li&gt;
&lt;li&gt;Recent experience with personal laptops with Debian installed, I really enjoyed setting things up and getting things smooth&lt;/li&gt;
&lt;li&gt;Performance tuning and control (more on this later)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hurdles in my jump from OS X:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is Bluetooth reliable &lt;/li&gt;
&lt;li&gt;Does Spotify have a client&lt;/li&gt;
&lt;li&gt;Iterm2 split windows and broadcast input&lt;/li&gt;
&lt;li&gt;VS Code and other IDEs or dev envs&lt;/li&gt;
&lt;li&gt;I can't treat my laptop as "&lt;a href="http://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/"&gt;cattle&lt;/a&gt;", it's definitely a pet&lt;/li&gt;
&lt;li&gt;Will I spend &lt;strong&gt;all&lt;/strong&gt; of my time just getting the OS to behave? Will it leave me stranded?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I really wanted some nice new hardware to get me rolling on my nice new job. Unfortunately all the best Apple had to offer stuck me with USB-C only, no mag-safe, and a silly touchbar, not to mention all the keyboard issues with the new models... If I was going to be eating the fact of no mag-safe, I thought I should check out how it would be to work on some non-Apple hardware. I also thought it would be good to go with Linux because of my familiarity  using it for servers. I had also been running an&lt;br&gt;
 old laptop with Debian Jesse for a while and really enjoyed playing with my development environment on there. I found that most modern IDEs, worth their weight, have a Linux client so VSCode was pretty much a 1:1 switch from Mac to Linux. Spotify also had a client which pretty much sold me on the move. After learning a new workflow to get bluetooth speakers and headphones paired, I realized there are a few other hardware managers out there. Reading up online, I moved to a different Bluetooth manager. One thing I learned is you can replace just about anything, but be prepared to rollback your decision if it's not what you expected!&lt;/p&gt;

&lt;p&gt;As for replacing Iterm2, I found tmux to be a super nice solution that you can carry with you via dotfiles and other customizations.&lt;/p&gt;

&lt;p&gt;One of my original reasons for the change was to get better control over technical decisions and performance of what my laptop was doing. This ended up being a double edged sword but overall, if you have a slowdown you can really lean into systems knowledge to understand what your laptop is doing and why! I ended up encrypting my boot disk as well as having an encrypted home directory for overkill, this can sometimes be cumbersome so always remember with great power, comes great personal accountability :).&lt;/p&gt;

&lt;p&gt;In terms of the hurdles, I did find myself learning more about how the system worked and how to care and feed the OS. In terms of daily "care and feeding," I haven't found myself unable to work or getting stuck because my laptop wasn't working.&lt;/p&gt;

&lt;p&gt;Downsides I Hadn't Considered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installing dev tooling and comparing notes with coworkers: Uh I don't have Brew.. what now..&lt;/li&gt;
&lt;li&gt;Internal tools built for Darwin only - this means your building your own stuff sometimes. &lt;/li&gt;
&lt;li&gt;Company policy: Most larger organizations  have agents installed on laptops to be able to apply policies and control access. This might not be possible with Linux or in your org.&lt;/li&gt;
&lt;li&gt;Mouse gestures still aren't as amazing as OS X: Multi-touch works but no really great native swipe gesture functionality.&lt;/li&gt;
&lt;li&gt;Sometimes the bundled hardware manger tool for the distro isn't your favorite.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Honestly, the things I learned from the jump to a Linux workstation surprised me and overall I still would recommend it to anyone where it's an option. After the internal docs and tooling fight, to get my laptop ready to do daily work, I spent some time writing issues and docs for others to help them migrate if they want to.&lt;/p&gt;

&lt;p&gt;One thing that I still do miss about OS X is the four finger swipe between workspaces, but honestly the Ctrl+Alt left or right arrow works fine in it's place.&lt;/p&gt;

&lt;p&gt;My Reasons for Staying with it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More native experience is awesome&lt;/li&gt;
&lt;li&gt;Just being a user has increased my community involvement&lt;/li&gt;
&lt;li&gt;Boot times are incredibly fast on new hardware with SSD&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The reasons I've really appreciated lately actually are mostly new reasons, and not always the reasons I thought I wanted to move. Using Linux as a daily driver has driven me to investigate inconsistencies, report issues and try out new open source tools. Just by using the technology, I feel like I've been slightly contributing back. I've really enjoyed both the updates as well as boot performance of my system. &lt;/p&gt;

&lt;p&gt;Recommendations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Confirm it's cool with your org! Or try it at home!&lt;/li&gt;
&lt;li&gt;Try to pick a distro that is similar to what you work on. Try to avoid installing Debian if you use all CentOS at work on your servers. Unless you really want to know both, it's much easier keeping you one distro line. I personally like Mint Linux because we use Ubuntu or Debian for most our servers.&lt;/li&gt;
&lt;li&gt;You might live with "that one weird thing" that happens on your workstation until you figure it out: For me it's my line wrap with ZSH and tmux. Sometimes it does weird things and it isn't enough for me to go really figure it out&lt;/li&gt;
&lt;li&gt;Try Linux out at home first or Dual Boot. The idea here is to be able to roll back to a productive environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to ask questions but remember, if you're thinking of taking the leap, have fun and experiment!&lt;/p&gt;

</description>
      <category>linux</category>
      <category>devops</category>
      <category>beginners</category>
      <category>terminal</category>
    </item>
  </channel>
</rss>
