Jenkins is a large open source project. Well over two thousand repositories, almost two thousand committers, four or five GitHub Organizations, and many thousands of opened, in progress, and closed issues. Part of the reason we’re called Jenkins is because of GitHub and yet many of our repositories do not use GitHub Issues. We eschew GitHub Issues in favor of Jira for a number of reasons, perhaps most importantly is that GitHub Issues are incredibly difficult to scale across repositories and teams. What might be considered a shining example of scaling GitHub Issues would be the Kubernetes ecosystem which has concocted a rather complex workflow using automated bots, labels, and comments on Issues. As such, it’s not impossible, but vanilla out-of-the-box GitHub Issues are tricky to grow with large free and open source projects.
Howdy!
Welcome to my blog where I write about software
development, cycling, and other random nonsense. This is not
the only place I write, you can find more words I typed on the Buoyant Data blog, Scribd tech blog, and GitHub.
Retiring from 'sad' on twitter
Before moving to San Francisco an older friend had given me the name, which I carried as the title on my first business card: “Angry Young Man.” I had a tendency to practice “anger-driven development” wherein I would stay up late hacking away, determined to make something less shitty. I don’t think I have ever truly been an angry person, so let’s call it “playful cynicism.” I used this energy to develop two characters on Twitter through which I could vent my frustrations and make jokes about day-to-day stupidity in the tech industry. The most popular character and certainly my favorite: sadserver and its relative which I added later on sadoperator, are as of today effectively retired.
I'm not interested in your corporate Contributor License Agreements
What an interesting year it has been in the world of free and open source software! Adoption is through the roof and the age old question of “how should we fund this” has come back to the forefront. This year a number of companies have introduced non-open source licenses, sometimes referred to as “source available” licenses. To date I have not seen a single major open source project change licenses. Funded companies which have built ancillary tools and projects around some major open source projects have switched to these curiously un-open licenses. The big heartburn seems to stem from larger service providers taking open source software, turning it into a product-as-a-service, and making money off of that service. All of which is perfectly valid for the use of open source software. The subject of licenses is not one I wish to discuss in this blog post, but rather something which enables these sorts of license shenanigans: the contributor license agreement.
Jacob Sparre Andersen
I learned this
morning that a good man by the name of Jacob Sparre
Andersen
passed away over the weekend. While Jacob (sparre) is not the first person
I know of to have died in the open source community, he is the
first I interacted with on some frequency. A constant presence in the Ada developer
community, most often I would chat with him in #ada on the Freenode network
but we would also see each other once a year at FOSDEM.
Jekyll and tags on GitHub Pages
For the last little while I have been hosting this blog on GitHub Pages,
generated using Jekyll. All that is well and good except
GitHub Pages doesn’t properly support the jekyll-tagging plugin. Therefore
tags on this site have been broken since the migration, until I found ]this
blog post](http://longqian.me/2017/02/09/github-jekyll-tag/) by Long
Qian.
Streaming HTTP data with PostgreSQL and ExpressJS
One of the little applications which I built earlier this year ended up more useful than I originally anticipated. Useful enough to have hit its first performance bottleneck! Performance problems I generally grumble “nice problem to have” which profiling and refactoring, but in this case I know what the performance problem was, but lacked the appropriate solution.
I generally know where I'm going
With a clean air and a good bit of weather out in the big blue room, I decided to take advantage of the opportunity and continue some of my AIDS/LifeCycle training outdoors for a change. If you have never been to Sonoma county, you may not be familiar with some of its absolutely fabulous hills, valleys, and vistas. This past weekend I joined the numerous cyclists out there charging about on our beautiful county roads.
Taking control of Git
In the development of service-oriented applications we often will use the
phrase “source of truth” when referring to data and its ownership. The
expectation being that there is generally a single source of truth in the
system. Take DNS for example, we generally trust that a nameserver somewhere
out there is acting as the single source of truth for a single domain, such as
brokenco.de. Without this guarantee, much of our experience on the internet
would break down. For the software we write, increasingly GitHub has become the
source of truth for the source code itself. So much so that systems have been
built on top of GitHub which further wed the software ecosystem to a single
source of truth, such as Golang’s dependency definition conventions.
Happy Tyler Day!
We have finally arrived at that most special day on the calendar, one I am sure you have been eagerly waiting for: Tyler Day!. This year’s Tyler Day is not much different than in years past, it has fallen on a Tuesday. It always seems to be a Tuesday. Festivities in the Northern Hemisphere are met, as per usual, with the cold transition from autumn to winter. And to most in the United States, Tyler Day is that last reminder to go to the grocery store to prepare for Thanksgiving.
Getting fitted for AIDS/LifeCycle 2019
The impact of HIV/AIDS on the world is difficult to overlook, perhaps more so in the San Francisco bay area where the epidemic decimated the gay community in the 80’s and 90’s. While not directly affected, I have supported AIDS-related organizations and legislation in San Francisco and California at large ever since I moved here over a decade ago. This year I will be trying something of a slightly different color: AIDS/LifeCycle. An event which brings thousands of cyclists, roadies, and supporters together to ride from San Francisco to Los Angeles, raising millions of dollars in the process. This year, rather than donating to friends’ fundraising activities, I will be joining them!.
The air is fire
Within the last two years the air above Santa Rosa has become thick with ash, acrid, and severely unhealthy. A year ago the immensely destructive Tubbs Fire bore down on northern Santa Rosa obliterating thousands of homes. For days afterwards the skies were filled with the smoke and ash from the epic destruction.
Switching transparently between Tor or the LAN with SSH
Whenever possible, I typically send much of my traffic through the
Tor network, including traffic to some services
which I operate for myself, such as a secure shell server. When I am traveling
or otherwise not on my home network, I use one of Tor’s more fun features:
Onion Services (formerly
known as Hidden Services). Onion Services can be identified by the *.onion
top-level domain and allow the server’s location to be anonymous/concealed
just like the client.
Happy Anniversary
One year ago today, I watched the Sonoma county fires pour over Shiloh ridge towards the Fountaingrove neighborhood. I wrote about the experience, and subsequent evacuation in “Watching fire come down the mountain”. The response across Sonoma county to the fires was as monumental as the fires themselves, and for my part, I spent the next two weeks working with old and new friends to build and support Sonoma Fire Info to strive to get as much accurate information to our fellow residents as possible.
An unfortunate setback for Startup Sonoma County
Santa Rosa is a wonderful city located within Sonoma county, and I have been encouraging just about anybody who will listen to come visit since I moved here some years ago. Glossing over a bunch of details, one year ago today the fires began, which tore into Santa Rosa. In reaction to that, a few of my friends and I, along with a number of other hackers and volunteers created Sonoma Fire Info. Some time after the fires were contained, a few of us set out to create something in response to rebuild in a different way, something would help invigorate the area we know and love, we created Startup Sonoma County
Close Gmail, Save a Gig
A number of organizations I am part of use Google Apps for their Email, Calendaring, Storage, etc, which means that I recently became one of the millions of users who recently had too much load time, excessive white-space, and awkwardly huge buttons foisted upon them by the new Gmail re-design. On my 13” large screen, the new design leaves far too little space for email, which seems like perhaps somebody missed the point.
Choosing the right plugin dependencies
For Jenkins, the plugin ecosystem is one of its key advantages over other tools offering some similar functionality. That power and flexibility does not come without its own set of problems for the project itself. From an outsiders perspective, the challenges around dependency and update management between Jenkins plugins is a substantial topic, worthy of at least a couple of doctoral theses in computer science and sociology respectively. For insiders within the Jenkins developer community, the relations between plugins in the ecosystem makes a bizarre kind of sense. Like the tax code, it’s something you figure out how to work within, but never dare dig in too deeply, for fear of your head exploding. In this blog post, I’d like to share my philosophy on how we, the Jenkins project, should think about plugin dependencies and how that contrasts to the status quo.
A simple starter application for Feathers and TypeScript
It took me a little while to get comfortable with TypeScript when used in conjunction with Feathers. I have found the combination to be quite useful for building small little web APIs and applications over the past couple months, but starting from scratch has been a bit of a pain. Tweaking all the configuration files, and getting all the right dependencies installed is not somemthing I want to keep resident in my memory, so I have created this feathers-typescript-starter repository.
Feathers authentication for web pages and forms
I have been using Feathers for a number of projects lately, including the backend and client for Jenkins Evergreen. It is obvious from the design and structure of Feathers that a significant amount of thought went into its development. Overall, I have been happy with the experience implementing clean APIs, and have added Feathers as my default toolchain for new web API and application development. Feathers has been great for building JSON-based RESTful APIs, but I stumbled over some hurdles when using it as a more traditional web application framework.
The single most important middleware for Express
Almost every web framework I have used in the past five years shares the same stupid flaw: mishandling of redundant slashes. Invariably this causes problems when some script somewhere joins URL segments together with multiple slashes in them, and ends up receiving a 404.
My current Minimum Equipment List
I find posts from other hackers on their equipment to be rather interesting and figured I should share my latest Minimum Equipment List. Lately I haven’t been traveling, but I tend to move around Santa Rosa and the greater Bay Area with a fairly standard set of equipment regardless of the distance I’m traveling. My international trips usually necessitate a larger wardrobe, but the bag on my back remains very consistent.