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.

Distributed Systems: Cassandra, DataStax, a Short SITREP

SITREP = Situation Report. It’s military speak. 💂🏻‍♂️

Apache Cassandra is one of the most popular databases in use today. It has many characteristics and distinctive architectural details. In this post I’ll provide a description and some details for a number of these features and characteristics, divided as such. Then, after that (i.e. toward the end, so skip there if you just want to the differences) I’m doing to summarize key differences with the latest release of the DataStax Enterprise 6 version of the database.

Cassandra Characteristics

Cassandra is a linearly scalable, highly available, fault tolerant, distributed database. That is, just to name a few of the most important characteristics. The Cassandra database is also cross-platform (runs on any operating systems), multi-cloud (runs on and across multiple clouds), and can survive regional data center outages or even in multi-cloud scenarios entire cloud provider outages!

Columnar Store, Column Based, or Column Family? What? Ok, so you might have read a number of things about what Cassandra actually is. Let’s break this down. First off, a columnar or column store or column oriented database guarantees data location for a single column in a node on disk. The column may span a bunch of or all of the rows that depend on where or how you specify partitions. However, this isn’t what the Cassandra Database uses. Cassandra is a column-family database.

A column-family storage architecture makes sure the data is stored based on locality of the data at the partition level, not the column level. Cassandra partitions group rows and columns split by a partition key, then clustered together by a specified clustering column or columns. To query Cassandra, because of this, you must know the partition key in order to avoid full data scans!

Cassandra has these partitions that guarantee to be on the same node and sort strings table (referred to most commonly as an SSTable *) in the same location within that file. Even though, depending on the compaction strategy, this can change things and the partition can be split across multiple files on a disk. So really, data locality isn’t guaranteed.

Column-family stores are great for high throughput writes and the ability to linearly scale horizontally (ya know, getting lots and lots of nodes in the cloud!). Reads using the partition key are extremely fast since this key points to exactly where the data resides. However, this often – at least last I know of – leads to a full scan of the data for any type of ad-hoc query.

A sort of historically trivial but important point is the column-family term comes from the storage engine originally used based on a key value store. The value was a set of column value tuples, which where often referenced as family, and later this family was abstracted into partitions, and then the storage engine was matched to that abstraction. Whew, ok, so that’s a lot of knowledge being coagulated into a solid eh!  [scuse’ my odd artful language use if you visualized that!]

With all of this described, a that little history sprinkled in, when reading the description of Cassandra in the README.asc file of the actual Cassandra Github Repo things make just a little more sense. In the file it starts off with a description,

Apache Cassandra is a highly-scalable partitioned row store. Rows are organized into tables with a required primary key.

Partitioning means that Cassandra can distribute your data across multiple machines in an application-transparent matter. Cassandra will automatically repartition as machines are added and removed from the cluster.

Row store means that like relational databases, Cassandra organizes data by rows and columns. The Cassandra Query Language (CQL) is a close relative of SQL.

Now that I’ve covered the 101 level of what Cassandra is I’ll give a look at DataStax and their respective offering.

DataStax

DataStax Enterprise at first glance might be a bit confusing since immediate questions pop up like, “Doesn’t DataStax make Cassandra?”, “Isn’t DataStax just selling support for Cassandra?”, or “Eh, wha, who is DataStax and what does this have to do with Cassandra?”. Well, I’m gonna tell ya all about where we are today regarding all of these things fit.

Performance

DataStax provides a whole selection of amenities around a database, which is derived from the Cassandra Distributed Database System. The core product and these amenities are built into what we refer to as the “DataStax Enterprise 6“. Some of specific differences are that the database engine itself has been modified out of band and now delivers 2x the performance of the standard Cassandra implemented database engine. I was somewhat dubious when I joined but after the third party benchmarks where completed that showed the difference I grew more confident. My confidence in this speed increase grew as I’ve gotten to work with the latest version I can tell in more than a few situations that it’s faster.

Read Repair & NodeSync

If you already use Cassandra, read repair works a certain way and that still works just fine in DataStax Enterprise 6. But one also has the option of using NodeSync which can help eliminate scripting, manual intervention, and other repair operations.

Spark SQL Connectivity

There’s also an always on SQL Engine for automated uptime for apps using DataStax Enterprise Analytics. This provides a better level of analytics requests and end -user analytics. Sort of on this related note, DataStax Studio also has notebook support for Spark SQL now. Writing one’s Spark SQL gets a little easier with this option.

Multi-Cloud / Hybrid-Cloud

Another huge advantage of DataStax Enterprise is going multi-cloud or hybrid-cloud with DataStax Enterprise Cassandra. Between the Lifecycle Manager (LCM), OpsCenter, and related tooling getting up and running with a cluster across a varying range of data-centers wherever they may be is quick and easy.

Summary

I’ll be providing deeper dives into the particular technology, the specific differences, and more in the future. For now I’ll wrap up this post as I’ve got a few others coming distinctively related to distributed database systems themselves ranging from specific principles (like CAP Theorem) to operational (how to and best ways to manage) and development (patterns and practices of developing against) related topics.

Overall the solutions that DataStax offers are solid advantages if you’re stepping into any large scale data (big data or whatever one would call their plethora of data) needs. Over the coming months I’ve got a lot of material – from architectural research and guidance to tactical coding implementation work – that I’ll be blogging about and providing. I’m really looking forward to exploring these capabilities, being the developer advocate to DataStax for the community of users, and learning a thing or three million.

Dell XPS 13 Re-review of Existing Laptop

Some years ago, while working with a whole crew of great people at CDK in Portland, Oregon I picked up a new Dell XPS 13. I even wrote a review about it titled “The Latest 5th Generation Dell XPS 13 Developer Edition“. I had been inspired at the time to pick up this laptop after checking out my friend’s XPS 13. Joe (@joeinglish) provided a good sell of the thing to me, and I purchased the laptop less than 24 hours after checking his laptop out!

08

Joe’s laptop, my  laptop, or is it my laptop and Joe’s laptop?

Continue reading “Dell XPS 13 Re-review of Existing Laptop”

DevXcon San Francisco

I just finished attending DevXcon in San Francisco at the beginning of the week before last. It’s the way the DataStax crew welcomed me into the family. It was a solidly awesome time, a great way to get started, and I’ve rated it “would do again!” Tamao (@mewzherder), Matthew (@matthewrevell), and fellow organizers did a great job putting things together!

The DevXcon is kidn of a sibling or parallel of sorts to the DevRelCon presented by Github. These events are organized by Hoopy, a consultancy of Matthew’s that specializes in helping companies around developer relations and marketing. Both of these conferences focus around this, the developer relations of software companies and how to improve that relationship companies have with their prospective developers. Continue reading “DevXcon San Francisco”

ML4ALL LiveStream, Talks & More

If you’re attending, or if you’re at the office or at home, you can check out the talks as they go live on the ML4ALL Youtube Channel! Right now during the conference we also have the live feed on the channel, so if you’re feeling a little FOMO this might help a little. Enjoy!

Here are a few gems that are live already!

Manuel Muro “Barriers To Accelerating The Training Of Artificial Neural Networks”

-> Introduction of Manuel

Jon Oropeza “ML Spends A Year In Burgundy”

-> Introduction of Jon

Igor Dziuba “Teach Machine To Teach: Personal Tutor For Language Learners”

-> Introduction to Igor

IDE Launcher via Amtrak Cascades to Portland for ML4ALL

Got fidgety on the train, and just wanted to write code, on the way down to Portland for ML4ALL so I wrote up some decision tree code on determining what IDE’s I want opened up. Ya know, if you do something more than twice it needs automated, so I’ve started the process of automating all startup and shutdown tasks for a day’s coding. Simplistic geeky train geek code fun code is fun geeky train code. Cheers!

package main

import (
	"time"
	"fmt"
)

var sessionMinimal, sessionMedium, sessionLong, sessionZone time.Duration
var language string

func main() {
	sessionMinimal = 15
	sessionMedium = 45
	sessionLong = 90
	sessionZone = 180

	language = "golang"

	openIde("golang", 200)
}

func openIde(languageStack string, expectedCodingTime time.Duration) {
	var ide string

	switch  {
	case expectedCodingTime  sessionZone:
		ide = stackSpecific(languageStack, false, true, true)
		fmt.Printf("Launching: %s", ide)

	}
}

func stackSpecific(language string, fastLaunch bool, featureRich bool, introspective bool) string {
	if fastLaunch == true && featureRich == true && introspective == true {
		return "\n\nCome on, you know better. You get at best two out of three.\n\n"
	}

	if fastLaunch == true && featureRich == true {
		return "Visual Studio Code"
	}

	if featureRich == true && introspective == true {
		switch language {
		case "SQL":
			return "DataGrip"
		case "C":
			return "CLion"
		case "Python":
			return "PyCharm"
		case "golang":
			return "Goland"
		case "java":
			return "IntelliJ"
		case "scala":
			return "IntelliJ"
		case "kotlin":
			return "IntelliJ"
		case "dotnet":
			return "Rider"
		case "csharp":
			return "Rider"
		case "fsharp":
			return "Rider"
		case "vbnet":
			return "Rider"
		case "javascript":
			return "Webstorm"
		case "hcl":
			return "IntelliJ"
		case "ruby":
			return "RubyMine"
		case "swift":
			return "AppCode"
		case "obj-c":
			return "AppCode"
		default:
			return "IntelliJ"
		}
	}

	if featureRich == true {
		switch language {
		case "swift":
			return "AppCode"
		case "obj-c":
			return "AppCode"
		default:
			return "Visual Studio Code"
		}
	}

	if introspective == true {
		switch language {
		case "swift":
			return "AppCode"
		case "obj-c":
			return "AppCode"
		default:
			return "Visual Studio Code"
		}
	}

	if fastLaunch == true  {
		return "Sublime"
	}

	return "No IDE for you."
}