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.
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.
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.
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.
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.
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.
Kubernetes is so hot right now. So hot. Not to brag, but the Jenkins has been using Kubernetes for a couple years, in production even! While Kubernetes is certainly worth the hype, so hot, I have traditionally done all of my development with Kubernetes resources using a personal Azure Kubernetes Service instance rather than running minikube locally. Recently I took some time to do some hobby-hacking, which included some Kubernetes work, and ended up revisiting using minikube on my local machine. It went…okay.
This year I got tired of my strapped bike pedals and decided to get a smidge more serious by purchasing clip-in pedals. Going into it, I knew that there was a high risk of falling over at a stop light or any number of the calamities other cyclists have experienced when their feet become attached to the bike frame.
This year I’ve been working on an ambitious new project referred to as Jenkins Evergreen. It is ambitious in that we’re aiming to significantly alter the way in which Jenkins is downloaded, updated, and used. In most visible ways Evergreen is the same as a traditional Jenkins installation, but the way it is assembled into a package and delivered is radically different. Among the many challenges which the Evergreen project must tackle, there is one problem in common with most other organizations: how do you take a big, complex system, and make it continuously deliverable.