Tag archives for: technical

How I Organize my Photos

I have a large collection of digital photos dating back over 15 years. An impressively small fraction of them are actually any good, but that's a different conversation, probably revolving around my digital hoarding habits.

Such a large collection deserves a particular method of organization. Or maybe it doesn't. Did I mention they're mostly mediocre? Anyway, I have one! I thought I'd share in case anyone finds it useful (including a future version of myself, my mind being a sieve and all).

The procedure I came up with is strongly influenced by several personal idiosyncrasies. Obviously, not everyone shares these traits, so your mileage will definitely vary - though I think it's always interesting to read about how other people do things.

Read more

Angst and the Angular Module System

Google's AngularJS is one of the most popular web frameworks out there, but it comes with its share of criticism (performance around two way binding being one of the more prominent complaints). Google responded by releasing Angular 2 (and, as of now, 4, 5 and 6), which addressed some of the issues but at the cost of being drastically incompatible with its predecessor, with no realistic way to upgrade except through pure elbow grease. Angular 2+ might as well be a completely different framework.

I never got the chance to become familiar with AngularJS, but my employer did decide to take the plunge with Angular 2 on one of their newer projects and so, for better or for worse, I am somewhat familiar how an Angular 2+ project works.

Read more

On Finding an Excuse to Buy an Arduino or: How I Finally Got Myself a Theremin

In my last blog entry, I talked about theremins. I've known about them for a while, and I've always found them fascinating, but I've never actually taken the plunge and bought one, despite being being tempted on many occasions (they're not that expensive).

At the same time, I've known about Arduinos for a long time, and I've always wanted an excuse to buy one, but I've never actually taken the plunge and bought one. As I'm fond of saying, an Arduino is a solution in search of a problem, and I just never found the right problem for one.

That is, until I found this website: http://www.gaudi.ch/OpenTheremin/

Read more

Static Typing, IDEs, Automated Testing: An Eternal Golden Braid

I've been a programmer by trade ever since I graduated from University. This is a fairly long time, as these things are measured. I still consider myself on a learning curve, but that's a separate conversation.

My career, such as it is, mostly sidestepped the whole static versus dynamic typing debate that roiled in the early 2000's. School, when it veered into software territory, mostly consisted of C and Java, two statically typed languages. My professional life, until fairly recently, has been mostly in Java (with a bit of C++ thrown in for good measure) and hence has almost exclusively revolved around statically typed languages.

Read more

Yet Another Requirements Versus Setup Post

In a previous post I wrote down some notes on the current state of the python packaging ecosystem. I felt that this was useful because most of the information that I found online was out of date or spread out in various places.

One area that still confuses me is the relative merits of requirements.txt versus setup.py files. Ironically, the best article I've read on the subject is aimed at ruby developers. I think python developers should read it - it's surprising (or maybe not so surprising) how similar the ecosystems are in this respect. I've even made a handy Rosetta stone, which is hopefully not completely inaccurate:

Read more

Generating Pylint Badges

Badges, on github and other code sharing sites, are a way to communicate small snippets of information concerning the status of your repository. They generally appear on your README file, so they are one of the first things you see when you load a repository page.

On my yawt page, for example, you can see several badges for things like my travis build status, and my GPA at code climate.

One thing that I couldn't find, however, was a pylint badge - a simple status that displayed your pylint score. This surprised me; it seemed like it should have been a common thing to want to do. Indeed, I'm still not 100% sure that I haven't simply overlooked something glaringly obvious.

Read more

Emacs and Python

I use Emacs as a python IDE. The web already offers a significant number of resources on the subject but I've made a couple of specialized tweaks that I feel may be worth sharing. So here we go.

Why am I doing this? Well, the simple answer is that I like using Emacs. I do most of my writing in it. I use it as my task manager and TODO list. I have, in the past, used it as my email client. So it makes sense that I would use it as my python development environment. Your mileage may vary.

Read more

Coming to Terms with the Nightmare that is Python Packaging

I started YAWT a while ago, in python, because a) I wanted to learn a dynamically typed programming language and b) python seemed like a relatively easy, fun, popular, not insensible choice. To be fair, it is a fun language to use.

At the time, I gave very little thought actually packaging yawt - i.e. making it easy for someone to actually install and use. Mostly, I simply didn't think I'd ever have to do this - yawt was my baby, and I was the only one using it, so why bother?

My opinion about this has changed somewhat in recent months. I still don't think yawt is likely to be used by anyone but myself, but I find myself wanting to learn at least a little about how the python packaging system works - if only for myself. I mean, it should at least be easy for me to install it, right?

Read more

Thoughts on Modularizing Flask Applications

I've been playing around with the Flask web framework for a while now. It's the basis for YAWT, the CMS/blogging system I'm currently developing (mostly as an exercise in familiarizing myself with Python)

With Flask, it's dead simple to get a very basic web application up and running:

from flask import Flask

app = Flask(__name__)

def hello():
    return "Hello World!"

def blah():
    return "Hello Blah!"

if __name__ == "__main__":

Put this in a python file called blah.py, mark it as executable, and run it. You should be able to access the web application on locahost:5000. It does not, admittedly, do anything even remotely interesting, but it's enough to get the basic idea.

Read more

Being an Emacs User in the Cloud Age

I'm a long time (15 years) Emacs user. Please don't draw too many conclusions from this fact. I'm not, by any stretch of the imagination, an Emacs "wizard". I don't know how to make my Emacs buffer do amazing things with a single key stroke. I'm embarrassed to say, for example, that I've only recently learned the keystroke for deleting am entire line.

I'm not a Lisp hacker, and even less of an Emacs Lisp hacker. While I wouldn't say my knowledge of Lisp is non-existent, I would still firmly categorize it as "novice-level".

The question of why my knowledge of Emacs is somewhat primitive considering how long I've been exposed to it is a topic for a separate conversation but, briefly, I think it's a combination of my tendency to "plateau" quite early when learning a new skill, and my high tolerance for pain. When I figure out how to do something, I tend to stick with it, even if it's not a very optimal way of doing it. So, for example, deleting a line in a text buffer is doable by pressing the backspace key several times, or by highlighting the line in question with the mouse and deleting it. I never really tried to find a faster way to do it (though now that I'm aware of it..cool!)

Read more