Skip to main content

Posts

Showing posts from October, 2014

The Curl Pipe

If anything deserves to be called an anti-pattern it is probably the common and worry-inducing practice of documenting your installation process by asking asking users to copy and paste a line into their shell that will snag some file off the internet and pipe its contents directly into your shell to execute. Sometimes this is even done as root. This is something known to be awful, but which remains a cornerstone via its use by some of the most important tools in our belts. Homebrew does it. NPM does it, too. And some projects look better, but are they? Pip asks you to download get-pip.py and run it to install, which isn’t practically any different than piping from curl, just less efficient. But worst of all, we might as well be doing this even more often, because our most depended about tooling is all just as guilty even without doing the curl pipe sh dance. What do you think happens when you pip install your favorite Python package, anyway? Pip downloads a file from the int...

Dead To Me! DomNomNom

DomNomNom was a toy templating tool for front-end web applications I built during a long ride in the passenger seat. The idea was to build a templating system that required minimal, and in many cases, no template at all. I wanted to see if it was possible to map data directly into markup structures based purely on semantics. For example, instead of some mark up that rendered a title into the page like {{ title }} we might just map the <h1> tag to the title in the data binding. $(“body”).domnomnom({ “h1”: “This is the title”, }) And it was really easy to get this basic setup in place quickly. I began to take it further. I allowed mapping lists of data, which would clone an element instead of simply inserting the text contents into it. Suddenly I could render tables and lists with ease. “ul”: { “li”: [“one”, “two”, “three”] } And the markup’s original <li> would function as a template to clone for this content. It was very clean to write t...

The Problem with Coders' Technology Focus

Coders focus on code. Coders focus on toolchains and development practices. Coders focus on commits and line counts. Coders focus on code, but we don’t focus as well on people. We need to take a step back and remember why we write code, or possibly re-evaluate why we write code. Many of us might be doing it for the wrong reasons. Maybe you don’t think there can be a wrong reason, and I’m not entirely sure. What I am certain of is that some reasons to code lend themselves to certain attitudes and weights about the code and other motivations might mandate that you take yourself more or less seriously. We’re taking the wrong motivations seriously and we’re not giving enough attention and weight to the reasons for code that we should. The most valid and important reason we can code is not what hackers think it is. A good hack isn’t good for its own sake. No programming language or tool is inherently better than another. The technical merits of the approach or of the individual ...

Farewell to XMLHttpRequest; Long live window.fetch!

The days of XMLHttpRequest and weird choices for capitalization are numbered. WhatWG has a spec ready for some time now to replace it: window.fetch. Just look at how easy it is. Just look at how nicer that is all with soon-to-be native APIs. But you don't have to wait, because there is a polyfill available. Start using the Fetch Polyfill in your projects today.

I Want to Write More Often

I want to write more often. I’ve been writing more lately and I hope to continue that, and I think expressing why this is important to me is valuable so here is that post. I want to explore my thoughts more concretely and have a record of how I came to my stands on the positions I believe in, and I want to keep track of the ideas for stories I have. Rather than have some bothering me constantly, I want to feel safe that I can forget things. Writing ideas can also get them out of your mind. The act of writing about it can often free your mind from the burden of so many thoughts. You can be more confident in an idea, or let it go out of your mind now that you’ve written it somewhere safe and permanent. I like the idea of turning my thoughts into essays. A thought is ill-defined. A thought is hard to grasp, even inside your own head. Thoughts are connections between so many points in your mind, but a well written essay is a single coherent position. It is a statement at a time ...

Top Articles

Along the side of my blog, for many years. I've had a section called "Top Articles". I don't remember when I put it there, but I know that it included all of the most popular posts I had written at the time and I wanted to make them more prominent. They were obviously popular topics people wanted to find. These were the things I was writing about that people found most interesting or useful. I haven't thought a lot about this list for a few years, until I just noticed it today. Top Articles  is a time capsule. This was a snapshot of my interests and knowledge from a previous version of myself. It doesn't reflect me as well today. I'm equally interested in the things that no longer worth keeping on that list as I am of the things that are still very important to me. I'll make a point to clean things up around here. What was on that list so long ago? Of no surprise, I had a number of posts about Python which still draw a lot of new readers t...

Firefox Users on Linux Deserve Better Downloads

If you download Firefox on a linux machine today what you get from their servers is a pretty unfriendly tarball. What are you supposed to do with this? Maybe you know how to extract a tarball. Maybe you even know what of the many files inside it you're actually supposed to run and  how to run it? Maybe. But does everyone else? Do non-developer users have any clue what they're doing with this thing? They experience is awful. I want to see that change and followed a ticket that tracks just that. What do you think?

Dead to Me! Trapdoor, Prototyping web-based desktop applications

This is the inaugural post in my Dead to Me! series which I announced . I’m not gonna lie. I’m pretty proud of this one. To say Trapdoor was ahead of the times might be a stretch, but really only a small stretch. My project README explains Trapdoor is a web-based desktop framework. Confused yet? The idea is to leverage how much energy is put into the web today and make developing a desktop application fun again. Again? For the first time? Trapdoor was an exploration of how to utilize web development skillsets to build desktop tools. I wanted to experiment with how this idea would play out and if it really made any sense. I was never planning Trapdoor to become are solution. I just wanted to play with the idea, but I do think I played with the idea pretty early on and that it was an extremely successful experiment. At the time I was still a KDE user and had been learning a little bit of Qt via the Python bindings PyQt4. I knew that Qt had a WebKit widget and qu...

Dead to Me!

Dead to Me! is a new thing I’m doing. This is not a new blog, but it is a specific series of posts within this blog. Dead to Me! is about those projects which I am only looking back on, but will not work on again. These aren’t all failed experiments, but some of them are. In each post I’ll talk about a project I’ve abandoned, sunsetted, or moved on from. Some of them will be recent and others will be things I worked on years ago. Some of them might be related to work, but most will be personal. I’m also doing something different with this. I don’t know how well this part will work out, but I’ve already gotten some interest in it so we’ll see: I am soliciting for guest posts to Dead to Me! and welcome anyone who would like to ask to be a part of this. If you have a project you’re no longer working on and would like to write a postmortem for, please drop me a line or a draft . If you’d like your post to appear here, go ahead and post it on your own blog or anywhere else, as ...

On Atheism Plus

This was originally published on That Liberal Extremist, a blog on social and political issues I began with my wife Heather. "Atheism Plus" has been making rounds for a while now. The basic premise seems to be Atheism, plus a lot of social justice movement elements. And, completely, I support that. And I'm glad for the wide support from others I see from that. We should support women in the Atheist community, and gays and bisexuals and the transgendered among us. And those outside of us, who are still marginalized even by religions they're a part of. We should support people of color, and the poor, and immigrants and single mothers more. Intersectionality is the word. I came across this idea first from  Greta Christina's post .  But, I don't think we need a label for this. That doesn't mean there isn't a reason for it, and maybe I should phrase it "I don't think we should need it.", so let me explain. ...the rest of the post c...

Alternate Computer Science History

I'm basically putting a giant sign on me by even saying this in public, but for a while now I've been sketching notes on the side for a series of writing I call Alternate Computer Science History . The idea is to envision alternate histories for how we may have developed computers over the years, both in how those differences would have played out in the past and the impact it would have on what we've built on top of all these things since then. What makes this so fascinating? Legacy. Computers are so steeped in legacy to such a remarkable degree, but they're still so young. What kind of boxes are we putting ourselves in? So I find it fun to explore what could have been different. What we have today, built on so many layers built up over the decades, is really nothing short of accidental. We could have ended up with a lot of other paths these developments could have taken over the years... couldn't we have? So maybe I'll just keep these private, or maybe I...

CARDIAC: The Cardboard Computer

I am just so excited about this. CARDIAC. The Cardboard Computer. How cool is that? This piece of history is amazing and better than that: it is extremely accessible. This fantastic design was built in 1969 by David Hagelbarger at Bell Labs to explain what computers were to those who would otherwise have no exposure to them. Miraculously, the CARDIAC (CARDboard Interactive Aid to Computation) was able to actually function as a slow and rudimentary computer.  One of the most fascinating aspects of this gem is that at the time of its publication the scope it was able to demonstrate was actually useful in explaining what a computer was. Could you imagine trying to explain computers today with anything close to the CARDIAC? It had 100 memory locations and only ten instructions. The memory held signed 3-digit numbers (-999 through 999) and instructions could be encoded such that the first digit was the instruction and the second two digits were the address of memory to operat...

Caktus Ship It! Day 2014 Q3 Post-Mortem - Part 2: Playlists and Peers

As of my first hour playing around I was able to share and synchronize play of any MP3 between multiple users with a simple drag and drop interface. Things were going pretty well for my project, but I had some work to do getting from there to the collaborative playlist I had in mind. I was already just assuming we were only caring about one file, because that worked well to get things up and running fast. My next step was to remove that assumption and start keeping a list of songs. This was pretty easy, in fact. I started writing a simple list of songs as they were downloaded, each with a play button which performed the <audio> tag set and play that previously done automatically. Each user could now play any song that was shared and to restore the previous synchronized playing that happened when they only dealt with a single done I incorporated broadcast changeTrack messages. I added two other broadcasts, pause and play, which would allow any users to pause and play the songs ...

Growing Up With Your Long Lost Brother

I grew up with my long lost brother, but that fact does not make the label any less true. I don't know much about him. There are people I worked with at short retail jobs in my teens who I got to know better than I ever knew my little brother. There was not a drifting apart and there was not any kind of animosity that kept us apart from the start. I care for my brother and love my brother like anyone would. But I do not know my brother. If you think it is disingenuous of me to call him a "long lost brother" when we grew up together and I remember him smiling from his crib, please understand. If a man reached my age of thirty and only then learned they had a brother they had never met, never spoken with, never heard of before they would know that brother better than I know mine. They would know at least that he, too, had a long lost brother. It is not accurate to say that I miss my brother, because you cannot really miss those who you don't know. I missed by brot...

Death by Drawing

A while back I joined the effort of my friend Russell Hay to draw more often by way of a blog dedicated just to posting our drawings. I'll be honest and say we haven't made the best habits so far. I'm not giving up, so when I draw it will be posted there. Every now and then I'll post a few things here, just to remind you that I do that. Tonight I draw a bunch of monsters! Enjoy .

Caktus Ship It! Day 2014 Q3 Post-Mortem - Part 1: Proof of Concept in Under an Hour

Today was one of our very fun Ship It! Day  events at Caktus Group and the first in our new office. It snuck up on a lot of us, what with the busy move we're still settling down from, but it also is a great chance to unwind and to really enjoy our new shared workspace. I'm going to start ending these events with a personal post-mortem on what I worked on. I decided to learn about WebRTC by building a tool I'd love to have with friends: a shared music player. The problem is simple: some of us think the room is to quiet and some of us like quiet. What we need is a way to play music together with headphones. The goal was a simple app that can play MP3s. Everyone with the app open should be able to play songs and everyone connected would listen at the same time. We all hear the same thing. If someone leaves, they'll take their music with them. So, I set about this yesterday afternoon (when our Ship It festivities officially begin) and I had a vague idea where I wan...

The Flying Fish: Learning to Balance Passions

I'm not a fish flopping around on the boat, struggling to pull through my gills water that isn't there. That's the image Jon Morrow would have you imagine for people like myself: writers who don't get to write. In his very poignant piece , Morrow talks about the nightmares and pain stuck in a life he didn’t really enjoy, until he let go and gave himself to wordcraft. I think anyone with a passion they’ve stifled can sympathize, but I don’t agree with his conclusions of advice to writers-who-could. Contrasted to Morrow’s do-or-die struggles and deep dive to arguable save his life, I’m reminded of the always articulate Matt Gemmell’s announcement at the start of 2014 that he would be shifting to writing full-time and no longer continuing his successful programming career or his seven year self-employed stint in the Apple universe. Look at the different ways these two writers describe their life away from writing. My subconscious was trying to warn me th...

The "Cost" of Diversity

We use the word “diversity” and when we use a word we are packing up some concept as a thing . We can put that thing on a shelf and analyze it, talk about it, and use it like a hammer when we find a nail. Diversity, in this way, is defined as something other than the natural order. That is the result of labelling something: we define it as something that needs pointed out as distinct from the normal assumptions. Not that it is positioned as bad but we conceptualize things as the normal every day we’re used to and then diversify as this extra step we can take. Diversity is an added step. Diversity is optional. You should take this extra step, of course, but it isn’t inherent. But, here is where I’m finding I might disagree with the way we use this language because... Diversity is inherent. We live in a world reaching seven billion people and we are nothing close to  homogenous. The human race is colorful and varied and constantly surprising. You will never meet ev...

The Lessons of Vim

Full Disclosure: I’m no longer using Vim as my full-time editor. I’m giving Atom a shot, because I really do like the energy around it and every once and a while I like to mix things up. (I even became an Emacs user for a year, just to see what the other side looked like!) I while back I really enjoyed reading Mike Kozlowski’s piece Why Atom Can’t Replace Vim , and I completely agree with the sentiment 100% (even considering the above disclosure!). Emacs is an editor I have enormous respect for, and not just for what it is but the heritage it serves as for so many editors to come after it. Emacs’ big idea has been thoroughly learned — and how vi’s big idea hasn’t. From TextMate to SublimeText to Atom, modern editors have all adopted the extensibility lesson so much to heart that it is, essentially, a part of the fabric of what it means to be a (decent) text editor. More or less, you’re either notepad or you’re extendable. Thank you, Emacs, and all you stand for, for th...