I’m taking off tomorrow and Thursday to accompany my daughter on an overnight school field trip to our state capitol. It’ll be … something. But I’m fairly sure this is one of those moments I’ll look back on in 20 years and be grateful I took the time off. The Reading List will be back on Friday!
[article] Why most AI benchmarks tell us so little. All these “we’re best at measure X or Y” claims for LLMs are impressive, but what does it really convey about how people use these models?
[article] How to Succeed When You’re Not the Boss’s Favorite. Useful advice. It’s naive to think that we don’t have people in our families or at work that we prefer to spend time with. But managers have to be careful to check for bias.
[blog] Building Meta’s GenAI Infrastructure. Simply absurd scale, but there are a handful of companies that need this level of capacity to serve the world.
[blog] Great Marketing Machines Are Like Costco. Just like there’s not one thing that makes Costco amazing, a complex system like a marketing engine doesn’t have a single lever.
[blog] Processing One Billion Rows in PHP! That one billion row challenges comes to PHP? Sure, why not. The author does a good job continuously refining the work.
[blog] From ESB to Cloud Native: Building Modern Integrations. Is today’s event broker or even cloud-based messaging service wildly different from a classic ESB? In some respects, but it’s still possible to use modern shiny tech to craft a centralized service with lots of coupling.
##
Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:
I enjoyed a lot of sunshine with the family this weekend, while also getting some productive work done. This is a short week for me given some time off, so I’m doing the “five days of work in three days” approach. Never a good idea. Don’t be like me.
[article] The Shift from Models to Compound AI Systems. The one matters if you’re a developer, architect, or ops person. A compound AI system uses multiple components, and is becoming increasingly common. There are a lot of implications of a system like this.
[article] How to Make Small Talk with Anyone from Anywhere. I’m not really using my degree from college, but the thing I learned most during those four years was how to small talk with strangers. This article is helpful if you find yourself stuck.
[blog] The life of an Ollama prompt. This tool has gotten fairly popular as a means for trying out LLMs locally. It’s not a terrible idea to become more familiar with it!
[blog] Gen AI Grounding with Vertex AI LLM. “Grounding” an LLM to reduce hallucinations and increase trustworthiness sounds complicated. This walkthrough shows that it’s easier than you might think.
[book] Eloquent JavaScript, 4th Edition. Do yourself a favor, and at least skim through this. It’s an excellent book, and it’s free online or as a download.
[article] How generative AI will change low-code development. Can AI just produce the same code a low-code platform does? It’s probably not that simple, but classic low-code feels less desirable nowadays.
##
Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:
Happy Friday! I’ve bringing some work home with me this weekend, but I try to only mess with it while the family sleeps in. Dig into some good architectural and leadership pieces below.
[site] Google Cloud Documentation. These types of sites “change” at most every few years. But we just published a massive update to our docs portal, and it offers easier navigation and better discoverability. Poke around!
[article] Kubernetes is (not) a cost optimization problem. There’s an angle here by someone offering a container alternative, but Matt knows Kubernetes and talks about where the costs come from.
[blog] Transformation Theater. Maybe this post makes you feel unsettled because you see yourself or your company in a few of these. That’s ok. The first step is recognizing it. Then, you can fix it!
[article] What if we rotate pairs every day? What an interesting experiment! The ThoughtWorks folks tried a rapid rotation for their developer pairs, and shared their findings.
[blog] The RedMonk Programming Language Rankings: January 2024. We might see these sorts of rankings change over time with the introduction of AI-generated code. For now, the top five are stable, but there’s movement below that.
[article] Event Interception. Good post on a technique for modernizing a legacy system by intercepting application events and redirecting them to the new system.
Fifteen or so meetings today, and I’m still standing. It’s good that I like these people. Below, you’ll find some thought-provoking content on leadership, OSS, and disruption.
[blog] Populating documentation templates using AI. Tom’s on a content heater right now. Here’s another fascinating post about using generative AI to get an initial draft of documentation.
[article] 3 Ways Humility Can Undermine Your Leadership. You often hear about the importance of servant leadership, humility, etc. I’m a big believer in that. But this post offers a constructive lens on when it can go wrong.
[article] Applying the DevEx framework. If you care about developer experience and productive software teams, you’ll like this exploration of a particular framework.
[article] Open Source Software Use Driven by Cost Cutting, Survey Says. Some new survey data shows that “access to innovation” and “modernizing the technology stack” aren’t the most popular reasons people use open source nowadays. It’s about cost.
[blog] Data Reliability at Chick-fil-A. The CFA folks apply principles from Site Reliability Engineering to something they call Data Reliability Engineering. The focus of the post is on a homegrown tool they use to conduct data quality checks.
[blog] Croissant: a metadata format for ML-ready datasets. Data is represented all sorts of ways when feeding it into pipelines for model training. This new format looks to standardize a bit, and already has some industry commitment.
Do you plan on going to many in-person tech events this year? If so, are you looking at local events or actually getting on a plane to go somewhere? It seems like folks are traveling more, but training budgets continue be tight across the industry. Even if you can’t go anywhere right now, I’ll try to bring the learning to you with these reading lists!
[blog] Shifting Security Down Early. I didn’t just read and share this because it references my “shift down” metaphor. Doesn’t hurt, though. Aron offers up a good take on security in the dev lifecycle.
[article] When New Hires Get Paid More, Top Performers Resign First. Interesting findings. If you level up existing staff salaries when new (highly paid) folks join, people stay. When you don’t, the high performers disproportionally leave.
[blog] Reverse engineering prompts. This post brought me joy. I’ve never thought of asking an LLM for a prompt that would generate the output I want. I tried with Duet AI and got it to give me a really good prompt for an existing block of Go code. Love that idea as a way to learn good prompting.
[blog] Improving Shopify App’s Performance. What’s the worst feedback you can hear about a distributed or complex app? “Feels slow.” Where do you even START? Shopify wanted to improve the performance of their app, and tackled three different performance bottlenecks.
[blog] “Bad” Strategy. Why? Have you said to yourself “my company has no real strategy”? COME ON SUITS UPSTAIRS, FIGURE IT OUT. But we don’t always see the whole picture, as John talks about here.
##
Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:
Good day, and I’m heading out to meet a friend for tacos by the beach. No complaints! I really enjoyed the items I read today, and I think you will too.
[blog] Building a flexible platform for optimal use of LLMs. I think we’re going to see a LOT of this in 2024. Most every company will be building generative AI platforms for their teams to use. Here is what Intuit is doing.
[blog] Go slices, deleting items, and memory usage. Did you think that so much went into creating a “delete” operation on an array type? I was fascinated by Val’s explanation of what he added to the Go standard library.
[article] The open source problem. Matt says the big problems with OSS isn’t corporations using it without contributing. Rather, it’s that users/devs really only have one choice when licensing their creations.
[article] Using AI to Help Developers Work with Regular Expressions. Are you good at writing regular expressions? My friends, I am not. This seems like a good scenario for AI assistance. This article looks at a few options at your disposal.
[article] This Is The Easiest Way To Make Your Life More Awesome. Eric’s point is that you can improve your life through subtraction. There may be stages of life where you ignore this for good reason, but you likely settle into this reality over the long term.
[blog] Regional vs. zonal GKE clusters: making the right choice for your workloads. High availability is a choice in the public cloud. Sometimes it’s cheaper to be down then pay for extra resilience. Other times, downtime isn’t tolerable so you pay for better scale. This post explains some of the considerations.
Last Friday we had the day off, so I walked around our local zoo by myself. It was great! But I’m back in the saddle today, and this promises to be a very busy week. There’s always time for reading though, so please enjoy what I consumed today.
[blog] 4 Reasons to Use Angular for Your Next Web App. Love it. There are good reasons, but I also appreciate the quiet confidence of those using something good, who aren’t personally crushed if you don’t make the same choice.
[blog] The four tenets of SOA revisited. yes, tech is changing faster now than likely at any time in history. But there are plenty of durable ideas that stick around. Mark is starting a look at service oriented architecture principles.
[article] “Good enough” code is just not good enough. There are times when “good enough” is ok, but continuously adopting that approach doesn’t yield excellence in the long run.
##
Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:
If you have a choice, you should test software against the real thing. The second best option is to use a “fake” that implements the target service’s API. In the cloud, it’s straightforward to spin up a real instance of a service for testing. But there are reasons (e.g. cost or speed) or times (e.g. within a CI pipeline, or rapid testing on your local machine) when an emulator is a better bet.
Let’s say that you wanted to try out Google Cloud Spanner, and it’s useful change streams functionality. Consider creating a real instance and experimenting, but you have an alternative option. The local emulator just added support for change streams, and you can test the whole thing out from the comfort of your own machine. Or, to make life even easier, test it out from a free cloud machine.
With just a Google account (which most everyone has?), you can use a free cloud-based shell and code editor. Just go to shell.cloud.google.com. We’ve loaded this environment up with language CLIs for Java, .NET, Go, and others. It’s got the Docker daemon running. And it’s got our gcloud CLI pre-loaded and ready to go. It’s pretty cool. From here, we can install the Spanner emulator, and run just a few shell commands to see the entire thing in action.
Let’s begin by installing the emulator for Cloud Spanner. It takes just one command.
Then we start up the emulator itself with this command:
gcloud emulators spanner start
After a couple of seconds, I see the emulator running, and listening on two ports.
Great. I want to leave that running while having the freedom to run more commands. It’s easy to spin up new tabs in the Cloud Shell Editor, so I created a new one.
In this new tab, I ran a set of commands that configured the gcloud CLI to work locally with the emulator. The CLI supports the concept of multiple configurations, so we create one that is emulator friendly. Also note that Google Cloud has the idea of “projects.” But if you don’t have a Google Cloud account, you’re ok here. For the emulators, you can use a non-existent value for “project” as I have here.
gcloud config configurations create emulator
gcloud config set auth/disable_credentials true
gcloud config set project local-project
gcloud config set api_endpoint_overrides/spanner http://localhost:9020/
It’s time to create a (local) Spanner instance. I ran this one command to do so. It’s super fast, which makes it great for CI pipeline scenarios. That second command sets the default instance name so that we don’t have to provide an instance value in subsequent commands.
It’s time to turn on change streams, and this takes an extra step. It doesn’t look like I can smuggle utility commands through the “execute-sql” operation, so we need to run a DDL statement instead. Note that you can create change streams that listen to specific tables or columns. This one listens to anything changing in any table.
I’m now going to open a third tab in the Cloud Shell Editor. This is so that we can continuously tail the change stream results. We’ve created this nice little sample project that lets you tail the change stream. Install the app by running this command in the third tab.
go install github.com/cloudspannerecosystem/spanner-change-streams-tail@latest
Then, in this same tab, we want the Go SDK (which this app uses) to look at the local emulator’s gRPC port instead of the public cloud. Set the environment variable that overrides the default behavior.
export SPANNER_EMULATOR_HOST=localhost:9010
Awesome. Now we start up the change stream app with a single command. You should see it start up and hold waiting for data.
Back in the second tab (the first should still be running the emulator, the third is running the change stream tail), let’s add a new record to the Spanner database table. What SHOULD happen is that we see a change record pop up in the third tab.
gcloud spanner databases execute-sql example-db \
--sql="INSERT INTO Albums (SingerId, AlbumId, AlbumTitle) VALUES (2, 2, 'Go, Go, Go')"
Sure enough, I see a record pop into the third tab showing the before and after values of the row.
You can mess around with updating records, deleting records, and so on. A change stream is powerful for event sourcing scenarios, or simply feeding data changes to downstream systems.
In this short walkthrough, we tried out the Cloud Shell Editor, spun up the Spanner emulator, and experimented with database change streams. All without needing a Google Cloud account, or installing a lick of software on our own device. Not bad!
[article] Improving Developer Experience Drives Profitability. You can ignore (important) outcomes like happier developers and high-quality software if you want. Even if you invest in dev experience for financial motives, the effort will be appreciated.
[article] Product-Focused Reliability for SRE. Outstanding piece from the Google SRE team that proposes a product-focused model for defining SLOs and service overall.
I’m wiped after a busy day; it’s the 1:1 conversations that really do it to me. I’m an introvert, so it takes extra effort to dial up the listening, engaging, and emoting. Worth it, but exhausting. My “relaxation” time often involves stealing a couple minutes to read the items below.
[blog] Gemma, Ollama and LangChainGo. I’ve seen a lot of experiments with Gemma. Here, Eli shows how straightforward it is to run locally on your machine.
[article] How Netflix Really Uses Java. The presentation and transcript includes lots of details about what’s running at Netflix, their key tech choices, and what they’re excited about.
[blog] Monitoring your latest app release just got easier. If you’re like me, you have very little patience for finicky mobile apps. This new Firebase dashboard lets you see key metrics in real-time after a release, which means you can fix things faster, and keep users happier.
[article] Periodic Face-to-Face. Martin Fowler says that even remote-first teams need face to face time to build trust, uncover ideas, and confirm direction.
[blog] How to prevent lateral movement techniques on Google Cloud. You don’t want attackers navigating across the network to find vulnerable resources. This post explores recent research from Palo Alto Networks, and how to avoid cloud misconfigurations.
##
Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below: