Got a New Keyboard That Has a Horrifying Sleep Key! @#$%^&@!

I picked up a Logitech keyboard recently, the MK850 with mouse combo. It was on sale for 80% off, which ran me a mighty $20 bucks. I needed a new keyboard as my Apple keyboard I’ve been using just really doesn’t cut it for a Linux machine. I wanted the function keys and placement of the extra alt, ctrl, and related keys to be in a more traditional placement. This keyboard is a win. However…Image from iOS (2)

Image from iOS (1)

Observations

My first observation as I plugged it in to try out, was my attempt to turn up the music, turned into a going to sleep phase for the computer. A few seconds and it was entirely off. This is a full on computer, not a laptop, so I don’t need it to be going to sleep ever. It either needs to be on, completely, or off completely. Let me show you, this key, right here is a damned curse!

thatkey

The F11 key, right beside the sound up and down function keys, is the sleep and lock key. Completely unacceptable location. I went into emergency mode on this matter.

EMERGENCY

A little research and I went full off mode on sleep, hibernate, and suspend! The commands are as follows.

gsettings set org.gnome.settings-daemon.plugins.power button-hibernate "nothing"
gsettings set org.gnome.settings-daemon.plugins.power button-sleep "nothing"
gsettings set org.gnome.settings-daemon.plugins.power button-suspend "nothing"

Now, if you want those back on however, the commands are specific to the function, as shown below.

gsettings set org.gnome.settings-daemon.plugins.power button-hibernate "hibernate"
gsettings set org.gnome.settings-daemon.plugins.power button-sleep "hibernate"
gsettings set org.gnome.settings-daemon.plugins.power button-suspend "suspend"

Ok, whew. Errr well, maybe not.

I rebooted and that didn’t actually take effect. I did a little more research and found dconf-tools. So I installed that.

sudo apt-get install dconf-tools

Opened up dconf and navigated toorg gnome settings-daemon plugins and then power.

dangerous

This editor then showed me what I had technically just set. So that was confirmed, but got me no where. Onward to troubleshooting.

Next research led me to this option. But then I couldn’t actually get the command to pair to it as it seems the fn or function key plus the F11 key doesn’t actually show up when setting the shortcut keys. Thoughts? If you’ve got any ideas I’m out of ideas for now, do comment or tweet @Adron.

On with the observations.

Alright, with that fixed I could refocus on the plusses of the keyboard. It’s paired very nicely with the silent mouse, similar to the mouse I reviewed a while back, the M331 Silent Mouse. The keyboard is also extremely silent, with barely any utterance of noise coming from the keyboard. If you like the loud mechanical style, this is not your keyboard. If you want to focus on music or something else while typing then, this is your keyboard.

With that, my quick review and emergency is done. This might be helpful so typed it up but now it’s time to get back to work on some Go prototyping and some solid tunes from Eastern High. For reference, here’s one of their good ones.

Hi, I’m Adron & This is My Gear Setup

I sat down and made a short video of my systems setup and related gear. I’ve always enjoyed seeing other peoples’ setups so figured I’d join the mix and show you all what I work with. Happy to answer any questions too, cheers!

In addition to the video intro I’ve created some additional repositories and related things that I use frequently that may be useful.

Ubuntu Dev Setup Repository: This repo dev-setup-ubuntu has some installation scripts and related collateral that I use to get virtual machines built in an automated way. The focus of this is for setting up development boxes and not for setting up servers.

Video Stream Hacking AKA Twitch & Youtube Live Streaming: This repo is setup with notes and eventually I’ll likely add scripts and related collateral that I use during filming Twitch/Youtube Streams.

Full Gear List: If you’re interested in what makes this possible, at a more detailed level, this is the list to check out.

Thrashing Code Sessions Week 34 of 2018

In this session I talk through the issues I had previous session (but give context, so no need to re-review it) of the environment variable problems I was having. I detail how Jetbrains Rider deals with environment variables for the user session specifically versus how those are dealt with if you’re using something like Visual Studio Code and its built in terminal. After that I move on to doing some refactoring and moving toward some feature additions.

In this session my friend Jeremy joins to setup PXE boot, net install, Debian loads, configuration, Ansible, and a whole lot more to setup a network and cluster of machines for use. It’s long, but he covers a LOT of ground with plenty off tips and tricks to pick up. NOTE: the sound is rough in some places. Will try to fix that in post-production editing. No promises just yet though, just crank it to 11 in the meantime.

Thrashing Code Sessions via Twitch & Kick Ass Dis-Sys Meetup

Got some excellent coding and systems setup coming up in the next few days. Also a meetup on the 28th with Tim Kellogg and Alena Hall presenting on some interesting topics around distributed database data working on Kubernetes and WebAssembly of the hot temperament type. A new surprise guest addition on my Twitch channel that is scheduled to swing into Valhalla and help build out a cluster and respective needed DHCP, DNS, and related configuration for a setup on the metal!

Schedule

 

Let’s Talk, Even If You’re Not Qualified!

Please help me out if you would and spread the word on this post via the Twitters, LinkedIn, or whatever method you might have to pass on the word. Thanks!

Alright, I don’t usually do this. But I’m going to delve into the topic of a job post we’re working to fill here where I work at DataStax. Specifically it’s the DataStax Developer Advocate Role, which is important to me for a multitude of reasons, but specifically because we’d get to work together. Under most circumstances, I’d probably just let the company look and look and look for somebody, but I’m invested in this team as I really enjoy the work we do and the camaraderie that we have. With that, the position.

We’re looking for someone with a multitude of skills, but more specifically an acumen and interest in learning, exploring data and systems, and helping developers build solid systems with DataStax Enterprise. But that’s just the surface. I wrote about what I, specifically get to do as a developer advocate earlier in a post I titled “Evangelism, Advocacy, and Activism in the Technology Industry“.

The idea that you might be disqualified from the position if you don’t have a specific part of the criteria list, just get that out of your mind. If you see parts that you have, interests that match, let’s talk and see if things would work.

If you of these criteria describe what you’re up to, ping me.

  • You’ve just got out of college and haven’t touched a distributed database before, but would really like to get into distributed databases and distributed systems and tell people about what you’ve learned. Let’s talk. Ping me @Adron.
  • You were in college, but thought “meh, I’m good” and want to join the workforce and have technical chops but have been looking for a good fit for a self-starter, self-organizing type of role. Let’s talk. Ping me @Adron.
  • You’d like to work with a team to make a product better, learn about, teach people what you’ve learned, write about your experiences, and even speak about your experiences. Let’s talk. Ping me @Adron.
  • You’ve built an application in C#, or Java, or Go, or JavaScript but not really done a lot of database work but are interested in going deeper. Let’s talk. Ping me @Adron.
  • You’d like to work with a team remotely, in a position you’d get to learn a lot, experiment, and build applications to test out ideas you have about application development. Let’s talk. Ping me @Adron.
  • You’d like to work on a team that isn’t toxic, has a healthy working practice, communicates regularly and effectively, enjoys learning, teaching, and helping each other get things learned, built, and deployed! Let’s talk. Ping me @Adron.

Hopefully that portrays the idea well. Emphasis on, get in touch with me. I’d love to chat about the role if you’re interested and see if you’d like to move forward. If dev advocate isn’t what you want we’ve got a number of awesome, remote, seriously cool jobs open right now. From site reliability to engineering to sales or what not. I’m happy to get you connected to the right people, so let’s talk. Ping me @Adron.

Evangelism, Advocacy, and Activism in The Technology Industry

Usually I just head to my local office in downtown Ballard, a neighborhood in Seattle that was and still is largely its own city. Today however I’ve boarded the 17x Express Bus into the downtown Seattle. While in transit, as I always do, I just sat back introspecting on the day to be and the days of past, while reading Jeff’s post “From Evangelist to Developer Advocates” on our occupation title changes. As of recently we went from the somewhat inappropriately named Developer Evangelist to the more accurate title of Developer Advocate.

People have written about these titles in DevRel (Developer Relations) in the past, as have I. I wanted to add a few thoughts about these titles in this particular situation, and draw out some recent events where others seem to incorrectly, albeit with reason, conflate actual evangelism with advocacy. I’ll wrap up with another specific word that is important, activism, and how that comes to play in the tech industry also.

Spread the Word of God! Eh… ?!

Alright let’s get down to the real meat of the definition of the word evangelism.

Evangelism – 1 “the winning or revival of personal commitments to Christ” and 2 “militant or crusading zeal” so yeah,  wow. Not the actual intention.

evangelism

Most uses of the word all center around spreading the gospel, specifically the gospel of the Christian God in the bible often through militant fasion and prospectively genocidal eradication of peoples. Somewhere in the late 80’s, 90’s or something some tech company (I think Microsoft if memory serves) in partial tongue in cheek jest dubbed an occupation position evangelists that would go out and spread the good word of the technology. I only know parts of the myth and origin story, but suffice it to say, it was kind of a joke that stuck and at this point has just been a title for well over a decade or two now. One that sincerely should probably not be used anymore, as I hope nobody is militantly pushing technology on others.

Another note, many of us referred to officially or unofficially have gotten hit with this association in often negative ways. For example. Follow that thread for the trash fire it becomes and the horror of the iWill Estate troll account. But I do digress.

This is one of the dangers of tech appropriating titles and such (as it all to often does) it tends to create societal blow back that is more than unwelcome. But on toward a better future and a better title right?

Advocacy – “the act or process of supporting a cause or proposal” or “the act or process of advocating”. Alright, now we’re on to something!

advocacy

But seriously, evangelists in technology aren’t preachers, and according to statistics are dramatically more likely to just be atheist, so being an advocate is exponentially better in so many ways. It really is, in so many ways, an occupation that is involved with the act of advancing, working with, and showing others certain tools, languages, or related technologies within the technology industry. In this way, using the word advocate in the title is just simply a more accurate and effective choice in so many ways. It isn’t a word derived from jest, it’s definition itself aligns with the occupation, and in my not so humble opinion it sounds a lot better. I am, and always will be an advocate for many different things.

Delving Further into Advocacy

Over the years I’ve done far more than merely advocacy work. I’ve worked in everything from labor, cooking, software developer for startups to enterprises, security, teaching, enterprise desk jockey (I mean software engineer, but the difference is sometimes minimal), and a host of other work. Each had various ranges of activities that needed done that went far beyond the actual occupation title. The title is merely a poorly designed window that one can look into to see what an occupation entails. The real details need written down, and really thought about in detail outside of the title itself. The following is a list of the top key things I do as a developer advocate.

  1. I write code for reference AND production. I write lot’s of code in a number of languages (very polyglot, much wow, very confusion). I work through the problems and plights of different technology stacks. I work with systems, operations, and all the intertwining characteristics in between. Sometimes only at a very high level architecturally and other times at the deeper level of shifting bits and fighting pointer errors in C. The idea however, is the technology situation isn’t just the mythical nonsensical full stack as the code schools say, but the real life from hardware to software, top to bottom full stack of intricate and often frustrating detail! In summary, it’s a blast if you’re a curious type that likes to bounce around in the various domain problem spaces.
  2. I extensively get to and know how to travel, well. This one gets a little personal. I don’t just book flights and stay in hotels. Often I wouldn’t even need to do this but I like to make a point that I will handle my own travel, and expense it as needed. The stress of traveling inefficiently can end up being the death knell of being an advocate. It can lead to burn out, sickness (yes, actually being sick), and other health related issues. Matter of fact this topic will be another entire blog entry, or entries, that I’ll write on the matter. But let’s just say I travel on a semi-frequent basis at this point. A nice cool 1-2 weeks out of every 2-3 months. Which in many ways is minimal for a lot of advocacy and related positions. More on this topic in a future post.
  3. SSO and Cartesian password nightmare management. I’ve never in my life had to manage as many usernames and passwords as when working as a developer advocate. The reasoning is simple, as with consulting I often end up helping out with a lot of different systems. But  also in doing development for reference applications I end up having access to so many macahines that need recreated, keys that need rolled, and related things that it is almost overwhelming. Password keepers are a life saver. Automation keeps me sane.
  4. I don’t not code asshole. As an advocate I routinely have to deal with that one asshole at a conference or a talk who wants to try to “call me out” or complain that I don’t really “have responsibilities” or related rude, crass, asshole behavior. At this point in my life, I simply disregard such comments but I still need to manage these comments and the individuals making them so they don’t detract from what I’m trying to provide and help people with. I will also admit, [TRIGGER WARNING-start] as an advocate that is a cis-gendered white male I get the privilege of not having to also defend myself for my gender identity, sex, or related identity, but even then it’s still a pain and can only imagine what others that aren’t cis gendered white males deal with. [TRIGGER WARNING-end] The tech industry has a lot of assholes, and as an advocate I get to learn how to manage them on an almost daily basis. I’d rather not having to do it, but I’m out here to learn as much as I am out here to teach others about application development, databases, and related technology. To all the other 98% of people that are friendly to me, thanks, I appreciate it, keep up the good work! Beers (or your beverage of choice) on me next round!
  5. I advocate for the developer. This can mean a number of things; from organizing developer focused conferences to getting bugs reported to meeting with and discussing future product paths with developers and product teams. In many ways I am a matchmaker of minds, connecting those that can take action to those that seek action, that look to better the tools we use. One could say, in this effort I’m the bridge point. I actually have a pretty obscenely huge contact list because of this. I’m always thinking, “who could I connect this person with that also wants X to get built”? This is honestly one of the most mentally exhausting parts of my job, but also one that has huge rewards. What I can learn from those I connect often exceeds any wild expectation.

One More Word: Activism or Activist

I added this word as often, when one advocates, one also gets to work with people who are and will be activists. Before I continue, the definition.

Activism – “a doctrine or practice that emphasizes direct vigorous action especially in support of or opposition to one side of a controversial issue”.

activism

There’s a specific reason I bring up activism. It isn’t specifically because of the current political climate in the world, but I’d lie if I didn’t mention it’s part of it. Activism is something that is also interwoven into the software industry. From open source software itself to the free software movement. Activism is a very important and distinctive activity in the software industry. I bring this up because of the important parallels and some of the call outs I wanted to make. Get involved – anybody can – here’s the details.

Beyond this, I’ve been involved in a number of activist work that is often convergent with advocacy, albeit it often involves parking, bicycle advocacy, safe streets, urban city design, and related transportation and urban planning work.

References: AKA More reading on the topic!

An interesting post that simply asks the question and looks at some recent conversations on the topic.

This is a comment thread on Hacker News that is pretty insightful of the various perspectives of the various titles. But also with some interesting anecdotal information about what people have seen among Apple, Google, and other companies and how they orient these positions to work with the community.

This is a post that popped out at me. What does this actually even mean? Based on the words this actually sounds super creepy.

Another post I dug up on the topic reminds me of why we have so many hard issues with words meaning their written definition and then what we infer from their general meaning in actual daily use. For example this post seems to just skip over defining the words from the dictionary as a point of reference and just run with the assumed, or the writer’s assumed definition of what they’ve observed of the occupations using the word.

Here are a few posts from some other developer advocates, on the topic of what developer advocacy is.

A few of my past posts.

Finally my posts about watching the awesome team being built at Microsoft here and my fortune in finding and joining the awesome team at DataStax here.

Summary

It’s complicated, there’s no TLDR so just read and keep learning.

DSE6 + .NET v?

Project Repo: Interoperability Black Box

First steps. Let’s get .NET installed and setup. I’m running Ubuntu 18.04 for this setup and start of project. To install .NET on Ubuntu one needs to go through a multi-command process of keys and some other stuff, fortunately Microsoft’s teams have made this almost easy by providing the commands for the various Linux distributions here. The commands I ran are as follows to get all this initial setup done.

wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
wget -q https://packages.microsoft.com/config/ubuntu/18.04/prod.list
sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list

After all this I could then install the .NET SDK. It’s been so long since I actually installed .NET on anything that I wasn’t sure if I just needed the runtime, the SDK, or what I’d actually need. I just assumed it would be safe to install the SDK and then install the runtime too.

sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-2.1

Then the runtime.

sudo apt-get install aspnetcore-runtime-2.1

logoAlright. Now with this installed, I wanted to also see if Jetbrains Rider would detect – or at least what would I have to do – to have the IDE detect that .NET is now installed. So I opened up the IDE to see what the results would be. Over the left hand side of the new solution dialog, if anything isn’t installed Rider usually will display a message that X whatever needs installed. But it looked like everything is showing up as installed, “yay for things working (at this point)!

rider-01

Next up is to get a solution started with the pertinent projects for what I want to build.

dse2

Kazam_screenshot_00001

For the next stage I created three projects.

  1. InteroperationalBlackBox – A basic class library that will be used by a console application or whatever other application or service that may need access to the specific business logic or what not.
  2. InteroperationalBlackBox.Tests – An xunit testing project for testing anything that might need some good ole’ testing.
  3. InteroperationalBlackBox.Cli – A console application (CLI) that I’ll use to interact with the class library and add capabilities going forward.

Alright, now that all the basic projects are setup in the solution, I’ll go out and see about the .NET DataStax Enterprise driver. Inside Jetbrains Rider I can right click on a particular project that I want to add or manage dependencies for. I did that and then put “dse” in the search box. The dialog pops up from the bottom of the IDE and you can add it by clicking on the bottom right plus sign in the description box to the right. Once you click the plus sign, once installed, it becomes a little red x.

dse-adding-package

Alright. Now it’s almost time to get some code working. We need ourselves a database first however. I’m going to setup a cluster in Google Cloud Platform (GCP), but feel free to use whatever cluster you’ve got. These instructions will basically be reusable across wherever you’ve got your cluster setup. I wrote up a walk through and instructions for the GCP Marketplace a few weeks ago. I used the same offering to get this example cluster up and running to use. So, now back to getting the first snippets of code working.

Let’s write a test first.

[Fact]
public void ConfirmDatabase_Connects_False()
{
    var box = new BlackBox();
    Assert.Equal(false, box.ConfirmConnection());
}

In this test, I named the class called BlackBox and am planning to have a parameterless constructor. But as things go tests are very fluid, or ought to be, and I may change it in the next iteration. I’m thinking, at least to get started, that I’ll have a method to test and confirm a connection for the CLI. I’ve named it ConfirmConnection for that purpose. Initially I’m going to test for false, but that’s primarily just to get started. Now, time to implement.

namespace InteroperabilityBlackBox
using System;
using Dse;
using Dse.Auth;

namespace InteroperabilityBlackBox
{
    public class BlackBox
    {
        public BlackBox()
        {}

        public bool ConfirmConnection()
        {
            return false;
        }
    }
}

That gives a passing test and I move forward. For more of the run through of moving from this first step to the finished code session check out this

By the end of the coding session I had a few tests.

using Xunit;

namespace InteroperabilityBlackBox.Tests
{
    public class MakingSureItWorksIntegrationTests
    {
        [Fact]
        public void ConfirmDatabase_Connects_False()
        {
            var box = new BlackBox();
            Assert.Equal(false, box.ConfirmConnection());
        }

        [Fact]
        public void ConfirmDatabase_PassedValuesConnects_True()
        {
            var box = new BlackBox("cassandra", "", "");
            Assert.Equal(false, box.ConfirmConnection());
        }

        [Fact]
        public void ConfirmDatabase_PassedValuesConnects_False()
        {
            var box = new BlackBox("cassandra", "notThePassword", "");
            Assert.Equal(false, box.ConfirmConnection());
        }
    }
}

The respective code for connecting to the database cluster, per the walk through I wrote about here, at session end looked like this.

using System;
using Dse;
using Dse.Auth;

namespace InteroperabilityBlackBox
{
    public class BlackBox : IBoxConnection
    {
        public BlackBox(string username, string password, string contactPoint)
        {
            UserName = username;
            Password = password;
            ContactPoint = contactPoint;
        }

        public BlackBox()
        {
            UserName = "ConfigValueFromSecretsVault";
            Password = "ConfigValueFromSecretsVault";
            ContactPoint = "ConfigValue";
        }

        public string ContactPoint { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }

        public bool ConfirmConnection()
        {
            IDseCluster cluster = DseCluster.Builder()
                .AddContactPoint(ContactPoint)
                .WithAuthProvider(new DsePlainTextAuthProvider(UserName, Password))
                .Build();

            try
            {
                cluster.Connect();
                return true;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return false;
            }

        }
    }
}

With my interface providing the contract to meet.

namespace InteroperabilityBlackBox
{
    public interface IBoxConnection
    {
        string ContactPoint { get; set; }
        string UserName { get; set; }
        string Password { get; set; }
        bool ConfirmConnection();
    }
}

Conclusions & Next Steps

After I wrapped up the session two things stood out that needed fixed for the next session. I’ll be sure to add these as objectives for the next coding session at 3pm PST on Thursday.

  1. The tests really needed to more resiliently confirm the integrations that I was working to prove out. My plan at this point is to add some Docker images that would provide the development integration tests a point to work against. This would alleviate the need for something outside of the actual project in the repository to exist. Removing that fragility.
  2. The application, in its “Black Box”, should do something. For the next session we’ll write up some feature requests we’d want, or maybe someone has some suggestions of functionality they’d like to see implemented in a CLI using .NET Core working against a DataStax Enterprise Cassandra Database Cluster? Feel free to leave a comment or three about a feature, I’ll work on adding it during the next session.