Well, this is awkward.
Coding Blocks is signing out for now, in this episode we’ll talk about what’s happening and why. We have had an amazing run, far better than we ever expected. Also, Joe recommends 50 games, Allen goes for the gold, and Outlaw is totally normal. (And we’re not crying you’re crying!)
Thank you for the support over the last 11 (!!!) years. It’s been a wild ride, and the last thing we ever expected when starting a tech podcast was getting to meet so many fantastic people.
View the full show notes here:
https://www.codingblocks.net/episode242
Tip of the Week* UFO 50 is an odd collection of 50 pseudo-retro video games made by a small group of game developers, most notably including Derek Yu of Spelunky. It’s a unique and specific experience that reminds me of spending the night at your friend’s house who had some console gaming system that you’d only ever heard rumors about. The games seem small and simple at first blush, but there is surprising depth. Favorites so far are Kick Club, Avianos, Attactics, and Mortol. (Steam) * Use JSDoc annotations to make VSCode “understand” your data (jsdoc.app) * Can you change your password without needing current password? (askubuntu.com) * Did you know you can use VS Code for interactive rebasing? + How to enable VS Code Interactive Editor (StackOverflow) + GitLens (marketplace.visualstudio.com)
It’s time to talk about the types of things you should consider when diving into multi-tenant applications and things to be especially aware of if you attempt to make things faster by going multi-threaded at the same time. Join us as Allen continues is non-winning / non-losing streak, JZ is taken out by a storm, and Outlaw continues to ignore the notes for the intro to the show…
NewsReviews* Spotify – Colum Ferry
Upcoming Events* Atlanta Dev Con
September 7th, 2024
https://www.atldevcon.com/
* DevFest Central Florida on September 28th, 2024
https://devfestflorida.com/
Episode* Single vs multi-tenanted applications and multi-threaded programming + Be very careful about sharing state when doing anything in multi-threaded AND multi-tenanted applications
What are some important things to consider when writing multi-tenanted applications – per ClaudeAs mentioned in the episode, Claude’s answers seem to be very database heavy
Can you elaborate on the data isolation?
Data isolation is crucial in multi-tenant systems to prevent unauthorized access and ensure data privacy. Here are some key strategies to ensure data isolation:
Resources / Mentions Salable Postgres product – Citus
https://www.citusdata.com/
* Envelope encryption if you’re wanting to use tenant specific keys for multi-tenanted encryption – one approach is envelope encryption
https://en.wikipedia.org/wiki/Hybrid_cryptosystem#Envelope_encryption
https://cloud.google.com/kms/docs/envelope-encryption
* OWASP multi-tenant or “Cloud Tenant” Isolation
https://owasp.org/www-project-cloud-tenant-isolation/
* C#’s Parallel.ForEach method – the easy* way to do parallel processing in C#
https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.parallel.foreach?view=net-8.0
* Can’t remember why we linked episode 11, but here it is!
https://www.codingblocks.net/podcast/episode-11-design-patterns-part-1-you-create-me/
Tips of the Week* Speculative fix? If you’re not sure that your fix is going to work, or you can’t reproduce the problem then consider over-communicating it and keeping artifacts such as screenshots of what you attempted.
+ It’s useful for communication, but also for looking back when and if you start second guessing yourself.
* Shapez 2 is a cool refactoring, automation, and puzzle game. It’s similar to Factorio, but with a heavier emphasis on refactoring and puzzles.
https://store.steampowered.com/app/2162800/shapez_2/
* Kotlin – measureTimeMillis
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.system/measure-time-millis.html
* Google skills – learn and get certified in Google Cloud https://www.cloudskillsboost.google
+ Pay for a year’s worth of training for $299 and get $200 towards a certification – over $1,500 value https://www.cloudskillsboost.google/payments/new https://www.cloudskillsboost.google/subscriptions
* From Ivan Kuchin – Dasel – like JQ except it does JSON, YAML, TOML, XML and CSV with zero runtime dependencies
https://github.com/TomWright/dasel
* Google Cloud products in 4 words or less
https://cloud.google.com/blog/topics/developers-practitioners/back-popular-demand-google-cloud-products-4-words-or-less-2022-edition
https://googlecloudcheatsheet.withgoogle.com/
Grab your headphones because it’s water cooler time! This episode we’re catching up on feedback, putting our skills to the test, and wondering what we’re missing. Plus, Allen’s telling it how it is, Outlaw is putting it all together and Joe is minding the gaps!
View the full show notes here:
https://www.codingblocks.net/episode240
ReviewsThank you again for taking the time to share your review with us!
NewsAtlanta Dev Con
September 7th, 2024
https://www.atldevcon.com/
DevFest Central Florida
September 28th, 2024
https://devfestflorida.com/
Two water coolers walk into a bar…* Several folks share their origin stories in the Coding Blocks slack – especially in episode-discussion * Example of dealing with legacy code / hiring people that will work on it (Episode 239) * Intentional architecture…what’s the worst that could happen? * What’s the sentiment like on Hacker News? (outerbounds.com) * Cat8 is not small! Why isn’t anything easy? * Kubernetes trivia, where are your blind spots? (proprofs.com) * Ask Claude: Can you give me an example of the kinds of competitions that might exist in a humorous version of the Olympics for programmers? * Data gathering and parsing – it doesn’t seem to have gotten much better in decades…are we wrong?
Tip of the Week* 8 Top Docker Tips and Tricks for 2024 (docker.com) * Have you tried Eartlhy, like Dockerfiles for all of your builds that you can run locally? (earthly.dev) * Java’s JavaAgent Explained (bito.ai) * Mirrord is an alternative to Telepresence that makes working with Kubernetes easier (mirrord.dev) * Kubernetes + Skaffold + Telepresence + K9s = Winning, it’s a great combination of tools that work great together! + https://cloud.google.com/kubernetes-engine?hl=en + https://skaffold.dev/ + https://www.telepresence.io/ + https://k9scli.io/
We were asked in one of our recent reviews in Apple Podcasts if we would share our career paths and how we got started and how we arrived where we are today. We took some of that info, threw it at Microsoft’s CoPilot / DALL E 3 and that’s the artwork for this episode – you may be a little surprised at how the 3 of us got started as software developers. We also have some fun things to share about recent purchases, tweaks, mistakes made and some information about the CrowdStrike outage that recently occurred.
ReviewsThank you again for taking the time to share your review with us!
NewsAtlanta Dev Con
September 7th, 2024
https://www.atldevcon.com/
DevFest Central Florida
September 28th, 2024
https://devfestflorida.com/
This Episode* Career paths – someone asked that we talk about our career paths https://en.wikipedia.org/wiki/Lou_Pearlman * Enabling trace caused a bug that didn’t happen otherwise – in other words, errors in your code (such as in a toString()) could cause unforseen problems when working with other libraries and enabling verbose logging * Upgraded the fans in my Omada switch…may have done something stupid – ie. you should never mess aorund inside electrical components when they were powered on else you may risk injury or even frying some expensive equipment * The travel router experience has been awesome – we mentioned this thing in a recent episode and it really is awesome
Travel Router: https://amzn.to/3W5U8IS
Travel Router Case: https://amzn.to/3zufsyU
* Great topic in the Coding Blocks slack #episode-discussion channel – can you buy your way out of a jam when older developers leave and tribal knowledge is abundant? ie. how much money would it take for you to work on an old jquery application nowadays, or maybe support a v1 MVC .NET application
* Some craziness with Crowdstrike and several industries coming to a standstill due to a bug
+ Government Accountability Office blog entry on the CrowdStrike issue
https://www.gao.gov/blog/crowdstrike-chaos-highlights-key-cyber-vulnerabilities-software-updates#:~:text=Earlier this month%2C a software,Disruptions were widespread
+ Great explanation of what happened
https://www.youtube.com/watch?v=wAzEJxOo1ts
* When is Programmer’s Day?
+ International Programmer’s day is January 7th, for no reason I can find.
No joke, it depends! It’s the 256 day of the year, which changes with leap years. This year it’s on 9/12.
+ Guess we just need to celebrate all 3!
https://www.timeanddate.com/holidays/world/international-programmers-day
Resources* Mentioned the old TRS-80 Radioshack handheld – here’s a page with some info on these dinosaurs
https://oldcomputers.net/~oldcompu/trs80pc1.html
Tips of the Week* Hollow Knight, amazing created by 3 people (mostly) fantastic game, it’s not as hard or long as I thought it would be. The gameplay is amazing, the music is amazing, the story is hidden, but amazing. Just play it on just about any platform.
https://store.steampowered.com/app/367520/Hollow_Knight/
* Midinous is a cool way of generating midi visually with nodes, similar to decision trees, that can do cool things with randomness and weighting to manipulate all sorts of midi parameters (velocity, mod and pitch wheels, any parameters that your VSTs support!)
https://www.youtube.com/watch?v=rtTWtzWav8I
https://store.steampowered.com/app/1727420/Midinous/
* If that’s not low-level enough for you, check out overtone. It’s an open-source LISP-like wrapper around the SuperCollider audio engine that you can use to make really cool, live looping music.
https://overtone.github.io/
* Did you know that k9s has a slick way of supporting skins via XDG_CONFIG, you just drop in a couple skin files and then update a parameter to tell your context/clusters what to use. Great article that walks you through it:
https://k9scli.io/topics/skins/
* Starship minimalist prompt for any shell, previously Joe had been using powerlevel10k to show git information, kubernetes information, auto-complete etc, but it’s been deprecated and it looks like Starship appears to be the de jour replacement.
https://starship.rs/
* Showing the “hidden frames” in a strack trace in IntelliJ
If you want to see everything that happened in those hidden frames, you will want to right click that stack trace and show traces from external libraries – there are other features there you can enable/disable as well!
* Get outside … go for a hike, a ride, go see a concert, go see Deadpool & Wolverine … That one means your back inside, but you had to go outside to get there
* Students – get an internship or co-op job … it’s easier to get started in your career while you’re still in school than it will be when you’re out and looking for a job
It’s Water Cooler Time! We’ve got a variety of topics today, and also Outlaw’s lawyering up, Allen can read QR codes now, and Joe is looking at second careers.
View the full show notes here:
https://www.codingblocks.net/episode238
NewsAs always, thank you for leaving us a review – we really appreciate them! Almazkun, vassilbakalov, DzikijSver
Atlanta Dev Con
September 7th, 2024
https://www.atldevcon.com/
DevFest Central Florida on September 28th, 2024
Interested? Submit your talk proposal here:
https://sessionize.com/devfest-florida-orlando-2024/
Water Cooler* How many programmers are there now? (statista.com) + Are we still growing? + What will it be like when we stop growing? + What will people be doing instead? * AI music generators are being sued! (msn.com) * Curse of the Blank Page + Naming things is important, gives them power…but also the power to defeat them! * Don’t make any one specific technology your hammer * Client libraries that completely change with server upgrades * What’s the most important or relevant thing to learn as a developer now? * Do you research or learn on vacation?
Tip of the Week* Curated, High-Quality Stories, Essays, Editorials, and Podcasts based around Software Engineering. It’s more polished and less experimental than PagedOut (Github)
Also, there’s a new Paged Out, complete with downloadable art. It’s more avant-garde than GIthub’s Readme project, featuring articles on Art, Cryptography, Demoscenes, and Reverse Engineering. (pagedout.institute)
* Travel Router – Extensible Authentication Protocol (EAP) is used to pass the authentication information between the supplicant (the Wi-Fi workstation) and the authentication server (Microsoft IAS or other) (Amazon)
+ Comparison of Travel Routers (gi.inet.com)
+ Carrying case for router (Amazon)
+ Travel power cube – 6 power outlets followed by 3 (Amazon)
* Did you know you that Windows has a built in camera QR code reader?
* Guava caching libraries in Java (Github)
+ Caffiene is a more recent alternatitive (Github)
* Generative AI for beginners – “Learn the fundamentals of building Generative AI applications with our 18-lesson comprehensive course by Microsoft Cloud Advocates.”
* Microsoft has a course for getting into generative AI! (microsoft.github.io)
* Claude is better than Chat GPT? (claude.ai)
* How to Get the Most out of Postgres Memory Settings – thanks Mikerg! (temb.io)
In the past couple of episodes, we’d gone over what Apache Kafka is and along the way we mentioned some of the pains of managing and running Kafka clusters on your own. In this episode, we discuss some of the ways you can offload those responsibilities and focus on writing streaming applications. Along the way, Joe does a mighty fine fill-in for proper noun pronunciation and Allen does a southern auctioneer-style speed talk.
View the full show notes here:
https://www.codingblocks.net/episode237
ReviewsAs always, thank you for leaving us a review – we really do appreciate them!
From iTunes: Abucr7
Upcoming EventsAtlanta Dev Con
September 7th, 2024
https://www.atldevcon.com/
DevFest Central Florida on September 28th, 2024
Interested? Submit your talk proposal here:
https://sessionize.com/devfest-florida-orlando-2024/
Kafka Compatible and Kafka Functional AlternativesWhy? Because running any type of infrastructure requires time, knowledge, and blood, sweat and tears
Confluent* https://www.confluent.io/confluent-cloud/pricing/ * We’ve personally had good experiences with their Kafka as a service
WarpStream* https://www.warpstream.com/ * “WarpStream is an Apache Kafka® compatible data streaming platform built directly on top of object storage: no inter-AZ bandwidth costs, no disks to manage, and infinitely scalable, all within your VPC” * ZERO disks to manage * 10x cheaper than running Kafka * Agents stream data directly to and from object storage with no buffering on local disks and no data tiering. * Create new serverless “Virtual Clusters” in our control plane instantly * Support different environments, teams, or projects without managing any dedicated infrastructure * Things you won’t have to do with WarpStream + Upscale a cluster that is about to run out of space + Figure out how to restore quorum in a Zookeeper cluster or Raft consensus group + Rebalance partitions in a cluster * “WarpStream is protocol compatible with Apache Kafka®, so you can keep using all your favorite tools and software. No need to rewrite your application or use a proprietary SDK. Just change the URL in your favorite Kafka client library and start streaming!” * Never again have to choose between reliability and your budget. WarpStream costs the same regardless of whether you run your workloads in a single availability zone, or distributed across multiple * WarpStream’s unique cloud native architecture was designed from the ground up around the cheapest and most durable storage available in the cloud: commodity object storage * WarpStream agents use object storage as the storage layer and the network layer, side-stepping interzone bandwidth costs entirely * Can be run in BYOC (bring your own cloud) or in Serverless + BYOC – you provide all the compute and storage – the only thing that WarpStream provides is the control plane - Data never leaves your environment + Serverless – fully managed by WarpStream in AWS – will automatically scale for you even down to nothing! * Can run in AWS, GCP and Azure * Agents are also S3 compatible so can run with S3 compatible storage such as Minio and others
RedPanda* Redpanda is a slimmed down native Kafka protocol compliant drop-in replacement for Kafka * There’s even a Redpanda Connect! * It’s main differentiator is performance, it’s cheaper and faster
Apache Pulsar* Similar to Kafka, but changes the abstraction on storage to allow more flexibility on IO * Has a Kafka compliant wrapper for interchangability * Simple data offload functionality to S3 or GCS * Multi tenancy * Geo replication
Cloud alternatives* Google Cloud – PubSub + https://cloud.google.com/pubsub * Azure – Event Hubs + https://azure.microsoft.com/en-us/products/event-hubs * AWS – Kinesis + https://aws.amazon.com/kinesis/
Tip of the Week* Chord AI is an Android/iOS app that uses AI to figure out the chords for a song. This is really useful if you just want to get the quick jist of a song to play along with. The base version is free, and has a few different integration options (YouTube, Spotify, Apple Music Local Files for me) and it uses your phones microphone and a little AI magic to figure it out. It even shows you how to play the chords on guitar or piano. The free version gets you basic chords, but you can pay $8.99 a month to get more advanced/frequent chords.
https://www.chordai.net/
* Pandas is nearly as good, if not better than SQL for exploring data
https://pandas.pydata.org/
* Another tip for displaying in Jupyter notebooks – to HTML() your dataframes to show the full column data
https://www.geeksforgeeks.org/how-to-render-pandas-dataframe-as-html-table/
* Take photos or video and convert them into 3d models
https://lumalabs.ai/luma-api
View the show notes on the web: https://www.codingblocks.net/episode237
In the past couple of episodes, we'd gone over what Apache Kafka is and along the way we mentioned some of the pains of managing and running Kafka clusters on your own. In this episode, we discuss some of the ways you can offload those responsibilities and focus on writing streaming applications. Along the way, Joe does a mighty fine fill-in for proper noun pronunciation and Allen does a southern auctioneer-style speed talk.
Reviews As always, thank you for leaving us a review - we really do appreciate them!
From iTunes: Abucr7
Upcoming Events Atlanta Dev Con September 7th, 2024 https://www.atldevcon.com/
DevFest Central Florida on September 28th, 2024 Interested? Submit your talk proposal here: https://sessionize.com/devfest-florida-orlando-2024/
Kafka Compatible and Kafka Functional Alternatives Why? Because running any type of infrastructure requires time, knowledge, and blood, sweat and tears
Confluent * https://www.confluent.io/confluent-cloud/pricing/ * We've personally had good experiences with their Kafka as a service
WarpStream * https://www.warpstream.com/ * "WarpStream is an Apache Kafka® compatible data streaming platform built directly on top of object storage: no inter-AZ bandwidth costs, no disks to manage, and infinitely scalable, all within your VPC" * ZERO disks to manage * 10x cheaper than running Kafka * Agents stream data directly to and from object storage with no buffering on local disks and no data tiering. * Create new serverless “Virtual Clusters” in our control plane instantly * Support different environments, teams, or projects without managing any dedicated infrastructure * Things you won't have to do with WarpStream + Upscale a cluster that is about to run out of space + Figure out how to restore quorum in a Zookeeper cluster or Raft consensus group + Rebalance partitions in a cluster * "WarpStream is protocol compatible with Apache Kafka®, so you can keep using all your favorite tools and software. No need to rewrite your application or use a proprietary SDK. Just change the URL in your favorite Kafka client library and start streaming!" * Never again have to choose between reliability and your budget. WarpStream costs the same regardless of whether you run your workloads in a single availability zone, or distributed across multiple * WarpStream's unique cloud native architecture was designed from the ground up around the cheapest and most durable storage available in the cloud: commodity object storage * WarpStream agents use object storage as the storage layer and the network layer, side-stepping interzone bandwidth costs entirely * Can be run in BYOC (bring your own cloud) or in Serverless + BYOC - you provide all the compute and storage - the only thing that WarpStream provides is the control plane - Data never leaves your environment + Serverless - fully managed by WarpStream in AWS - will automatically scale for you even down to nothing! * Can run in AWS, GCP and Azure * Agents are also S3 compatible so can run with S3 compatible storage such as Minio and others
RedPanda * Redpanda is a slimmed down native Kafka protocol compliant drop-in replacement for Kafka * There's even a Redpanda Connect! * It's main differentiator is performance, it's cheaper and faster
Apache Pulsar * Similar to Kafka, but changes the abstraction on storage to allow more flexibility on IO * Has a Kafka compliant wrapper for interchangability * Simple data offload functionality to S3 or GCS * Multi tenancy * Geo replication
Cloud alternatives * Google Cloud - PubSub + https://cloud.google.com/pubsub * Azure - Event Hubs + https://azure.microsoft.com/en-us/products/event-hubs * AWS - Kinesis + https://aws.amazon.com/kinesis/
Tip of the Week * Chord AI is an Android/iOS app that uses AI to figure out the chords for a song. This is really useful if you just want to get the quick jist of a song to play along with. The base version is free, and has a few different integration options (YouTube, Spotify, Apple Music Local Files for me) and it uses your phones microphone and a little AI magic to figure it out. It even shows you how to play the chords on guitar or piano. The free version gets you basic chords, but you can pay $8.99 a month to get more advanced/frequent chords. https://www.chordai.net/ * Pandas is nearly as good, if not better than SQL for exploring data https://pandas.pydata.org/ * Another tip for displaying in Jupyter notebooks - to HTML() your dataframes to show the full column data https://www.geeksforgeeks.org/how-to-render-pandas-dataframe-as-html-table/ * Take photos or video and convert them into 3d models https://lumalabs.ai/luma-api
Topics, Partitions, and APIs oh my! This episode we’re getting further into how Apache Kafka works and its use cases. Also, Allen is staying dry, Joe goes for broke, and Michael (eventually) gets on the right page.
The full show notes are available on the website at https://www.codingblocks.net/episode236
News* Thanks for the reviews! angingjellies and Nick Brooker + Please leave us a review! (/review) * Atlanta Dev Con is coming up, on September 7th, 2024 (www.atldevcon.com)
Kafka Topics* They are partitioned – this means they are distributed (or can be) across multiple Kafka brokers into “buckets” * New events written to Kafka are appended to partitions + The distribution of data across brokers is what allows Kafka to scale so well as data can be written to and read from many brokers simultaneously * Events with the same key are written to the same partition as the original event + Kafka guarantees reads of events within a partition are always read in the order that they were written * For fault tolerance and high availability, topics can be replicated…even across regions and data centers + NOTE: If you’re using a cloud provider, know that this can be very costly as you pay for inbound and outbound traffic across regions and availability zones + Typical replication configurations for production setups are 3 replicas
Kafka APIS* Admin API – used for managing and inspecting topics, brokers, and other Kafka objects * Producer API – used to write events to Kafka topics * Consumer API – used to read data from Kafka topics * Kafka Streams API – the ability to implement stream processing applications/microservices. Some of the key functionality includes functions for transformations, stateful operations like aggregations, joins, windowing, and more + In the Kafka streams world, these transformations and aggregations are typically written to other topics (in from one topic, out to one or more other topics) + Kafka Connect API – allows for the use of reusable import and export connectors that usually connect external systems. These connectors allow you to gather data from an external system (like a database using CDC) and write that data to Kafka. Then you could have another connector that could push that data to another system OR it could be used for transforming data in your streams application - These connectors are referred to as Sources and Sinks in the connector portfolio (confluent.io) - Source – gets data from an external system and writes it to a Kafka topic - Sink – pushes data to an external system from a Kafka topic
Use Cases Message queue – usually talking about replacing something like ActiveMQ or RabbitMQ
* Message brokers are often used for responsive types of processing, decoupling systems, etc. – Kafka is usually a great alternative that scales, generally has faster throughput, and offers more functionality
* Website activity tracking – this was one of the very first use cases for Kafka – the ability to rebuild user actions by recording all the user activities as events
* How and why Kafka was developed (LinkedIn)
+ Typically different activity types would be written to different topics – like web page interactions to one topic and searches to another
* Metrics – aggregating statistics from distributed applications
* Log aggregation – some use Kafka for storage of event logs rather than using something like HDFS or a file server or cloud storage – but why? Because using Kafka for the event storage abstracts away the events from the files
* Stream processing – taking events in and further enriching those events and publishing them to new topics
* Event sourcing – using Kafka to store state changes from an application that are used to replay the current state of an object or system
* Commit log – using Kafka as an external commit log is a way for synchronizing data between distributed systems, or help rebuild the state in a failed system
Tip of the Week Rémi Gallego is a music producer who makes music under a variety of names like The Algorithm and Boucle Infini, almost all of it is instrumental Synthwave with a hard-rock edge. They also make a lot of video game music, including 2 of my favorite game soundtracks of all time “The Last Spell” and “Hell is for Demons” (YouTube) * Did you know that the Kubernetes-focused TUI we’ve raved about before can be used to look up information about other things as well, like :helm and :events. Events is particularly useful for figuring out mysteries. You can see all the “resources” available to you with “?”. You might be surprised at everything you see (pop-eye, x-ray, and monitoring) * WarpStream is an S3 backed, API compliant Kafka Alternative. Thanks MikeRg! (warpstream.com) * Cloudflare’s trillion message Kafka setup, thanks Mikerg! (blog.bytebytego.com) * Want the power and flexibility of jq, but for yaml? Try yq! (gitbook.io) * Zenith is terminal graphical metrics for your nix system written in Rust, thanks MikeRg! (github.com) * 8 Big (O)Notation Every Developer should Know (medium.com) * Another Git cheat sheet (wizardzines.com)
Topics, Partitions, and APIs oh my! This episode we're getting further into how Apache Kafka works and its use cases. Also, Allen is staying dry, Joe goes for broke, and Michael (eventually) gets on the right page.
The full show notes are available on the website at https://www.codingblocks.net/episode236
News * Thanks for the reviews! angingjellies and Nick Brooker + Please leave us a review! (/review) * Atlanta Dev Con is coming up, on September 7th, 2024 (www.atldevcon.com)
Kafka Topics * They are partitioned - this means they are distributed (or can be) across multiple Kafka brokers into "buckets" * New events written to Kafka are appended to partitions + The distribution of data across brokers is what allows Kafka to scale so well as data can be written to and read from many brokers simultaneously * Events with the same key are written to the same partition as the original event + Kafka guarantees reads of events within a partition are always read in the order that they were written * For fault tolerance and high availability, topics can be replicated…even across regions and data centers + NOTE: If you're using a cloud provider, know that this can be very costly as you pay for inbound and outbound traffic across regions and availability zones + Typical replication configurations for production setups are 3 replicas
Kafka APIS * Admin API - used for managing and inspecting topics, brokers, and other Kafka objects * Producer API - used to write events to Kafka topics * Consumer API - used to read data from Kafka topics * Kafka Streams API - the ability to implement stream processing applications/microservices. Some of the key functionality includes functions for transformations, stateful operations like aggregations, joins, windowing, and more + In the Kafka streams world, these transformations and aggregations are typically written to other topics (in from one topic, out to one or more other topics) + Kafka Connect API - allows for the use of reusable import and export connectors that usually connect external systems. These connectors allow you to gather data from an external system (like a database using CDC) and write that data to Kafka. Then you could have another connector that could push that data to another system OR it could be used for transforming data in your streams application - These connectors are referred to as Sources and Sinks in the connector portfolio (confluent.io) - Source - gets data from an external system and writes it to a Kafka topic - Sink - pushes data to an external system from a Kafka topic
Use Cases * Message queue - usually talking about replacing something like ActiveMQ or RabbitMQ * Message brokers are often used for responsive types of processing, decoupling systems, etc. - Kafka is usually a great alternative that scales, generally has faster throughput, and offers more functionality * Website activity tracking - this was one of the very first use cases for Kafka - the ability to rebuild user actions by recording all the user activities as events * How and why Kafka was developed (LinkedIn) + Typically different activity types would be written to different topics - like web page interactions to one topic and searches to another * Metrics - aggregating statistics from distributed applications * Log aggregation - some use Kafka for storage of event logs rather than using something like HDFS or a file server or cloud storage - but why? Because using Kafka for the event storage abstracts away the events from the files * Stream processing - taking events in and further enriching those events and publishing them to new topics * Event sourcing - using Kafka to store state changes from an application that are used to replay the current state of an object or system * Commit log - using Kafka as an external commit log is a way for synchronizing data between distributed systems, or help rebuild the state in a failed system
https://youtu.be/IuUDRU9-HRk Tip of the Week * Rémi Gallego is a music producer who makes music under a variety of names like The Algorithm and Boucle Infini, almost all of it is instrumental Synthwave with a hard-rock edge. They also make a lot of video game music, including 2 of my favorite game soundtracks of all time "The Last Spell" and "Hell is for Demons" (YouTube) * Did you know that the Kubernetes-focused TUI we've raved about before can be used to look up information about other things as well, like :helm and :events. Events is particularly useful for figuring out mysteries. You can see all the "resources" available to you with "?". You might be surprised at everything you see (pop-eye, x-ray, and monitoring) * WarpStream is an S3 backed, API compliant Kafka Alternative. Thanks MikeRg! (warpstream.com) * Cloudflare's trillion message Kafka setup, thanks Mikerg! (blog.bytebytego.com) * Want the power and flexibility of jq, but for yaml? Try yq! (gitbook.io) * Zenith is terminal graphical metrics for your *nix system written in Rust, thanks MikeRg! (github.com) * 8 Big (O)Notation Every Developer should Know (medium.com) * Another Git cheat sheet (wizardzines.com)
We finally start talking about Apache Kafka! Also, Allen is getting acquainted with Aesop, Outlaw is killing clusters, and Joe is paying attention in drama class.
The full show notes are available on the website at https://www.codingblocks.net/episode235
News * Atlanta Dev Con is coming up, on September 7th, 2024 (www.atldevcon.com)
Intro to Apache Kafka What is it? Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming analytics, data integration, and mission-critical applications.
Core capabilities * High throughput - Deliver messages at network-limited throughput using a cluster of machines with latencies as low as 2ms. * Scalable - Scale production clusters up to a thousand brokers, trillions of messages per day, petabytes of data, and hundreds of thousands of partitions. Elastically expand and contract storage and processing * Permanent storage - Store streams of data safely in a distributed, durable, fault-tolerant cluster. * High availability - Stretch clusters efficiently over availability zones or connect separate clusters across geographic regions.
Ecosystem * Built-in stream processing - Process streams of events with joins, aggregations, filters, transformations, and more, using event-time and exactly-once processing. * Connect to almost anything - Kafka’s out-of-the-box Connect interface integrates with hundreds of event sources and event sinks including Postgres, JMS, Elasticsearch, AWS S3, and more. * Client libraries - Read, write, and process streams of events in a vast array of programming languages * Large ecosystem of open source tools - Large ecosystem of open source tools: Leverage a vast array of community-driven tooling.
Trust and Ease of Use * Mission critical - Support mission-critical use cases with guaranteed ordering, zero message loss, and efficient exactly-once processing. * Trusted by thousands of organizations - Thousands of organizations use Kafka, from internet giants to car manufacturers to stock exchanges. More than 5 million unique lifetime downloads. * Vast user community - Kafka is one of the five most active projects of the Apache Software Foundation, with hundreds of meetups around the world.
What is it? * Getting data in real-time from event sources like databases, sensors, mobile devices, cloud services, applications, etc. in the form of streams of events. Those events are stored "durably" (in Kafka) for processing, either in real-time or retrospectively, and then routed to various destinations depending on your needs. It's this continuous flow and processing of data that is known as "streaming data" How can it be used? (some examples) * Processing payments and financial transactions in real-time * Tracking automobiles and shipments in real time for logistical purposes * Capture and analyze sensor data from IoT devices or other equipment * To connect and share data from different divisions in a company
Apache Kafka as an event streaming platform? * It contains three key capabilities that make it a complete streaming platform + Can publish and subscribe to streams of events + Can store streams of events durably and reliably for as long as necessary (infinitely if you have the storage) + To process streams of events in real-time or retrospectively * Can be deployed to bare metal, virtual machines or to containers on-prem or in the cloud * Can be run self-managed or via various cloud providers as a managed service
How does Kafka work? * A distributed system that's composed of servers and clients that communicate using a highly performant TCP protocol
Servers * Kafka runs as a cluster of one or more servers that can span multiple data centers or cloud regions * Brokers - these are a portion of the servers that are the storage layer * Kafka Connect - these are servers that constantly import and export data from existing systems in your infrastructure such as relational databases * Kafka clusters are highly scalable and fault-tolerant
Clients * Allows you to write distributed applications that allow to read, write and process streams of events in parallel that are fault-tolerant and scale + These clients are available in many programming languages - both the ones provided by the core platform as well as 3rd party clients
Concepts Events * It's a record of something that happened - also called a "record" in the documentation + Has a key + Has a value + Has an event timestamp + Can have additional metadata
Producers and Consumers * Producers - these are the client applications that publish/write events to Kafka * Consumers - these are the client applications that read/subscribe to events from Kafka * Producers and consumers are completely decoupled from each other
Topics * Events are stored in topics * Topics are like folders on a file system - events would be the equivalent of files within that folder * Topics are mutli-producer and multi-subscriber + There can be zero, one or many producers or subscribers to a topic that write to or read from that topic respectively * Unlike many message queuing systems, these events can be read from as many times as necessary because they are not deleted after being consumed + Deleting of messages is handled on a per topic configuration that determines how long events are retained + Kafka's performance is not dependent on the amount of data nor the duration of time data is stored, so storing for longer periods is not a problem
Tip of the Week * Flipper Zero is a multi-functional interaction device mixed with a Tamagotchi. It has a variety of IO options built in, RFID, NFC, GPIO, Bluetooth, USB, and a variety of low-voltage pins like you'd see on an Arduino. Using the device upgrades the dolphin, encouraging you to try new things…and it's all open-source with a vibrant community behind it. (shop.flipperzero.one) + 7 cool and useful things to do with your Flipper Zero * Kafka Tui?! Kaskade is a cool-looking Kafka TUI that has got to be better than using the scripts in the build folder that comes with Kafka. (github.com/sauljabin/kaskade) * Microstudio is a web-based integrated development environment for making simple games and it's open source! (microstudio.dev) * Bing Copilot has a number of useful prompts (bing.com) + Designer (photos) + Vacation Planner + Cooking assistant + Fitness trainer * Sharing metrics between projects in GCP, Azure, and maybe AWS??? + GCP (projects): (cloud.google.com) + Azure (resource groups or subscriptions): (learn.microsoft.com) + AWS (multiple accounts): (docs.aws.amazon.com) * Checking wifi in your home - Android Only (play.google.com) * Powering POE without running cables (Amazon)
Omada specific - cloud vs local hardware (Amazon)
How to "shutdown" a Kafka cluster in Kubernetes: + kubectl annotate kafka my-kafka-cluster strimzi.io/pause-reconciliation="true" --context=my-context --namespace=my-namespace + kubectl delete strimzipodsets my-kafka-cluster --context=my-context --namespace=my-namespace + Then to "restart" the cluster: kubectl annotate kafka my-kafka-cluster strimzi.io/pause-reconciliation- --context=my-context --namespace=my-namespace
Joe Zack was on a brief holiday so Allen and Michael took over the helm for an episode. What would a new episode be without a little something regarding AI, some more love for Kotlin, and a number of excellent tips throughout (as well as at the end of) the episode.
Reviews* iTunes: ivan.kuchin
NewsAtlanta Dev Con
September 7th, 2024
https://www.atldevcon.com/
Topics* People trying to remove their answers from StackOverflow to not allow OpenAI to use their answers without permission/recognition?
https://www.tomshardware.com/tech-industry/artificial-intelligence/stack-overflow-bans-users-en-masse-for-rebelling-against-openai-partnership-users-banned-for-deleting-answers-to-prevent-them-being-used-to-train-chatgpt
* Obfuscate data dumps with PostgreSQL
https://github.com/GreenmaskIO/greenmask/
* Kotlin Coroutines
https://kotlinlang.org/docs/coroutines-overview.html
https://kotlinlang.org/docs/coroutine-context-and-dispatchers.html#dispatchers-and-threads
* Reminded Outlaw of the Cloudflare Workers we mentioned a while back
https://developers.cloudflare.com/workers/
Please leave us a review!
https://www.codingblocks.net/review
Random Bits* Tesla Las Vegas Loop
https://www.lvcva.com/vegas-loop/
* What actually happens when you overfill the oil in a vehicle?
https://www.youtube.com/watch?v=VaTbfvzNbxQ
* Fisker Ocean totalled after a $900 door ding…really
https://jalopnik.com/fisker-ocean-totaled-over-910-door-ding-after-insurer-1851451187
* A Ford Mustang painted with the blackest black paint available
https://youtu.be/Ll27OkWuE1g
Tip of the WeekDocker Blog is pretty excellent
Car Research
Utilizing wood sheet goods by utilizing cut lists
Docker’s chicken-n-egg problem
Download the file using the server suggested name With wget …
--content-disposition
https://man7.org/linux/man-pages/man1/wget.1.html
Wth curl …
-JO
-J, –remote-header-name
-O, –remote-name
https://curl.se/docs/manpage.html#-J
In this episode Joe introduces us to more security items you should be aware of in the world of CWE’s, Michael bends to the will of Joe and Allen in his favorite portion of the show, and Allen pontificates on the time spent setting up IDE’s and environments.
Reviews – Thank You!* iTunes: Vlad Bezden, Mom in VA, Make1977 * Spotify: chutney3000, Xuraith
Upcoming Events* Atlanta Dev Con
September 7th, 2024
https://www.atldevcon.com/
TopicsOpen Telemetry* The backend matters
https://opentelemetry.io/ecosystem/integrations/
+ Some backends are more fully featured than others
- Splunk Trace Analyzer
https://docs.splunk.com/observability/en/apm/apm-spans-traces/trace-analyzer.html
- Google Trace Explorer
https://cloud.google.com/trace/docs/finding-traces
- Azure OTel Guide
https://learn.microsoft.com/en-us/azure/azure-monitor/app/opentelemetry-enable?tabs=aspnetcore
- AWS OTel Information
https://aws.amazon.com/otel/
* The processor can decouple you
https://opentelemetry.io/docs/collector/configuration/#processors
CNCF – Cloud Native Computing Foundation* If you’re working in a cloud environment, you should know the projects here
https://www.cncf.io/projects/
* Super cool visualization tool for the projects
https://landscape.cncf.io/
Llama 3 – the next version of Meta’s AI engine* “Now available with both 8B and 70B pretrained and instruction-tuned versions to support a wide range of applications”
https://llama.meta.com/llama3/
Environmental concerns over the processing required for AI* Power requirements for processing some of the LLM’s
https://www.nnlabs.org/power-requirements-of-large-language-models/
* The Microsoft underwater datacenter
https://news.microsoft.com/source/features/sustainability/project-natick-underwater-datacenter/
Setting up IDE’s and environments* IDE vs old school debugging * Setup can require a significant amount of time + Is it worth it? + What if you’re just working on a bug?
Security Resources* What’s the difference between CWE and OWASP?
* CWE (Common Weakness Enumeration) is a community-developed list of common software and hardware weaknesses.
+ It’s similar to OWASP, but older (1999 vs 2001) and more general – including non web apps and (more recently) hardware
* The infamous “NVD” database links CVE (Common Vulnerabilities and Exposures) to CWE
https://nvd.nist.gov/vuln/detail/CVE-2021-44228
https://cwe.mitre.org/top25/archive/2023/2023_trends.html
TipsPre-warning – probably wouldn’t recommend installing this!
Saw a cool Windows utility called “Windrecorder” that records video and text from your desktop, and lets you rewind and search.
MacOS’s Spotlight is more powerful than you maybe knew
https://www.intego.com/mac-security-blog/spotlight-secrets-15-ways-to-use-spotlight-on-your-mac/
https://beebom.com/spotlight-tips-tricks/
If you’re grep command isn’t working like you thought it should, you might be a victim of content getting kicked out of the buffer
grep --line-buffered
iOS – get text from images
https://support.apple.com/guide/iphone/use-live-text-iphcf0b71b0e/ios
Picture, if you will, a nondescript office space, where time seems to stand still as programmers gather around a water cooler. Here, in the twilight of the workday, they exchange eerie tales of programming glitches, security breaches, and asynchronous calls. Welcome to the Programming Zone, where reality blurs and (silent) keystrokes echo in the depths of the unknown. Also, Allen is ready to boom, Outlaw is not happy about these category choices, and Joe takes the easy (but not longest) road.
The full show notes are available on the website at https://www.codingblocks.net/episode232
News* Thanks for the reviews! Want to help us out? Leave a review! (/reviews) + ivan.kuchin, Nick Brooker, Szymon, JT, Scott Harden * Text replacements are tricky, replacing links to “twitter.com” with “x.com” enabled a wave of domain spoofing attacks. (arstechnica.com)
Around the Water Cooler* Ktor is an asynchronous web framework based on Kotlin, but can it compete with Spring? (ktor.io) * docker init is a great tool for getting started, but how much can you expect from a scaffolding tool? (docs.docker.com) * Logging, how much is too much? What if we could go back in time? * Boomer Hour: Let’s talk about GChat UX * What do you know about browser extensions? + ViolentMonkey is a modern remake of the infamous GreaseMonkey, but can you trust it? (chromewebstore.google.com) * Can you trust any extensions? + XZ Tools backdown timeline, wow (arstechnica.com) * Bookmarklets still rock! (freecodecamp.org) * Silent Key Tester for mechanical keyboards, you can specify a wide variety of switches (thockking.com) + Joe’s preferences: - Durock Shrimp Silent T1 - Tactile Gazzew Boba U4 Silent - Liner Kailh Silent Brown - Linear Lichicx Lucy Silent - Linear WS Wuque Studio Gray Silent - Tactile WS Wuque Studio - White Silent – Linear - Tactile Kailh Silent Pink - Linear Cherry MX Silent Red
Tip of the Week* Feeling nostalgic for the original GameBoy or GameBoy Color? GBStudio is a one-stop shop for making games, it’s open-source and fully featured. You can do the art, music, and programming all in one tool and it’s thoughtfully laid out and well-documented. Bonus…you games will work in GameBoy emulators AND you can even produce your own working physical copies. (If you don’t want the high-level tools you can go old skool with “GBDK” too) (gbstudio.dev) * If you’re going to do something, why not script it? If you’re going to script it, save it for next time! * Dave’s Garage is a YouTube channel that does deep dives into Windows internals, cool electronics projects, and everything in between! (YouTube)
In this episode, Allen, Joe and Michael finally make it back to record together! Allen revisits the basics, Michael kicks off boomer hour nicely, and JZ let’s us know that the dream of an 8-bit looking keyboard is not dead.
News* An update on the networking redo at Allen’s house
+ The access panel that was mentioned
https://amzn.to/49lAXOq
Topics Data structures are still incredibly important in your day to day software development
* Changing “lookup table” type of data when your data stores are document databases or search engine type of storage
* A newly found 8-bit looking keyboard that may just be the ticket to Joe’s happiness
https://amzn.to/3J15ir2
* Code comments that are…not…great
https://www.reddit.com/r/ProgrammerHumor/comments/15qskcc/juniordevs/
* Frustrating code documentation that doesn’t really tell you anything
https://cloud.google.com/nodejs/docs/reference/container/latest/container/protos.google.container.v1.getoperationrequest
https://cloud.google.com/nodejs/docs/reference/container/latest/container/v1.clustermanagerclient#google_cloud_container_v1_ClusterManagerClient_getOperation_member_1*
* A resource from the past has come back to our attention – thanks Mikerg
https://devhints.io/
* What determines how much a data scientist earns?
https://jobs-in-data.com/salary/data-scientist-salary
+ Based on a 2022 Kaggle Machine Learning and Data Science survey
+ Country
+ Industry
+ Job title
+ Years coding experience
+ Years ML experience
Tips* Remember Carl Schweitzer from MS Dev Show? He’s got a new pod cast, The “Cloud Chat”, talking about cloud everything…like episode 1 about the aas’ of cloud computing!
https://podcasts.apple.com/us/podcast/cloudchat/id1734938265
* Joe has another music suggestion for you, this time it’s a new album by Four Tet. If you’re not familiar with Four Tet, it’s often described as “IDM” or intelligent dance music. It’s slower and more experimental than what you’d hear in a club though it still has those steady beats to help you get in the zone.
https://open.spotify.com/album/7mpTSR6E855VhdCeoPgpCF
https://music.apple.com/us/album/three/1729585296
* Sometimes Google’s GCP API’s don’t seem to tell the truth
* See what your helm-templates will render using this online tool
https://helm-playground.com
* Some useful Java JVM settings when working with containers
+ XX:+UseContainerSupport this one tells the container to use all the available resources – this way the JVM benefits from the CPU / Memory allocated to the container
+ XX:InitialRAMPercentage=80.0 this one tells the JVM to use 80% of the RAM for the initial heap size – this is based off the container memory LIMIT
+ XX:MaxRAMPercentage=80.0 this one tells the JVM to use 80% of the RAM for the MAX heap size – this is based off the container memory LIMIT
+ XX:MaxDirectMemorySize based off reading, if NOT SET, this should default to the same as the Max Heap Size – which is better than what we were doing previously – previously we had this set to 256m which is smaller than some of the larger files we get from the CDS and was causing OOM issues.
This time we are missing the “ocks”, but we hope you enjoy this off…ice topic chat about personalizing our workspaces. Also, Joe had to put a quarter in the jar, and Outlaw needs a cookie.
The full show notes are available on the website at https://www.codingblocks.net/episode230
NewsThank you for the review Szymon! Want to leave us a review?
Decorating your Home Office* Joe’s Uplift Desk Review * Mounting monitors, is there any other way? * To grommet or not to grommet? * How many keys do you want on your keyboard? * Wired vs Wireless * About that “fn” key… * Reddit for inspiration? * Office-Appropriate Art + Paintings + Prints / Silk Screens / Photography + Sculptures + Book Cases + There’s a story for Outlaw about this print: https://www.johndyerbaizley.com/product/four-horsemen-full-color-ap
Tip of the Week* If you have a car, you should consider getting a Mirror Dash Cam. It’s a front and rear camera system that replaces your rearview mirror with a touchscreen. Impress all your friends with your recording, zoom, night vision, parking assistance, GPS, and 24/7 recording and monitoring. (Amazon) * Be careful about exercising after you give blood, else you might end up needing it back! (redcrossblood.org )
The Cloud Nine Ergonomics Keyboard looks pretty nice…John Dyer Baizley does some really cool stuff, including artwork for some of our favorite bands
We are mixing it up on you again, no Outlaw this week, but we can offer you some talk of exotic databases. Also, Joe pronounces everything correctly and Allen leaves you with a riddle.
The full show notes are available on the website at https://www.codingblocks.net/episode229
News* Thanks for the reviews! + ivan.kuchin (has taken the lead!), Yoondoggy, cykoduck, nehoraigold + Want to help us out? Leave a review! (reviews)
Multivalue DBMS* Popular: 86. Adabas, 87. UniData/UniVerse, 147. JBase * Similar to RDBMS – store data in tables + Store multiple values to a particular record’s attribute - Some RDBMS’s can do this as well, BUT it’s typically an exception to the rule when you’d store an array on an attribute - In a MultiValue DBMS – that’s how you SHOULD do it - Part of the reason it’s done this way is these database systems are not optimized for JOINS + Looked at the Adabas and UniData sites – the primary selling points seem to be rapid application development / ease of learning and getting up to speed as well as data modeling that closely mirrors your application data structures * I BELIEVE it’s a schema on write (docs.rocketsoftware.com) * Supposed to be very performant as you access the data the way your application expects it * Per the docs, it’s easy to maintain (Wikipedia)
Spatial DBMS* Popular: 29. PostGIS, 59. Aerospike, 136. SpatiaLite * Provides the ability to efficiently store, modify, and query spatial data – data that appears in a geometrical space (maps, polygons, etc) * Generally have custom data types for storing the spatial data * Indices that allow for quick retrieval of spatial data about other spatial data * Also allow for performing spatial-specific operations on data, such as computing distances, merging or intersecting objects or even calculating areas * Geospatial data is a subset of spatial data – they represent places / spatial data on the Earth’s surface * Spatio-temporal data is another variation – spatial data combined with timestamps * PostGIS – basically a plugin for PostgreSQL that allows for storing of spatial data + Additionally supports raster data – data for things like weather and elevation + If you want to learn how to use it and understand the data and what’s stored (postgis.net) - Spatial data types are: point, line, polygon, and more…basically shapes - Rather than using b-tree indexes for sorting data for fast retrieval, spatial indexes that are bounding boxes – rectangles that identify what is contained within them * Typically accomplished with R-Tree and Quadtree implementations * RedFin – a real estate competitor to realtor.com and others, uses PostgreSQL / PostGIS * Quite a bit of software that supports OpenGIS so may be a good place to start if you’re interested in storing/querying spatial data
Event Stores* Popular: 178. EventStoreDB, 336. IBM DB2 Event Store, 338. NEventStore * Used for implementing the concept of Event Sourcing + Event Sourcing – an application/data store where the current state of an object is obtained by “replaying” all the events that got it to its current state - This contrasts with RDBMS’s in that relational typically store the current state of an object – historical state CAN be stored, but that’s an implementation detail that has to be implemented, such as temporal tables in SQL Server or “history tables” + Only support adding new events and querying the order of events - Not allowed to update or delete an event - For performance reasons, many Event Store databases support snapshots for holding materialized states at points in time * EventStoreDB – https://www.eventstore.com/eventstoredb + Defined as an “immutable log” + Features: guaranteed writes, concurrency model, granulated stream and stream APIs + Many client interfaces: .NET, Java, Go, Node, Rust, and Python + Runs on just about all OSes – Windows, Mac, Linux + Highly available – can run in a cluster + Optimistic concurrency checks that will return an error if a check fails + “Projections” allow you to generate new events based off “interesting” occurrences in your existing data + For example. You are looking for how many Twitter users said “happy” within 5 minutes of the word “foo coffee shop” and within 2 minutes of saying “London”. + Highly performant – 15k writes and 50k reads per second
Resources we like* Database Rankings (db-engines.com)
Tip of the Week* If your internet connection is good, but your cell phone service is bad then you might want to consider Ooma. Ooma sells devices that plug into your network or connect wireless and provide a phone number, and a phone jack so you can hook up an an old school home telephone. We’ve using it for about a week now with no problems and it’s been a breeze to set up. The devices range from $99 to $129 and there’s a monthly “premier” plan you can buy with nifty features like a secondary phone line, advanced call blocking, and call forwarding. (ooma.com) * Why use “git reset –hard” when you can “git stash -u” instead? Reset is destructive, but stashing keeps your changes just in case you need them. Because sometimes, your “sometimes” is now! + “git reset –hard”. + “git stash -u”
We have a different combination of the hosts for this episode where we continue the series on the types of database systems available and why you might choose one over another. Michael continues impressing by recalling everything we’ve ever said on our 500+ hours of podcasts, Allen enjoys learning about a database system he’d never come across, and Joe is loaded up and ready for his trek to Georgia, USA.
Reviews* iTunes: Calum55555 * Spotify: Ian Neethling, Ghostmerc, Xuraith * Audible: Wood2prog
NewsOrlando Code Camp
https://orlandocodecamp.com/
Object Oriented DBMS* Popular: InterSystems Cache, 92. InterSystems IRIS, 161. DB4o, 154. ObjectStore, 159. Actian NoSQL Database
* The idea was to store data in the database the way that it’s modeled in the application
https://stackoverflow.com/questions/9884407/what-is-the-difference-between-object-oriented-and-document-databases#:~:text=The big difference%2C that I,but they’re organized differently.
* Relationships and inheritance would also be modeled in the database
* Would be more performant because the data would be stored in the way the application would expect without using complex joins
* Fallen out of popularity with the availability of ORM’s for RDBMS
https://www.ionos.com/digitalguide/hosting/technical-matters/object-oriented-databases/
* From InterSystems IRIS info
+ Based on the ODMG (Object Database Management Group) standard with advanced features like multiple inheritance
+ ObjectScript and Python directly manipulate and read from the storage – objects can also be exposed in other languages like .NET, JavaScript, Java and C++
+ Can also be queried with SQL syntax
Wide Column Stores* Popular: 12. Cassandra, 26. HBase, 27. Azure Cosmos DB
* Also known as extensible record stores
https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf
* Can hold extremely large numbers of dynamic columns
+ How much is a large number – “a record can have billions of columns” – which is why they’re also described as two-dimensional key/value stores
* Schema on read
* Wide column stores should not be confused with columnar storage in RDBMS – the latter is an implementation detail inside a relational database system that imroves OLAP type of performance by storing data column by column rather than record by record
* Using Cassandra as the information – https://cassandra.apache.org/_/cassandra-basics.html
+ Hyper-horizontally scalable
- Prevents data loss due to hardware failures (if scaled)
+ Ability to tweak throughput of reads or writes in isolation
https://www.codingblocks.net/podcast/search-driven-apps/
+ It’s “distributed” manner means it runs on many nodes but it looks like a single point of entry
+ No real point of running a single node of Cassandra
+ “Masterless” architecture – every node in a cluster acts like every other node
https://www.codingblocks.net/podcast/designing-data-intensive-applications-secondary-indexes-rebalancing-routing/
+ In contrast with traditional RDMBS – can be scaled on low-cost, commodity hardware – don’t need super-high-end motherboards that support terrabytes of ram to scale
+ Linear scalability – every node you add gives you + n throughput
https://www.datastax.com/products/datastax-astra
+ Replication is handled by tweaking replication factors – ie how many times you want the data replicated in order to stay in a good state
+ Per query configurable consistency – how many nodes must acknowledge the read/write query before returning a success
Vector DBMS* Popular: 52. Kdb, 103. Pinecone, 139. Chroma
* A database system that specializes in storing vector embeddings and being able to retrieve them quickly
+ What is a vector embedding?
- https://www.pinecone.io/learn/vector-embeddings-for-developers/
- What is a vector? A mathematical structure with a size and a direction
* Think of it as a point in space (on a graph) with the direction being the arrow from (0,0,0) to the vector point
* They say for developers, it’s easier to think of vectors as an array of numbers
* When you look at the vectors in space, some will be floating by themselves while others might be clustered closely to each other
- Vectors are very useful in Machine Learning algorithms because CPUs and GPUs are very good at doing math
- Vector Embeddings is the process of converting virtually any data structure into vectors
- It’s not as simple as just a straight conversion
* You don’t want to lose the original data’s “meaning”
+ An example they used was comparing two sentences – you wouldn’t just compare the words, you want to compare if the two sentences had the same meaning
+ To keep the meaning and produce vectors with relationships that make sense, that requires embedding models
* Nowadays, many embedding models are created by passing large sets of “labeled” data to neural networks
https://en.wikipedia.org/wiki/Neural_network
+ Neural networks are trained using supervised learning (usually), they can also be self-supervised or unsupervised learning
- Using a supervised model, you pass in large sets of data as pairs of inputs and labeled outputs
- The values are transformed in each layer of the neural network
- With each training of the neural network, the activations at each layer are modified
- The goal is that eventually the neural network will be able to provide an output for any given input, even if it hasn’t seen that specific input before
+ The embedding model is essentially those layers of the neural network minus the last one that was labeling data – rather than getting labeled data you get a vector embedding
* They have a great visualization on the pinecone page showing the output of a word2vec embedding model that shows how words would appear in this 3d vectror space
* This is what an embedding model does – it can take inputs and know where to place them in “vector space”
+ Items placed closer together are more related, and further apart, less related
* Ok, so now we know what vector embeddings are, what can we do with them?
+ Semantic search – rather than having search engines be able to search for words that are similar to what you entered, they can now search for content with meaning similar to what you searched for
+ Question answering applications
+ Audio search
* Check out the page of sample applications – https://docs.pinecone.io/page/examples
Resources* Primary resource we used for these database rankings
https://db-engines.com/en/ranking
* Some nice ways to learn about Machine Learning in an approachable way
https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html
Tips of the Week* docker init – let AI help you generate a better Dockerfile
https://medium.com/@akhilesh-mishra/you-should-stop-writing-dockerfiles-today-do-this-instead-3cd8a44cb8b0
* epoch converter has code samples!!!
https://www.epochconverter.com/
* Add a someone you trust as an Account Recovery account
https://support.apple.com/en-us/HT212513
https://support.apple.com/en-us/HT204921
* Lastpass’s Emergency Access
https://www.lastpass.com/features/emergency-access
You asked, we listened! A request from one of our Slack channels was to go over the various types of databases and why you might choose one over another. Join us in another information filled episode where Joe won’t be attending the event he’s been promoting and Allen tries to keep his voice together for the entirety of the episode, and almost succeeded.
NewsReviews* iTunes: ivan.kuchin, MikeW717 * Spotify: Darren Pruitt, chutney3000
Upcoming Events* Orlando Code Camp – Conference is February 24th
https://orlandocodecamp.com
Miscellaneous* Kudos to Dell Support on their monitors * The Cat 8 journey will be beginning soon * Home offices – random desires
Database TypesPrimary resource we used
Some terminology we’ll be using
Relational DBMS* Popular – 1. Oracle, 2. mySQL, 3. Microsoft SQL Server, 4. PostgreSQL, 8. IBM DB2, 9. Snowflake, 11. Microsoft Access * Schema on write * Primary language / form of access is SQL * Schema is defined by named tables with named columns and specific data types * Data exists as rows in the table that conform to the columns/types that are defined in the schema * Scalability – typically vertical scaling (increasing available CPU/RAM) is the preferred way + Horizontal scaling with most RDBMS’s is generally complex and requires a lot of thought and effort - https://www.designgurus.io/blog/scaling-sql-databases * Can be very performant but requires knowledge on how to index and store data properly + Even with excellent design and indexing, performance can suffer as size of data grows * Some fun Instragram posts on scaling their databases + https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c + https://earthweb.com/how-many-pictures-are-on-instagram/
Key-value stores* Popular: 6. Redis, 15. Amazon Dynamo DB, 27. Azure Cosmos DB, 35. Memcached, 54. etcd
* Schema on read
* No real language – usually an API to put and get documents
* Depending on the key value store, complex data structures may be stored and ability to query in various ways
* Scalability – horizontally scalable – massively
* Very performant
* Many have built in extended functionality beyond looking up by a single key – for instance, Redis allows search engine type of filtering
* Why’s Hadoop not on the list?
https://db-engines.com/en/blog_post/16
Document Stores* Popular: 5. MongoDB, 15. Amazon DynamoDB, 17. Databricks, 27. Azure Cosmos DB, 34. Couchbase * Schema on read * DBMS specific querying – usually offer a SQL capability but often times is not the most powerful way to query the data * Documents do not need to conform to any schema + Multiple documents in the same collection can have completely different fields/properties, OR they have have the same properties with different data types + Documents can contain collections in fields or even nest other documents + Typically stores data in JSON like documents * Can be very performant but may require care to create proper indexes, manage connections, etc
Time Series DBMS* Popular: 28. InfluxDB, 50. Prometheus, 52. Kdb, 79. Graphite, 73. TimescaleDB * Schema on read * Has special features specifically tailored to time series data that isn’t quite as easy / performant in a regular RDMBS or Key/Value store + Things like querying instants, range vectors, complex joins on ranges, etc - https://prometheus.io/docs/prometheus/latest/querying/basics/ + Also have built in functions specific to the needs of time series data – things like rates, deltas, histograms, quantiles, etc - https://prometheus.io/docs/prometheus/latest/querying/functions/ * Scalability seems to vary – InfluxDB is set up for scaling via clusters with meta and data nodes, whereas Prometheus has a different federated approach + Scaling Prometheus – https://logz.io/blog/prometheus-architecture-at-scale/ + Scaling InfluxDB – https://www.influxdata.com/blog/influxdb-clustering/ * Very performant for querying time series related data + Obviously there’s always things to consider – such as histograms vs quantiles in Prometheus – client vs server side - https://prometheus.io/docs/practices/histograms/
Graph DBMS* Popular: 22. Neo4j, 27. Azure Comsos DB, 59. Aerospike, 75. Virtuoso, 85. ArangoDB * Schema on write (mostly) – not sure if all graph databases force labels and attributes to be consistent + https://neo4j.com/docs/getting-started/data-modeling/guide-data-modeling/ * Different in terms of functionality than other databases – graph databases store data in terms of nodes and edges + Edges are the relationships between the nodes * Great explanation on the Neo4j website – https://neo4j.com/docs/getting-started/data-modeling/guide-data-modeling/ * Use cases – https://neo4j.com/use-cases/ + Fraud and detection analysis - Financial Fraud Detection with Graph Data Science - Money Laundering Prevention with Neo4j - Why Intelligent Applications Need a Graph Database with Granular Security - Fraud Detection with Neo4j + Identity and access management + Network and IT operations + Real time recommendations * So why a graph database? Can’t you do this with an RDBMS and joins? + The friend of a friend scenario – a graph database can easily and performantly return relationships with 20 degrees of separation or more – try that in a SQL query and watch your mind and database engine melt - https://neo4j.com/videos/why-neo4j-3/ * Neo4j has built in scalability via sharding – https://neo4j.com/product/neo4j-graph-database/scalability/
Search engine* Popular: 7. Elasticsearch, 14. Splunk, 24. Solr, 40. OpenSearch, 58. MarkLogic * Extensions of NoSQL databases * Schema on read * Complex search expressions * Full text search * Stemming – reducing words to their root forms so that searches can be more accurate with similar word searches * Ranking and grouping of search results * Built for scalability * Incredibly performant for the use case * Not great with relationship data * Why choose over something like a relational or document database?
Resources* https://db-engines.com/en/ranking * https://db-engines.com/en/articles * All the DB vendor websites – so much good information * Designing Data Intensive Applications
Tips of the Episode* Hot tip for a multi-user document oriented distributed database that’s free, open source and you probably know how to use it already …
+ Bonus points for supporting history
+ The downsides…
- It’s slow at writing, and reading, and querying, and the syntax isn’t easy to learn…but other than that it’s great!
https://gitrows.com/ https://github.com/DavidBruant/github-as-a-database
* kubectl cp
https://kubernetes.io/docs/reference/kubectl/generated/kubectl_cp/
* Hardware – Navepoint Rack chassis hinge
https://navepoint.com/cabinet-accessories/wall-mount-hinge-adapter/
* Bonus: ksync – a kubernetes tool for syncing files across clusters or local environments but it does require setting up an agent in the cluster
https://github.com/ksync/ksync
* 14u DIY Desk
https://www.reddit.com/r/homelab/comments/rouh7m/my_14u_diy_desk_integrated_server_rack_is_finally/
This episode we are talking about keeping the internet interesting and making cool things by looking at PagedOut and Itch.io. Also, Allen won’t ever mark you down, Outlaw won’t ever give you up, and Joe took a note to say something about Barbie here but he can’t remember what it was.
The full show notes are available on the website at https://www.codingblocks.net/episode226
Reviews* Thanks for the reviews! + ineverwritereviews1337, ivan.kuchin * Want to leave us a review? https://www.codingblocks.net/review .
News* Orlando Code Camp Conference is February 24th (orlandocodecamp.com) * Wireless mic kit mentioned by Outlaw regarding the Shure system (shure.com) * New video from Allen: JZ’s tip from last episode – Obsidian Tips for Staying Organized (youtube)
Is Cat 8 Overkill?* No way! * Check out AliExpress to save some money (aliexpress.com) * Note for NAS building / Plex – 11 gen and newer Intels are your friend for transcoding (intel.com)
Merge commits* Thanks for the tip mikerg! * Some orgs are banning merge commits on larger repositories * Should you? (graphite.dev) * Git Rebase Visualized (atlassian.com) * Merge Commit Visualized (atlassian.com)
Paged Out – E-Zine* Paged Out is a free e-zine of interesting and important articles (pagedout.institute) * Thanks for the tip mikerg! * Some samples + AIleister Cryptley, a GPT-fueled sock puppeteer - A fake online persona that will generate content for you using ChatGPT * Beyond The Illusion – Breaking RSA Encryption + Encryption is basically just math – it’s not some magical black box + “Never roll your own crypto – it’s a recipe for problems!” * Keyboard hacking with QMK * Hardware Serial Cheat Sheet * BSOD colour change trick * Cold boot attack on Raspberry Pi * Can we get some love for the demoscene? * Best part…each issue comes with a wallpaper!
Fun Project Ideas* Want to get into gamedev or 3d modeling, or just like making cool stuff with your skills? * Why not use itch.io as inspiration? * See other cool games and tools that people make: https://itch.io/tools * A couple noteworthy tools + Kenney shape (itch.io) - Turn 2d images into 3d by adding depth - Export to several different formats - $3.99 + Asset Forge (itch.io) - Assemble simple shapes into more complex ones - Stretch and rotate - $19.95 US ($39.95 deluxe) + Tiled Sprite Map Editor (itch.io) - Rich feature set, nice integration with Game Dev Tools + Bfxr is a popular tool (which was an elaboration of another tool Sfxr) for generating sound effects (itch.io) - Somebody made a js version too, if you can believe that! (jsfxr.me) - Beeps, boops, blorps, flames + Rexpaint (itch.io) - An ASCII Art Editor…you just have to see it - Layers, Copy/Paste, Undo/Redo, Palette swaps, Zoom - Who needs pixels!?
Resources We Like* Kenney’s Game Dev Resources (kenney.nl) * What is the demoscene? (YouTube)
Tip of the Week* If you subscribe to Audible, don’t forget that they have a lot of “free” content available, such as dramatic space operas and the “Great Courses”
For example. “How to Listen to and Understand Great Music” is similar to a “Music Appreciation Course” you might take at uni. The author works through history, talking about the evolution of music and culture. It’s 36 hours, and that’s just ONE of the music courses available to you for “free” (once you subscribe) (audible.com)
* Visualize Git is an excellent tool for seeing what really happens when you run git commands (git-school.github.io)
* It’s easy to work with checkboxes in Markdown and Obsidian, it’s just - [ ] Don’t forget the dash or spaces!
* Did you know there is a Visual Studio Code plugin for converting Markdown to Jira markup syntax? (Code)
* Apple, Google, and the major password manager vendors have ways to set up emergency contacts. It’s very important that you have this setup for yourself, and your loved ones. When you need it, you really need it. (google.com)
It’s that time of year…the time we (reluctantly) look back at what we said we were going to do this past year and see if we actually did it. Then, we repeat history and set some goals we’ll likely look back and wish we’d accomplished this time next year. In addition, we continue with the antics we’re known for, Joe gets a little aggressive in Mental Blocks, Outlaw has finally nailed nouns (or so we thought), and Allen tries not to look back at 2023’s plans.
The full show notes are available on the website at https://www.codingblocks.net/episode225
ReviewsAgain, thank you so much for the heartfelt and funny reviews! And if you reading this and have thought, “I really should leave them a review”, we’ll make it easy! Just click https://www.codingblocks.net/review for some helpful links.
Upcoming Events* Orlando Code Camp Conference is February 24th
https://orlandocodecamp.com
Random ThoughtsContemplating replacing consumer mesh network with one of the following
This first one I found while editing the notes for the podcast – looks super promising
Alta Labs AP6 Pro – https://amzn.to/3HurKYZ
TP-Link Omada equipment – https://amzn.to/41Rxk0S
Ubiquiti Unifi – https://amzn.to/48LvkJN
Why? Better control what devices can talk to other devices on the network (VLAN’s, separate SSID’s, etc) – security and performance focused
Looking Back and Looking Forward* Allen
+ What was actually accomplished in 2023
- Fully embraced DevOps as a culture
- Kubernetes all the things
- Duplicate data…intentionally
+ Looking forward in 2024
- Way deeper into data streaming (maybe doing a talk on it…maybe making videos about preparing)
- More usage of AI’s – images, coding, questions in general
- More automation, less manual intervention
- Hopefully more YouTubing
The microphones Allen bought that will force his creative hand
https://amzn.to/48zCrVw
An alternative wireless setup for guitars:
https://amzn.to/3NRTcTQ
- Maybe attending more events, like MVP Summit
Please leave us a review! https://www.codingblocks.net/review
Resources we Like* The “I Workout” song: LMFAO – Sexy and I Know It (Lyrics) YouTube https://www.codingblocks.net/podcast/2023-resolutions/
* Minikube with Multi-Node setup
https://minikube.sigs.k8s.io/docs/tutorials/multi_node/
Tip of the Week* Tony Anderson is a music producer that specializes in minimalist ambient piano music. It’s really lush and inspiring, check it out!
https://open.spotify.com/artist/3aRscMJRah0QrvGE5rkvZl
https://music.apple.com/us/artist/tony-anderson/19063662
Tony Anderson’s studio walkthrough that Joe mentioned as well
https://www.youtube.com/watch?v=n13IqwJlYgg
* Using Podman + Kind = Lower CPU overhead than Docker
Podman (Docker replacement) – https://podman.io
Kind (Run Kubernetes Nodes as Pods with Docker or Podman) – https://kind.sigs.k8s.io
Want to run Kubernetes as close to a cloud implementation as possible on your mac? https://opencredo.com/blogs/building-the-best-kubernetes-test-cluster-on-macos/
mirrord – https://mirrord.dev/
* Be careful. But it’s so cool.
git pull --rebase=interactive origin trunk
https://git-scm.com/docs/git-rebase
This episode we are talking about the future of tech with the Gartner Top Strategic Technology Trends 2024. Also, Allen is looking into the crystal ball, Joe is getting lo, and Outlaw is getting into curling.
The full show notes for this episode are available at https://www.codingblocks.net/episode224.
News* Thank you for the reviews! justsomedudewritingareview, Stephan + You can find links to leave us reviews on the website (/reviews) * Orlando Code Camp is coming up February 24th, woo! (orlandocodecamp.com) * Make sure you read up on your next MacBook pro, if you want to maximize the performance then you are going to need to pay for it! * Reminder: Don’t install packages from the internet in your CICD pipeline! * You can find links to leave us reviews on the website (/reviews)
Gartner Top Strategic Technology Trends 2024No surprise, AI is a big topic – it looks like Gartner is suggesting the technologies and processes companies must follow to be successful using and incorporating AI
In this overview, Gartner has grouped these technologies into three different sections
Protect Your Investment* Be deliberate * Ensure that you’ve secured appropriate rights for deploying AI driven solutions
AI Trism – AI Trust, Risk and Security Management* AI model governance + Trustworthiness + Fairness + Reliability + Robustness + Transparency + Data protection * Gartner Prediction – By 2026, companies that incorporate AI Trism controls will improve decision-making by reducing faulty and invalid information by 80%
Why is AI Trism Trending?* Largely, those who have AI Trism controls in place move more to production, achieve more value, and have higher precision in their modeling * Enhance bias control decisions * Model explainability
How to get started with AI Trism?* Set up a task force to manage the efforts * Work across the organization to share tools and best practices * Define acceptable use policies and set up a system to review and approve access to AI models
Continuous Threat Exposure Management – CTEM* Systemic approach to continuously adjust cybersecurity priorities
* Gartner prediction – By 2026, companies invested in CTEM will reduce security breaches by 2/3 (statista.com)
* Aligns exposure assessment with specific projects or critical threat vectors (fortinet.com)
* Both patchable and unpatchable exposures will be addressed
* Business can test the effectiveness of their security controls against the attacker’s view
+ “Expected outcomes from tactical and technical response
are shifted to evidence-based security optimizations supported
by improved cross-team mobilization.”
How to get started?* Integrate CTEM with risk awareness and management programs * Improve the prioritization of finding vulnerabilities through validation techniques * Embrace cybersecurity validation technologies (cybersecurityvalidation.com) + “security validation is a process or a technology that validates assumptions made about the actual security posture of a given environment, structure, or infrastructure” + Sustainable Technology Framework + Solutions for enabling social, environmental and governance outcomes for long term ecological balance and human rights + Gartner prediction – by 2027, 25% of CIO’s will have compensation that’s linked to their sustainable technology impact + Why trending? + Environmental technologies help deal with risks in the natural world + Social technologies help with human rights + Governance technologies strengthen business conduct + Sustainable technologies provide insights for improving overall performance + How to get started? + Select technologies that help drive sustainability + Have an ethics board involved when developing the roadmap (gartner.com) + Use the Gartner “Hype Cycle for Sustainability 2023” – helps identify well-established vs leading-edge technologies for enterprise sustainability (gartner.com)
Resources We Like* Gartner Top 10 Strategic Technology Trends for 2024 (gartner.com) * “Where Online Returns Really End Up And What Amazon Is Doing About It” (YouTube)
Tip of the Week* Lofi Girl is a YouTube channel that plays lo-fi hip-hop beats, with relaxing minimalistic animations. The people behind Lo-Fi Girl also released a new channel featuring a Synthwave (80’s influenced mid-tempo electro music) Boy. Same type of thing, but Synthwave music. (youtube.com) * If you are interested in streaming technologies and/or Apache Pinot then you should check out the Real-Time Analytics podcast by Tim Berglund (rta.buzzsprout.com) * Are you having runtime issues with your Docker container? Why not run it, and poke around? (curl.se)
It’s that time of year again when the three of us reflect on the things we’ve bought and loved, or the things we want to get…and want to love…So, come join us in this episode for our usual amount of fun while seeing if there’s anything that might make your shopping list! A small note – we forgot to get this episode out before Black Friday but we’re releasing a day early so you can at least make Cyber Monday! And who are we joking nowadays? Black Friday seems to run from Nov 1 to Nov 30. Remember, if you’re going to do some shopping, please do use our links as they help the show out – you’ll pay the same as if you went directly to the sites but we’ll make a few pennies for showing you the way! Happy Holidays and shopping to all!
The full show notes for this episode are available at https://www.codingblocks.net/episode223.
NewsThank you for the reviews!* iTunes: TUXCoon * Spotify: Frederik Laursen, Volkmar Rigo, OrbWizard
Upcoming EventsOrlando Code Camp call for speakers still open! Event is February 24th, 2024. https://orlandocodecamp.com/
Time to ShopFor anyone new to our shopping lists. There are some things that are absolutely every-day developer focused, but then we throw in things that bring us joy regardless of the relationship to life as a developer. Hopefully you enjoy what we’ve shared this year and as always, if you use the links below it’s greatly appreciated as it helps the show out with no cost to you!
Joe’s List
| Price | Description | | Biohacking…kinda | | $97.46 | Withings BPM | | | $53.00 | (Alternate) OMRON Silver Blood Pressure Monitor | | | Unavailable | (Alternate) Greater Goods Bluetooth Connected Bathroom Smart Scale | | | $199.95 | Withings Smart Scale | | | $79.95 | Withings Smart Contactless Thermometer | | | $117.99 | Withings Sleep Tracking pad | | | $99.95 | Fitbit Watch Charge 6 | | | $269.00 | Oura Ring | | | Tests | | $129.35 | Everlywell Food Sensitivity Test | | | $198 | Gut Health Test w/ Microbiome Wipe | | | $129 | 23 and Me Health and Ancestry Service | | | Subscriptions | | $230 / month | Soylent (yes, really) | | | $135 / month | Signos (continuous glucose monitoring for non-diabetics) | |
Allen’s List00
| Price | Description | | Quality of Life | | $449 | Kinesis Advantage360 | | | $75 + $75 | ACM Membership + Skills Bundle Add On | | | $30 / month | Linked In Premium | | | $120 to $180 | Logitech Combo Touch Keyboard / Case (iPad 11 Pro Linked – make sure you pick the right one for your device) | | | $13.98 / year | Vanity Domain Name w/ Namecheap | | | free! | Discord servers on investing | | | $60 to $120 | Capital Audio Fest | | | $400 | Elac Debut Connex | | | $23 | Apple Air Pod Pro 2 Comply Foam Tips | | | $119 | Wiim Pro | | | $175 | Wiim Pro Plus | | | $549 to 649 | Steam Deck OLED | | | $300 | Logitech GCloud Portable Gaming | | | $750 | Lenovo Legion Go Z1 Extreme | |
Michael’s List
| Price | Description | | For the home… | | $119.95 | Moen Flo Smart Water Leak Detector, Water Sensor Alarm for Home, 3-Pack | | | $22.28 | Moen Flo Smart Detector 6-Foot Sensing, Leak-Sensor Cable Only, White | | | $299.31 | Schlage Encode Plus WiFi Deadbolt Smart Lock | | | For the computer… | | $240.99 | SAMSUNG 990 PRO SSD 4TB PCIe 4.0 M.2 2280 Internal Solid State Hard Drive | | | $160.99 | Corsair SF Series, SF750, 750 Watt, SFX, 80+ Platinum Certified, Fully Modular Power Supply | | | $99.90 | CORSAIR Premium Individually Sleeved PSU Cables Pro Kit for Corsair PSUs | | | $59.99 | Lian Li Strimer Plus V2 24 Pin | | | For the bling… | | $15.99 | upHere 5V 3PIN Addressable RGB Graphics Card GPU Brace Support Video Card Sag Holder | | | $29.69 | Cooler Master MasterAccessory ARGB GPU Support Bracket | | | $17.99 | ARGB GPU Support Bracket | | | For your health… | | $79.99 | LifePro Hand Massager | | | $89.99 | VIVO Universal Treadmill Desk Riser, Height Adjustable Platform | | | $26.79 | BalanceFrom All Purpose 1/2-Inch Extra Thick High Density Anti-Tear Exercise Yoga Mat | | | $30.00 | The Tightwad Money Clip – Minimalist Slim Wallet | | | For your ears… | | $13.99 | Devinal Guitar to USB C Record Cable, Gold Plated 6.6 Feet | | | For use with… | | $9.99 | iStroboSoft | | | $49.99 to $99.99 | StroboSoft 2.0 | | | $113.60 | JIM DUNLOP Cry Baby Junior Wah Special Edition White | | | $12.95 | HexHider Magnetic 3mm Allen Wrench | | | $126.42 | Temple Audio DUO 24 Templeboard | | | $34.99 | Schaller Security Ruthenium Guitar Strap Locks | | | For the ride… | | $9.99 | Muc-Off No Puncture Hassle Tubeless Sealant | | | $12.99 | Vansky UV Flashlight Black Light | | | $39.95 | Wolf Front Axle for RockShox Suspension Forks and Fat Forks | | | $29.95 | Axle Handle Multi-tool | |
Tips of the Week Ever thought about getting into synthesizers? Synthesizers are a really cool way of making sounds and music that you can do right from your computer, with no accessories needed, right now!
Vital is a spectral warping semi-modular wavetable synth. The functionality is almost* 100% free (aside from text-to-wavetable) or you can pay up to a max of $80 to unlock discord access, support, unlimited text-to-wavetable, and surprisingly important…Presets!
Why are presets so important? Because working with synths is not easy, it’s really technical and there are a lot of ways to sound really, really bad.
Guess what else is cool, you can do a no-upcharge “rent to own” subscription for $5 a month where you can use the money you put in to buy preset packs..or eventually just save up the $80 to buy the pro version. Cool, right?
One last perk, Vital will totally run as VST/VST3 plugin like most other digital synthesizers..but it also has a standalone version which makes it really easy to get started without learning a whole bunch of other stuff before you get to what you want.
https://vital.audio/#getvital
* Send yourself a reminder in slack…
https://slack.com/help/articles/208423427-Set-a-reminder
* SOMETIMES debugging is just too much
What do we mean? Well, there was a situation where there was a debug.log() statement that had if statements wrapped around it – if logging level is debug, then debug.log(). That had Outlaw scratching his head – like this is totally unnecessary!!! There happened to be a good reason for it – the logging statement was doing some heavy string interpolation which means that statement was going to run all the necessary string formatting, then it was going to call the log method, and then once inside that log method it would all get thrown away, which points to potentially expensive operations that are being done for nothing. There may be times when relying on your log output level may not be enough to save you from some expensive tasks even though you might think otherwise.

Ever looked at a Gartner report? We talk about the Technology Adoption Roadmap for Midsize Enterprises 2022, and the cloud services you’re married to in this episode. Also, Joe’s drumming up business ideas, Allen’s laying down the law and Outlaw never forgets. See the full show notes a https://www.codingblocks.net/episode222 News Technology Adoption Roadmap for Midsize […]

Join us as we get back into the world of Open Telemetry. Piggy-backing on previous conversations from the Google SRE series as well as DevOps, metrics and instrumentation is a key component of understanding what’s happening with your systems. Follow along as Michael, Allen and Joe dive into Open Telemetry’s Metric offerings. Reviews Huge thanks […]

We’ve got a smorgasbord of delights for you this week, ranging from mechanical switches to the cloud and beyond. Also, Michael’s cosplaying as Megaman, Joe learns the difference between Clicks and Clacks, and Allen takes no prisoners. See the full show notes a https://www.codingblocks.net/episode220 News The Show Resources We Like Tip of the Week

We’ve mentioned in the past that the code we write isn’t maintaining heartbeats or being used in life-critical settings, but what if your code is? NASA happens to be a company who has code that is life and mission critical and it’s very possible it won’t even be accessible once it leaves earth. In this […]

In this episode, we are talking all about GitHub Actions. What are they, and why should you consider learning more about them? Also, Allen terminates the terminators, Outlaw remembers the good ol’ days, and Joe tries his hand at sales. See the full show notes at https://www.codingblocks.net/episode218 News What are GitHub Actions? Workflows Jobs Steps Actions […]
Get a behind the scenes intro to some of the interesting conversations we have before we even get into the content. We’ll be jumping into the meat of this episode and looking at the specifics of tracing using OpenTelemetry. Before we do that though, we should probably find out what special 2-liter containers Outlaw uses […]
See the full show notes and join in the discussion by heading to
https://www.codingblocks.net/episode217
In this episode, we’re talking all about OpenTelemetry. Also, Allen lays down some knowledge, Joe plays director and Outlaw stumps the chumps. See the full show notes at https://www.codingblocks.net/episode216 News What is OpenTelemetry? It’s all about Observability Reliability and Metrics Distributed Tracing To truly understand what distributed tracing is, there’s a few parts we have to […]
In this episode, Allen, Michael and Joe discuss the latest update with the Reddit saga, software for designing audio and reproducing analog sounds, an open-ended interview question and tips on how to be a great leader. Reviews Huge thank you for that! News Episode If you were going to create a web service / api […]
In this episode, we're talking about the history of "man" pages, console apps, team leadership, and Artificial Intelligence liability. Also, Allen's downloading the internet, Outlaw has fallen in love with the sound of a morrvair, and Joe says TUI like two hundred times as if it were a real word.
See all the show notes at https://www.codingblocks.net/episode214
News * Thanks for the reviews! + itunes: michael_mancuso * DevFest Florida is a community-run one-day conference aimed to bring technologists, developers, students, tech companies, and speakers together in one location to learn, discuss and experiment with technology. (devfestfl.org)
What are (were?) man pages? * "man" is a command-line "pager" similar to "more" or "less" that was designed specifically to display documentation - ahem, "manuals" * "man" pages would show you documentation for many apps in a (mostly) consistent manner that was available offline * Do people still use them? * People would print these out in the 70's and beyond! * How do you create a man page? (allthings.how) * Uses an old markup language named "roff" * Install to the proper location, typically /usr/man/man: (tldp.org)
Software Engineering at Google: Lessons Learned from Programming Over Time (amazon) How to Lead a Team (Anti-Patterns edition) Software Engineering at Google: Lessons Learned from Programming Over Time (amazon)
Terminal UIs * A new frontier in programming? * The Good: + Keep your hands on the keyboard! + Easily install on remote servers + Often built by devs for devs + Low overhead + Purpose-built for their purposes (as opposed to IDE extensions) + Looks ancient * The Bad: + Looks ancient + Scriptability + Each has it's own learning curve
Examples: * K9s (github) * Lazygit (github) * Lazydocker (github) * Spotify TUI:(github)
Meta AI * Meta has been making serious strides in AI with LLAMA and...it's open source! Does that make them any more or less liable for the information? Does "publically available information" change things
Resources we like * Software Engineering at Google: Lessons Learned from Programming Over Time (amazon) * List of awesome TUIs (github.com) * AI at Meta (ai.meta.com) * Download the AI Model (ai.meta.com)
Tip of the Week * Want to learn something new while also making your life easier? Why not try writing a TUI!? Here's an article that will kindly introduce you to terminal user interfaces, libraries like "Clap", "TUI", and "Crossterm" that people are using to write them, and…you can get some XP with Rust while you're at it! (blog.logrocket.com) * Are you looking to upgrade your Kubernetes cluster? Check for API problems first! * Are you a browser tab fiend? Did you know you can reload all your tabs simultaneously with a simple shortcut? (groups.google.com) * No more nasty wiring jobs, get yourself to the hardware store website and pick up some wire and splicing connectors. Keep things nice, tidy, and organized. (wago.com) + Similar but not as good (no lever) (homedepot.com) * Matt’s Off-road recovery channel is amazing if you're into cars or... beautiful-sounding things. * Are you tired of manually correlating logs and events? No more! Check out the Open Telemetry project for your distributed tracing and analytics needs! (opentelemetry.io)
Last episode, it might have been said that you can become a senior engineer in just one short year. Our amazing slack community spoke up and had some thoughts on that as well…we revisit that, and what does senior even mean?! Join us for that and much more as Allen plays more with ChatGPT, Michael […]
In this episode, we’re talking about lessons learned and the lessons we still need to learn. Also, Michael shares some anti-monetization strategies, Allen wins by default, and Joe keeps it real 59/60 days a year! The full show notes for this episode are available at https://www.codingblocks.net/episode212. News Exceptions vs Errors in Java Question from Twitter: (thanks […]
In this episode, we're talking about lessons learned and the lessons we still need to learn. Also, Michael shares some anti-monetization strategies, Allen wins by default, and Joe keeps it real 59/60 days a year!
The full show notes for this episode are available at https://www.codingblocks.net/episode212.
News * Thanks for the review rioredwards! * Want to help us out? Leave a review! (/reviews)
Exceptions vs Errors in Java * Exceptions: Unwanted or unexpected events + NullPointerException + IntegerOverflowException + IllegalArgumentException * Errors: Serious problems that you should try not to catch - generally no recovery + OutOfMemoryError + StackOverflowError + NoClassDefFoundError * What happens if your code runs in a background thread? + Thread gets terminated, but the application keeps running + Resources are released, dependent threads are terminated + It's up to the owner of the thread to handle the situation + The best practice is to attempt to handle these situations by validating at startup
Question from Twitter: (thanks jvilaverde!) How do you guys keep up with your data sources?
StackOverflow Survey (thanks mikerg!) * 70% of all respondents are using or are planning to use AI tools in their development process this year * 82% of people learning to code plan to use AI * 30% don't plan on it * 40% of devs trust the accuracy of AI * Highest paid languages? Zig, Erlang, RB, Scala, Lisp, F# * Lowest paid? Dart, MATLAB, PHP, Visual Basic, Delphi * Warning: remember the audience! * Web Frameworks: React 40% Angular 17%, Vue 16% * Other frameworks: .NET, NumPy, Pandas * What does this tell you about the demographics? * Docker 51%, Kubernetes 20%
Resources We Like * StackOverflow 2023 Survey Results (survey.stackoverflow.com) * We <3 Kubernetes (episode 147) * Is Kubernetes Programming? (episode 141) * Chik-Fil-A A Kubernetes Success Story (appvia.io) * How to write amazing unit tests (episode 54) * Zig Language (ziglang.org) * Unit Testing Principles, Practices, and Patterns: Effective testing styles, patterns, and reliable automation for unit testing, mocking, and integration testing with examples in C# (Amazon)
We’re back after a brief break for a busy month of May, and we’re here to talk about some pretty cool stuff happening in the developer world. Outlaw took vacation […]
In this sequence of sound, we compute Joe’s unexpected pleasure in commercial-viewing algorithms, Michael’s intricate process of slicing up the pizza, and Allen’s persistent request for more cheese data augmentation. Will you engage in this data streaming session?
The full show notes for this episode are available at https://www.codingblocks.net/episode210.
Resources we like* Stack Overflow is ChatGPT Casualty: Traffic Down 14% in March similarweb.com * Github Copilot Chat Leak Prompt: (news.ycombinator.com) * We’ve been talking about Co-Pilot for 2 years now? (episode 163) * Github vs Gitlab Rankings + Github Trending Repositories (github.com) + Gitlab Trending Repositories (gitlab.com) + Gitlab Number of Stars (gitlab.com) + Github ranking: gitstar-ranking.com * The 3 laws of Robotics (or is it 4!?) (wikipedia.org) * ML in Postgres with PostgresML (postgresml.org) * Must See Videos + Family Auto-Mart: I’ll see you there! (youtube) + AI-Generated Commercial: Pepperoni Hug Spot – Like family, but with more cheese (youtube) * How many services per team? (microservices.io) * AWS’s take on services per team (docs.aws.com) * SQL Server Machine Learning Service (learn.microsoft.com)
Tip of the week* MusicLM lets you create music from descriptive text, similar to Dalle-2. The output is a little strange, but could still potentially be really useful and inspiring with a little bit of effort. It’s in private beta now, as part of the “AI Test Kitchen” but you can sign up to join the waitlist today.
+ Sign up for the waitlist: (aitestkitchen.withgoogle.com)
+ Samples (google-research.github.io)
* You can easily compare query results In DataGrip, using the “Compare Data” button (it’s the button with two blue arrows) (jetbrains.com)
* IntelliJ now supports the entire IDE Zoom, great for…well…Zoom! View --> Appearance --> Zoom IDE (blog.jetbrains.com)
* Visual Studio Code Bookmarks (marketplace.visualstudio.com)
* Warped Kart Racers is a fun mobile game, kinda like Mario Kart but featuring characters from 20th Century Studios (apps.apple.com)
In this episode we talk about several things that have been on our mind. We find that Joe has been taken over by AI’s, Michael now understands our love of Kotlin, and Allen wants to know how to escape supporting code you wrote forever.
NewsVisited with Jamie Taylor from the .NET Core Podcast, Tabs N Spaces and Waffling Taylors
TopicsShould you own the work you created forever?
Wiki vs Readme
Should you take on the work that nobody else wants and “take one for the team”?
Test coverage
What’s a technology that’s reignited excitement in you?
javadoc != documentation
Resources we LikeKotlin documenation is excellent
Microsoft still doing excellent documentation as well
Tips of the WeekWarp AI is a (currently free) terminal for macOs that integrates an AI. It has several nice features such as those listed below, but one killer feature is that it has support for either a local or a cloud-based AI which helps navigate sticky legal, security, or company policies.
Thanks for the tip Dave Follett!
Recently mikerg suggested a really cool book in our #gamedev channel on the https://codingblocks.slack.com It has chapters on things like vectors, fractals, celluar automata and other cool type topics for game or other graphical programming. It’s available free online or you can order a physical print-on-demand copy. https://natureofcode.com/book/chapter-1-vectors/
Gson().toJson(mapOf( “key” to “value” )) https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/map-of.html
IntelliJ – Kotlin Bytecode
In this episode we talk about several things that have been on our mind. We find that Joe has been taken over by AI's, Michael now understands our love of Kotlin, and Allen wants to know how to escape supporting code you wrote forever.
For the full episode show notes, visit: https://www.codingblocks.net/episode209
We’re doing a water cooler talk today. Also, Allen can tell you how not to leak secrets, Michael knows how to work a spreadsheet, and Joe has been replaced by an AGI.
The full show notes for this episode are available at https://www.codingblocks.net/episode208.
Topics* Want to score Vue.js London tickets? Tweet using both @CodingBlocks and #vuejs for a chance to win! (vue.js) * How do you decide which projects are worth trying to convert into a money-making endeavor? * Samsung ChatGPT sensitive information leaks (mashable.com) * U.S Military Documents Leaked To Minecraft Discord Server (kotaku.com) * Real-Time Analytics Podcast with Tim Berglund (podcasts.apple.com) * CodeWhisperer from Amazon (aws.amazon.com) * How much did GPT 3 cost? (pcguide.com) * How much did GPT 4 cost? (medium.com) * How much did Alpaca cost to train? (newatlas.com) * Have any experience with Twilio? It’s work! (twilio.com)
Resources we like* docker init is a tool (in beta) built into the latest Docker Desktop that you can use to get a leg up on your next project. It makes it easy to create docker files with best practices, as well as a docker-compose file to get you up and running. (docker.com)
* screen is an open-source powerful terminal multiplexer that allows users to create, manage, and switch between multiple terminal sessions, enabling seamless multitasking and persistent remote connections in a single window.
+ How to use gnu screen (linuxize.com)
+ tmux is a similar utility that some people prefer (github.com)
+ tmux vs screen (stackoverflow.com)
* The VIVO Universal Treadmill Desk Riser is an adjustable, ergonomic workspace solution designed to fit most treadmills, allowing users to seamlessly combine their work and exercise routines for a healthy, productive lifestyle. (amazon.com)
* The LifeSpan Fitness Under Desk Walking Treadmill is a compact, low-profile treadmill designed to fit under standing desks, enabling remote workers to maintain an active lifestyle by seamlessly integrating walking or light jogging into their daily work routine, promoting better health and increased productivity. (amazon.com)
* Kubernetes Network Policies are a set of rules that define how pods within a cluster can communicate with each other and with external resources, allowing administrators to enforce fine-grained access control and enhance the security of their containerized applications. (kubernetes.io)
We’ve got a new / old opening…Allen goes off / on script? Michael denies Joe the “swing” vote, and Joe is all in on AI assistance
Testing for concurrency issues is hard because it’s non-deterministic – basically you get unlucky due to the timing of things
Serializability* The problems we’ve been discussing the past few episodes have been around since the 1970’s * The answer is always – just use serializable isolation! * Serializable isolation is the strongest isolation + The database prevents ALL race conditions - Even if transactions run in parallel, they’re guaranteed to act/result the same as if they had run one at a time, one after another * If they’re so much better, why have/use weaker isolation levels?
Common Implementations* Executing the transactions serially, actually * Two phase locking – was one of the only real available solutions for several decades * Optimistic concurrency control – things like serializable snapshot isolation * We’ll be talking about these in terms of a single node database
Actual Serial Execution* The easiest way to get rid of race conditions is to really just run things one after another – no concurrency * This was only implemented for the first time around 2007 – prior the performance was too poor + This is truly a loop over transactions submitted to the db engine * What changed to make it possible? + RAM became cheap enough to store entire active datasets in memory – when this is done transactions can execute much faster as you don’t have to wait to load the data from disk + DB designers concluded that most OLTP transactions are usually short-lived and make a small number of reads and writes – so they can be run on a consistent snapshot using snapshot isolation outside of the serial execution loop * Used by VoltDB/HStore, Redis, and Datomic + Sometimes single-threaded systems can perform better than concurrent ones simply because there’s no locking - However, you’re bound by a single CPU core - Transactions will need to be set up differently than in typical concurrent systems
Encapsulating transactions in stored procedures* They talked about how the early implementations in db’s had the intention of making the entire flow part of the transaction – to book a flight, a person would be shown a list of flights, they’d choose the one they want, and it’d be stored + The problem with that approach is it can take a long time for that flow to be completed + For that reason, web-applications limit transactions to a single web / http request * There can still be situations where the transaction can occur with multiple interactions between the application and the database + From the application, query to see if the seat is still available on the flight…Ok, it is..now send another query to the db to update the seat to the customer…now query the db again to get any additional information - Doing it this way in a serial transaction db would be too slow because there’s too much network latency / waiting * In a single-threaded serial transaction, everything must be done all at once in a stored procedure + Keeping everything in memory and providing the stored proc everything it needs ensures the transaction is fast without waiting for any network or disk IO - Great picture in the book in Figure 7-9 that describes this
Pros and Cons of Stored Procedures* They’ve been part of the SQL standard since….1999 + Sometimes get a bad rep - Each vendor’s implementation has their own language - The book mentions that the SQL language hasn’t kept up with other programming languages and look/are archaic in comparison - It’s hard to manage code stored on the database server * Harder to debug * More difficult to keep in source control * More difficult to test * More difficult to gather metrics for monitoring - Because db’s are typically shared by many applications or a LOT of application code, non-performant stored procedure code can cause massive problems – usually worse problems than poorly written application code * These issues have and can be remedied + Modern serializable databases use regular programming languages - VoltDB – Java/Groovy - Datomic – Java/Clojure - Redis – Lua * When the database is in memory and the transactions are single threaded, stored procedures can actually be quite good + Because there’s no IO / networking overhead, transactions can occur quickly on a single thread * VoltDB also executes stored procedures for replication! + This means the stored procedures have to be deterministic – datetimes have to use deterministic apis
Partitioning* As mentioned before, doing serial transactions means you are limited to a single core of a single CPU + Read only transactions could occur on a separate thread using snapshot isolation + If you need high write throughput, the single thread on a single core could be a problematic bottleneck * This is where partitioning comes into play – if you can divvy your data up in a way that would allow transactions to stay within a single partition, then you’ll have the ability to linearly scale your CPU cores/threads to the number of partitions you have + If your transaction has to go across multiple partitions, then the stored procedure must ensure that each partition is handled appropriately to keep everything serialized properly + VoltDB can handle multiple partitions - Doing cross-partition writes is much slower than single partition writes – VoltDB reports 1k cross-partition writes per second * Determining if transactions can occur on a single partition takes a bit of planning + key-value data is likely a single partition transaction + data with multiple secondary indexes will likely require cross-partition transactions
Resources We Like* Designing Data Intensive Applicationshttps://www.codingblocks.net/get/designing-data-intensive-applications
Tips of the Episode* Copilot Labs is an optional extension for Github Copilot that adds some nifty new features to VSCode with Copilot. It installs as a new sidebar icon and has 4 major features:
+ Code explanation – What does this block of code do? Does the code I wrote do what I think it does?
+ Code translation – Not familiar with a language you’re reading? Convert it to one that you do!
+ IDE brushes – Modify existing code using a variety of brushes like you would in an art program – Add Types, Fix bugs, improve readability, resilience, add documentation and it looks like there’s a way to add custom branches!
+ Test generation – JS and TS only right nowhttps://githubnext.com/projects/copilot-labs/
* from AndrewEver wanted a Windows-like ALT+TAB experience on your Mac? Introducing AltTab for Mac
https://alt-tab-macos.netlify.app/
* A reason to use the terminal in Visual Studio Code
+ Any operations like a git status that show a list of files are easy to ctrl / cmd click to open directly in the editor
* Bitwarden as a LastPass replacement – Less than 1/3 the pricehttps://bitwarden.com/pricing/https://www.lastpass.com/pricing
What are lost updates, and what can we do about them? Maybe we don’t do anything and accept the write skew? Also, Allen has sharp ears, Outlaw’s gort blah spotterfiles, and Joe is just thinking about breakfast.
The full show notes for this episode are available at https://www.codingblocks.net/episode206.
News* Thank you for the amazing reviews! + iTunes: JomilyAnv * Want to help us out? Leave us a review.
Great book!Preventing Lost Updates* Last episode we talked about weak isolation, committed reads, and snapshot isolation * There is one major problem we didn’t discuss called “The Lost Update Problem” * Consider a read-modify-write transaction, now imagine two of them happening at the same time * Even with snapshot isolation, it’s possible that read can happen for transaction A before B, but the write for A happens first + Incrementing/Decrementing values (counters, bank accounts) + Updating complex values (JSON for example) + CMS updates that send the full page as an update * Solutions: + Atomic Writes – Some databases support atomic updates that effectively combine the read and write - Cursor Stability – locking the read object until the update is performed - Single Threading – Force all atomic operations to happen serially through a single thread + Explicit Locking - The application can be responsible for explicitly locking objects, placing responsibility in the devs hands - This makes sense in certain situations – imagine a multiplayer game where multiple players can move a shared object. It’s not enough to lock the data and then apply both updates in order since the shared game world can react. (ie: showing that the item is in use)
Detecting Lost Updates* Locks can be tricky, what if we reused the snapshot mechanism we discussed before? * We’re already keeping a record of the last transactionId to modify our data, and we know our current transactionId. What if we just failed any updates where our current transaction id was less than the transactionId of the last write to our data? * This allows for naive application code, but also gives you fewer options…retry or give up * Note: MySQL’s InnoDB’s Repeatable Read feature does not support this, so some argue it doesn’t qualify as snapshot isolation
What if you didn’t have transactions?* If you didn’t have transactions, let alone a snapshot number, you could get similar behavior by doing a compare-and-set * Example: update account set balance = 10 where balance = 9 and id = ABC * This works best in simple databases that support atomic updates, but not great with snapshot isolation * Note: it’s up to the application code to check that updates were successful – Updating 0 records is not an error
Conflict resolution and replication* We haven’t talked much about replicas lately, how do we handle lost updates when we have multiple copies of data on multiple nodes? * Compare-and-Set strategies and locking strategies assume a single up-to-date copy of the data….uh oh * The options are limited here, so the strategy is to accept the writes and have an application process to decide what to do + Merge: Some operations, like incrementing a counter, can be safely merged. Riak has special datatypes for these + Last Write Wins: This is a common solution. It’s simple but inaccurate. Also the most common solution.
Write Skew and Phantoms* Write skew – when a race condition occurs that allows writes to different records to take place at the same time that violates a state constraint + The example given in the book is the on-call doctor rotation + If one record had been modified after another record’s transaction had been completed, the race condition would not have taken place + write-skew is a generalization of the lost update problem * Preventing write-skew + Atomic single-object locks won’t work because there’s more than one object being updated + Snapshot isolation also doesn’t work in many implementations – SQL Server, PostgreSQL, Oracle, and MySQL won’t prevent write skew - Requires true serializable isolation + Most databases don’t allow you to create constraints on multiple objects but you may be able to work around this using triggers or materialized views as your constraint + They mention if you can’t use serializable isolation, your next best option may be to lock the rows for an update in a transaction meaning nothing else can access them while the transaction is open * Phantoms causing write skew + Pattern - The query for some business requirement – ie there’s more than one doctor on call - The application decides what to do with the results from the query - If the application decides to go forward with the change, then an INSERT, UPDATE, or DELETE operation will occur that would change the outcome of the previous step’s Application decision * They mention the steps could occur in different orders, for instance, you could do the write operation first and then check to make sure it didn’t violate the business constraint - In the case of checking for records that meet some condition, you could do a SELECT FOR UPDATE and lock those rows - In the case that you’re querying for a condition by checking on records to exist, if they don’t exist there’s nothing to lock, so the SELECT FOR UPDATE won’t work and you get a phantom write – a write in one transaction changes the search result of a query in another transaction * Snapshot isolation avoids phantoms in read-only queries, but can’t stop them in read-write transactions
Materializing conflicts* The problem we mentioned with phantom is there’d no record/object to lock because it doesn’t exist * What if you were to have a set of records that could be used for locking to alleviate the phantom writes? + Create records for every possible combination of conflicting events and only use those to lock when doing a write - “materializing conflicts” because you’re taking the phantom writes and turning them into lock records that will prevent those conflicts * This can be difficult and prone to errors trying to create all the combinations of locks AND this is a nasty leakage of your storage into your application + Should be a last resort
Resources We Like* The 12 Factor App and Google Cloud (cloud.google.com)
Tip of the Week* Docker’s Buildkit is their backend builder that replaces the “legacy” builder by adding new non-backward compatible functionality. The way you enable buildkit is a little awkward, either passing flags or setting variables as well as enabling the features per Dockerfile, but it’s worth it! One of the cool features is the “mount” flag that you can pass as part of a RUN statement to bring in files that are not persisted past that layer. This is great for efficiency and security. The “cache” type is great for utilizing Docker’s cache to save time in future builds. The “bind” type is nice for mounting files you only need temporarily. like source code in for a compiled language. The “secret” is great for temporarily bringing in environment variables without persisting them. Type “ssh” is similar to “secret”, but for sharing ssh keys. Finally “tmpfs” is similar to swap memory, using an in-memory file system that’s nice for temporarily storing data in primary memory as a file that doesn’t need to be persisted. (github.com)
* Did you know Google has a Google Cloud Architecture diagramming tool? It’s free and easy to use so give it a shot! (cloud.google.com)
* ChatGTP has an app for slack. It’s designed to deliver instant conversation summaries, research tools, and writing assistance. Is this the end of scrolling through hundreds of messages to catch up on whatever is happening? /chatgpt summarize (salesforce.com)
* Have you heard about ephemeral containers? It’s a convenient way to spin up temporary containers that let you inspect files in a pod and do other debugging activities. Great for, well, debugging! (kubernetes.io)
There’s this thing called ChatGPT you may have heard of. Is it the end for all software developers? Have we reached the epitome of mankind? Also, should you write your own or find a FOSS solution? That and much more as Allen gets redemption, Joe has a beautiful monologue, and Outlaw debates a monitor that is a thumb size larger than his current setup.
Read moreIf you’re in a podcast player and would prefer to read it on the web, follow this link:
https://www.codingblocks.net/episode205
News* Thank you for the amazing reviews! + iTunes: MalTheWarlock, Abdullah Nafees, BarnabusNutslap * Orlando Code Camp coming up Saturday March 25th + https://orlandocodecamp.com/
ChatGPT* Is this the beginning or the end of software development as we know it? * Are you using it for work? Does your work have an AI policy? * OpenAI has recently announced a whopping 90% price reduction on their ChatGPT and Whisper APi calls + $.002 per 1000 ChatGPT tokens + $.006 per minute to Whisper * You also get $5 in free credit in your first 3 months, so give it a shot! * https://openai.com/pricing
Roll Your Own vs FOSS* This probably isn’t the first time and it won’t be the last we ask the question – should you write your own version of something if there’s a good Free Open Source Software alternative out there?
Typed vs Untyped Languages Another topic that we’ve touched on over the years – which is better* and why? * Any considerations when working with teams of developers? * What are the pros and cons of each?
Cloud Pricing* If you’re spending a good amount of money in the cloud, you should probably talk to a sales rep for your given cloud and try to negotiate rates. You may be surprised how much you can save. And…you never know until you ask!
Outlaw has the Itch to get a new Monitor* Is it worth upgrading from a 34″ ultrawide to a 38″ ultrawide?
* What’s a good size for a 4k monitor?
+ Should you even get a 4k monitor?
* Should you go curved?
* Some references mentioned during the show
+ NVidia monitor search page:
https://www.nvidia.com/en-us/geforce/products/g-sync-monitors/specs/
+ LG 38″ ultrawide:
https://amzn.to/3SLeqUO
+ Rtings recommended gaming monitors:
https://www.rtings.com/monitor/reviews/best/by-usage/gaming
+ Games Radar best G-Sync monitors:
https://www.gamesradar.com/best-g-sync-monitors/
+ Acer Predator 38″ ultrawide:
https://amzn.to/3ZBDb80
+ Samsung Odyssey Neo G9 49″ Ultrawide:
https://amzn.to/3ZGMTpx
+ LG 49WQ95C-W 49″ Ultrawide:
https://amzn.to/3mk0TY5
Resources from this episode* How to jailbreak ChatGPT – List of Prompts: https://www.mlyearning.org/how-to-jailbreak-chatgpt/ * Magazine stops accepting submissions due to bots: https://nypost.com/2023/02/22/sci-fi-magazine-not-accepting-submissions-due-to-bots/ * Stack Overflow bans ChatGPT answers: https://www.theverge.com/2022/12/5/23493932/chatgpt-ai-generated-answers-temporarily-banned-stack-overflow-llms-dangers * ChatGPT detection tool already out: https://www.ctvnews.ca/sci-tech/cheaters-beware-chatgpt-maker-releases-ai-detection-tool-1.6253847
Tips of the Week* Did you know that the handy, dandy application jq is great for formatting json AND it’s also Turing complete? You can do full on programming inside jq to make changes – conditionals, variables, math, filtering, mapping…it’s Turing Complete!
https://stedolan.github.io/jq/
* Want to freshen up your space, but you just don’t have the vision? Give interiorai.com a chance, upload a picture of your room and give it a description. It works better than it should.
* You can sort your command line output when doing something like an ls
sort -k2 -b
* On macOS you can drag a non-fullscreen window to a fullscreen desktop
* When using the ls -l command in a terminal, that first numeric column shows the number of hard links to a file – meaning the number of names an inode has for that file
* Argument parser for Python 3 – makes parsing command line arguments a breeze and creates beautiful –help documentation to boot!
https://docs.python.org/3/library/argparse.html
* .NET has an equivalent parser we’ve mentioned in the past
https://www.nuget.org/packages/NuGet.CommandLine
Ever wonder how database backups work if new data is coming in while the backup is running? Hang with us while we talk about that, while Allen doesn’t stand a chance, Outlaw is in love, and Joe forgets his radio voice.
The full show notes for this episode are available at https://www.codingblocks.net/episode204.
News* Thanks for the great reviews! + Audible: Allison Williams * Orlando Code Camp 2023 is coming up on March 25th 2023 (orlandocodecamp.com)
The big, beautiful, boar book: Designing Data-Intensive ApplicationsWeak Isolation levels* If two transactions don’t touch the same data, they can be run in parallel. * Race conditions occur when two different processes are trying to modify and access or modify the same data at the same time. * Concurrency bugs are hard to find and test for – it usually comes down to unlucky timing. * Concurrency bugs can also be very difficult to understand because multiple parts of an application can be interacting with the database simultaneously and in unexpected ways. * Single-user interactions with a database are hard enough, and when you have multiple interactions happening simultaneously, it makes it all much more difficult. * Databases try to make it look like interactions happen one at a time for that very reason – to simplify the work for a developer. + Serializable isolation is a database guarantee that makes transactions look as if they happened serially – one after another. * Isolation is not that simple in reality + Serializable isolation comes at a performance cost - For this reason, most databases choose not to use it + Most databases use weaker isolation levels to protect against some concurrency issues but not all of them - These aren’t just theoretical bugs * Have resulted in large financial losses * Investigations by financial auditors * Customer data corruption * It’s been a common theme that “use a relational db if you’re doing financial transactions” – however, being that most db’s use weak isolation, that doesn’t guarantee things would have been perfect + For this reason – you should understand the various weak isolation (non-serial) levels
Read Committed* Two guarantees + When reading from the database, you will only see data that has been committed (no dirty reads) + When writing to the database, you will only overwrite data that has been committed (no dirty writes) - A second write is delayed until the first write’s transaction has been committed or aborted - This does not protect against the incrementing race condition – ie. two processes read a value at the same time, id = 1, then process one increments that and saves it, so the value is 2. Now, process two (which had 1 in memory from the read) does its increment, and stores the value as 2 as well – the value should have been three but because it had an old id, it didn’t increment properly * Avoiding this is discussed later in “Preventing Lost Updates”
Snapshot Isolation and Repeatable Read* Addresses read skew, an example of a non-repeatable read + The example given was a customer has two bank accounts, gets her balance of account A, and then some moments after a transfer of $100 from account 2 to account 1 the customer gets the balance for account B…customer has an old value from account 1 and a new value from account two, so it looks like the customer is missing $100. - This is acceptable in the read committed isolation as both account values were committed at the time of the reads. - How could this happen? Here’s a quick example… * Multiple queries were issued to get the different account values – get balance for account 1, get balance for account 2…behind the scenes, someone did a transfer from one account to the other + This is a very temporary state * There are situations where this can’t happen + Backups, analytics queries and integrity checks * Snapshot isolation is a typical solution to the problem + Transactions read from a consistent snapshot – meaning that a transaction is opened to read multiple values from a snapshot state of the database when the read first started - Very popular feature – supported by PostgreSQL, Oracle, SQL Server, MySQL with InnoDB
How is snapshot isolation accomplished?* Usually use write locks to stop dirty writes + Reads never block writes, and writes never block reads * Because there may be multiple transactions taking place at once, there may need to be multiple copies of database objects in play at once – this is referred to as multi-version concurrency control * The difference between read committed and snapshot isolation is read committed will use a different snapshot for each read whereas snapshot isolation will use the same snapshot for multiple reads within the transaction + They show an example of PostgreSQL’s implementation - Found this README in Postgres – https://github.com/postgres/postgres/blob/master/src/backend/storage/lmgr/README-SSI - The implementation basically uses some metadata fields on a row – created_by and deleted_by fields which contain transaction id’s * If you were to delete a row, that deleted_by field is updated, the row isn’t actually deleted at that point in time, but garbage collection will pick it up later and remove it physically from the table – at a time when it’s deemed that it will no longer be accessed * Updates are converted to creates and deletes (similar to what you’d see if you’re familiar with triggers in something like SQL Server)
Visibility for seeing a consistent snapshot* Consistent snapshots work by following these rules: + At the start of a transaction, a list of all transactions in progress are identified and ignored for any reads + Any writes made by transactions that were aborted are ignored + Any writes made by a newer transaction id are ignored + All other writes are available to read * Another way of thinking about it – an object is visible if + A transaction that had created an object had already been completed BEFORE the reader transaction starts + An object is either not marked for deletion OR if it is marked for deletion, the transaction had not been completed at the time the read transaction started * Because the database is never truly updating/deleting values in place, a number of running transactions can continue to function from snapshots of those objects with very small overhead
Snapshot isolation and indexes* Considering what we mentioned about the database storing multiple snapshots of state, how does this work with indexes? + One way would be to have the index point to all the transaction ids and have them filtered out, and when garbage collection happens, remove those entries from the index as well * Turns out, there are a lot of implementation details and performance thoughts to take into consideration depending on the database implementation + They gave an example of how things are done in PostgreSQL – if multiple versions of the same object can fit on the same page file, nothing is done to the index + Another approach used by CouchDB and others are to use an append-only / copy-on-write method that does not overwrite the existing page in the b-tree but rather creates a copy of the modified page. Then, a copy of each parent is made all the way up to the root page to point to the new pages. Any pages not impacted by the write operation don’t need to be touched - If that sounded like it was creating a new tree for every write in the append-only-B-tree, you’d be correct. By taking this approach, every individual root tree is a consistent shot of the database at that point in time * The benefit of this approach is you don’t have to filter anything because every root node has only the transactions that belong in that snapshot * You do need a background process to garbage collect and compact
Repeatable read and naming confusion* Unfortunately, snapshot isolation is known by many names + Oracle calls it serializable + PostgreSQL and MySQL call it repeatable read * Why is it not consistent naming? Because it’s not a part of SQL, but rather a part of System R’s 1975 isolation levels, it hadn’t been defined yet! + They HAD defined repeatable read which is very similar to snapshot isolation * Unfortunately in relational databases, “repeatable read” doesn’t define what guarantees they really provide * It was called out that there is a formal definition of a repeatable read but most implementations don’t meet the definition * “Nobody really knows what repeatable read means”
Resources We Like* Orlando Code Camp 2023 (orlandocodecamp.com) * The 12 Factor App and Google Cloud (cloud.google.com) * Martin Kleppmann’s website (martin.kleppmann.com) * Dave Foster Wallace – This is Water (youtube)
Tip of the Week* “Infinite Jest” is an interesting book, but it’s not a good audio experience. Get the physical book this time. (amazon.com)
* Tamara Makes Games is a game dev on YouTube that has a lot of videos oriented around isometric, city-builder, and strategy games similar to Factorio. It’s a cool niche, and it’s a nice balance of code and visuals that are a delight to watch. (youtube)
* There’s a lot you can do with iTerm2’s status bar, it’s highly configurable making it easy to show system resource monitors, shell information, and other miscellaneous items. (iterm2.com)
* Google has a tool named “container-diff” for analyzing and comparing container images. It can examine images along several different criteria, great for tracking down issues..like knowing why Docker isn’t caching a layer. (github.com)
* Xeol is a great utility for checking for end-of-life packages that you should get rid of. Thanks, gaprogman! (github)
* Using minikube? You can manage the space for the vm by using minikube ssh to shell into the machine and then prune your images with docker builder prune. Alternatively, you can use eval $(minikube docker-env) it to proxy docker to your local machine so you can just docker builder prune (and any other docker commands) without the shell. (minikube.sigs.k8s.io)
Ever wonder how database backups work if new data is coming in while the backup is running? Hang with us while we talk about that, while Allen doesn't stand a chance, Outlaw is in love, and Joe forgets his radio voice.
The full show notes for this episode are available at https://www.codingblocks.net/episode204.
It’s time we learn about multi-object transactions as we continue our journey into Designing Data-Intensive Applications, while Allen didn’t specifically have that thought, Joe took a marketing class, and Michael promised he wouldn’t cry.
The full show notes for this episode are available at https://www.codingblocks.net/episode203.
News* Thanks for the reviews! + iTunes: Dom Bell 30, Tontonton2 * Want some swag? We got swag! (/swag) * Orlando Codecamp 2023 is coming up in March 25th 2023 (orlandocodecamp.com)
Single Object and Multi-Object OperationsBest book evarr! Multi-object transactions need to know which reads and writes are part of the same transaction.
+ In an RDBMS, this is typically handled by a unique transaction identifier managed by a transaction manager.
+ All statements between the BEGIN TRANSACTION and COMMIT TRANSACTION are part of that transaction.
* Many non-relational databases don’t have a way of grouping those statements together.
* Single object transactions must also be atomic and isolated.
* Reading values while in the process of writing updated values would yield really weird results.
+ It’s for this reason that nearly all databases must* support single object atomicity and isolation.
+ Atomicity is achievable with a log for crash recovery.
+ Isolation is achieved by locking the object to be written.
* Some databases use a more complex atomic setup, such as an incrementer, eliminating the need for a read, modify, write cycle.
* Another operation used is a compare and set.
* These types of operations are useful for ensuring good writes when multiple clients are attempting to write the same object concurrently.
* Transactions are more typically known for grouping multiple object writes into a single operational unit
Need for multi object transactions Many distributed databases / datastores don’t have transactions because they are difficult to implement across partitions. + This can also cause problems for high performance or availability needs. + But there is no technical reason distributed transactions are not possible. * The author poses the question in the book: “Do we even need transactions?”* + The short answer is, yes sometimes, such as: - Relational database systems where rows in tables link to rows in other tables, - In non-relational systems when data is denormalized for “object” reasons, those records need to be updated in a single shot, or - Indexes against tables in relational databases need to be updated at the same time as the underlying records in the tables. * These can be handled without database transactions, but error handling on the application side becomes much more difficult. + Lack of isolation can cause concurrency problems.
Handling errors and aborts* ACID transactions that fail are easily retry-able. * Some systems with leaderless replication follow the “best effort” basis. The database will do what it can, and if something fails in the middle, it’ll leave anything that was written, meaning it won’t undo anything it already finished. + This puts all the burden on the application to recover from an error or failure. * The book calls out developers saying that we only like to think about the happy path and not worry about what happens when something goes wrong. * The author also mentioned there are a number of ORM’s that don’t do transactions proud and rather than building in some retry functionality, if something goes wrong, it’ll just bubble an error up the stack, specifically calling out Rails ActiveRecord and Django. * Even ACID transactions aren’t necessarily perfect. + What if a transaction actually succeeded but the notification to the client got interrupted and now the application thinks it needs to try again, and MIGHT actually write a duplicate? + If an error is due to “overload”, basically a condition that will continue to error constantly, this could cause an unnecessary load of retries against the database. + Retrying may be pointless if there are network errors occurring. + Retrying something that will always yield an error is also pointless, such as a constraint violation. + There may be situations where your transactions trigger other actions, such as emails, SMS messages, etc. and in those situations you wouldn’t want to send new notifications every time you retry a transaction as it might generate a lot of noise. - When dealing with multiple systems such as the previous example, you may want to use something called a two-phase commit.
Tip of the Week Manything is an app that lets you use your old devices as security cameras. You install the app on your old phone or tablet, hit record, and configure motion detection. A much easier and cheaper option than ordering a camera! (apps.apple.com, play.google.com) * The Linux Foundation offers training and certifications. Many great training courses, some free, some paid. There’s a nice Introduction to Kubernetes* course you can try, and any money you do spend is going to a good place! (training.linuxfoundation.org) * Kubernetes has recommendations for common-labels. The labels are helpful and standardization makes it easier to write tooling and queries around them. (kubernetes.io) * Markdown Presentation for Visual Studio Code, thanks for the tip Nathan V! Marp lets you create slideshows from markdown in Visual Studio Code and helps you separate your content from the format. It looks great and it’s easy to version and re-use the data! (marketplace.visualstudio.com)
It’s time we learn about multi-object transactions as we continue our journey into Designing Data-Intensive Applications, while Allen didn’t specifically have that thought, Joe took a marketing class, and Michael promised he wouldn’t cry.
The full show notes for this episode are available at https://www.codingblocks.net/episode203.
News * Thanks for the reviews! + iTunes: Dom Bell 30, Tontonton2 * Want some swag? We got swag! (/swag) * Orlando Codecamp 2023 is coming up in March 25th 2023 (orlandocodecamp.com)
Single Object and Multi-Object Operations Best book evarr! * Multi-object transactions need to know which reads and writes are part of the same transaction. + In an RDBMS, this is typically handled by a unique transaction identifier managed by a transaction manager. + All statements between the BEGIN TRANSACTION and COMMIT TRANSACTION are part of that transaction. * Many non-relational databases don’t have a way of grouping those statements together. * Single object transactions must also be atomic and isolated. * Reading values while in the process of writing updated values would yield really weird results. + It’s for this reason that nearly all databases must support single object atomicity and isolation. + Atomicity is achievable with a log for crash recovery. + Isolation is achieved by locking the object to be written. * Some databases use a more complex atomic setup, such as an incrementer, eliminating the need for a read, modify, write cycle. * Another operation used is a compare and set. * These types of operations are useful for ensuring good writes when multiple clients are attempting to write the same object concurrently. * Transactions are more typically known for grouping multiple object writes into a single operational unit
Need for multi object transactions * Many distributed databases / datastores don’t have transactions because they are difficult to implement across partitions. + This can also cause problems for high performance or availability needs. + But there is no technical reason distributed transactions are not possible. * The author poses the question in the book: “Do we even need transactions?” + The short answer is, yes sometimes, such as: - Relational database systems where rows in tables link to rows in other tables, - In non-relational systems when data is denormalized for “object” reasons, those records need to be updated in a single shot, or - Indexes against tables in relational databases need to be updated at the same time as the underlying records in the tables. * These can be handled without database transactions, but error handling on the application side becomes much more difficult. + Lack of isolation can cause concurrency problems.
Handling errors and aborts * ACID transactions that fail are easily retry-able. * Some systems with leaderless replication follow the “best effort” basis. The database will do what it can, and if something fails in the middle, it’ll leave anything that was written, meaning it won’t undo anything it already finished. + This puts all the burden on the application to recover from an error or failure. * The book calls out developers saying that we only like to think about the happy path and not worry about what happens when something goes wrong. * The author also mentioned there are a number of ORM’s that don’t do transactions proud and rather than building in some retry functionality, if something goes wrong, it’ll just bubble an error up the stack, specifically calling out Rails ActiveRecord and Django. * Even ACID transactions aren’t necessarily perfect. + What if a transaction actually succeeded but the notification to the client got interrupted and now the application thinks it needs to try again, and MIGHT actually write a duplicate? + If an error is due to “overload”, basically a condition that will continue to error constantly, this could cause an unnecessary load of retries against the database. + Retrying may be pointless if there are network errors occurring. + Retrying something that will always yield an error is also pointless, such as a constraint violation. + There may be situations where your transactions trigger other actions, such as emails, SMS messages, etc. and in those situations you wouldn’t want to send new notifications every time you retry a transaction as it might generate a lot of noise. - When dealing with multiple systems such as the previous example, you may want to use something called a two-phase commit.
Tip of the Week * Manything is an app that lets you use your old devices as security cameras. You install the app on your old phone or tablet, hit record, and configure motion detection. A much easier and cheaper option than ordering a camera! (apps.apple.com, play.google.com) * The Linux Foundation offers training and certifications. Many great training courses, some free, some paid. There’s a nice Introduction to Kubernetes course you can try, and any money you do spend is going to a good place! (training.linuxfoundation.org) * Kubernetes has recommendations for common-labels. The labels are helpful and standardization makes it easier to write tooling and queries around them. (kubernetes.io) * Markdown Presentation for Visual Studio Code, thanks for the tip Nathan V! Marp lets you create slideshows from markdown in Visual Studio Code and helps you separate your content from the format. It looks great and it’s easy to version and re-use the data! (marketplace.visualstudio.com)
We decided to knock the dust off our copies of Designing Data-Intensive Applications to learn about transactions while Michael is full of solutions, Allen isn’t deterred by Cheater McCheaterton, and Joe realizes wurds iz hard.
The full show notes for this episode are available at https://www.codingblocks.net/episode202.
News* Thanks for the reviews! + iTunes: Jla115, Cuttin’ Corner Barbershop, mirgeee, JackUnver + Audible: Mr. William M. Davies * Want some swag? We got swag! (/swag)
It’s baaaaack!Chapter 7: Transactions Great statement from one of the creators of Google’s Spanner where the general idea is that it’s better to have transactions as an available feature even if it has performance issues and let developers decide if the performance is worth the tradeoff, rather than not having transactions and putting all that complexity on the developer. * Number of things that can go wrong during database interactions: + DB software or underlying hardware could fail during a write, + An application that uses the DB might crash in the middle of a series of operations, + Network problems could arise, + Multiple writes to the same records from multiple places causing race conditions, + Reads could happen to partially updated data which may not make sense, and/or + Race conditions between clients could cause weird problems. * “Reliable” systems can handle those situations and ensure they don’t cause catastrophic failures, but making a system “reliable” is a lot* of work. * Transactions are what have been used for decades to address those issues. + A transaction is a way to group all related reads and writes into a single operation. + Either a transaction as a whole completes successfully as a “commit” or fails as an “abort, rollback”. - If the transaction fails, the application can choose what to do, like retry for example. * In general, transactions make error handling much simpler for an application. + That was their purpose, to make developing against a database much simpler. * Not all applications need transactions. * In some cases, it makes sense not to use transactions for performance and/or availability reasons.
How do you know if you need a transaction?* What are the safety guarantees? * What are the costs of using them?
Concepts of a transaction Most relational DBs support transactions and some non-relational DBs support transactions. * The general idea of a transaction has been around mostly unchanged for over 40 years, originally introduced in IBM System R, the first relational database. * With the introduction of a lot of the NoSQL (non-relational) databases, transactions were left out. + In some NoSQL implementations, they redefined what a transaction meant with a weaker set of guarantees. - A popular belief was put out there that transactions meant anti-scalable. - Another popular belief was that to have a “serious” database, it had to have transactions. * The book calls out both as hyperbole. * The reality is there are tradeoffs for both having or not having transactions. * ACID is the acronym to describe the safety guarantees of databases and stands for Atomicity, Consistency, Isolation, and Durability. + Coined in 1983 by Theo Harder and Andreas Reuter. + The reality is that each database’s implementation of ACID may be very different. - Lots of ambiguity for what Isolation means. - Because ACID doesn’t specify the actual guarantees, it’s basically a marketing term. * Systems that don’t support ACID are often referred to as BASE, BAsically available, Soft state, and E*ventual consistency. + Even more vague than ACID! BASE, more or less, just means anything but ACID.
Atomicity Atomicity refers to something that can not be broken into smaller parts. + In terms of multi-threaded programming, this means you can only see the state of something before or after a complete operation and nothing in-between. + In the world of database and ACID, atomicity has nothing to do with concurrency. For instance, if multiple actions are trying to processes the same data, that’s covered under Isolation*. - Instead, ACID describes what should happen if there is a fault while performing multiple related writes. * For example, if a group of related writes are to be performed in an operation and there is some underlying error that occurs before the transaction of writes can be committed, then the operation is aborted and any writes that occurred during that operation must be undone, i.e. rolled back. * Without atomicity, it is difficult to know what part of the operation completed and what failed. * The benefit of the rollback is you don’t have to have any special logic in your application to figure out how to get back to the original state. You can just simply try again because the transaction took care of the cleanup for you. + This ability to get rid of any writes after an abort is basically what the atomicity is all about.
Consistency In ACID, consistency just means the database is in a good state. * But consistency is a property of the application as it’s what defines the invariants for its operations. + This means that you must write your application transactions properly to satisfy the invariants that have been defined. + The database can take care of certain invariants, such as foreign key constraints and uniqueness constraints, but otherwise it’s left up to the application to set up the transactions properly. + The book suggests that because the consistency is on the application’s shoulders, the C* shouldn’t be part of ACID.
Isolation Isolation is all about handling concurrency problems and race conditions. + The author provided an example of two clients trying to increment a single database counter concurrently, the value should have gone from 3 to 5, but only went to 4 because there was a race condition. * Isolation means that the transactions are isolated from each other so the previous example cannot happen. + The book doesn’t dive deep on various forms of isolation implementations here as they go deeper in later sections, however one that was brought up was treating every transaction as if it was a serial transaction. The problem with this is there is a rather severe performance hit for forcing everything serially. - The section that describes the additional isolation levels is “Weak Isolation Levels”*.
Durability Durability just means that once the database has committed a write, the data will not be forgotten, even if a database failure or hardware failure occurs. + This notion of durability typically means, in a single node database, that the data has been written to the drive, typically to a write-ahead log or similar implementation. - The write-ahead log ensures if there is any data corruption in the database, that it can be rebuilt, if necessary. * In a replicated database, durability means that the data has been written to the other nodes successfully. + The performance implication here is that for the database to guarantee that it’s durable, it must wait for those distributed writes to complete before committing the transaction. * PERFECT DURABILITY DOES NOT EXIST*. + If all your databases and backups somehow got destroyed at the same time, there’s absolutely nothing you could do.
Resources we Like Coding Blocks Jam ’23 (itch.io) * NewSQL (Wikipedia) * Visual Studio (Wikipedia) * Chrissy’s Court (IMDb) * Tracy Morgan gets in a crash right after buying a $2 million Bugatti (CNN) * IBM System R (Wikipedia) * Database Schema for Multiple Types of Products (Coding Blocks) * Uber’s Big Data Platform: 100+ Petabytes with Minute Latency (Uber) * How to store data for 1,000 years (BBC) * Longevity of Recordable CDs, DVDs and Blu-rays – Canadian Conservation Institute (CCI) Notes 19/1* (canada.ca)
Tip of the Week The Bad Plus is an instrumental band that makes amazing music that’s perfect for programming. It’s a little wild, and a little strange. Maybe like Radiohead, but a saxophone instead of Thom Yorke? Maybe? (YouTube)
+ Correction, Piano Rock will quickly become your new favorite channel. (YouTube)
* docker builder is a command prefix that you can use that specifically operates against the builder. For example you can prune the builder’s* cache without wiping out your local cache. It can really save your bacon if you’re working with a lot of images. (docs.docker.com)
* Ever want to convert YAML to JSON so you can see nesting issues easier? There’s a VSCode plugin for that! Search for hilleer.yaml-plus-json or find it on GitHub. (GitHub)
* Spotify has a great interface, but Apple Audio has lossless audio, sounds great, and pays artists more. Give it a shot! If you sign up for Apple One you can get Apple Music, Apple TV+, Apple Arcade, Apple News+ and a lot more for one unified price. (Apple)
We decided to knock the dust off our copies of Designing Data-Intensive Applications to learn about transactions while Michael is full of solutions, Allen isn’t deterred by Cheater McCheaterton, and Joe realizes wurds iz hard.
The full show notes for this episode are available at https://www.codingblocks.net/episode202.
News * Thanks for the reviews! + iTunes: Jla115, Cuttin’ Corner Barbershop, mirgeee, JackUnver + Audible: Mr. William M. Davies * Want some swag? We got swag! (/swag)
It’s baaaaack! Chapter 7: Transactions * Great statement from one of the creators of Google’s Spanner where the general idea is that it’s better to have transactions as an available feature even if it has performance issues and let developers decide if the performance is worth the tradeoff, rather than not having transactions and putting all that complexity on the developer. * Number of things that can go wrong during database interactions: + DB software or underlying hardware could fail during a write, + An application that uses the DB might crash in the middle of a series of operations, + Network problems could arise, + Multiple writes to the same records from multiple places causing race conditions, + Reads could happen to partially updated data which may not make sense, and/or + Race conditions between clients could cause weird problems. * “Reliable” systems can handle those situations and ensure they don’t cause catastrophic failures, but making a system “reliable” is a lot of work. * Transactions are what have been used for decades to address those issues. + A transaction is a way to group all related reads and writes into a single operation. + Either a transaction as a whole completes successfully as a “commit” or fails as an “abort, rollback”. - If the transaction fails, the application can choose what to do, like retry for example. * In general, transactions make error handling much simpler for an application. + That was their purpose, to make developing against a database much simpler. * Not all applications need transactions. * In some cases, it makes sense not to use transactions for performance and/or availability reasons.
How do you know if you need a transaction? * What are the safety guarantees? * What are the costs of using them?
Concepts of a transaction * Most relational DBs support transactions and some non-relational DBs support transactions. * The general idea of a transaction has been around mostly unchanged for over 40 years, originally introduced in IBM System R, the first relational database. * With the introduction of a lot of the NoSQL (non-relational) databases, transactions were left out. + In some NoSQL implementations, they redefined what a transaction meant with a weaker set of guarantees. - A popular belief was put out there that transactions meant anti-scalable. - Another popular belief was that to have a “serious” database, it had to have transactions. * The book calls out both as hyperbole. * The reality is there are tradeoffs for both having or not having transactions. * ACID is the acronym to describe the safety guarantees of databases and stands for Atomicity, Consistency, Isolation, and Durability. + Coined in 1983 by Theo Harder and Andreas Reuter. + The reality is that each database’s implementation of ACID may be very different. - Lots of ambiguity for what Isolation means. - Because ACID doesn’t specify the actual guarantees, it’s basically a marketing term. * Systems that don’t support ACID are often referred to as BASE, BAsically available, Soft state, and Eventual consistency. + Even more vague than ACID! BASE, more or less, just means anything but ACID.
Atomicity * Atomicity refers to something that can not be broken into smaller parts. + In terms of multi-threaded programming, this means you can only see the state of something before or after a complete operation and nothing in-between. + In the world of database and ACID, atomicity has nothing to do with concurrency. For instance, if multiple actions are trying to processes the same data, that’s covered under Isolation. - Instead, ACID describes what should happen if there is a fault while performing multiple related writes. * For example, if a group of related writes are to be performed in an operation and there is some underlying error that occurs before the transaction of writes can be committed, then the operation is aborted and any writes that occurred during that operation must be undone, i.e. rolled back. * Without atomicity, it is difficult to know what part of the operation completed and what failed. * The benefit of the rollback is you don’t have to have any special logic in your application to figure out how to get back to the original state. You can just simply try again because the transaction took care of the cleanup for you. + This ability to get rid of any writes after an abort is basically what the atomicity is all about.
Consistency * In ACID, consistency just means the database is in a good state. * But consistency is a property of the application as it’s what defines the invariants for its operations. + This means that you must write your application transactions properly to satisfy the invariants that have been defined. + The database can take care of certain invariants, such as foreign key constraints and uniqueness constraints, but otherwise it’s left up to the application to set up the transactions properly. + The book suggests that because the consistency is on the application’s shoulders, the C shouldn’t be part of ACID.
Isolation * Isolation is all about handling concurrency problems and race conditions. + The author provided an example of two clients trying to increment a single database counter concurrently, the value should have gone from 3 to 5, but only went to 4 because there was a race condition. * Isolation means that the transactions are isolated from each other so the previous example cannot happen. + The book doesn’t dive deep on various forms of isolation implementations here as they go deeper in later sections, however one that was brought up was treating every transaction as if it was a serial transaction. The problem with this is there is a rather severe performance hit for forcing everything serially. - The section that describes the additional isolation levels is “Weak Isolation Levels”.
Durability * Durability just means that once the database has committed a write, the data will not be forgotten, even if a database failure or hardware failure occurs. + This notion of durability typically means, in a single node database, that the data has been written to the drive, typically to a write-ahead log or similar implementation. - The write-ahead log ensures if there is any data corruption in the database, that it can be rebuilt, if necessary. * In a replicated database, durability means that the data has been written to the other nodes successfully. + The performance implication here is that for the database to guarantee that it’s durable, it must wait for those distributed writes to complete before committing the transaction. * PERFECT DURABILITY DOES NOT EXIST. + If all your databases and backups somehow got destroyed at the same time, there’s absolutely nothing you could do.
Resources we Like * Coding Blocks Jam ’23 (itch.io) * NewSQL (Wikipedia) * Visual Studio (Wikipedia) * Chrissy’s Court (IMDb) * Tracy Morgan gets in a crash right after buying a $2 million Bugatti (CNN) * IBM System R (Wikipedia) * Database Schema for Multiple Types of Products (Coding Blocks) * Uber’s Big Data Platform: 100+ Petabytes with Minute Latency (Uber) * How to store data for 1,000 years (BBC) * Longevity of Recordable CDs, DVDs and Blu-rays – Canadian Conservation Institute (CCI) Notes 19/1 (canada.ca)
Tip of the Week * The Bad Plus is an instrumental band that makes amazing music that’s perfect for programming. It’s a little wild, and a little strange. Maybe like Radiohead, but a saxophone instead of Thom Yorke? Maybe? (YouTube) + Correction, Piano Rock will quickly become your new favorite channel. (YouTube) * docker builder is a command prefix that you can use that specifically operates against the builder. For example you can prune the builder’s cache without wiping out your local cache. It can really save your bacon if you’re working with a lot of images. (docs.docker.com) * Ever want to convert YAML to JSON so you can see nesting issues easier? There’s a VSCode plugin for that! Search for hilleer.yaml-plus-json or find it on GitHub. (GitHub) * Spotify has a great interface, but Apple Audio has lossless audio, sounds great, and pays artists more. Give it a shot! If you sign up for Apple One you can get Apple Music, Apple TV+, Apple Arcade, Apple News+ and a lot more for one unified price. (Apple)
Michael spends the holidays changing his passwords, Joe forgot to cancel his subscriptions, and Allen’s busy playing Call of Duty: Modern Healthcare as we discuss the our 2023 resolutions.
The full show notes for this episode are available at https://www.codingblocks.net/episode201.
News Thanks for the reviews CourageousPotato, Billlhead, [JD]Milo! + Want to help us out? Leave us a review. * Game Jam is coming up, January 20-23! (itch.io) * Thoughts on LastPass? + Check out the encrypted fields, as figured out by a developer. (GitHub) + LastPass users: Your info and password vault data are now in hackers’ hands* (Ars Technica)
Our 2023 ResolutionsMichael’s* Learn Kotlin, * Go deeper on streaming technologies, such as Kafka, Flink, and/or Kafka Connect, and * Learn more music theory and techniques.
Drink!JZ’s* Of course Joe has categorized his resolutions into the following areas: finances, health, personal development, and career management, * Go deeper on Spring and streaming technologies, and * Do more game dev and LeetCode.
Q&A Round 1 What skills are opposite and which are adjacent that can be picked up this year? + Angular unit testing, + Front end development, + Spring, + Big data concepts and technologies * Any books, courses, or certifications? + Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems by Martin Kleppmann (Amazon) + Certified Kubernetes Application Developer (CKAD)* (cncf.io)
Allen’s* Spend more time focusing on health and fun, * Updating the About Us page with recent info, * Go deeper on streaming technologies and conepts, * Go deeper on big data concepts such as data lakes, and best practices, etc., * Get back into making content again, such as YouTube, and/or maybe presenting.
Q&A Round 2* What do you want to avoid in 2023? + Less Jenkins, + Avoid piecemeal Spring upgrades,
2023 Predictions Data, privacy … do we need it?, * New languages, frameworks, * Generated content (Dalle-2, ChatGPT, Copilot), and * AI ethics + ChatGPT Wrote My AP English Essay—and I Passed* (WSJ)
Resources* Designing Data Intensive Applications (Amazon) * Orlando Code Camp (OrlandoCodeCamp.com) * Atlanta Dev Con (AtlDevCon.com)
Tip of the Week You can pipe directly to Visual Studio Code (in bash anyway), much easier than outputting to a file and opening it in Code … especially if you end up accidentally checking it in!
+ Example: curl https://www.codingblocks.net | code -
* Is your trackpad not responding on your new(-ish) MacBook? Run a piece of paper around the edge to clean out any gunk. Also maybe avoid dripping BBQ sauce on it.
* How does the iOS MFA / Verification Code settings work? We want MFA, but we we’re tired of the runaround!
* Jump around – nope, not Kris Kross, great tip from Thiyagarajan – keeps track of your most “frecent”* directories to make navigation easier (GitHub)
+ There’s a version for PowerShell too – thank you Brad Knowles! (GitHub)
Michael spends the holidays changing his passwords, Joe forgot to cancel his subscriptions, and Allen’s busy playing Call of Duty: Modern Healthcare as we discuss the our 2023 resolutions.
The full show notes for this episode are available at https://www.codingblocks.net/episode201.
News * Thanks for the reviews CourageousPotato, Billlhead, [JD]Milo! + Want to help us out? Leave us a review. * Game Jam is coming up, January 20-23! (itch.io) * Thoughts on LastPass? + Check out the encrypted fields, as figured out by a developer. (GitHub) + LastPass users: Your info and password vault data are now in hackers’ hands (Ars Technica)
Our 2023 Resolutions Michael’s * Learn Kotlin, * Go deeper on streaming technologies, such as Kafka, Flink, and/or Kafka Connect, and * Learn more music theory and techniques.
Drink! JZ’s * Of course Joe has categorized his resolutions into the following areas: finances, health, personal development, and career management, * Go deeper on Spring and streaming technologies, and * Do more game dev and LeetCode.
Q&A Round 1 * What skills are opposite and which are adjacent that can be picked up this year? + Angular unit testing, + Front end development, + Spring, + Big data concepts and technologies * Any books, courses, or certifications? + Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems by Martin Kleppmann (Amazon) + Certified Kubernetes Application Developer (CKAD) (cncf.io)
Allen’s * Spend more time focusing on health and fun, * Updating the About Us page with recent info, * Go deeper on streaming technologies and conepts, * Go deeper on big data concepts such as data lakes, and best practices, etc., * Get back into making content again, such as YouTube, and/or maybe presenting.
Q&A Round 2 * What do you want to avoid in 2023? + Less Jenkins, + Avoid piecemeal Spring upgrades,
2023 Predictions * Data, privacy … do we need it?, * New languages, frameworks, * Generated content (Dalle-2, ChatGPT, Copilot), and * AI ethics + ChatGPT Wrote My AP English Essay—and I Passed (WSJ)
Resources * Designing Data Intensive Applications (Amazon) * Orlando Code Camp (OrlandoCodeCamp.com) * Atlanta Dev Con (AtlDevCon.com)
Tip of the Week * You can pipe directly to Visual Studio Code (in bash anyway), much easier than outputting to a file and opening it in Code … especially if you end up accidentally checking it in! + Example: curl https://www.codingblocks.net | code - * Is your trackpad not responding on your new(-ish) MacBook? Run a piece of paper around the edge to clean out any gunk. Also maybe avoid dripping BBQ sauce on it. * How does the iOS MFA / Verification Code settings work? We want MFA, but we we’re tired of the runaround! * Jump around – nope, not Kris Kross, great tip from Thiyagarajan – keeps track of your most “frecent” directories to make navigation easier (GitHub) + There’s a version for PowerShell too – thank you Brad Knowles! (GitHub)
We step back and look at how things have changed since we first started the show while Outlaw is dancing on tables, Allen really knows his movie monsters, and Joe’s math is on point.
The full show notes for this episode are available at https://www.codingblocks.net/episode200.
News* Thanks for the review nickname222Apple<3! + Want to help us out? Leave us a review. * Want Free stickers? Send us a SASE, instructions over at (/swag) * Game Jam is coming up, January 20-23 (itch.io)
Favorite Episodes* We Still Don’t Understand Open Source Licensing (#5) * Comparing Git Workflows (#90) * Git from the Bottom Up series (#195) * Designing Data-Intensive Applications series (series) * The DevOps Handbook series (series) * The Imposters Handbook series (series) * Boxing and Unboxing in .NET (#2) * Docker for Developers (#80) * Elasticsearch (#83) * Show Recursion Show (#154) * Why is Python Popular? (#152) * Hierarchical database patterns (series)
Favorite Events* NDC 2020 (#126) * Atlanta Dev Con (atldevcon.com) * Orlando Code Camp (orlandocodecamp.com) * South Florida Code Camp (#SoFloDevCon) * Tampa Code Camp (facebook.com) * Game Jams
How things have changed since we started?* Social media * The technologies we use * Our careers * Show format * Media consumption habits * Any viewpoints that have changed? * Technology * We’ve wrapped up 9 years…how have we changed the most…why? * Bonus: Buying a window with 3 huge tvs (youtube.com)
Top 3 things you’ve gotten out of it …* Alphabetize all the things in your class * A better understanding of DB technologies and the impact of their underlying data structures * It’s forced us to study various topics … * Amazing friends, community * The application tier can / should be your most powerful * Don’t make your tech-du-jour a hammer
Tip of the Week* If you want to enable Markdown support, open a document in Google Docs, head over to the top of the screen, go to “Tools” then “Preferences” and enable “Automatically detect Markdown.” After that, you’re good to go..except this only works for the current doc. (techcrunch.com) * Markdown Viewer is also a plugin for Chrome that lets you support .md files in Google Drive (workspace.google.com) * DataGrip’s useless “error at position” messages are frustrating, but the IDE actually does give you the info you need. Check your cursor! * Minikube’s “profile” feature makes it easy to swap between clusters. No more tearing down and rebuilding if you need to switch to a new task! (minikube.sigs.k8s.io) * SQLforDevs.com has a free ebook: Next-Level Database Techniques for Developers. (sqlfordevs.com) + Thanks for the tip Mikerg!
We talk about career management and interview tips, pushing data contracts "left", and our favorite dev books while Outlaw is [redacted], Joe's trying to figure out how to hire junior devs, and Allen's trying to screw some nails in.
The full show notes for this episode are available at https://www.codingblocks.net/episode199.
After
News * Thanks for the reviews Ryan Barger and Amazon Customer! + Want to help us out? Leave us a review. * The sign-up form for The 3rd Coding Blocks Game Jam is live! #cbjam + Check out videos from past years: - CBJAM '22 (youtube) - CBJAM '21 (youtube) * Interesting article about AI potentially replacing recruiters at Amazon (vox.com)
From 'Round the Water-Cooler Why don't companies want junior developers?
How long do you need to stay at a job?
Data Contracts..moving left?
Most impactful books we've covered on the show
How do you prepare to interview for a company?
How do you decide when to bring in new tech?
Tip of the Week * Did you know Obsidian has a command palette similar to Code? Same short-cut (Cmd/Ctrl-P) as VS Code and it makes for a great learning curve! Don't know how to make something italic? Cmd-P. Insert a template? Cmd-P. Pretty much anything you want to do, but don't know how to do. Cmd P! (help.obsidian.md) * Ghostery plugin for Firefox cuts down on ads and protects your privacy. Thanks for the tip Aaron Jeskie! (addons.mozilla.org) * Amazing prank to play on Windows user, hit F-11 to full screen this website next time your co-worker or family member leaves their computer unlocked. Thanks Scott Harden! (fakeupdate.net)
We take a peak into some of the challenges Twitter has faced while solving data problems at large scale, while Michael challenges the audience, Joe speaks from experience, and Allen blindsides them both.
We take a peak into some of the challenges Twitter has faced while solving data problems at large scale, while Michael challenges the audience, Joe speaks from experience, and Allen blindsides them both.
The full show notes for this episode are available at https://www.codingblocks.net/episode198.
News * Want to help us out? Leave us a review! * The 2023 Game Ja-Ja-Ja Jam is coming up!
Twitter has a Data Problem Moving an Exabyte of Data * In 2019, over 100 million people per day would visit Twitter. * Every tweet and user action creates an event that is used by machine learning and employees for analytics. * Their goal was to democratize data analysis within Twitter to allow people with various skillsets to analyze and/or visualize the data. * At the time, various technologies were used for data analysis: + Scalding which required programmer knowledge, and + Presto and Vertica which had performance issues at scale. * Another problem was having data spread across multiple systems without a simple way to access it.
Moving pieces to Google Cloud Platform * The Google Cloud big data tools at play: + BigQuery, a cost-effective, serverless, multicloud enterprise data warehouse to power your data-driven innovation. + DataStudio, unifying data in one place with ability to explore, visualize and tell stories with the data.
History of Data Warehousing at Twitter * 2011 – Data analysis was done with Vertica and Hadoop and data was ingested using Pig for MapReduce. * 2012 – Replaced Pig with Scalding using Scala APIs that were geared towards creating complex pipelines that were easy to test. However, it was difficult for people with SQL skills to pick up. * 2016 – Started using Presto to access Hadoop data using SQL and also used Spark for ad hoc data science and machine learning. * 2018 … + Scalding for production pipelines, + Scalding and Spark for ad hoc data science and machine learning, + Vertica and Presto for ad hoc, interactive SQL analysis, + Druid for interactive, exploratory access to time-series metrics, and + Tableau, Zeppelin, and Pivot for data visualization. * So why the change? To simplify analytical tools for Twitter employees.
BigQuery for Everyone * Challenges: + Needed to develop an infrastructure to reliably ingest large amounts of data, + Support company-wide data management, + Implement access controls, + Ensure customer privacy, and + Build systems for: - Resource allocation, - Monitoring, and - Charge-back. * In 2018, they rolled out an alpha release. + The most frequently used tables were offered with personal data removed. - Over 250 users, from engineering, finance, and marketing used the alpha. - Sometime around June of 2019, they had a month where 8,000 queries were run that processed over 100 petabytes of data, not including scheduled reports. - The alpha turned out to be a large success so they moved forward with more using BigQuery. * They have a nice diagram that’s an overview of what their processes looked like at this time, where they essentially pushed data into GCS from on-premise Hadoop data clusters, and then used Airflow to move that into BigQuery, from which Data Studio pulled its data.
Ease of Use * BigQuery was easy to use because it didn’t require the installation of special tools and instead was easy to navigate via a web UI. + Users did need to become familiar with some GCP and BigQuery concepts such as projects, datasets, and tables. + They developed educational material for users which helped get people up and running with BigQuery and Data Studio. * In regards to loading data, they looked at various pieces … + Cloud Composer (managed Airflow) couldn’t be used due to Domain Restricted Sharing (data governance). + Google Data Transfer Service was not flexible enough for data pipelines with dependencies. + They ended up using Apache Airflow as they could customize it to their needs. - For data transformation, once data was in BigQuery, they created scheduled jobs to do simple SQL transforms. - For complex transformations, they planned to use Airflow or Cloud Composer with Cloud Dataflow.
Performance * BigQuery is not for low-latency, high-throughput queries, or for low-latency, time-series analytics. + It is for SQL queries that process large amounts of data. * Their requirements for their BigQuery usage was to return results within a minute. + To achieve these requirements, they allowed their internal customers to reserve minimum slots for their queries, where a slot is a unit of computational capacity to execute a query. * The engineering team had to analyze 800+ queries, each processing around 1TB of data, to figure out how to allocate the proper slots for production and other environments.
Data Governance * Twitter focused on discoverability, access control, security, and privacy. * For data discovery and management, they extended their DAL to work with both their on-premise and GCP data, providing a single API to query all sets of data. * In regards to controlling access to the data, they took advantage of two GCP features: + Domain restricted sharing, meaning only users inside Twitter could access the data, and + VPC service controls to prevent data exfiltration as well as only allow access from known IP ranges.
Authentication, Authorization, and Auditing * For authentication, they used GCP user accounts for ad hoc queries and service accounts for production queries. * For authorization, each dataset had an owner service account and a reader group. * For auditing, they exported BigQuery stackdriver logs with detailed execution information to BigQuery datasets for analysis.
Ensuring Proper Handling of Private Data * They required registering all BigQuery datasets, * Annotate private data, * Use proper retention, and * Scrub and remove data that was deleted by users.
Privacy Categories for Datasets * Highly sensitive datasets are available on an as-needed basis with least privilege. + These have individual reader groups that are actively monitored. * Medium sensitivity datasets are anonymized data sets with no PII (Personally identifiable information) and provide a good balance between privacy and utility, such as, how many users used a particular feature without knowing who the users were. * Low sensitivity datasets are datasets where all user level information is removed. * Public datasets are available to everyone within Twitter. * Scheduled tasks were used to register datasets with the DAL, as well as a number of additional things.
Cost * Roughly the same for querying Presto vs BigQuery. * There are additional costs associated with storing data in GCS and BigQuery. * Utilized flat-rate pricing so they didn’t have to figure out fluctuating costs of running ad hoc queries. * In some situations where querying 10’s of petabytes, it was more cost-effective to utilize Presto querying data in GCS storage.
Could you build Twitter in a weekend?
Resources * The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Characters Sets (No Excuses!) (JoelOnSoftware.com) * Scaling data access by moving an exabyte of data to Google Cloud (blog.twitter.com) * Democratizing data analysis with Google BigQuery (blog.twitter.com) * Google BigQuery, Cloud data warehouse to power your data-driven innovation (cloud.google.com) * Google Data Studio, Your data is beautiful. Use it. (datastudio.withgoogle.com) * Looker Studio, formerly Data Studio (datastudio.google.com) * Stack Overflow’s engineering blog (Stack Overflow) * Apache Airflow (Wikipedia) * Stack Exchange performance (Stack Exchange) * Elon Musk and Twitter employees engage in war of words (NewsBytesApp.com)
Tip of the Week * VS Code has a plugin for Kubernetes and it’s actually very nice! Particularly when you “attach” to the container. It installs a couple bits on the container, and you can treat it like a local computer. The only thing to watch for … it’s very easy to set your local context! (marketplace.visualstudio.com)
* kafkactl is a great command line tool for managing Apache Kafka and has a consistent API that is intuitive to use. (deviceinsight.github.io)
* Cruise Control is a tool for Apache Kafka that helps balance resource utilization, detect and alert on problems, and administrate. (GitHub)
* iTerm2 is a terminal emulator for macOS that does amazing things. Why aren’t you already using it? (iterm2.com)
+ Previously mentioned in epsiode 147 and episode 161.
* Message compression in Kafka will help you save a lot of space and network bandwidth, and the compression is per message so it’s easy to enable in existing systems! (cwiki.apache.org)
It's that time of year where we've got money burning a hole in our pockets. That's right, it's time for the annual shopping spree. Meanwhile, Fiona Allen is being gross, Joe throws shade at Burger King, and Michael has a new character encoding method.
We gather around the watercooler to discuss the latest gossip and shenanigans have been called while Coach Allen is not wrong, Michael gets called out, and Joe gets it right the first time.
We wrap up Git from the Bottom Up by John Wiegley while Joe has a convenient excuse, Allen gets thrown under the bus, and Michael somehow made it worse.
This episode, we learn more about Git's Index and compare it to other version control systems while Joe is throwing shade, Michael learns a new command, and Allen makes it gross.
It's time to understand the full power of Git's rebase capabilities while Allen takes a call from Doc Brown, Michael is breaking stuff all day long, and Joe must be punished.
We are committed to continuing our deep dive into Git from the Bottom Up by John Wiegley, while Allen puts too much thought into onions, Michael still doesn't understand proper nouns, and Joe is out hat shopping.
It's surprising how little we know about Git as we continue to dive into Git from the Bottom Up, while Michael confuses himself, Joe has low standards, and Allen tells a joke.
After working with Git for over a decade, we decide to take a deep dive into how it works, while Michael, Allen, and Joe apparently still don't understand Git.
Once again, Stack Overflow takes the pulse of the developer community where we have all collectively decided to switch to Clojure, while Michael is changing things up, Joe is a future predicting trailblazer, and Allen is "up in the books"
We're going back in time, or is it forward?, as we continue learning about Google's automation evolution, while Allen doesn't like certain beers, Joe is a Zacker™, and Michael poorly assumes that UPSes work best when plugged in.
We explore the evolution of automation as we continue studying Google's Site Reliability Engineering, while Michael, ah, forget it, Joe almost said it correctly, and Allen fell for it.
We finished. A chapter, that is, of the Site Reliability Engineering book as Allen asks to make it weird, Joe has his own pronunciation, and Michael follows through on his promise.
We haven't finished the Site Reliability Engineering book yet as we learn how to monitor our system while the deals at Costco as so good, Allen thinks they're fake, Joe hasn't attended a math class in a while, and Michael never had AOL.
We say "toil" a lot this episode while Joe saw a movie, Michael says something controversial, and Allen's tip is to figure it out yourself, all while learning how to eliminate toil.
Welcome to the morning edition of Coding Blocks as we dive into what service level indicators, objectives, and agreements are while Michael clearly needs more sleep, Allen doesn't know how web pages work anymore, and Joe isn't allowed to beg.
We learn how to embrace risk as we continue our learning about Site Reliability Engineering while Johnny Underwood talked too much, Joe shares a (scary) journey through his mind, and Michael, Reader of Names, ends the show on a dark note.
It's finally time to learn what Site Reliability Engineering is all about, while Jer can't speak nor type, Merkle got one (!!!), and Mr. Wunderwood is wrong.
We're living through the tail end, maybe?, of the Great Resignation, so we dig into how that might impact software engineering careers while Allen is very somber, Joe's years are ... different, and Michael compares Apples to Apples.
We dive into what it takes to adhere to minimum viable continuous delivery while Michael isn't going to quit his day job, Allen catches the earworm, and Joe is experiencing full-on Stockholm syndrome.
We have a retrospective about our recent Game Ja Ja Ja Jam, while Michael doesn't know his A from his CNAME, Allen could be a nun, and Joe still wants to be a game developer.
We wrap up our discussion of PagerDuty's Security Training, while Joe declares this year is already a loss, Michael can't even, and Allen says doody, err, duty.
We're pretty sure we're almost done and we're definitely all present for the recording as we continue discussing PagerDuty's Security Training, while Allen won't fall for it, Joe takes the show to a dark place, and Michael knows obscure, um, stuff.
We continue our discussion of PagerDuty's Security Training presentation while Michael buys a vowel, Joe has some buffer, and Allen hits everything he doesn't aim for.
We're taking our time as we discuss PagerDuty's Security Training presentations and what it means to "roll the pepper" while Michael is embarrassed in front of the whole Internet, Franklin Allen Underwood is on a full name basis, and don't talk to Joe about corn.
With Game Ja-Ja-Ja-Jamuary coming up, we discuss what makes a game engine, while Michael's impersonation is spot-on, Allen may really just be Michael, and Joe already has the title of his next podcast show at the ready.
We wrap up the discussion on partitioning from our collective favorite book, Designing Data-Intensive Applications, while Allen is properly substituted, Michael can't stop thinking about Kafka, and Joe doesn't live in the real sunshine state.
We crack open our favorite book again, Designing Data-Intensive Applications by Martin Kleppmann, while Joe sounds different, Michael comes to a sad realization, and Allen also engages "no take backs".
The Mathemachicken strikes again for this year's shopping spree, while Allen just realized he was under a rock, Joe engages "no take backs", and Michael ups his decor game.
We discuss the pros and cons of speaking at conferences and similar events, while Joe makes a verbal typo, Michael has turned over a new leaf, and Allen didn't actually click the link.
Joe goes full shock jock, but only for a moment. Allen loses the “Most Tips In A Single Episode: 2021” award, and Michael didn’t get the invite notification in this […]
Some things just require discussion, such as Docker's new licensing, while Joe is full of it, Allen WILL fault them, and Michael goes on the record.
We step away from our microservices deployments to meet around the water cooler and discuss the things on our minds, while Joe is playing Frogger IRL, Allen "Eeyores" his way to victory, and Michael has some words about his keyvoard, er, kryboard, leybaord, ugh, k-e-y-b-o-a-r-d!
We decide to dig into the details of what makes a microservice and do we really understand them as Joe tells us why we really want microservices, Allen incorrectly answers the survey, and Michael breaks down in real time.
We dive into JetBrains' findings after they recently released their State of the Developer Ecosystem for 2021 while Michael has the open down pat, Joe wants the old open back, and Allen stopped using the command line.
It's time to take a break, stretch our legs, grab a drink, and maybe even join in some interesting conversations around the water cooler as Michael goes off script, Joe is very confused, and Allen insists that we stay on script.
We wrap up our replication discussion of Designing Data-Intensive Applications, this time discussing leaderless replication strategies and issues, while Allen missed his calling, Joe doesn't read the gray boxes, and Michael lives in a future where we use apps.
We continue our discussion of Designing Data-Intensive Applications, this time focusing on multi-leader replication, while Joe is seriously tired, and Allen is on to Michael's shenanigans.
We dive back into Designing Data-Intensive Applications to learn more about replication while Michael thinks cluster is a three syllable word, Allen doesn't understand how we roll, and Joe isn't even paying attention.
We couldn't decide if we wanted to gather around the water cooler or talk about some cool APIs, so we opted to do both, while Joe promises there's a W in his name, Allen doesn't want to say graph, and Michael isn't calling out applets.
We talk about the various ways we can get paid with code while Michael failed the Costco test, Allen doesn't understand multiple choice questions, and Joe has a familiar pen name.
We discuss all things APIs: what makes them great, what makes them bad, and what we might like to see in them while Michael plays a lawyer on channel 46, Allen doesn't know his favorite part of the show, and Joe definitely pays attention to the tips of the week.
We discuss the parts of the scrum process that we're supposed to pay attention to while Allen pronounces the m, Michael doesn't, and Joe skips the word altogether.
During today's standup, we focus on learning all about Scrum as Joe is back (!!!), Allen has to dial the operator and ask to be connected to the Internet, and Michael reminds us why Blockbuster failed.
We dig into recursion and learn that Michael is the weirdo, Joe gives a subtle jab, and Allen doesn't play well with others while we dig into recursion.
It's been a minute since we last gathered around the water cooler, as Allen starts an impression contest, Joe wins said contest, and Michael earned a participation award.
We dig into all things Python, which Allen thinks is pretty good, and it's rise in popularity, while Michael and Joe go toe-to-toe over a gripe, ahem, feature.
We step back to reflect on what we learned from our first game jam, while Joe's bathroom is too close and Allen taught Michael something (again).
We discuss all things open-source, leaving Michael and Joe to hold down the fort while Allen is away, while Joe's impersonations are spot on and Michael is on a first name basis, assuming he can pronounce it.
We start off the year discussing our favorite developer tools of 2020, as Joe starts his traditions early, Allen is sly about his résumé updates, and Michael lives to stream.
It's the end of 2020. We're all tired. So we phone it in for the last episode of the year as we discuss the State of the Octoverse, while Michael prepared for the wrong show (again), Allen forgot to pay his ISP bill and Joe's game finished downloading.
We discuss the things we're excited about for 2021 as Michael prepared for a different show, Joe can't stop looking at himself, and Allen gets paid by the tip of the week.
We learn all the necessary details to get into the world of developer game jams, while Michael triggers all parents, Allen's moment of silence is oddly loud, and Joe hones his inner Steve Jobs.
We wrap up our deep dive into The DevOps Handbook, while Allen ruined Halloween, Joe isn't listening, and Michael failed to... forget it, it doesn't even matter.
It's our favorite time of year where we discuss all of the new ways we can spend our money in time for the holidays, as Allen forgets a crucial part, Michael has "neons", and Joe has a pet bear.
We dive into the benefits of enabling daily learning into our processes, while it's egregiously late for Joe, Michael's impersonation is awful, and Allen's speech is degrading.
We wrap up the second way from The DevOps Handbook, while Joe has a mystery episode, Michael doesn't like ketchup, and Allen has a Costco problem.
We gather around the water cooler to discuss some random topics, while Joe sends too many calendar invites, Allen interferes with science, and Michael was totally duped.
We learn the secrets of a safe deployment practice while continuing to study The DevOps Handbook as Joe is a cartwheeling acrobat, Michael is not, and Allen is hurting, so much.
We're using telemetry to fill in the gaps and anticipate problems while discussing The DevOps Handbook, while Michael is still weird about LinkedIn, Joe knows who's your favorite JZ, and Allen might have gone on vacation.
It's all about telemetry and feedback as we continue learning from The DevOps Handbook, while Joe knows his versions, Michael might have gone crazy if he didn't find it, and Allen has more than enough muscles.
Our journey into the world of DevOps continues with The DevOps Handbook as Michael doesn't take enough tangents, Joe regrets automating the build, err, wait never regrets (sorry), and ducks really like Allen.
We begin our journey into the repeatable world of DevOps by taking cues from The DevOps Handbook, while Allen loves all things propane, Joe debuts his "singing" career with his new music video, and Michael did a very bad, awful thing.
We review the Stack Overflow Developer Survey in the same year it was created for the first time ever, while Joe has surprising news about the Hanson Brothers, Allen doesn't have a thought process, and Michael's callback is ruined.
As we learn from Google about how to navigate a code review, Michael learns to not give out compliments, Joe promises to sing if we get enough new reviews, and Allen introduces a new section to the show.
We learn what to look for in a code review while reviewing Google's engineering practices documentation as Michael relates patterns to choo-choos, Joe has a "weird voice", and Allen has a new favorite portion of the show.
We dig into Google's engineering practices documentation as we learn how to code review while Michael, er, Fives is done with proper nouns, Allen can't get his pull request approved, and Joe prefers to take the average of his code reviews.
We gather around the water cooler at 6 foot distances as Michael and Joe aren't sure what they streamed, we finally learn who has the best fries, at least in the US, and Allen doesn't understand evenly distributing your condiments.
We dig into the details of how databases use B-trees as we continue our discussion of Designing Data-Intensive Applications while Michael's description of median is awful, live streaming isn't for Allen, and Joe really wants to bring us back from the break.
Since we can't leave the house, we discuss what it takes to effectively work remote while Allen's frail body requires an ergonomic keyboard, Joe finally takes a passionate stance, and Michael tells them why they're wrong.
It's time to learn about SSTables and LSM-Trees as Joe feels pretty zacked, Michael clarifies what he was looking forward to, and Allen has opinions about Dr Who.
In this episode, Allen is back, Joe knows his maff, and Michael brings the jokes, all that and more as we discuss the internals of how databases store and retrieve the data we save as we continue our deep dive into Designing Data-Intensive Applications.
Jamie from https://dotnetcore.show/ and Allen, ya know, from Coding Blocks, sat down together at NDC London to talk about the hot topics from the conference as well as how to […]
We dive into declarative vs imperative query languages as we continue to dive into Designing Data-Intensive Applications while Allen is gallivanting around London, Michael had a bullish opinion, and Joe might not know about The Witcher.
While we continue to dig into Designing Data-Intensive Applications, we take a step back to discuss data models and relationships as Michael covers all of his bases, Allen has a survey answer just for him, and Joe really didn't get his tip from Reddit.
We're comparing data models as we continue our deep dive into Designing Data-Intensive Applications as Coach Joe is ready to teach some basketball, Michael can't pronounce 6NF, and Allen measured some geodesic distances just this morning.
We dig into what it takes to make a maintainable application as we continue to learn from Designing Data-Intensive Applications, as Allen is a big fan of baby Yoda, Michael's index isn't corrupt, and Joe has some latency issues.
We continue to study the teachings of Designing Data-Intensive Applications, while Michael's favorite book series might be the Twilight series, Joe blames his squeak toy chewing habit on his dogs, and Allen might be a Belieber.
We start our deep dive into Joe's favorite new book, Designing Data-Intensive Applications as Joe can't be stopped while running downhill, Michael might have a new spin on #fartgate, and Allen doesn't quite have a dozen tips this episode.
We discuss this year's shopping spree only to learn that Michael spent too much, Allen spent too much, and Joe spent too much.
We debate whether DevOps is a job title or a job responsibility as Michael finally understands dev.to's name, Allen is an infosec expert, and Joe wears his sunglasses at night.
We take an introspective look into what's wrong with Michael's life, Allen keeps taking us down random tangents, and Joe misses the chance for the perfect joke as we wrap up our deep dive into Hasura's 3factor app architecture pattern.
We discuss the second factor of Hasura's 3factor app, Reliable Eventing, as Allen says he still _surfs_ the Internet (but really, does he?), it's never too late for pizza according to Joe, and Michael wants to un-hear things.
We begin to twitch as we review the first factor of Hasura's 3factor app, Realtime GraphQL, while Allen gets distrac ... SQUIRREL!, Michael might own some bell bottoms, and Joe is stuck with cobalt.
We learn how to apply the concepts of The Pragmatic Programmer to teams while Michael uses his advertisement voice, Joe has a list, and Allen doesn't want anyone up in his Wheaties.
After 112 episodes, Michael can't introduce the show, Allen pronounces it "ma-meee", and don't make Joe run your janky tests as The Pragmatic Programmer teaches us how we should use exceptions and program deliberately.
We continue our dive into The Pragmatic Programmer and debate when is it text manipulation vs code generation as Joe can't read his bill, Michael makes a painful recommendation, and Allen's gaming lives up to Southern expectations.
It's about time we finally learn how to debug by taking take a page from The Pragmatic Programmer playbook, while Michael replaces a developer's cheat sheet, Joe judges the H-O-R-S-E competition for VI, and Allen stabs you in the front.
We dig into the details of the basic tools while continuing our journey into The Pragmatic Programmer while Joe programs by coincidence, Michael can't pronounce numbers, and Allen makes a point.
Joe is distracted by all of the announcements from E3, Allen is on the run from the Feebs, and Michael counts debugging as coding. All this and more as we continue discussing The Pragmatic Programmer.
The Pragmatic Programmer teaches us how to use tracer bullets versus prototyping while Joe doesn't know who won the Game of Thrones, Allen thought he knew about road numbers, and Michael thinks 475 is four letters.
The dad jokes are back as we learn about orthogonal code while JZ (the 8-mile guy) has spaghetti on him, Michael's Harry Potter references fail, and Allen voice goes up a couple octaves.
We take a deep dive into the various forms of duplication and jump aboard the complain train as Allen complains about Confluent's documentation, Michael complains about Docker's documentation, and Joe complains about curl.
We begin our journey into the wisdom of The Pragmatic Programmer, which as Joe puts it, it’s less about type-y type-y and more about think-y think-y, while Allen is not […]
We dig into the nitty gritty details of what a Progressive Web App (PWA) is and why you should care, while Allen isn't sure if he is recording, Michael was the only one prepared to talk about Flo and the Progressive Price Gun, and Joe has to get his headphones.
The Date deep dive continues as we focus in on C# and JavaScript, while Michael reminisces about the fluorescent crayons, Joe needs a new tip of the week, and Allen confuses time zones.
We take a deep dive into understanding why all Date-s are not created equal while learning that Joe is not a fan of months, King Kong has nothing on Allen, and Michael still uses GETDATE(). Oops.
After being asked to quiet down, our friend, John Stone, joins us again as we move the conversation to the nearest cubicle while Michael reminds us of Bing, Joe regrets getting a cellphone, and Allen's accent might surprise you.
We gather around the water cooler to celebrate our 100th episode with our friend John Stone for some random developer discussions as Michael goes off script, Joe needs his techno while coding, and Allen sings some sweet sounds.
We learn all about JAMstack in real-time as Michael lowers the bar with new jokes, Allen submits a pull request, and Joe still owes us a tattoo.
We dig into heaps and tries as Allen gives us an up to date movie review while Joe and Michael compare how the bands measure up.
We ring in 2019 with a discussion of various trees as Allen questions when should you abstract while Michael and Joe introduce us to the Groot Tree.
Just in time to help you spread some cheer this holiday season, the dad jokes are back as we dig into the details of hash tables and dictionaries.
We continue our deep dive into data structures, this time focusing in on arrays and array-like types as Allen gives Shania Twain some singing competition, Joe is going to owe us another tattoo, and wait ... when does Michael think C++ was invented?
We begin our journey into data structures by taking a deep dive into primitives while Allen makes Michael blush and Joe crashes his browser.
With the holiday season soon approaching, we address the most important requirements list of all ... our wish lists as Joe has to disclose a cheese powder incident, Michael hopes his Bitcoin gains some value, and Allen researches his purchases to the extreme.
This is a special episode recorded at Microsoft Ignite 2018 where John Callaway from The 6 Figure Developer Podcast joins Allen Underwood to talk about Azure Functions and CosmosDB. Find out what they are and why you might want to try them out for yourself.
We continue our dive into how to learn things while Michael's voice sounds an awful lot like Joe's, Joe says it's a square, and Allen says it's a triangle ... oh, and Google Feud is back!
We have some fun with our names, get ahead of ourselves during Survey Says, and vet Michael's tip on-air as we take a deep dive into comparing some popular Git workflows and when should we use which.
We wrap up our conversation on complexity and play some more over/under as Allen thinks learning is backwards, Michael doesn't write clean code, and Joe brings his dog to the discussion.
We continue our dive into Rob Conery's The Imposter's Handbook as Allen is Allen, Joe is Michael, Michael is Joe.
Joe's voice sounds funny, Allen has a theme, and Michael pours one out for Media Play as Michael's and Allen's impersonation of Joe is on point (#NailedIt).
We meet up around the water cooler for a quick round of lightning talks as Allen and Michael sing FizzBuzz while Joe passes the caching buck.
We continue digging into Rob Conery's The Imposter's Handbook as Joe explains Florida time, Allen likes greedy algorithms, and Michael shares his geography knowledge.
It's time we discuss algorithms we all need to know as we continue diving into Rob Conery's The Imposter's Handbook while Michael will read anything, Allen questions Greenland's name, and Joe talks wormholes.
We're talking databases, indexes, search engines, and why they're basically microwaves in this episode while Joe wears a polo, Allen's quick brown fox jumps over whatever, and Michael gives out fake URLs.
Inspired by Rob Conery's The Imposter's Handbook, we take an introspective look at ourselves to find two weaknesses and one strength while Allen shows off his vocal prowess in song, Joe needs a list, and Michael is a dash.
This episode we talk complexity theory while digging into Rob Conery's The Imposter's Handbook as Allen channels his inner Austin Powers, Michael finds linearly to complex to pronounce, and Joe ruins Batman for the rest of us.
This episode we’re talking about server naming conventions, confusing command line arguments, and how high we can get our voices. Huge thanks to the NSA and the freedom of information […]
It's time for more design Ant-EYE or Ant-EEE patterns as we venture into cesspool that awaits. Come find out what these patterns are, why you should, and how to avoid them. Bonus: Michael drops the term Heinz Doofenshmirtz - Joe and Allen didn't know this pattern, but maybe you will.
It's time for more cowbell as we have a special guest in the studio, Will Madison (@IAmWillMadison), join us as Allen finally gets tripped up trying to pronounce a name, Joe teaches us the value of practice, and Michael evacuates in a rainbow colored straight line.
We're back with our last deep dive into Robert C. Martin's latest book, Clean Architecture, while Allen suffers from sleep deprivation, Joe shows us his dance moves, and Michael's mind is blown on how to unit test.
It's time for another deep dive into Robert C. Martin's Clean Architecture as Joe puts us on the spot, Allen has a new mission, and Michael shares his Easter eggs.
Michael can't tell higher from lower, Allen puts his views where he wants them, and Joe snaps it to a Slim Jim as we discuss how to make our architectures scream while discussing Robert C. Martin's Clean Architecture.
It's time for another deep dive into Robert C. Martin's Clean Architecture as Allen warns us about driving in front of him, Joe tries to describe a diagram again, and Michael can't understand the survey results.
Joe drinks too much coffee, Allen spits his coffee out, and Michael feels vindicated as the discussions about Robert C. Martin's latest book, Clean Architecture, continues.
Joe baits Michael, Michael takes the bait, and Allen lets it happen, as Uncle Bob explains how we can quantify the coupling between our components from his latest book, Clean Architecture.
Joe is down with OCP, Michael argues DRY, and Allen deletes our show notes as we dig into Components and Component Cohesion from Robert C. Martin's (aka Uncle Bob) Clean Architecture.
We're back with another installment as we challenge ourselves to compare how we'd each spend $2,500 on developer gear as Allen waxes on about the loudest quiet keyboard, Joe teaches us how cheese is made, and Michael puts some neon on his computer.
Michael forgets what his favorite part of the show is, Joe makes us wait to learn what his favorite part is, and Allen pronounces it "pair-a-dig-'ems" as we continue our deep dive into Uncle Bob's latest book: Clean Architecture.
Joe learns of our harebrained idea, Michael learns of Eisenhower’s matrix, and Allen explains polyfills as we begin our dive into Uncle Bob’s latest book, Clean Architecture. Prefer to read these […]
Allen brings the dad jokes, Michael unplugs, and Joe gets a second wind as we discuss the anti-patterns found in object oriented programming.
It's time for another episode as Joe wants to choke a developer, Michael scraps his new social networking platform, and Allen finally learns of dad jokes while we continuing the anti-patterns conversation.
We've discussed design patterns too much. Now it's time for some discussion about anti-patterns as Joe has dark visions about robots, Allen has to take sensitivity training, and Michael picks Arial.
More Domain Driven Design talk this week: Supple Design, Declarative(ish?) Programming, and Ohio Envy. Sponsors FreshBooks.com/Coding – Use code “CODING BLOCKS” in the “How Did You Hear About Us?” section […]
Know what Joe and Waldo have in common? We can't find either, as this week, it's just Allen and Michael to continue the dive into Domain Driven Design.
We're not saying that Michael is Carmen Sandiego. We're just saying that nobody has ever seen them in a room together. And this week, we don't know where in the world either are, as Allen and Joe continue the Domain Driven Design discussion without Michael. Nor Carmen.
Stitcher is back and so are we as Michael proves he doesn't have a career as a rapper, Allen can't type on his phone, and Joe tweets with famous authors as we continue our dive into Domain Driven Design talking about aggregate roots, factories, and repositories.
We continue our Domain Driven Design conversation this week as Allen is indecisive, Michael decides for him, and Joe can't handle the night life.
We’re back with another exciting episode as Michael questions Hollywood, Allen dreams of his Hackintosh, and Joe is surrounded by Star Wars as we talk about how to jumpstart your next […]
This week, Michael asks his customers about their anemic domain model, Allen talks in front of people, and Joe plays Rocket League as we begin our dive into understanding domain […]
This week we talk about all of the bad things we’ve done while making software. The good, the bad, … oh wait, it compiles, never mind. Want to be part of […]
We’re back with another deep dive into the infamous book Clean Code by Uncle Bob as Joe alters columns, Michael misreads things, and Allen has a positive customer service experience. Care […]
This week Allen is troubled by circles, Michael talks like a game show host, and Joe announces it's twins as we continue our deep dive into the classic Clean Code book by Robert C. Martin.
When and why should you write unit tests, and just how important are they? Take a listen and see what YOU think. Podcast News iTunes: AUS Dan G, bryangrove, Criviere, […]
In this episode we talk about how to insulate your application at it’s boundaries? What in the world does that even mean?! We’re not talking about those boundaries where others […]
This week, we continue our Clean Code discussion as we dive into the joys and pains of error handing.
This week we’re drawing a line in the sand between objects and data structures. Who will win? Take a listen and decide for yourself! For the full show notes visit: […]
Ever judged a book by its cover? Of course you have. Ever passed judgement on some code simply because it didn’t look pretty? There’s more to writing code than having […]
This week, Michael fails geography, Allen introduces us to Croom, and Joe has to potty as we head into our third installment of the Clean Code series. Want to be […]
We continue talking our way through Clean Code, taking a deep look at the building blocks of programming in the quest to write the best functions. Oh, and everybody sings. […]
In this episode, we take our first dive into the book Clean Code by Robert Martin and specifically we talk about writing meaningful names for all things code related. You’ll […]
Storing smaller subsets of data in a faster, closer memory can make astronomical differences in performance. This episode we’re talking about the caching tools and techniques that application frameworks provide. […]
In this episode we give a general overview of caching, where it’s used, why it’s used, and what the differences in hardware implementations mean in terms we can understand. This […]
This week on Coding Blocks, Allen says www as best he can, Joe eats the microphone, and Michael does something crazy as we discuss Stack Overflow’s Salary Calculator and our […]
This time we’re talking about problems with nulls, stored procedures, and impostor syndrome. Link to Episode 43’s Full Show Notes: http://www.codingblocks.net/episode43 News Join us on slack: http://www.codingblocks.net/ Thanks for the […]
In this episode we go back to the design pattern well that we’ve been away from for so long. We cover the Command, Repository and Mediator design patterns. It was […]
This week on Coding Blocks, Joe changes a different kind of string, Allen drools over the Hellcat, and Michael shares his random thoughts. We span a collection of topics including GraphQL framework envy, bash on Windows, and whether it takes two to Django.
Are you an Advanced Programmer? We dig into the final section of Robert Read’s fantastic writing: How to be a programmer. Also, how to cheat at Jira, a lazy butcher […]
In Episode 38, we dug into the first section of the essay by Robert Read on what it takes to be a programmer. In that episode there was a lot […]
Talking about the short book “How to be a Programmer”, which covers a huge spectrum of important topics for developers of all levels. The Puddle Poll! Thanks for the share […]
We wrapped up 2015 with another favorites of episode and a chance to win a gray Coding Blocks T-Shirt just by leaving a comment on the show notes page! Tools are […]
Welcome back to the dramatic conclusion of our discussion on the 12 factor app. This time we’re talking dev/prod parity, logs, and admin processes. Oh, and Call of Duty! News […]
Welcome back to the dramatic conclusion of our discussion on the 12 factor app. This time we're talking dev/prod parity, logs, and admin processes. Oh, and Call of Duty!
It's time for more DevOps fun as we continue learning about the Twelve-Factor app. This week we dive into the next three chapters: port binding, concurrency, and disposability.
The holidays are coming sooner than we realized, so we gotta get our wish lists together. After all, no one wants to sit around the Festivus Pole without their favorite dev toys. This week we discuss some of the toys we love, as well as the ones we drool over, and even the ones we're not so crazy about.
We’re headed back to the Twelve-Factor app territory and this time we’re picking up with the next three chapters – backing services, building and releasing and processes. Jump in to […]
Dipping our toes into the DevOps waters with the Twelve-Factor App. How important is depedency management, and how fired would you be if you accidentally leaked your company’s source code? […]
In this episode we dive into Javascript Promises. If you’re used to the olden way of doing an async call with a callback, you’ll definitely want to give this episode a listen […]
Part 4 of our design patterns series, this time up it's Adapters, Facades, and Mementos. Oh, an which tech luminary would make the best head of state!
It's that time again.
This week we answer a question, Allen registers for school, Joe reads some numbers, Michael breaks out the survey results, and Joe cringes at the thought of bidets. It's time for episode 29! And we thought, what better to talk about than to continue our discussion on hierarchical data solutions.
So, how DO you persist hierarchical Data? We discuss two common solutions to this age-old problem: Adjacency Lists and Nested Set Models. Also, Build Atlanta, technical problems, multi-monitor vs ultra-wide, […]
In this, Episode 27 of the Coding Blocks Podcast, we are answering several questions from our listeners regarding: more frequent episodes, naming of classes / assemblies, Test Driven Development, the […]
On this episode we discuss algorithms, puzzles and how to approach them when asked to solve one in the interview process. We discuss many of the problems programmers face when being asked to solve these types of problems as well as steps to alleviate some of these common issues. We also provide a number of resources for sharpening your problem solving skills as well as a number of resources, and of course our favorite tips!
This week we give away Joe's stuff, we break up with IE8 like a big boy, Joe and Allen get excited about readme files, and we argue about which is worse: bad code or bad architecture. That and more in this week's episode where we explore the new bits in ASP.NET 5.
This week we tackle one of life's great quesitons, does Jack Bauer give high fives? Also, we go over everything you need to know about delegates, events, callbacks and closures in .NET.
Big thanks to @kappelcodesalot for being the inspiration for this episode!
It's time to get back to basics. It's easy as a software developer to be working on the latest and greatest frameworks, using the best methodologies, trying out new things. Sometimes it's a good idea to get a refresher on the very basic fundamentals. In this episode we go over the access modifiers that are common in C# and Java as well as ways to emulate these types of behaviors in Javascript. And let's be honest - encapsulation is only effective if you're providing programmers that come after you with a roadmap of how things should work. For that reason we also discuss Command Query Separation and some other ideas and practices that are a part of good programming practices. Be sure to head over to www.CodingBlocks.net/review and leave us a review on your favorite podcasting platform!
Coding Blocks Episode 22 is live! Organizing your code, moving from school-work to work-work, the future of Silverlight, and lots of poo-pooing! News Great testing tool suggestions from Anders Bauman: […]
We gather around the Festivus pole this holiday season and before we get into the Airing of Grievances, we discuss our favorite tools. No, not people. Actual tools. Srsly.
I figured this title was appropriate considering it's been a month since our last episode. We've all been incredibly busy so we hope you've been patient waiting and maybe, just maybe it was worth the wait! We've crammed quite a bit into this episode which is all about testing. Follow the more link to see the show notes for this particular episode and don't forget to click one of the share buttons there to let all your friends know about the podcast!
We’re back to the gang of four, continuing with another segment of design patterns. This time we’re talking about some of our favorite Behavioral Design Patterns: Observer, Chain of Responsibilities, […]
We’re very excited about ASP.NET vNext, we’ve never been seen together, and a cute little ninja was MEAN to Allen. All that and more in this week’s episode where we attempt to answer some questions.
In this episode, we have a discussion about what type of technology stack you should choose when you go to create your own project whether it be for profit or […]
This week we’re following up on our episode about talking about Creational Design Patterns a few of our favorite behavioral patterns: Template. Strategy, and Null Object. Also, pumpkin spice lattes, […]
This week we’re discussing NDpend, a static analysis tool for .NET. Triage your biggest problems, Prioritize your refactoring, and CYA with real metrics and trend lines. We also discuss hidden […]
Welcome back for part 2 of the podcast about databases. In this half, we discuss several of the things we believe that developers should know about databases. From joins to […]
Part one of our two part database podcast starts with choosing the RDBMS (Relational Database Management System) and what to do when you run into deficiencies in that particular database system. […]
“Water Cooler” episode talking about sweet sugary C# kisses, JavaScript as a first language, T-shaped developers, how to get addicted to drugs and…Where in the World is Carmen Sandiego? Points […]
This week we’re tackling the first section of seminal Design Patterns book: Creational Patterns. We discuss factories of factories, “bullet hell” games, pathological liars, and Allen’s lack of voice. Big […]
This week we’re taking pot shots from the peanut gallery! We talk about new features in C# 6. What we like, what we love…and binary literals. We also struggle to […]
You down with AOP? This week we're talking with Vlad Hrybok about his spectacular Aspect Oriented Programming Framework: Aspectacular.
Highlights include lots of Design Patterns, Acronyms, Buzzwords and...Duff Beer?
You down with AOP? This week we’re talking with Vlad Hrybok about his spectacular Aspect Oriented Framework: Aspectacular. Highlights include lots of Design Patterns, Acronyms, Buzzwords and…Duff Beer? ChangeLog Interesting […]
Q: What do developers love more than developing? A: Expensive accessories!!! This week we’re talking about our Christmas in July lists. Dream keyboards, mouses, office furniture and tablets…oh my! Lots […]
This week we tackle the SOLID principles in .NET and discuss the eternal struggle between perfect code and looming deadlines. Please leave us feedback in your Podcasting app of choice! […]
This week we’re talking about LINQ, what’s so special about .NET, the differences IQueryable and IEnumerable, and another round of “Never Have I Ever”. Oh, and jokes! Download the episode […]
This week we’re trying to wrap our heads around open source software licensing. We discuss the main types of licenses (and a few of our favorites!), what it means to […]
This week we discuss application security in .NET via the 2013 OWASP top 10.
We discuss the top 10, how to prevent them and give you a examples of famous attacks that successfully targetted these vulnerabilities.
We also give you our predictions for the 2014 top 10 and beyond in a post PRISM world and, as always, our tips and tricks of the week.
This week, we talk about OWASP and their list of top 10 application security risks. What they are, infamous examples, and what you can do about it. Download the episode […]
This episode is all about source control etiquette. It’s a bit different from the last two podcasts we released and we’d love to hear how you liked it! Subscribe on […]
This episode is all about boxing and unboxing. We discuss memory management, the pros (yes, there are a few!) and cons of boxing/unboxing, some of the weird side effects and […]
The good, the bad, and the ugly side of interfaces. We list some minor gripes, their limitations, and some strange gotchas as well as some tips for how we like […]