Saturday, September 28, 2019

Mountains out of mole hills

Make A Mountain Out of A Molehill

 "What are you doing?" This question was asked innocently enough while I was showcasing a personal project for a coworker. We are both attempting to learn Python and though we are both beginners with the language I would argue that he has more knowledge of Python in a practical sense while I'm primarily focused on what to do once I have enough Python knowledge to be dangerous. Despite considering myself a beginner in Python a quick glance at the screen, then back at his confused face, then back at the screen put his question into perspective.

At the beginning of the year I set out in earnest to learn Python. Python 3.7.4 was chosen by default. Warnings regarding Python 2 reaching its end of life at the start of the following year kept flooding the console every time that I attempted to use it or associated tools so it seemed like the right move at the time. A simple Python web application demo quickly came together. I settled on Flask as a front end because I wanted to do this whole learning Python thing right. With "Hello, World!" displayed in a browser window I gave myself a pat on the back and immediately went looking for a database.

Any senior level developer can already see where this is going. What began innocently enough quickly grew legs and with it more problems. I stalled out over the next few weeks attempting to understand how to run Redis locally? Why Redis? Well, it's Python, isn't it? Eventually I determined that it would make sense to run a local kubernetes (k8s) instance. After all, why not do this database deployment thing the professional way. Months went by and "Hello, World!" faded from memory. Between work and this personal project time was scarce. What once seemed like a fun project started looking like a day job.

Months went by and now it was time to add Bootstrap 4. What could possibly go wrong? Have I mentioned that I am not a designer in any respect? Days, weeks, months. It all became a blur as I learned more than I ever wanted to about the difference between Sass vs Less, how to fix the position of a copyright, the more interesting points of flexbox. The project had consumed me at this point. I locked myself in a conference room between meetings at work and searched for answers. What image pull policy should I be using for my local docker registry? Why is my exposed deployment not providing an external-ip so that I can access it outside of the cluster? Did updating kubernetes really just break helm and tiller after all of that time that I spent figuring it out the first time!?

I looked back at my coworker after being lost in thought for what I am positive was several seconds. The shift in my demeanor must have been apparent. I had no idea what else to say so I simply uttered "don't worry about it for now". We covered the finer points of "Hello, World!" and he taught me some things about Python.

Long story short, it's easy to lose sight of why you started any project. Often times a developer's greatest asset is an ability to narrow down scope to something tangible. In this sense I went overboard intentionally to thrust myself into learning Python. It's been educational to say the least. If I had it all to do over again would I do things the same way? Probably.

What are you working on and have you got a roadmap?

Monday, October 15, 2018

Who Wrote This?

Today I want to talk to you about accountability. Yes, you.

A funny incident occurred the other day in the office. An impromptu meeting was formed. Huddled around the workstation of the team's product manager a group of 4 or 5 coworkers and I divvied out tasks from the backlog. Many of the tasks were poorly written lacking even the most basic information such as a description of the work to be done. Some were effectively orphaned for months or years. Others yet sounded less like work and more like a checklist of things that had already been done.

 At any rate, the whole while we jokingly mocked the sad state of the issue backlog pointing out the obvious errors and having a good laugh at each others' expense. After a grueling 6 or so months we finally had the time and budget to pay down some technical debt and the mood was light. Suddenly, a poorly worded ticket popped up. It looked imbecilic. The sort of thing which would receive an F- if the work was graded. I couldn't resist. "Who wrote this?" I asked with a shred of disgust. It was audible enough that a few heads turned. I squinted at the "reporter" of the ticket. The crowd of men in there late teens, 20s, 30s, and even 40s seemed to hold their breath in anticipation. Finally I shrank back into my office chair, visibly sunken and a bit humiliated. The room erupted into laughter. My name was next to reporter, and it was my ticket (and subsequently my shame). We all had a good laugh and carried on. One coworker who had since moved to a new team but still shared the same workspace couldn't help but joke and laugh along with us.

These sorts of incidents happen all of the time. In the sense of professional work, this sort of behavior is not standard, BUT IT NEEDS TO BE. We all get tired at some point and when we are tired we make stupid mistakes. Sometimes they are costly, and sometimes they're trivial. In my 10 years of experience I have been thrown under the bus for the mistakes of others. I've seen entire teams, entire offices, even entire companies close over mismanagement, finger-pointing, and most importantly, a lack of accountability. The word commands a particular degree of respect. It isn't easy or natural to raise your hand look around and say "I messed up" in a room full of well respected peers. Such an exercise is usually thought of as a sign of weakness or at the very least incompetence. That's why it is important to foster a strong sense of accountability and even more important to give people room to learn from their mistakes and grow.

To sum it all up, if you aren't being challenged and making mistakes at work, if you don't receive a fair shake when it comes to problems, and if you don't feel safe to make your self vulnerable in a professional sense now and again it might be time to consider how might you become more accountable. Sometimes it's a matter of personal development. Other times you might need external help and encouragement. Often you just need to take some time off and get some rest.

Monday, October 1, 2018

10 years? Already?

Miss me? I suppose that I have some explaining to do. It all started back in 2011 when life took an unexpected turn and I became a family man. Making good on my previous promise I promptly quit the game industry and got a Real Job™! Well, that isn't entirely true... I did some more game work while making a painful transition into web development and then mobile development and, well, the details just aren't all that interesting. So I guess if anyone is still following (hello, Russia! You've been awfully busy lurking these past few years!) you can expect me to drop in from time to time and wax philosophical about development, parenting, and generally carrying on. Oh, and in case there is any doubt, I still have no idea what I am doing. I just get paid more to figure it out now, and that's all that I could ever ask for [;¬.¬] Till next time!

Saturday, April 2, 2011

WebGL fun!!!

Quick note regarding WebGL stuff:

In converting a fragment shader included inline with the HTML source of a page I kept hitting obscure compiler errors. Turns out that it was a missing semi-colon issue... FFFFFFFUUUUUUUUUUUU

Original source:
<script id="fragment" type="x-shader/x-fragment">
#ifdef GL_ES
precision highp float;
#endif
varying vec2 vTextureCoord;
uniform sampler2D uSampler;
void main(void) {
gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
}
</script>

first attempt:
#ifdef GL_ES\nprecision highp float\n#endif\n varying (... fails)

works!!!
#ifdef GL_ES\nprecision highp float\n#endif\n; varying (SUCCESS!)

Tuesday, March 29, 2011

Blender, JSON, and WebGL

I'm finally ready to accept it. I've had a love affair with Blender. It's not the most popular 3D tool and it certainly isn't the most widely used, but it's always held a special place in my heart. Oh, and I'm not an artist by any means, so I'm sure that has a bit to do with it.

Anyway, got into some JSON today in the pursuit of web related technologies compatible with WebGL. There are a whole lot of excellent utilities out there but I'm evaluating this one at the moment:


The fact that it plugs in to Blender sold me as I'm some what familiar with how Blender works. Nothing to report yet, but if there are better tools, utilities, or even model formats, I'm always willing to hear it :)

Tuesday, February 22, 2011

javascript... help?

object=(function(){})() <-self-calling/singleton
object=(function(){}) <-must be instantiated

Why?
What is this?
How did I accidentally stumble upon this and why is it so useful?

I know that there's something better, but for the time being I'm just hacking away at javascript with my ax o plenty to get a feel for debugging, or at least that's what I tell myself.

Insight welcome.

Wednesday, February 9, 2011

1st Amendment


erk: C0 CE FE 84 C2 27 F7 5B D0 7A 7E B8 46 50 9F 93 B2 38 E7 70 DA CB 9F F4 A3 88 F8 12 48 2B E2 1B
riv: 47 EE 74 54 E4 77 4C C9 B8 96 0C 7B 59 F4 C1 4D
pub: C2 D4 AA F3 19 35 50 19 AF 99 D4 4E 2B 58 CA 29 25 2C 89 12 3D 11 D6 21 8F 40 B1 38 CA B2 9B 71 01 F3 AE B7 2A 97 50 19
R: 80 6E 07 8F A1 52 97 90 CE 1A AE 02 BA DD 6F AA A6 AF 74 17
n: E1 3A 7E BC 3A CC EB 1C B5 6C C8 60 FC AB DB 6A 04 8C 55 E1
K: BA 90 55 91 68 61 B9 77 ED CB ED 92 00 50 92 F6 6C 7A 3D 8D
Da: C5 B2 BF A1 A4 13 DD 16 F2 6D 31 C0 F2 ED 47 20 DC FB 06 70

~geohot

props to fail0verflow for the asymmetric half
no donate link, just use this info wisely
i do not condone piracy

if you want your next console to be secure, get in touch with me. any of you 3.
it'd be fun to be on the other side.