A series of posts will explore and detail some of the current Rails caching code. This post takes a deeper look at the network requests involved in caching. These posts attempt to explain in more detail, but please do read the official Rails Caching Guide docs, which are also very good. Rails Cache Posts: Rails Cache Initialization Rails Cache Comparisons Rails Cache Workflows Rails Cache Network…
A series of posts will explore and detail some of the current Rails caching code. This post takes a deeper look at the network requests involved in caching. These posts attempt to explain in more detail, but please do read the official Rails Caching Guide docs, which are also very good. Rails Cache Posts: Rails Cache Initialization Rails Cache Comparisons Rails Cache Workflows Rails Cache Network…
A series of posts will explore and detail some of the current Rails caching code. This post takes a deeper look at the network requests involved in caching. These posts attempt to explain in more detail, but please do read the official Rails Caching Guide docs, which are also very good. Rails Cache Posts: Rails Cache Initialization Rails Cache Comparisons Rails Cache Workflows Rails Cache Network…
A series of posts will explore and detail some of the current Rails caching code. This post explores the steps and type of work involved in caching. These posts attempts to explain in a bit more details, but please do read the official Rails Caching Guide docs, which are also very good. Rails Cache Posts: Rails Cache Initialization Rails Cache Comparisons Rails Cache Workflows Rails Cache…
I have been creating children’s books with my kids using AI for a while now. I recently talked to someone, and they were doing the same thing but using just the ChatGPT bot and creating a single image for a short story. I will cover some of my recent progress working on this side project, as well as some of the methods I use. The Text Isn’t the Problem Early on, generating amusing enough stories…
A series of posts will explore and detail some of the current Rails caching code. This post compares a few of the cache store options. These posts attempts to explain in a bit more details, but please do read the official Rails Caching Guide docs, which are also very good. Rails Cache Posts: Rails Cache Initialization Rails Cache Comparisons Rails Caching Comparisons Rails offers many caching…
Rails Cache Initialization A series of posts will explore and detail some of the current Rails caching code. A good place to start is how the Rails cache is configured and loaded. This attempts to explain in a bit more details, but please do read the official Rails Caching Guide docs, which are also very good. The Rails Cache Configuration Often, folks use different Rails cache configurations in…
Gardyn 2.0 years later I posted my first review of the Gardyn 2.0 a few years ago. I had had the Gardyn for 2 seasons at that point. Now it has been another couple of seasons, but more importantly, it has required some additional repairs. Since then, I have wanted to cover the Gardyn and some of my basement grow setup. Gardyn 2.0 still worth it years later? The simple answer is yes, I am happy…
Conferences for Remote Developers I posted a quick note on ruby.social that got some notice and a few folks pinged me. If you work remotely, going to a conference with a large number of other remote coworkers is a great way to build and refresh in-person relationships. I got to talk in person with 20+ coworkers who were previously only Slack icons and discuss technology and project decisions with…
A Repo Quick Start As many organizations with many microservices and employee churn, you can and should expect to often step into a new codebase that needs some smaller updates. It can be really helpful to be able to very quickly go from cloning a repo to being able to run tests and check things in a developer environment. The goal of a number of different helper scripts is to help reduce the…
I have been having fun making children’s books with my kids using AI . I have been working on some techniques to make them even more personalized. I have recently been building some of the images for the books using image-to-image. I will describe a bit of the process and some of the options I use. Examples Below are some examples of the kinds of image options I get when working from photos to…
Every year as Ruby releases a new version at Christmas, and many folks adjust their supported versions of Ruby. Where I work adjusting the supported versions of Ruby, deprecating older versions. This means folks have a window of time to find and update the offending older gems and microservices that would no longer be supported. This primarily relies on teams that have ownership of apps following…
A Brief Note on Controversial AI Images I know there is some debate about AI Art and copyright. I am not going to get into that a lot. The current models don’t offer enough protections for Artists. Regardless of where we are with the models we have right now. I believe AI art which is considered fully responsible and reasonable use, will be reached. The full details and depth of that issue are…
NOTE: this was originally a mastodon thread , but feels like small linked blog posts are a better format As there seems to be a tech crunch going on, several companies are responding in different ways, including layoffs which increase the maintenance cost per developer… This naturally leads to companies looking at re-orgs, shutting down services, and current maintenance costs. The constant…
Gardyn Review Overall I am happy with the Gardyn indoor hydroponic growing system. I am partially through season two of growing with my Gardyn 2.0 unit and wanted to write up a more detailed review. I feel like the Gardyn has struck a pretty good balance on a DIY vs all-included system. I wish it were a bit more DIY, and I shy away from the yearly subscriptions, which I will explain later. The…
This is the second post in a series about organization structures , teams and ownership, and application health. Ownership challenges abound in microservices While there are many great resources out there that discuss microservices, where they may or may not be a good fit , and how some companies have decided to move away from them, and back to a monolith , in this post I am going to focus on some…
Organizational structure drift causes issues When your HR/Management org structure starts to drift from your operational and project development structure. The organization’s communication, shared understanding, system ownership, and incident response times suffer. Communication: meetings references teams that no longer exist, in terms of ownership of runtime systems and deliverables. Folks that…
Finding the Origins of Database Queries There are a number of reasons and times when trying to find the specific origin of a DB query comes up. Most often in legacy systems which have spiraled into extremely complex systems. A common cause is a shared database and trying to figure out which application is causing some specific query. Even in a single application, trying to tease out DB queries…
I bought a Remarkable2 early after launch (I believe, I was in batch 3). I haven’t really said much about it, in some sense because it doesn’t feel particularly cool, but what is clearly special is that I still use it nearly every day. I have had the device for over a year now and still enjoy it. It isn’t really something to show off like a cool tech toy, but after settling into some basic usage…
I am still skeptical of Crypto in general, I do own some coins for fun / investment, but consider it an interesting and very risky investment. As far as NFTs built on top of the blockchain, I looked into it and decided that in its current form and iteration it isn’t compelling to me… I think there are some real concerns around the crypto ecosystem for now, and I am happy to watch and wait. Hearing…
Redis & Sidekiq A collection of notes about working with Sidekiq and Redis. A previous post about Ruby & Redis , briefly touched on some things, but I will get into more specifics in this post. Redis and Background Jobs A common usage of Redis for Rubyists is for background jobs. Two popular libraries for jobs are Sidekiq and Resque . At this point, I highly recommend Sidekiq over Resque as it is…
I am starting a series of self-reference materials on staples of web application delivery. A place to collect and document my learnings and understanding of various technologies I often reach for when designing systems. The first in this series was about Ruby and Redis While this one will focus in on Content Delivery Networks. These reference pages will be updated over time and evolve as my usage…
Ruby & Redis A collection of notes and some tips about using Redis. Redis Setup Redis is super easy to setup, and in dev mode often just works right out of the box, but as you leverage and scale it inproduction, you might want to think more about it’s setup beyond just setting a default REDIS_URL ENV var. Often a basic Redis for simple product is just setup like so… Redis . current = Redis . new (…
Micro-Service Request Depth Availability In systems that use micro-services, often the growth and interaction of the services grow organically over time. While it is enabling teams to move quickly and integrate whatever they need it leads to some known bad patterns in terms of micro-service interactions that have serious impacts on availability. This post explains two of micro-service integration…
Revisiting Front-Ends I have been a ‘full-stack’ developer for a long time. These days depending on where you work and how your org works being full-stack isn’t really viable anymore. Given the growing complexity of both the front-end and back-end end systems, it is more and more required to specialize. That being said, I feel like there are good reasons to understand and think across the…
Principal / Staff Engineer Resources A friend who recently was promoted to a Staff Engineer, and wanted to learn a bit more about the role asked me if I had any good resources. I put together a small set of resources that could be helpful when aspiring or transitioning into Principal or Staff level engineering roles. I figured it would be good to share out with others who might be interested. I…
TODO: Grammarly Availability, Outages, Reliability, and SLAs As companies mature, eventually downtime moves from speculative loss of revenue or customer growth, to directly impacting revenue and decreasing active customer trust. The tradeoffs of move fast and find market fit changes when a business shifts to driving revenue from a working business plan. This shifts the dynamics and companies…
photo credit Neramitevent@pixabay Learning with Game Days Many different companies and posts talk about why and how to run Game Days. I won’t rehash all of that in this post, instead I will give a basic intro and link to some sources then dive into some more specific Game Days I have recently been involved with. A game day simulates a failure or event to test systems, processes, and team…
photo credit qimono@pixabay Performance of JSON Parsers at Scale In a recent post, benchmarking JSON Parsers (OJ, SimdJson, FastJsonParser) . This compared the parsers based on local microbenchmarks. In the end, I recommended for almost all general use cases go with OJ. Saying that FastJsonParser might be worth it for specific use cases. I want to do a quick follow up on sharing what happens when…
photo credit Tumisu lt: @pixabay UPDATE: Added FastJsonParser After some feedback on reddit (thx @f9ae8221b) , pointing out a JSON gem I wasn’t aware of, I updated the benchmarks to also support FastJSONparser and cover symbolize_keys, which is important for my companies use cases (which a co-worker pointed out) and can cause significant performance issues if you have to do that independently of…
photo credit geralt: @pixabay Performance Benchmarks & Considerations between create_or_find_by & find_or_create_by I was recently optimizing an endpoint and got to think through some interesting differences between two Active Record methods that help you either find an existing record or create a new one. At first glance, it seems either is fine with some notable differences around their race…
photo credit patches: AnnaER @pixabay Why Patch Ruby StdLib Code in Gems Well, the Ruby community does this a lot, it can unlock powerful enhancements, features, observability, and more… Here are some examples of patching Ruby’s StdLib (standard library). Let’s just look at a few that patch a single piece of Ruby, Net::HTTP . Many libraries want to tap into what is happening around the network.…
photo credit flaky wall: pixabay Introducing Rails Flaky Spec Examples I have written about how our teams are dealing with flaky ruby tests in legacy projects. In this post, I want to show, how we can teach about common testing pitfalls and how to avoid them. In this post, I want to introduce a new project Rails Flaky Spec Examples . I created the example flaky Rails spec suite for an internal…
Theo liked to imitate as he was learning to walk. TL;DR: This post is just for fun! I didn’t really learn about programming, this is just a catchy title, and I wanted to share a big project I have continued to work on that has nothing to do with programming. I thought I could make a kind of funny post by stringing together a bunch of programming ‘wisdom’ that could really be associated with nearly…
photo credit cleaning: pixabay Why Cleanup Rails Image Assets? Why would we want to more safely delete image assets? a clean repo is easier to jump into and maintain over time cruft that isn’t in use can be confusing over time image assets can slow down your test and deploy pipeline Rails tests frequently need to dynamically or initialize building all assets, this is often a slow hit on a Rails…
Restoration of a Ruby Test Suite I want to talk about some recent work to restore a Rails app’s test suite to a usable state. The goal went beyond the test suite, to restoring trust in the continuous deployment pipeline, but this post will mostly focus on the Rspec suite. The reason I started on this work was that the current state of deployment was “dangerous”, various folks preferred to avoid…
Building SVG Badges in Ruby A while ago I needed to create a simple dynamic SVG. After a bit of tinkering, it was easy enough to build a simple Ruby class to do what I needed to do. SVG created from the below code It was a super quick thing to put together and solved a problem I was having. I was reminded of that today when I had another quick issue that I wanted to resolve. I wanted to pull some…
Zola Electric Career Tomorrow is my last day at Zola Electric , it is time for a different challenge. It has been an amazing ride over the last 4+ years. Helping grown from a single country with non connected devices to smart devices that can power a large variety of appliances. During my time with Zola it has grown to provide energy access to over 1 million people without grid access in Africa.…
Coverband 3 Coverband gives deep insight into the production usage of every line of code in your Ruby app. Find dead code, find hotspots, see code paths that might be unexpectedly in high usage. This release marks deep dives into Ruby performance, benchmarking , and driving almost all features based on improving performance. The release is a majory performance improvement, resolving some issues…
A Unique Conference I attended #LeadDevLondon this year, it was a nice and different conference. Generally, I have attended more language-specific conferences. There were basically no language-specific talks at all during the conf, as everything was a bit more general about building and working well with technology teams. Given that these days a large part of what I do is manage teams of devs, it…
Benchmarking Bugs On my previous post I covered benchmarking Rubygems … I was working on some follow up to improve the benchmarks and discovered a bug rendering one of the benchmark comparisons invalid. In this post we will cover what I had missed, how to avoid some gotchas, and ways to improve the readability of your benchmarks. image from pixabay Spot The Bug This is a simplified example from…
RubyGems Benchmarks This follows up on my previous post focused on Ruby Benchmarking . This post will focus on benchmarking a gem as part of it’s long term maintenance. Building a community standard around Gem Benchmarking has even been suggested as a good way to help Ruby fine tune performance over time. image from pixabay Why Benchmark A Gem If you maintain a Gem, which could have large…
Ruby Benchmarking If you work on a large app, publish, gems, or are interested in the Ruby community at some point you will likely want to dig into performance and benchmarking. Often what you think will help performance doesn’t have as much of an impact as you would guess. Which is why being able to set up quick experiments to verify the impact of code changes on performance and memory can be…
Rack Proxy Tour I wanted to share a quick tour of a flexible Ruby tool. I have turned to rack-proxy a number of times, throughout the years. It is a tiny and super useful Rack middleware that can quickly be adapted to perform a number of useful functions. While it is a small library it is a tool that has been handy for quick and lasting workarounds a number of times. It is a sharp tool, so be…
Building & Using Your Own Ruby If you want to work on changes or learn more about the internals of the Ruby language, you can alter the source and build your own from scratch. It isn’t that hard or scary, you will learn a bit more about Ruby just by building it. This is a quick start to building Ruby from scratch on OSX, and using it to run your local apps. If you want to read a great guide about…
Some of my favorite links from January. Also, I will use this month to highlight a group of folks who have been sharing advice and helping me grow for a number of years now. Thanks! If you are growing as an engineering leader find a set of mentors. Thanks, @glv @mariagutierrez @mad_typist @SteveAkers @dramsay @ryan_owens @ioutfitter @chadfowler I always appreciate the thoughtful advice.…
Some of my favorite links from December. If you have any good links I missed pass them my way. What you learn over 5 years is that every dependency, every line of code, every test, every feature is a DEBT or outage, waiting to happen. — David Copeland (@davetron5000) November 26, 2017 continuing my trend of having something from @davetron5000 each month, and this month I have two ;) Software…
Coding Challenge The company I am with, Offgrid-Electric , has evolved our hiring process over time to try to ensure we can find a diverse and strong distributed team. There are many interesting processes related to hiring a distributed team, but I will quickly focus on the coding challenge, technical challenge, or whatever folks are calling it these days. image by FotografieLink Offer Challenge…
Some of my favorite links from November. If you have any good links I missed pass them my way. Software Development A follow up to last months part one , part two of human code reviews Security Alerts from Github 50K scholarships to Udacity via Google embracing metrics vs testing ☠️ "Dead Code" can rot a code base over time. Here are a few common types of dead code. Be diligent and thorough about…
Documentation Folders CC image from Pixabay Active Record Database Documentation This post will cover how to use the Active Record feature to add comments to your tables, columns, and indexes. This feature makes it easy to keep your database documentation up to date as you can add descriptions at the same time as you add or update tables and columns. The best documentation about the feature is…