# rss_item

guid: yt:video:pNp4ug5F6To
title: Polishing and Releasing My Tiny Geography Game
author: Sebastian Lague
url: https://www.youtube.com/watch?v=pNp4ug5F6To
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCmtyQOKKmrMVaKuRXz02jbQ
enclosure_url: https://www.youtube.com/v/pNp4ug5F6To?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I've been making some small tweaks and additions to my little geography game based on the great feedback I've received from all of you (thank you!).

If you'd like to play the game, you can download it here: https://sebastian.itch.io/geographical-adventures

The project source is over here: https://github.com/SebLague/Geographical-Adventures

If you'd like to support my work (and get early access to new videos and projects), please consider becoming a patron of the channel over here:
https://www.patreon.com/SebastianLague

Project playlist: https://youtube.com/playlist?list=PLFt_AvWsXl0dT82XMtKATYPcVIhpu2fh6

Chapters
0:00 Intro
0:17 Creating a Compass
3:58 Making a Map
10:47 Tweaking the Terrain
13:13 Better city lights
15:40 Star Colour
16:27 Nighttime Visibility
17:26 Hot Air Balloons
19:52 Speed Control
21:34 Skywriting Experiment
24:18 The Final Result

Music:
Spread your Wings - Evgeny Bardyuzha
Immersion - Michael FK
Back Home - Max H
Icicles - Biba Dupont
Less Traveled - Hans Johnson
Let the Rains Come - We Dream of Eden
How it Was - Laurel Violet
Brightest - Ardie Son
L'Absinthe Brûle - Biba Dupont
It Will Come Back - The Stolen Orchestra
Over the Canyon - Gray North
Autumn in Paris - Jan Baars
Passion - Veaceslav Draganov


guid: yt:video:hfMk-kjRv4c
title: How to Create a Neural Network (and Train it to Identify Doodles)
author: Sebastian Lague
url: https://www.youtube.com/watch?v=hfMk-kjRv4c
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCmtyQOKKmrMVaKuRXz02jbQ
enclosure_url: https://www.youtube.com/v/hfMk-kjRv4c?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Exploring how neural networks learn by programming one from scratch in C#, and then attempting to teach it to recognize various doodles and images.

Source code: https://github.com/SebLague/Neural-Network-Experiments
Demo: https://sebastian.itch.io/neural-network-experiment

If you'd like to support me in creating more videos (and get early access to new stuff), you can join my patreon here: https://www.patreon.com/SebastianLague

The data is from:
Digits http://yann.lecun.com/exdb/mnist/
Fashion https://github.com/zalandoresearch/fashion-mnist
Doodles https://github.com/googlecreativelab/quickdraw-dataset
Cifar10 https://www.cs.toronto.edu/~kriz/cifar.html

Chapters
0:00 Introduction
2:39 The decision boundary
3:49 Weights
5:42 Biases
6:45 Hidden layers
7:45 Programming the network
9:57 Activation functions
12:42 Cost
15:07 Gradient descent example
18:22 The cost landscape
19:55 Programming gradient descent
21:10 It's learning! (slowly)
23:21 Calculus example
27:34 The chain rule
29:50 Some partial derivatives
33:14 Backpropagation
39:25 Digit recognition
43:56 Drawing our own digits
47:37 Fashion
48:25 Doodles
52:00 The final challenge

Music:
Cosmic Waves - Michael FK
Amber - The Stolen Orchestra
Beyond the Horizon - Sounds Like Sander
Air - Assaf Ayalon
Purest Form - Sounds Like Sander
Hear Wide Open - Sounds Like Sander
Universal Wonder - Moments
Roman P - Moments
All In Good Time - Shimmer
It Will Come Back - The Stolen Orchestra
Frontier - Shimmer
New Moon - Cloud Wave
Sunflower - Cody Martin
Inner Peace - Moments
Enchanted - Cody Martin
Just Around The Corner - Shimmer


guid: yt:video:hEDQpqhY2MA
title: Visualizing Data with 7-Segment Displays
author: Sebastian Lague
url: https://www.youtube.com/watch?v=hEDQpqhY2MA
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCmtyQOKKmrMVaKuRXz02jbQ
enclosure_url: https://www.youtube.com/v/hEDQpqhY2MA?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Displaying numbers is trickier than I expected! In this video we explore how to visualize the data inside of our simulated 4-bit registers, with the help of the double dabble algorithm and some seven segment displays.

Series playlist: https://www.youtube.com/playlist?list=PLFt_AvWsXl0dPhqVsKt1Ni_46ARyiCGSq
Simulation tool (work in progress): https://sebastian.itch.io/digital-logic-sim
Source code: https://github.com/SebLague/Digital-Logic-Sim
Support the channel: https://www.patreon.com/SebastianLague

Correction for a mistake in my boolean algebra explanation: https://www.youtube.com/watch?v=A-vLRThfJ4Q

Resources and Inspiration:
https://en.wikipedia.org/wiki/Double_dabble
https://electronics.stackexchange.com/questions/499884/3-digit-of-7-segment-on-logisim/499916#499916
https://pdf1.alldatasheet.com/datasheet-pdf/view/5697/MOTOROLA/SN54/74LS248.html

Music:
https://github.com/SebLague/Misc-Project-Info/blob/main/Digital-Logic-Sim/7Seg%20Music%20Credits.txt

Chapters
0:00 Intro
0:49 Two’s Complement Refresher
1:34 Seven-Segment Display + Truth Table
2:58 Boolean Algebra Basics
5:43 Simplifying the Equation
6:48 Converting Algebra to Logic Gates
8:33 Computer-Assisted Design
11:25 Testing the Digit Display Design
12:36 A Real-World Version (the 74LS248)
14:20 Visualizing the Data in a 4-bit Register
15:14 All Ten Digits
17:22 Binary Coded Decimal
19:49 The Double Dabble Algorithm
22:58 Dabbling with Logic Gates
24:05 Implementing Double Dabble
26:39 Displaying an 8-bit Number
27:18 Ripple Blanking
29:32 Displaying Negative Numbers
32:34 Testing the Final Design
33:50 Outro


guid: yt:video:_3cNcmli6xQ
title: Experimenting with Buses and Three-State Logic
author: Sebastian Lague
url: https://www.youtube.com/watch?v=_3cNcmli6xQ
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCmtyQOKKmrMVaKuRXz02jbQ
enclosure_url: https://www.youtube.com/v/_3cNcmli6xQ?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Let's figure out how to move data around inside our simulated computer. Featuring multiplexers, buses, and three-state logic.

Series playlist: https://www.youtube.com/playlist?list=PLFt_AvWsXl0dPhqVsKt1Ni_46ARyiCGSq
Simulation tool (work in progress): https://sebastian.itch.io/digital-logic-sim
Source code: https://github.com/SebLague/Digital-Logic-Sim
Support the channel: https://www.patreon.com/SebastianLague

Resources and Inspiration:
https://www.youtube.com/watch?v=QzWW-CBugZo
https://en.wikipedia.org/wiki/Three-state_logic
https://en.wikipedia.org/wiki/Bus_(computing)
The Art of Electronics (3rd edition)

Music Credits:
https://github.com/SebLague/Misc-Project-Info/blob/main/Digital-Logic-Sim/Bus%20Video%20Credits

Chapters
0:00 Intro
1:33 Multiplexers
3:47 Making a Mess
4:45 Public Transport to the Rescue
6:09 Push-Pull Outputs
9:17 Bus Contention
10:00 Three-State Outputs
12:23 Bus Buffer
14:56 Testing the Bus
18:08 Outro


guid: yt:video:Qz0KTGYJtUk
title: Coding Adventure: Ray Tracing
author: Sebastian Lague
url: https://www.youtube.com/watch?v=Qz0KTGYJtUk
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCmtyQOKKmrMVaKuRXz02jbQ
enclosure_url: https://www.youtube.com/v/Qz0KTGYJtUk?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I tried creating a custom ray/path tracing renderer. Featuring: maths, shaders, and cats!
This project was written in C# and HLSL, and uses the Unity game engine.

Source Code: https://github.com/SebLague/Ray-Tracing/tree/Episode01
Support the channel: https://www.patreon.com/SebastianLague
Coding Adventures Playlist: https://youtube.com/playlist?list=PLFt_AvWsXl0ehjAfLFsp1PGaatzAwo0uK

Learning Resources:
https://raytracing.github.io
https://blog.demofox.org/2020/05/25/casual-shadertoy-path-tracing-1-basic-camera-diffuse-emissive/

Music Credits:
https://github.com/SebLague/Misc-Project-Info/blob/main/Coding-Adventures/Ray-Tracing.txt

Chapters:
0:00 Intro
1:08 Cameras and Rays
3:30 The Pixel Shader
5:02 Drawing a Sphere
6:59 Multiple Spheres, and Colour!
8:21 Two Types of Reflections
9:04 Experimenting with Randomness
11:14 Random Hemisphere Directions
14:11 The Trace Function
16:35 Testing Lights
17:55 Chair Thief
18:23 Progressive Rendering
19:54 A Simple Sky
20:49 Lambert’s Cosine Law
22:47 Cosine Weighted Rays
22:36 Triangles
24:52 Some Tests
27:14 Specular Reflections
29:59 Tomatoes and Glossiness
31:57 Blur and Anti-Aliasing
34:42 Depth of Field
37:14 The End


guid: yt:video:kIMHRQWorkE
title: Answering Your Questions
author: Sebastian Lague
url: https://www.youtube.com/watch?v=kIMHRQWorkE
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCmtyQOKKmrMVaKuRXz02jbQ
enclosure_url: https://www.youtube.com/v/kIMHRQWorkE?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Let's talk about some stuff! My process for creating videos, unfinished projects, thoughts on Godot, and more.

Support on Patreon: https://www.patreon.com/SebastianLague
My (very crude) video tools:
https://github.com/SebLague/VidTools
Godot Marching Cubes Experiment:
https://github.com/SebLague/Godot-Marching-Cubes
Shapes by Freya: https://www.youtube.com/@Acegikmo
https://acegikmo.com/shapes/
Music credits:
https://github.com/SebLague/Misc-Project-Info/blob/main/Other%20Videos/Q%26A%20Credits.txt

Chapters:
0:00 Intro
0:13 Video Creation Process
3:53 Creating Visualizations
11:50 Unfinished Projects
15:12 Learning Godot
18:35 Compute Shaders in Godot
23:48 Favourite Number
24:02 First Game Engine
26:55 Four Quick Questions
28:38 Outro


guid: yt:video:_vqlIPDR2TU
title: Coding Adventure: Making a Better Chess Bot
author: Sebastian Lague
url: https://www.youtube.com/watch?v=_vqlIPDR2TU
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCmtyQOKKmrMVaKuRXz02jbQ
enclosure_url: https://www.youtube.com/v/_vqlIPDR2TU?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Trying to improve an old chess bot by experimenting with various interesting techniques.
You can play (or watch) the bot on lichess: https://lichess.org/@/CodingAdventureBot/playing
This is a sequel to: https://youtu.be/U4ogK0MIzqk

If you'd like to support my work (and get early access to new videos and projects) you can become a patron of the channel over here: https://www.patreon.com/SebastianLague

Source code: https://github.com/SebLague/Chess-Coding-Adventure

A really fun video about various algorithms for playing chess by @tom7:
https://www.youtube.com/watch?v=DpXy041BIlA

Music and other credits:
https://github.com/SebLague/Misc-Project-Info/blob/main/Coding-Adventures/Chess-2.txt

Chapters:
00:00 Intro
00:38 Battle of the Bots
03:18 Maybe Don’t Throw Away the Best Move?
07:13 Transposition Troubles
10:55 Search Extensions
14:01 Refactoring and Recapping
15:51 Tweaking Kings and Pawns
19:35 Bitboards!
23:54 Passed Pawns (and more)
28:32 Magic Bitboards (minus the magic)
34:40 The Magical Part of Magic Bitboards
39:00 Testing and Optimizing Move Generation
41:50 Killers, Reductions, and Repetitions
45:56 Creating a Lichess Bot
49:30 Let’s Play!
54:54 Existential Crisis
55:02 The Bot’s First Game Online
56:12 Can Our Bot Beat Stockfish? (No)
56:59 Rating Speculation
59:28 Outro


guid: yt:video:rSKMYc1CQHE
title: Coding Adventure: Simulating Fluids
author: Sebastian Lague
url: https://www.youtube.com/watch?v=rSKMYc1CQHE
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCmtyQOKKmrMVaKuRXz02jbQ
enclosure_url: https://www.youtube.com/v/rSKMYc1CQHE?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Let's try to convince a bunch of particles to behave (at least somewhat) like water.
Written in C# and HLSL, and running inside the Unity engine.

Source code:
https://github.com/SebLague/Fluid-Sim/tree/Episode-01

Next episode:
https://youtu.be/kOkfC5fLfgE?si=1hXtw9nIiHllA6gn

If you'd like to support me in creating more videos like this, you can do so here:
https://www.patreon.com/SebastianLague
https://ko-fi.com/sebastianlague

Resources:
https://matthias-research.github.io/pages/publications/sca03.pdf
http://www.ligum.umontreal.ca/Clavet-2005-PVFS/pvfs.pdf
https://sph-tutorial.physics-simulation.org/pdf/SPH_Tutorial.pdf
https://web.archive.org/web/20140725014123/https://docs.nvidia.com/cuda/samples/5_Simulations/particles/doc/particles.pdf

Music:
https://github.com/SebLague/Misc-Project-Info/blob/main/Coding-Adventures/Fluid-Sim.txt

Chapters:
0:00 Intro
0:27 Gravity and Collisions
2:31 Smoothed Particles
3:55 Calculating Density
7:53 The Interpolation Equation
11:58 Gradient Calculations
15:38 The Pressure Force
19:19 Trying to Make it Work...
22:05 Optimizing Particle Lookups
26:31 Spatial Grid Code
27:48 Position Predictions
30:32 Mouse Force
33:22 Artificial Viscosity
36:46 Pressure Problems
39:51 Bugs
41:06 Parallel Sorting
43:22 Some Tests and Experiments
44:47 The Third Dimension
47:23 Outro


guid: yt:video:Ne40a5LkK6A
title: I Ran a Chess Programming Tournament, Here's How it Went!
author: Sebastian Lague
url: https://www.youtube.com/watch?v=Ne40a5LkK6A
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCmtyQOKKmrMVaKuRXz02jbQ
enclosure_url: https://www.youtube.com/v/Ne40a5LkK6A?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Let's have a look at the creative code behind some of the bots, watch their games, and find out who will ultimately emerge victorious.

If you'd like to support my work, you can do so with a recurring or one-off contribution over here:
https://www.patreon.com/SebastianLague
https://ko-fi.com/sebastianlague

The code for all the entries, as well PGN files for all the games played in the tournament can be found over here:
https://github.com/SebLague/Tiny-Chess-Bot-Challenge-Results

Play against a selection of the bots from beginner to grandmaster level. How many can you defeat?
https://sebastian.itch.io/tiny-chess-bots

Take a look at some videos that competitors made about their entries:
GameTechExplained (rank 78): https://youtu.be/5vsLmM756LA?si=gQEmQILE1NrgdQYW
MilkMindV1 (rank 108): https://www.youtube.com/watch?v=4fvfURAFw4U

Music credits
Bad Apple Remix: https://www.youtube.com/watch?v=lNm85uXR3RM
https://github.com/SebLague/Misc-Project-Info/blob/main/Other%20Videos/ChessResults.txt

TCEC 4K Info:
If you're interesting in taking part in the 4K tournament I mentioned, I recommend joining the TCEC discord linked on https://chessdom.org/ and enquiring about it there.
You can also read more about the event here: https://wiki.chessdom.org/TCEC_4k_Rules

Chapters
0:00:00 Challenge Overview
0:01:09 Some Exploits and Disqualifications
0:02:58 Beginning the Tournament
0:03:58 [Bot] Turochamp (Faithful)
0:06:28 [Bot] WhateverBot
0:08:18 [Game] Turochamp (Faithful) vs WhateverBot
0:09:35  [Game] Pawntress vs WhateverBot
0:10:30 [Bot] applemethod-orz
0:11:42 [Bot] Igris
0:13:19  [Game] applemethod-orz vs Igris
0:14:32 Token Plot
0:15:06 [Bot] BadAppleBot
0:17:30 [Bot] 200 Tokens Monstrosity
0:20:18 [Bot] Baby Squid
0:21:38 [Game] 200 Tokens Monstrosity vs Baby Squid
0:23:19 Tiebreak System
0:23:39 [Bot] TinyHugeBot
0:25:45 [Game] TinyHugeBot vs 200 Tokens Monstrosity
0:26:26 [Bot] Electric Shockwave Gambit
0:28:11 [Bot] SimpleMCTS
0:30:23 [Game] SimpleMCTS vs Electric Shockwave Gambit
0:31:30 [Game] Phoenix Chess vs SimpleMCTS
0:32:28 [Bot] ILVM
0:33:45 [Bot] Les Moutons
0:34:40 [Game] Les Moutons vs ILVM
0:35:51 [Bot] NNBot
0:38:09 [Bot] Game Tech Explained
0:38:41 [Game] NNBot vs Game Tech Explained
0:39:27 [Bot] King Gambot IV
0:41:21 [Game] King Gambot IV vs ILVM
0:41:51 [Game] King Gambot IV vs NNBot
0:42:22 Swiss Results
0:43:32 [Knockout Game] Board 1, Round of 64
0:44:27 [Knockout Game] Board 2, Round of 64
0:46:02 [Knockout Game] Board 9, Round of 64
0:47:43 [Knockout Game] Board 3, Round of 32
0:48:30 [Knockout Game] Board 4, Round of 32
0:49:31 Piece Square Table Compression
0:50:48 Round of 16 Results
0:51:14 [Bot] Tyrant’s V9
0:51:55 [Knockout Game] Board 2, Quarterfinals
0:54:40 [Knockout Game] Board 1, Semifinals
0:56:43 [Knockout Game] Board 2, Semifinals
0:58:56 [Bot] Finalist A
1:06:00 [Final Round] Game 1
1:08:56 [Bot] Finalist B
1:14:05 [Final Round] Game 2
1:15:57 Final Results and Closing Ceremony
1:16:52 [Game] Tournament Winner vs Coding Adventure Bot


guid: yt:video:2Ni13dnAbSA
title: Bad Apple but it's a Fluid Simulation
author: Sebastian Lague
url: https://www.youtube.com/watch?v=2Ni13dnAbSA
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCmtyQOKKmrMVaKuRXz02jbQ
enclosure_url: https://www.youtube.com/v/2Ni13dnAbSA?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I tried rendering Bad Apple inside of a particle-based fluid simulation.
(I recommend watching in 4K if you can, as video compression is not overly friendly towards all the little dots!)

Full resolution video download:
https://drive.google.com/u/0/uc?id=1zTmq8M0kHYqIuf72yGJvgYuWgE8aKmU3&export=download

If you'd like to learn more about the fluid simulation, take a look at this video:
https://youtu.be/rSKMYc1CQHE?si=Ot8kPjQejVccOCuT
And if you'd like to support my work (and get early access to the project files), you can do so via Patreon:
https://www.patreon.com/SebastianLague
Or support on Ko-Fi https://ko-fi.com/sebastianlague

Credits:
Music by Alstroemeria Records (feat nomico): https://www.youtube.com/watch?v=i41KoE0iMYU
Animation by あにら (Anira). Specifically, I used this version: https://www.youtube.com/watch?v=FtutLA63Cp8


guid: yt:video:SO83KQuuZvg
title: Coding Adventure: Rendering Text
author: Sebastian Lague
url: https://www.youtube.com/watch?v=SO83KQuuZvg
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCmtyQOKKmrMVaKuRXz02jbQ
enclosure_url: https://www.youtube.com/v/SO83KQuuZvg?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
This... is text! Let's figure out how to draw it.
Starring: Bézier curves and (oh so many) floating point problems.

Source code: https://github.com/SebLague/Text-Rendering
If you'd like to support my work (and get early access to new projects) you can do so here:
https://www.patreon.com/SebastianLague
https://ko-fi.com/sebastianlague

Resources:
https://developer.apple.com/fonts/TrueType-Reference-Manual/
https://www.microsoft.com/en-us/research/wp-content/uploads/2005/01/p1000-loop.pdf
https://wdobbie.com/post/gpu-text-rendering-with-vector-textures/

Font and Music Credits:
https://github.com/SebLague/Misc-Project-Info/blob/main/Coding-Adventures/TextRendering

Chapters
0:00:00 Intro
0:01:58 The Font Directory
0:04:27 Loading Simple Glyphs
0:10:42 Bézier Basics
0:13:42 The Character Map
0:15:47 Implied Points
0:18:11 Compound Glyphs
0:20:25 Size and Spacing
0:21:27 Rendering Glyphs with Lots of Triangles
0:22:17 Optimized Curve Rendering (Loop-Blinn)
0:28:20 A Brief Look at SDF Rendering
0:30:33 The Counting Method
0:31:48 Ray-Bézier Intersections
0:34:09 Point in Glyph Test
0:36:35 Shader Time
0:38:37 Floating Point Problems
0:41:22 The Evil Artifact Detector
0:45:36 The Closest Curve Method
0:50:48 Curve Splitting
0:54:31 Defeating the Evil Artifacts
0:58:58 Anti-Aliasing
1:02:47 Performance and Legibility
1:05:11 The Counting Method Returns
1:09:45 Outro


guid: yt:video:C1H4zIiCOaI
title: Coding Adventure: Optimizing a Ray Tracer (by building a BVH)
author: Sebastian Lague
url: https://www.youtube.com/watch?v=C1H4zIiCOaI
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCmtyQOKKmrMVaKuRXz02jbQ
enclosure_url: https://www.youtube.com/v/C1H4zIiCOaI?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Trying to speed up the ray tracer (from a previous coding adventure) so that we can render some more intricate scenes!

Links:
● Source: https://github.com/SebLague/Ray-Tracing
● Get early access to new videos and projects by supporting on:
 -- Patreon: https://www.patreon.com/SebastianLague
 -- Ko-Fi: https://ko-fi.com/sebastianlague
● Previous Ray Tracing episode: https://www.youtube.com/watch?v=Qz0KTGYJtUk
● BVH Article: https://jacco.ompf2.com/2022/04/18/how-to-build-a-bvh-part-2-faster-rays/
● 3D Test Models: https://casual-effects.com/data/
● Music Credits: https://github.com/SebLague/Misc-Project-Info/blob/main/Coding-Adventures/BVH.txt

Chapters:
00:00 Intro
00:30 Triangle-Test Debug View
03:34 Bounding Boxes Inside of Bounding Boxes
04:41 Building a BVH
07:41 Traversing the BVH
09:13 GPU-Friendly Data
15:32 Converting Recursion to Iteration
18:06 Box-Test Debug View
21:42 Increasing the Depth of the BVH
25:11 Distance Test and Child Ordering
31:47 The Surface Area Heuristic
37:19 Speeding up the Construction
38:57 32-Byte Nodes
42:20 Transformations
45:10 Supporting Multiple Models
48:45 Some Tests and Final Thoughts


guid: yt:video:iA6wRgwl7k0
title: Coding Adventure: Sound (and the Fourier Transform)
author: Sebastian Lague
url: https://www.youtube.com/watch?v=iA6wRgwl7k0
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCmtyQOKKmrMVaKuRXz02jbQ
enclosure_url: https://www.youtube.com/v/iA6wRgwl7k0?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Some small experiments with sound, and learning how to break signals down into their component frequencies by implementing the Discrete Fourier Transform.

Links:
● Project files: https://github.com/SebLague/Fourier-Transform
● Support my work on:
-- Patreon: https://www.patreon.com/SebastianLague
-- Ko-Fi: https://ko-fi.com/sebastianlague
● Coding Adventures Playlist: https://youtube.com/playlist?
list=PLFt_AvWsXl0ehjAfLFsp1PGaatzAwo0uK&si=LQBQOcF_F0Cxnzj_
● Fluid Sim video: https://youtu.be/rSKMYc1CQHE?si=FtYVPLtOF85iOkMl
● @3blue1brown video: https://youtu.be/spUNpyF58BY?si=U5pu40UUNk-7mda0
● Music Credits: https://github.com/SebLague/Misc-Project-Info/blob/main/Coding-Adventures/FourierTransform

Chapters:
00:00 Intro
00:48 Dot Wav
03:05 Waveform
04:24 Playing a Sound
05:03 Wave Simulation
10:31 Speed Change
12:38 Signal Generation
17:14 Fourier Vis (single frequency)
23:31 Fourier Vis (multiple frequencies)
28:01 First Attempt at DFT
31:39 The Nyquist Rate
35:14 Frequency Resolution
37:25 DFT Implementation
39:31 Testing the DFT Function
42:41 Outro


guid: yt:video:kOkfC5fLfgE
title: Coding Adventure: Rendering Fluids
author: Sebastian Lague
url: https://www.youtube.com/watch?v=kOkfC5fLfgE
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCmtyQOKKmrMVaKuRXz02jbQ
enclosure_url: https://www.youtube.com/v/kOkfC5fLfgE?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
We've succeeded in the past to make a bunch of little balls behave like a fluid, but can we now make them look like a fluid too? In this video we'll explore a few different techniques, and also attempt a simple simulation of foam and spray to liven things up!

Source Code
https://github.com/SebLague/Fluid-Sim

Support (and get early access to new videos and projects)
Patreon: https://www.patreon.com/SebastianLague
Ko-Fi: https://ko-fi.com/sebastianlague

Fluid Simulation Video
https://youtu.be/rSKMYc1CQHE

Resources
Screen Space Fluid Rendering: https://developer.download.nvidia.com/presentations/2010/gdc/Direct3D_Effects.pdf
Foam, Spray and Bubbles: https://cg.informatik.uni-freiburg.de/publications/2012_CGI_sprayFoamBubbles.pdf
Reflections and Refractions: https://graphics.stanford.edu/courses/cs148-10-summer/docs/2006--degreve--reflection_refraction.pdf
Music: https://raw.githubusercontent.com/SebLague/Misc-Project-Info/refs/heads/main/Coding-Adventures/FluidRendering

Chapters:
0:00 Intro
0:27 Marching Cubes
05:58 Raymarching
10:40 Refract, Reflect, Fresnel
13:35 More Raymarching
18:28 A Simple Environment
20:40 Testing the Raymarched Fluid
25:03 Screen Space Technique: Depth Map
28:35 Simple Smoothing
33:42 Surface Smoothing
36:44 Rendering the Fluid
42:02 Spray, Foam, and Bubbles
55:12 Testing the Screen Space Fluid
57:22 Outro


guid: yt:video:8nIB7e_eds4
title: I Tried Putting my Fluid Simulation on a Planet
author: Sebastian Lague
url: https://www.youtube.com/watch?v=8nIB7e_eds4
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCmtyQOKKmrMVaKuRXz02jbQ
enclosure_url: https://www.youtube.com/v/8nIB7e_eds4?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Until today, the Fluid Simulation has been confined to a tiny box. Let's set it free on a planet, with a little orbiting moon, and see what happens!

Support my work (and get early access to new videos and projects)
Patreon: https://www.patreon.com/SebastianLague
Ko-Fi: https://ko-fi.com/sebastianlague

Source Code:
Available to everyone 22/02 (currently in early access via the links above)

You can find the previous Fluid episodes here:
Simulation: https://youtu.be/rSKMYc1CQHE
Rendering: https://youtu.be/kOkfC5fLfgE

Music:
https://raw.githubusercontent.com/SebLague/Misc-Project-Info/refs/heads/main/Coding-Adventures/FluidPlanet.txt

Chapters:
00:00 Intro
00:25 Playing with Gravity
03:11 Adding Simple Collisions
04:21 Implementing Orbits
05:36 Visualizing Tidal Forces
07:46 Fluid Shell
08:50 Tide Watching
11:54 Implementing the Earth
17:25 Oceans on Earth
20:26 A Terraforming Experiment
23:48 3-Body System


guid: yt:video:IJHrPjx4egM
title: Computing just changed forever… but there’s a catch
author: Fireship
url: https://www.youtube.com/watch?v=IJHrPjx4egM
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA
enclosure_url: https://www.youtube.com/v/IJHrPjx4egM?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Stay updated with the the best dev content at https://daily.dev/fireship

Let's take a first look at Google's new quantum computing chip Willow. Learn the basics of qubits and quantum computing, and what this weird new technology means for the future. 

#programming #tech #thecodereport 

💬 Chat with Me on Discord

https://discord.gg/fireship

🔗 Resources

Google Willow Announcement https://blog.google/technology/research/google-willow-quantum-chip
Software Bug Iceberg https://youtu.be/Iq_r7IcNmUk
Cryptography Explained https://youtu.be/NuyzuNBFWxQ

🔥 Get More Content - Upgrade to PRO

Upgrade at https://fireship.io/pro
Use code YT25 for 25% off PRO access 

🎨 My Editor Settings

- Atom One Dark 
- vscode-icons
- Fira Code Font

🔖 Topics Covered

- What is Google Willow?
- Advancements in quantum computing
- How does quantum computing work?
- Fastest super computers in the world


guid: yt:video:GhIm-Dk1pzk
title: Devin just came to take your software job… will code for $8/hr
author: Fireship
url: https://www.youtube.com/watch?v=GhIm-Dk1pzk
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA
enclosure_url: https://www.youtube.com/v/GhIm-Dk1pzk?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Build AI apps in Postgres with Timescale and pgai https://tsdb.co/ts-fireship-da

Let's take a first look at Devin AI, the hyped up AI software engineer that will write code for $500 per month. In addition, we look at other recently advancement in the machine learning space including OpenAI Sora, Google Gemini 2.0, and more.  

#programming #ai #thecodereport 

💬 Chat with Me on Discord

https://discord.gg/fireship

🔗 Resources

ChatGPT Pro First Look https://youtu.be/Sf4WqHBCYSY
AI taking software engineering jobs https://youtu.be/AgyJv2Qelwk
Steve's Devin breakdown @Steve8708 https://youtu.be/oU3H581uCsA

🔥 Get More Content - Upgrade to PRO

Upgrade at https://fireship.io/pro
Use code YT25 for 25% off PRO access 

🎨 My Editor Settings

- Atom One Dark 
- vscode-icons
- Fira Code Font

🔖 Topics Covered

- What is Devin AI?
- Devin AI review
- Latest updates in artificial intelligence 
- Will AI replace programmers?
- Best AI coding tools


guid: yt:video:v4H2fTgHGuc
title: The amazing, but unsettling future of technology...
author: Fireship
url: https://www.youtube.com/watch?v=v4H2fTgHGuc
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA
enclosure_url: https://www.youtube.com/v/v4H2fTgHGuc?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Get the free 80,000 hours career guide https://80000hours.org/fireship 

Take a look at 13 trends in technology that will affect programmers and software engineers in the year 2025. 

#technology #programming #thecodereport 

💬 Chat with Me on Discord

https://discord.gg/fireship

🔗 Resources

Trends 2024 (last year) https://youtu.be/vyQv563Y-fk
TrueUp Job Trends https://www.trueup.io/job-trend

🔥 Get More Content - Upgrade to PRO

Upgrade at https://fireship.io/pro
Use code YT25 for 25% off PRO access 

🎨 My Editor Settings

- Atom One Dark 
- vscode-icons
- Fira Code Font

🔖 Topics Covered

- AI trends in 2025
- Expected timeline for AGI
- When will artificial superintelligence emerge?
- JavaScript framework updates
- Technology trends to watch in 2025
- Future predictions for programmers
- Tech job market outlook


guid: yt:video:mBFf-aYoV6Q
title: 17 weird new tech products at CES 2025 you need right now...
author: Fireship
url: https://www.youtube.com/watch?v=mBFf-aYoV6Q
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA
enclosure_url: https://www.youtube.com/v/mBFf-aYoV6Q?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Try Brilliant free for 30 days https://brilliant.org/fireship You’ll also get 20% off an annual premium subscription.

Learn about the latest product produces unveiled at CES 2025, including Nvidia's new RTX 5000 series GPUs, robotics, flying cars, and more. 

#tech #ai #thecodereport 

💬 Chat with Me on Discord

https://discord.gg/fireship

🔗 Resources

Tech Trends https://youtu.be/v4H2fTgHGuc

🔥 Get More Content - Upgrade to PRO

Upgrade at https://fireship.io/pro
Use code YT25 for 25% off PRO access 

🎨 My Editor Settings

- Atom One Dark 
- vscode-icons
- Fira Code Font

🔖 Topics Covered

Mirumi Robot
Galbot
Nvidia Cosmos Platform
Saros Vacuum
XoMotion
Omnia
Revol
Yangwang U9
XPeng Aero HT
RTX5090
DIGITS Supercomputer
GB200
Samsung AI TV
DotDot Wifi
Portalgraph
Nuwa Pen


guid: yt:video:yvGY5vkONds
title: The most disastrous app launch of all time…
author: Fireship
url: https://www.youtube.com/watch?v=yvGY5vkONds
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA
enclosure_url: https://www.youtube.com/v/yvGY5vkONds?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Stay updated with the the best dev content at https://daily.dev/fireship

Patrick Spence, CEO of Sonos, was forced to resign following a disastrous app release that rendered people's speaker systems useless. Let's take a look a what went wrong and where Sonos goes from here.

🎧 Here's an affiliate link to some headphones that work without an app: Audio-Technica ATH-M30x https://amzn.to/3PxrUTl 

#tech #appdevelopment #thecodereport 

💬 Chat with Me on Discord

https://discord.gg/fireship

🔥 Get More Content - Upgrade to PRO

Upgrade at https://fireship.io/pro
Use code YT25 for 25% off PRO access 

🎨 My Editor Settings

- Atom One Dark 
- vscode-icons
- Fira Code Font

🔖 Topics Covered
- Patrick Spence's resignation
- Sonos' failed app release
- Was Flutter to blame?


guid: yt:video:7rXgVsIGvGQ
title: Apple Intelligence rolled back after doing dumb stuff...
author: Fireship
url: https://www.youtube.com/watch?v=7rXgVsIGvGQ
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA
enclosure_url: https://www.youtube.com/v/7rXgVsIGvGQ?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Apple recently rolled back its news summary feature on iOS powered by Apple Intelligence because it was hallucinating misinformation. Let's examine recent failures and controversies in the tech world. 

#tech #ai #thecodereport 

💬 Chat with Me on Discord

https://discord.gg/fireship

🔗 Resources

Tech Trends in 2025 https://youtu.be/v4H2fTgHGuc
Apple Intelligence Announcement https://youtu.be/ek2yOqAIYuU

📚 Chapters

🔥 Get More Content - Upgrade to PRO

Upgrade at https://fireship.io/pro
Use code YT25 for 25% off PRO access 

🎨 My Editor Settings

- Atom One Dark 
- vscode-icons
- Fira Code Font

🔖 Topics Covered

- Apple Intelligence failures
- Progress of Artificial Super Intelligence
- Elon feud with Asmongold 
- Zuckerberg lies on Joe Rogan
- Software engineering trends


guid: yt:video:-2k1rcRzsLA
title: This free Chinese AI just crushed OpenAI's $200 o1 model...
author: Fireship
url: https://www.youtube.com/watch?v=-2k1rcRzsLA
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA
enclosure_url: https://www.youtube.com/v/-2k1rcRzsLA?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Try Brilliant free for 30 days https://brilliant.org/fireship You’ll also get 20% off an annual premium subscription.

Let's take a look at the new DeepSeek R1 chain-of-thought AI model. Not only does it beat OpenAI o1 on key benchmarks, but it's also free and open source. 

#programming #ai #thecodereport 

💬 Chat with Me on Discord

https://discord.gg/fireship

🔗 Resources

DeepSeek R1 GitHub https://github.com/deepseek-ai/DeepSeek-R1
OpenAI o1 $200 plan https://youtu.be/Sf4WqHBCYSY

🔥 Get More Content - Upgrade to PRO

Upgrade at https://fireship.io/pro
Use code YT25 for 25% off PRO access 

🎨 My Editor Settings

- Atom One Dark 
- vscode-icons
- Fira Code Font

🔖 Topics Covered

- What is Deepseek R1
- How does chain-of-thought AI work?
- Deepseek R1 vs OpenAI O1


guid: yt:video:gi-wuoIDdjw
title: Dark web PHP dev Ross Ulbricht released from prison…
author: Fireship
url: https://www.youtube.com/watch?v=gi-wuoIDdjw
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA
enclosure_url: https://www.youtube.com/v/gi-wuoIDdjw?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Ross Ulbricht received a presidential pardon for his crimes related to the Silk Road. Let's take a look at the tech stack behind the Silk Road website, which included LAMP stack, PHP, Linux, Tor, and Cryptocurrency. 

#tech #webdev #thecodereport 

💬 Chat with Me on Discord

https://discord.gg/fireship

🔗 Resources

Tech Bros who went to jail https://youtu.be/CWeSzhJpJ9U
TailsOS in 100 Seconds https://youtu.be/mVKAyw0xqxw

📚 Chapters

🔥 Get More Content - Upgrade to PRO

Upgrade at https://fireship.io/pro
Use code YT25 for 25% off PRO access 

🎨 My Editor Settings

- Atom One Dark 
- vscode-icons
- Fira Code Font

🔖 Topics Covered

- Why was Ross Ulbricht pardoned? 
- What was the Silk Road website?
- Tor explained 
- Technology used for anonymous browsing
- How does the dark web work?


guid: yt:video:YrHsw4Oja7w
title: The Stargate situation is crazy... Elon vs Altman beef intensifies
author: Fireship
url: https://www.youtube.com/watch?v=YrHsw4Oja7w
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA
enclosure_url: https://www.youtube.com/v/YrHsw4Oja7w?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
What is the new Startgate project just announced by OpenAI and why is Elon Musk calling it fake? Learn how the new Stargate datacenters could affect the future of artificial intelligence development. 

#tech #ai #thecodereport 

💬 Chat with Me on Discord

https://discord.gg/fireship

🔗 Resources

Elon vs Sam Altman https://youtu.be/Sf4WqHBCYSY
DeepSeek R1 first look https://youtu.be/-2k1rcRzsLA

📚 Chapters

🔥 Get More Content - Upgrade to PRO

Upgrade at https://fireship.io/pro
Use code YT25 for 25% off PRO access 

🎨 My Editor Settings

- Atom One Dark 
- vscode-icons
- Fira Code Font

🔖 Topics Covered

- What is Project Stargate for AI infrastructure?
- Elon Musk vs Sam Altman controversy
- Grok 3 vs OpenAI o1


guid: yt:video:Nl7aCUsWykg
title: Big Tech in panic mode... Did DeepSeek R1 just pop the AI bubble?
author: Fireship
url: https://www.youtube.com/watch?v=Nl7aCUsWykg
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA
enclosure_url: https://www.youtube.com/v/Nl7aCUsWykg?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Chip stocks like Nvidia are in trouble after the DeepSeek R1 AI model has proven that it is possible to train and run state-of-the-art reasoning models with minimal hardware. Let's find out why China's latest AI model has big tech and wall street in panic mode. 

#tech #ai #thecodereport

💬 Chat with Me on Discord

https://discord.gg/fireship

🔗 Resources

DeepSeek First Look https://youtu.be/-2k1rcRzsLA
Nvidia CUDA in 100 Seconds https://youtu.be/pPStdjuYzSI

📚 Chapters

🔥 Get More Content - Upgrade to PRO

Upgrade at https://fireship.io/pro
Use code YT25 for 25% off PRO access 

🎨 My Editor Settings

- Atom One Dark 
- vscode-icons
- Fira Code Font

🔖 Topics Covered

- Why is DeepSeek causing stocks to drop? 
- Latest trends in artificial intelligence
- How do AI companies make money?


guid: yt:video:hpwoGjpYygI
title: DeepSeek stole our tech... says OpenAI
author: Fireship
url: https://www.youtube.com/watch?v=hpwoGjpYygI
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA
enclosure_url: https://www.youtube.com/v/hpwoGjpYygI?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Build better apps with PostHog https://posthog.com/fireship

OpenAI and AI Czar David Sacks accuse DeepSeek of stealing their IP to train their new R1 model, citing hard evidence gained from Microsoft. In addition, Alibaba just released Qwen 2.5 with impressive benchmark results. 

#tech #ai #thecodereport 

💬 Chat with Me on Discord

https://discord.gg/fireship

🔗 Resources

Source https://www.ft.com/content/a0dfedd1-5255-4fa9-8ccc-1fe01de87ea6
Qwen 2.5 on GitHub https://github.com/QwenLM/Qwen2.5
DeepSeek Ollama Tutorial https://youtu.be/clJCDHml2cA
DeepSeek Crashes Stocks https://youtu.be/Nl7aCUsWykg

🔥 Get More Content - Upgrade to PRO

Upgrade at https://fireship.io/pro
Use code YT25 for 25% off PRO access 

🎨 My Editor Settings

- Atom One Dark 
- vscode-icons
- Fira Code Font

🔖 Topics Covered

- Qwen 2.5 vs DeepSeek
- Deepseek accused of IP theft by OpenAI
- Latest trends in artificial intelligence
- Chinese AI development boom explained 
- DeepSeek Janus image diffusion model


guid: yt:video:1X3dV3D5EJg
title: Grafana is the goat... Let's deploy the LGTM stack
author: Fireship
url: https://www.youtube.com/watch?v=1X3dV3D5EJg
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA
enclosure_url: https://www.youtube.com/v/1X3dV3D5EJg?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Get up to 67% off VPS at Hostinger. Use code FIRESHIP for an extra discount at https://hostinger.com/fireship

#linux #programming #softwareengineer 

💬 Chat with Me on Discord

https://discord.gg/fireship

🔗 Resources

Docker 101 https://youtu.be/rIrNIzy6U_g
Full Deno Course https://fireship.io/courses/deno
Grafana on GitHub https://github.com/grafana/grafana

🔥 Get More Content - Upgrade to PRO

Upgrade at https://fireship.io/pro
Use code YT25 for 25% off PRO access 

🎨 My Editor Settings

- Atom One Dark 
- vscode-icons
- Fira Code Font

🔖 Topics Covered

What is Grafana? 
How to get started with software observability?
What is Open Telemetry?
How to deploy LGTM stack?
How monitor Linux server performance?


guid: yt:video:PoeFxGzPpXE
title: OpenAI o3 tries to curb stomp DeepSeek...
author: Fireship
url: https://www.youtube.com/watch?v=PoeFxGzPpXE
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA
enclosure_url: https://www.youtube.com/v/PoeFxGzPpXE?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Stay updated with the best dev content at https://daily.dev/fireship

Let's take a first look at OpenAI o3-mini and its new deep research feature. In addition, we will examine the recent bans on DeepSeek R1 and it compare it to other AI tools.  

#tech #ai #thecodereport 

💬 Chat with Me on Discord

https://discord.gg/fireship

🔗 Resources

OpenAI Deep Research https://openai.com/index/introducing-deep-research/
OpenAI accuses DeepSeek of IP theft https://youtu.be/hpwoGjpYygI
Tech Trends 2025 https://youtu.be/v4H2fTgHGuc
Godot in 100 Seconds https://youtu.be/QKgTZWbwD1U

🔥 Get More Content - Upgrade to PRO

Upgrade at https://fireship.io/pro
Use code YT25 for 25% off PRO access 

🎨 My Editor Settings

- Atom One Dark 
- vscode-icons
- Fira Code Font

🔖 Topics Covered

- OpenAI Deep Research First Look
- Why is DeepSeek banned?
- Latest AI features in tech
- o3-mini vs DeepSeek R1 vs Claude Sonnet


guid: yt:video:k9xbh9LUYn0
title: Google finally shipped some fire…
author: Fireship
url: https://www.youtube.com/watch?v=k9xbh9LUYn0
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA
enclosure_url: https://www.youtube.com/v/k9xbh9LUYn0?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Deploy your app without complexity using Sevalla http://bit.ly/4hDju8W

Take a first look at Google Gemini 2.0 and see how it compares to models like DeepSeek R1 and OpenAI o3-mini. Learn how to use AI models like Gemini Flash to solve real-world problems. 

#tech #ai #thecodereport

💬 Chat with Me on Discord

https://discord.gg/fireship

🔗 Resources

Gemini for PDF processing https://www.sergey.fyi/articles/gemini-flash-2
OpenAI o3 First Look https://youtu.be/PoeFxGzPpXE
DeepSeek R1 Fallout https://youtu.be/Nl7aCUsWykg

🔥 Get More Content - Upgrade to PRO

Upgrade at https://fireship.io/pro
Use code YT25 for 25% off PRO access 

🎨 My Editor Settings

- Atom One Dark 
- vscode-icons
- Fira Code Font

🔖 Topics Covered

- Is Google Gemini better than OpenAI?
- How to use Gemini Flash
- Comparison of top LLMs
- o3 vs Gemini vs DeepSeek
- Latest trends in Google technology


guid: yt:video:ozkg_iW9mNU
title: UK demands backdoor for encrypted Apple user data...
author: Fireship
url: https://www.youtube.com/watch?v=ozkg_iW9mNU
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA
enclosure_url: https://www.youtube.com/v/ozkg_iW9mNU?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Try Brilliant free for 30 days https://brilliant.org/fireship You’ll also get 20% off an annual premium subscription.

The United Kingdom is demanding Apple build a backdoor to access encrypted iCloud user data. Learn how end-to-end-encryption works and other tools that protect your digital privacy. 

#apple #tech #thecodereport 

💬 Chat with Me on Discord

https://discord.gg/fireship

🔗 Resources

Mainstream Source https://www.washingtonpost.com/technology/2025/02/07/apple-encryption-backdoor-uk/
Full Cryptography Tutorial https://youtu.be/NuyzuNBFWxQ
Apple Intelligence gone Wild https://youtu.be/7rXgVsIGvGQ
Tails OS in 100 Seconds https://youtu.be/mVKAyw0xqxw

🔥 Get More Content - Upgrade to PRO

Upgrade at https://fireship.io/pro
Use code YT25 for 25% off PRO access 

🎨 My Editor Settings

- Atom One Dark 
- vscode-icons
- Fira Code Font

🔖 Topics Covered

- Why does the UK want Apple iCloud data?
- What is a double rachet algorithm?
- How does signal e2ee protocol work?
- How do I keep browsing data private?
- Best Linux distro for privacy


guid: yt:video:3obM5OaOpHQ
title: What Your GitHub Account Says About You
author: bigboxSWE
url: https://www.youtube.com/watch?v=3obM5OaOpHQ
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC5--wS0Ljbin1TjWQX6eafA
enclosure_url: https://www.youtube.com/v/3obM5OaOpHQ?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Click this link https://sponsr.is/bootdev_bigboxswe and use my code BIGBOXSWE to get 25% off your first payment for boot.dev. 

That’s 25% your first month or your first year, depending on the subscription you choose.

This video was sponsored by Boot.dev 

Music
Lo-fi Type Beat - Lighter: https://www.youtube.com/watch?v=QCzRXx1DA_U 
I have paid for the song BSGUEST_0907398001682264409


guid: yt:video:AOYUEqlWOGU
title: How To Become A Coding Machine
author: bigboxSWE
url: https://www.youtube.com/watch?v=AOYUEqlWOGU
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC5--wS0Ljbin1TjWQX6eafA
enclosure_url: https://www.youtube.com/v/AOYUEqlWOGU?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Hey guys, this is a silly little theory I've had recently and it's paid dividends.

Felt good to make this kinda video after a long time.

Btw, wanna build cool stuff? https://app.codecrafters.io/join?via=bigboxSWE 

Music
massobeats - glisten: https://www.youtube.com/watch?v=Pzvh54n_PPc 

I see some Youtubers doing this for seo, let me see if it works

How to keep coding, code, nonstop coding, code for fun, code and have fun, programming, make programming awesome, program for fun, unstoppable programming


guid: yt:video:korOpibkm6g
title: What Your Linux Distro Says About You
author: bigboxSWE
url: https://www.youtube.com/watch?v=korOpibkm6g
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC5--wS0Ljbin1TjWQX6eafA
enclosure_url: https://www.youtube.com/v/korOpibkm6g?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
To try everything Brilliant has to offer—free—for a full 30 days, visit https://brilliant.org/bigboxSWE  You’ll also get 20% off an annual premium subscription.

This video was sponsored by Brilliant

Music
Lo-fi Type Beat - Lighter:   https://www.youtube.com/watch?v=QCzRXx1DA_U 

I have paid for the song BSGUEST_0907398001682264409


guid: yt:video:zesdXeaLCDI
title: Legendary Programmers
author: bigboxSWE
url: https://www.youtube.com/watch?v=zesdXeaLCDI
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC5--wS0Ljbin1TjWQX6eafA
enclosure_url: https://www.youtube.com/v/zesdXeaLCDI?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
To try everything Brilliant has to offer—free—for a full 30 days, visit https://brilliant.org/bigboxSWE  You’ll also get 20% off an annual premium subscription.

This video was sponsored by Brilliant

Music
Lo-fi Type Beat - Lighter:   https://www.youtube.com/watch?v=QCzRXx1DA_U 

I have paid for the song BSGUEST_0907398001682264409

I see some Youtubers doing this for seo, let me see if it works

Linus Torvalds, Richard Stallman, Kathleen Booth, Legendary Programmers, Most Legendary Programmers of All Time, Temple OS, Terry Davis, TempleOS, Open Source, C++, Linux


guid: yt:video:dzCzXCl6LMc
title: Toxic Programming Fans
author: bigboxSWE
url: https://www.youtube.com/watch?v=dzCzXCl6LMc
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC5--wS0Ljbin1TjWQX6eafA
enclosure_url: https://www.youtube.com/v/dzCzXCl6LMc?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
To try everything Brilliant has to offer—free—for a full 30 days, visit https://brilliant.org/bigboxSWE  You’ll also get 20% off an annual premium subscription.

This video was sponsored by Brilliant

Music
Lo-fi Type Beat - Lighter:      • [FREE] Lo-fi type beat - Lighter | lo...   

I have paid for the song BSGUEST_0907398001682264409


guid: yt:video:RigIpsYaT-o
title: Linux Distro Alignment Chart
author: bigboxSWE
url: https://www.youtube.com/watch?v=RigIpsYaT-o
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC5--wS0Ljbin1TjWQX6eafA
enclosure_url: https://www.youtube.com/v/RigIpsYaT-o?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Click this link https://sponsr.is/bootdev_bigboxswe and use my code BIGBOXSWE to get 25% off your first payment for boot.dev. That’s 25% your first month or your first year, depending on the subscription you choose.

This video was sponsored by Boot.dev 

Music
Lo-fi Type Beat - Lighter: https://www.youtube.com/watch?v=QCzRXx1DA_U 
I have paid for the song BSGUEST_0907398001682264409


guid: yt:video:z1b07nZ4xYk
title: Reality of Software Engineering Interns
author: bigboxSWE
url: https://www.youtube.com/watch?v=z1b07nZ4xYk
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC5--wS0Ljbin1TjWQX6eafA
enclosure_url: https://www.youtube.com/v/z1b07nZ4xYk?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
To try everything Brilliant has to offer—free—for a full 30 days, visit https://brilliant.org/bigboxSWE  You’ll also get 20% off an annual premium subscription.

This video was sponsored by Brilliant

Music
https://www.youtube.com/watch?v=zIM5eMPUmIA


guid: yt:video:6d32i2w_brY
title: What Your Keyboard Says About You
author: bigboxSWE
url: https://www.youtube.com/watch?v=6d32i2w_brY
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC5--wS0Ljbin1TjWQX6eafA
enclosure_url: https://www.youtube.com/v/6d32i2w_brY?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
To try everything Brilliant has to offer—free—for a full 30 days, visit https://brilliant.org/bigboxSWE  You’ll also get 20% off an annual premium subscription.

This video was sponsored by Brilliant 


Music
Lo-fi Type Beat - Lighter:  https://www.youtube.com/watch?v=QCzRXx1DA_U
I have paid for the song BSGUEST_0907398001682264409


guid: yt:video:K7hU_z9X4Kk
title: How To Make Coding Addictive
author: bigboxSWE
url: https://www.youtube.com/watch?v=K7hU_z9X4Kk
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC5--wS0Ljbin1TjWQX6eafA
enclosure_url: https://www.youtube.com/v/K7hU_z9X4Kk?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
VINTAGE BIG BOX IS BACK

I had so much fun making this video. More of these coming soon

Music
@massobeats: https://www.youtube.com/watch?v=Uo32HHzLsh8

Tags
How To Make Coding As Addictive As Social Media, How To Get Addicted To Coding, Learn How To Code, Coding Addicted, Code More, Worry Less Code More


guid: yt:video:NmbLjj-hbWs
title: Code Like an Artist
author: bigboxSWE
url: https://www.youtube.com/watch?v=NmbLjj-hbWs
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC5--wS0Ljbin1TjWQX6eafA
enclosure_url: https://www.youtube.com/v/NmbLjj-hbWs?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Hey guys, I recently read the book Steal Like an Artist and it gave me the idea for this video.

Btw thank you for 200k. I don't normally let numbers get to my head and still try to operate under the assumption I'm getting 10 likes.

I love you all.

Music
@massobeats : https://www.youtube.com/watch?v=gdJYxSwvUWE

Code Like an Artist,  How To Code Like an Artist, Code is Art, The Art of Code


guid: yt:video:lWIAkX2T7F8
title: How To Code So Fast It Feels Illegal
author: bigboxSWE
url: https://www.youtube.com/watch?v=lWIAkX2T7F8
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC5--wS0Ljbin1TjWQX6eafA
enclosure_url: https://www.youtube.com/v/lWIAkX2T7F8?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Hi guys, a simple application for Parkinson's Law in Programming 

Love you all. Thank you for 200K. I normally don't let numbers get to my head but 200K is crazy. 

Music 
@massobeats  - https://www.youtube.com/watch?v=M0NqWjmUl4Q 

Tags
How To Code Illegally Fast,How To Code So Fast It Feels Illegal,Code So Fast It Feels Illegal, Code Illegally Fast, Code So Quick It Feels Like Cheating, Code So Fast It Feels Like Cheating


guid: yt:video:EA3PnDXkjlo
title: Unhinged Linux Distros
author: bigboxSWE
url: https://www.youtube.com/watch?v=EA3PnDXkjlo
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC5--wS0Ljbin1TjWQX6eafA
enclosure_url: https://www.youtube.com/v/EA3PnDXkjlo?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
To try everything Brilliant has to offer—free—for a full 30 days, visit https://brilliant.org/bigboxSWE  You’ll also get 20% off an annual premium subscription.

This video was sponsored by Brilliant 

linux distros r unhinged sometimes bruh

Music
https://www.youtube.com/watch?v=1gWhM0K1sKc 

Tags
Nyarch, moebuntu, anime linux, weeb linux, why are linux users massive weebs, Linux Muslim Edition, Linux Christian Edition, Linux Mangaka


guid: yt:video:_Idg_9IFxwY
title: How To Code So Good They Can't Ignore You
author: bigboxSWE
url: https://www.youtube.com/watch?v=_Idg_9IFxwY
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC5--wS0Ljbin1TjWQX6eafA
enclosure_url: https://www.youtube.com/v/_Idg_9IFxwY?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Hey guys, I wanted to combine a some stuff I learned from So Good They Can't Ignore You by Cal Newport, and some stuff I've learned and experienced over my career.

As always I love you all.

Thank you for everything

Music
@massobeats : https://www.youtube.com/watch?v=B5YlDkIIQjE

Btw, wanna build cool stuff? https://app.codecrafters.io/join?via=bigboxSWE

Tags
Code So Good They Can't Ignore You, How To Code So Good They Can't Ignore You, Code Like a Genius


guid: yt:video:DQRECO--YNg
title: How To Remember Everything You Code
author: bigboxSWE
url: https://www.youtube.com/watch?v=DQRECO--YNg
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC5--wS0Ljbin1TjWQX6eafA
enclosure_url: https://www.youtube.com/v/DQRECO--YNg?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Hey guys, made this because I realised the more unique problems I faced, the more I tended to remember them.

As always, appreciate the love and support.

Btw, wanna build cool stuff? https://app.codecrafters.io/join?via=bigboxSWE 

Music 
@massobeats : https://www.youtube.com/watch?v=McKZg6kowQ4 

Tags
Code So Good You Can't Forget, How To Remember Everything You Code


guid: yt:video:POAXxbBAzSo
title: GITHUB IS UNHINGED
author: bigboxSWE
url: https://www.youtube.com/watch?v=POAXxbBAzSo
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC5--wS0Ljbin1TjWQX6eafA
enclosure_url: https://www.youtube.com/v/POAXxbBAzSo?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
To try everything Brilliant has to offer—free—for a full 30 days, visit https://brilliant.org/bigboxSWE  You’ll also get 20% off an annual premium subscription.

This video was sponsored by Brilliant 

Music
https://www.youtube.com/watch?v=OW1ps75BRSM


guid: yt:video:gCjHipuMir8
title: Do Gamers Know What They Like?
author: Timothy Cain
url: https://www.youtube.com/watch?v=gCjHipuMir8
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCTAfm-YD2M9xzvbYvRc5ttA
enclosure_url: https://www.youtube.com/v/gCjHipuMir8?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I talk about how many gamers don't seem to know what they like, only what they don't like.

Videos I reference:
Giving Good Feedback: https://www.youtube.com/watch?v=-72btgrwKzA
Feedback Needs Context: https://www.youtube.com/watch?v=0wBEMGov0HY
Fast Travel: https://www.youtube.com/watch?v=hyj6X7EaBsY
Game Difficulty Settings: https://www.youtube.com/watch?v=wUI6LZaCKCg
Encumbrance: https://www.youtube.com/watch?v=DnOmC1G3MPA
Encumbrance, Part 2: https://www.youtube.com/watch?v=xVNZZlmTSrg
Rising Game Budgets: https://www.youtube.com/watch?v=Je016BRB2-U


guid: yt:video:tBUPySwWmkM
title: Shadowdark
author: Timothy Cain
url: https://www.youtube.com/watch?v=tBUPySwWmkM
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCTAfm-YD2M9xzvbYvRc5ttA
enclosure_url: https://www.youtube.com/v/tBUPySwWmkM?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I talk about my fondness for a new tabletop role playing game, Shadowdark. You can learn more about it and get their free quickstart PDF at:

https://www.thearcanelibrary.com/

Videos I reference:
Influential Books: https://www.youtube.com/watch?v=eUxCRABoZng
Dice: https://www.youtube.com/watch?v=PnQll2PhAcA
How To Give Experience Points: https://www.youtube.com/watch?v=NyVZlvaAYX4


guid: yt:video:bA-P3p7PdEc
title: Do Devs Know What Gamers Want?
author: Timothy Cain
url: https://www.youtube.com/watch?v=bA-P3p7PdEc
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCTAfm-YD2M9xzvbYvRc5ttA
enclosure_url: https://www.youtube.com/v/bA-P3p7PdEc?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I talk about why devs don't know what gamers want.

Videos I reference:
Do Gamers Know What They Like?: https://www.youtube.com/watch?v=gCjHipuMir8
Giving Good Feedback: https://www.youtube.com/watch?v=-72btgrwKzA
Feedback Needs Context: https://www.youtube.com/watch?v=0wBEMGov0HY
Encumbrance: https://www.youtube.com/watch?v=DnOmC1G3MPA
Encumbrance, Part 2: https://www.youtube.com/watch?v=xVNZZlmTSrg
Fast Travel: https://www.youtube.com/watch?v=hyj6X7EaBsY
Game Difficulty Settings: https://www.youtube.com/watch?v=wUI6LZaCKCg
Gameplay Options: https://www.youtube.com/watch?v=NLFXroidQtk


guid: yt:video:SuMElKtydDQ
title: Code Refactoring
author: Timothy Cain
url: https://www.youtube.com/watch?v=SuMElKtydDQ
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCTAfm-YD2M9xzvbYvRc5ttA
enclosure_url: https://www.youtube.com/v/SuMElKtydDQ?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I talk about code refactoring: what it is, why you want to do it, and ways it is misused.

Videos I reference:
GNW & TIG, My OS Abstraction Libraries: https://www.youtube.com/watch?v=hZEosFcqmcU
Optimization: https://www.youtube.com/watch?v=QWAetn0Ch9I


guid: yt:video:RMpISydIrus
title: The Million XP Dungeon
author: Timothy Cain
url: https://www.youtube.com/watch?v=RMpISydIrus
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCTAfm-YD2M9xzvbYvRc5ttA
enclosure_url: https://www.youtube.com/v/RMpISydIrus?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I talk about a dungeon contest from over thirty years ago, and for which I can find no information online.


guid: yt:video:8QmRDRbcLkg
title: A World Building Tip
author: Timothy Cain
url: https://www.youtube.com/watch?v=8QmRDRbcLkg
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCTAfm-YD2M9xzvbYvRc5ttA
enclosure_url: https://www.youtube.com/v/8QmRDRbcLkg?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I give advice on making lore and building worlds for games.

Videos I reference:
How To Make A Good Game Setting: https://www.youtube.com/watch?v=kW7gOPHmr-Q
Thinking "What If?" In Detail: https://www.youtube.com/watch?v=5nOwzRRGEhI
Making And Maintaining An IP: https://www.youtube.com/watch?v=waUjJ2VjvaE


guid: yt:video:qJ7GRXVEf_0
title: Deckbuilder RPGs
author: Timothy Cain
url: https://www.youtube.com/watch?v=qJ7GRXVEf_0
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCTAfm-YD2M9xzvbYvRc5ttA
enclosure_url: https://www.youtube.com/v/qJ7GRXVEf_0?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I give my opinion on deckbuilder RPGs, where your abilities are randomly assigned to your character.

Videos I reference:
Implementing Randomness: https://www.youtube.com/watch?v=DqL9R5PqE20
What Is An RPG?: https://www.youtube.com/watch?v=XSKxD6v06P4


guid: yt:video:dI1CTmnMNiQ
title: Raising Cain
author: Timothy Cain
url: https://www.youtube.com/watch?v=dI1CTmnMNiQ
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCTAfm-YD2M9xzvbYvRc5ttA
enclosure_url: https://www.youtube.com/v/dI1CTmnMNiQ?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I show a visual history from my birth until I graduate from high school, which was a year after I started working at a game company. Now you have the whole story of raising Cain.

Video I reference:
Pets: https://www.youtube.com/watch?v=Nr1bzA0z8EA


guid: yt:video:4NorMGww9CA
title: Writing My Own TTRPG
author: Timothy Cain
url: https://www.youtube.com/watch?v=4NorMGww9CA
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCTAfm-YD2M9xzvbYvRc5ttA
enclosure_url: https://www.youtube.com/v/4NorMGww9CA?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I talk about my thoughts on making a paper-and-pencil RPG and what advantages and disadvantages I might have from my experience of making computer RPGs.

Video I reference:
Implementing Randomness: https://www.youtube.com/watch?v=DqL9R5PqE20


guid: yt:video:jAOtTrh-pJ8
title: Showcasing Your Work
author: Timothy Cain
url: https://www.youtube.com/watch?v=jAOtTrh-pJ8
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCTAfm-YD2M9xzvbYvRc5ttA
enclosure_url: https://www.youtube.com/v/jAOtTrh-pJ8?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I talk about how to organize your content in your game demo, trailer, design portfolio, and even interviews in order to showcase and highlight your best work.

Videos I reference:
Game Design Portfolio: https://www.youtube.com/watch?v=rzLx31nXDw0
Making A Demo: https://www.youtube.com/watch?v=uljC4cZh-Oc


guid: yt:video:YxtuSiSfsb8
title: Dynamic Quest Design
author: Timothy Cain
url: https://www.youtube.com/watch?v=YxtuSiSfsb8
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCTAfm-YD2M9xzvbYvRc5ttA
enclosure_url: https://www.youtube.com/v/YxtuSiSfsb8?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I talk about how I would design and implement a dynamic quest system.

Videos I reference:
Writing My Own TTRPG: https://www.youtube.com/watch?v=4NorMGww9CA
Quest Implementation: https://www.youtube.com/watch?v=pw6tOlmwwYE
Arcanum Generated Dialog: https://www.youtube.com/watch?v=5l7YcGCQ5Ck
Bartle's Player Archetypes: https://www.youtube.com/watch?v=i1SnVddY4k0
Sometimes I Hate VO: https://www.youtube.com/watch?v=ETCLEt-PEPM


guid: yt:video:8FcbexcoW4E
title: More Thoughts On Game Marketing
author: Timothy Cain
url: https://www.youtube.com/watch?v=8FcbexcoW4E
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCTAfm-YD2M9xzvbYvRc5ttA
enclosure_url: https://www.youtube.com/v/8FcbexcoW4E?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I give constructive feedback on how to be a game marketer.

Videos I reference:
Marketing: https://www.youtube.com/watch?v=LDSF7Ek4wec
Giving Good Feedback: https://www.youtube.com/watch?v=-72btgrwKzA
Game Production Stages: https://www.youtube.com/watch?v=IADSh_P05As


guid: yt:video:kqMsdT3Djdw
title: Adapting TTRPGs vs. Other IPs
author: Timothy Cain
url: https://www.youtube.com/watch?v=kqMsdT3Djdw
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCTAfm-YD2M9xzvbYvRc5ttA
enclosure_url: https://www.youtube.com/v/kqMsdT3Djdw?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I talk about the differences in adapting tabletop RPGs into videos games versus adapting a non-game IP into a video game.

Videos I reference:
Working In Another's Game IP: https://www.youtube.com/watch?v=GTQxb8p0BCc
Using An IP In A Different Medium: https://www.youtube.com/watch?v=wEIOUsAB-xU

Relevant playlists:
Temple of Elemental Evil: https://www.youtube.com/playlist?list=PLI8W_yHW-3DU-ZDu5eIY6D_1jDddPEQmT
Vampire Bloodlines: https://www.youtube.com/playlist?list=PLI8W_yHW-3DWP4pWJrsE8wsGWMaEQkpH2
South Park: https://www.youtube.com/playlist?list=PLI8W_yHW-3DVp2bJ9tJ6ANW1XlIAE1H5S


guid: yt:video:oj-m_BBE0Aw
title: Snowed in!
author: Timothy Cain
url: https://www.youtube.com/watch?v=oj-m_BBE0Aw
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCTAfm-YD2M9xzvbYvRc5ttA
enclosure_url: https://www.youtube.com/v/oj-m_BBE0Aw?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
We got several inches of snow overnight. Fortunately the dog is happily asleep and chocolate supplies are adequate.


guid: yt:video:m7hZs-y4x2A
title: Learning From Steam Data
author: Timothy Cain
url: https://www.youtube.com/watch?v=m7hZs-y4x2A
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCTAfm-YD2M9xzvbYvRc5ttA
enclosure_url: https://www.youtube.com/v/m7hZs-y4x2A?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I talk about a wonderful video about trends seen in current Steam game data and what my takeaways are about that data.

Videos I reference:
I Scraped the Entire Steam Catalog, Here’s the Data: https://www.youtube.com/watch?v=qiNv3qv-YbU
Discoverability: https://www.youtube.com/watch?v=lmgJVUuS1I8


guid: yt:video:smjGVmV6j9s
title: Chat With Patrons (Dec 29, 2024)
author: DistroTube
url: https://www.youtube.com/watch?v=smjGVmV6j9s
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg
enclosure_url: https://www.youtube.com/v/smjGVmV6j9s?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
This Video Chat will be for my Patrons!  Patrons can join the video call via Zoom which is available on Linux, Mac and Windows.  For those wishing to join the chat but are not a Patron, consider joining my Patreon ( https://www.patreon.com/distrotube ).  I will post a link to the Zoom chat on my Patreon page a few minutes prior to the stream.  Hope to see you guys there!

FOR THOSE WANTING TO HELP STEVE (XeroLinux)
https://bytes.xerolinux.xyz/priv/rip-gamerking/
https://fundrazr.com/XeroLinux?ref=ab_eBckkc

WANT TO SUPPORT THE CHANNEL? 
💰 Patreon: https://www.patreon.com/distrotube 
💳 Paypal: https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqbFF3eGpGSzM5Vk1PMGlENllqckpHeERYWWRld3xBQ3Jtc0tuUVNSYno2bjFGSG1MTGdfYkJnanhhU1o3ODdxejVWZzNTeHhLX0p4VUIwR01PMmF1MEtpdWVYMnppVXBuTmluSU16OFhHUmIyQ2Qyc3Z5MElJSkdMTExSRlRUUm9zZUhoLVVwcmxFdDlhZFhKNnpNZw&q=https%3A%2F%2Fwww.paypal.com%2Fcgi-bin%2Fwebscr%3Fcmd%3D_donations%26business%3Dderek%2540distrotube%252ecom%26lc%3DUS%26item_name%3DDistroTube%26no_note%3D0%26currency_code%3DUSD%26bn%3DPP%252dDonationsBF%253abtn_donateCC_LG%252egif%253aNonHostedGuest
🛍️ Amazon: https://amzn.to/2RotFFi
👕 Teespring: https://teespring.com/stores/distrotube

SOCIAL PLATFORMS: 
🗨️ Mastodon: https://fosstodon.org/@distrotube
👫 Reddit: https://www.reddit.com/r/DistroTube/
📽️ LBRY/Odysee: https://odysee.com/$/invite/@DistroTu...

DT ON THE WEB:
🕸️ Website: http://distro.tube
📁 GitLab: https://gitlab.com/dwt1  

FREE AND OPEN SOURCE SOFTWARE THAT I USE:
🌐 Brave Browser - https://brave.com/dis872 
📽️ Open Broadcaster Software: https://obsproject.com/
🎬 Kdenlive: https://kdenlive.org
🎨 GIMP: https://www.gimp.org/
🎵 Ardour: https://ardour.org/
💻 VirtualBox: https://www.virtualbox.org/
🗒️ Doom Emacs: https://github.com/hlissner/doom-emacs

Your support is very much appreciated. Thanks, guys!


guid: yt:video:zbFwf8tjrWk
title: Ghostty is a Fast and Feature-Rich Terminal
author: DistroTube
url: https://www.youtube.com/watch?v=zbFwf8tjrWk
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg
enclosure_url: https://www.youtube.com/v/zbFwf8tjrWk?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Ghostty is a fast, feature-rich, and cross-platform terminal emulator that uses platform-native UI and GPU acceleration.  Ghostty has support for tabs, splits and ligatures.

REFERENCED:
► https://ghostty.org/

WANT TO SUPPORT THE CHANNEL? 
💰 Patreon: https://www.patreon.com/distrotube 
💳 Paypal: https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqazNocEhiaGFBT1l1MnRHbnlIcHFKbXJWVnpQd3xBQ3Jtc0tsLVZJc19YeFlwZ2JqbXVOa3g0Skw4TVhTV2otNm1tM3A1bUNnamh3S2V6OGQtLTBnSjBxYTlvUXMxeEVIS3o4US10NENHMUQ3STk2a01FOFBhUnZjZFctMEhFUTg1TVctQmFfVUdxZXJ4TDl0azlYNA&q=https%3A%2F%2Fwww.paypal.com%2Fcgi-bin%2Fwebscr%3Fcmd%3D_donations%26business%3Dderek%2540distrotube%252ecom%26lc%3DUS%26item_name%3DDistroTube%26no_note%3D0%26currency_code%3DUSD%26bn%3DPP%252dDonationsBF%253abtn_donateCC_LG%252egif%253aNonHostedGuest
🛍️ Amazon: https://amzn.to/2RotFFi
👕 Teespring: https://teespring.com/stores/distrotube

DT ON THE WEB:
🕸️ Website: http://distrotube.com/
📁 GitLab: https://gitlab.com/dwt1  
🗨️ Mastodon: https://fosstodon.org/@distrotube
👫 Reddit: https://www.reddit.com/r/DistroTube/
📽️ LBRY/Odysee: https://odysee.com/@DistroTube:2

FREE AND OPEN SOURCE SOFTWARE THAT I USE:
🌐 Brave Browser - https://brave.com/dis872 
📽️ Open Broadcaster Software: https://obsproject.com/
🎬 Kdenlive: https://kdenlive.org
🎨 GIMP: https://www.gimp.org/
💻 VirtualBox: https://www.virtualbox.org/
🗒️ Doom Emacs: https://github.com/hlissner/doom-emacs

Your support is very much appreciated. Thanks, guys!


guid: yt:video:JtW1faCVVCQ
title: Siduction...This Linux Distro Keeps Shining On
author: DistroTube
url: https://www.youtube.com/watch?v=JtW1faCVVCQ
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg
enclosure_url: https://www.youtube.com/v/JtW1faCVVCQ?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Today, I'm taking a quick first look at the latest release of Siduction, a Linux distro based on Debian Unstable.  I'm taking a look at their KDE edition.

REFERENCED:
► https://siduction.org/

WANT TO SUPPORT THE CHANNEL? 
💰 Patreon: https://www.patreon.com/distrotube 
💳 Paypal: https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqazNocEhiaGFBT1l1MnRHbnlIcHFKbXJWVnpQd3xBQ3Jtc0tsLVZJc19YeFlwZ2JqbXVOa3g0Skw4TVhTV2otNm1tM3A1bUNnamh3S2V6OGQtLTBnSjBxYTlvUXMxeEVIS3o4US10NENHMUQ3STk2a01FOFBhUnZjZFctMEhFUTg1TVctQmFfVUdxZXJ4TDl0azlYNA&q=https%3A%2F%2Fwww.paypal.com%2Fcgi-bin%2Fwebscr%3Fcmd%3D_donations%26business%3Dderek%2540distrotube%252ecom%26lc%3DUS%26item_name%3DDistroTube%26no_note%3D0%26currency_code%3DUSD%26bn%3DPP%252dDonationsBF%253abtn_donateCC_LG%252egif%253aNonHostedGuest
🛍️ Amazon: https://amzn.to/2RotFFi
👕 Teespring: https://teespring.com/stores/distrotube

DT ON THE WEB:
🕸️ Website: http://distrotube.com/
📁 GitLab: https://gitlab.com/dwt1  
🗨️ Mastodon: https://fosstodon.org/@distrotube
👫 Reddit: https://www.reddit.com/r/DistroTube/
📽️ LBRY/Odysee: https://odysee.com/@DistroTube:2

FREE AND OPEN SOURCE SOFTWARE THAT I USE:
🌐 Brave Browser - https://brave.com/dis872 
📽️ Open Broadcaster Software: https://obsproject.com/
🎬 Kdenlive: https://kdenlive.org
🎨 GIMP: https://www.gimp.org/
💻 VirtualBox: https://www.virtualbox.org/
🗒️ Doom Emacs: https://github.com/hlissner/doom-emacs

Your support is very much appreciated. Thanks, guys!


guid: yt:video:SNWGg2aDDh0
title: Diablo 2 Resurrected On Linux (DT Live!)
author: DistroTube
url: https://www.youtube.com/watch?v=SNWGg2aDDh0
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg
enclosure_url: https://www.youtube.com/v/SNWGg2aDDh0?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
In a recent video, I mentioned that I had installed Diablo 2 Resurrected via Bottles on Linux, and I have been loving this game.  So today, I'm going to be playing a bit of D2R live on stream.  I think what I'm going to do is start a new character and see how far I can get. 

MY VIDEO ON INSTALLING D2R ON LINUX:
► https://www.youtube.com/watch?v=sHK6DS178Q8

WANT TO SUPPORT THE CHANNEL? 
💰 Patreon: https://www.patreon.com/distrotube 
💳 Paypal: https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqazNocEhiaGFBT1l1MnRHbnlIcHFKbXJWVnpQd3xBQ3Jtc0tsLVZJc19YeFlwZ2JqbXVOa3g0Skw4TVhTV2otNm1tM3A1bUNnamh3S2V6OGQtLTBnSjBxYTlvUXMxeEVIS3o4US10NENHMUQ3STk2a01FOFBhUnZjZFctMEhFUTg1TVctQmFfVUdxZXJ4TDl0azlYNA&q=https%3A%2F%2Fwww.paypal.com%2Fcgi-bin%2Fwebscr%3Fcmd%3D_donations%26business%3Dderek%2540distrotube%252ecom%26lc%3DUS%26item_name%3DDistroTube%26no_note%3D0%26currency_code%3DUSD%26bn%3DPP%252dDonationsBF%253abtn_donateCC_LG%252egif%253aNonHostedGuest
🛍️ Amazon: https://amzn.to/2RotFFi
👕 Teespring: https://teespring.com/stores/distrotube

DT ON THE WEB:
🕸️ Website: http://distrotube.com/
📁 GitLab: https://gitlab.com/dwt1  
🗨️ Mastodon: https://fosstodon.org/@distrotube
👫 Reddit: https://www.reddit.com/r/DistroTube/
📽️ LBRY/Odysee: https://odysee.com/@DistroTube:2

FREE AND OPEN SOURCE SOFTWARE THAT I USE:
🌐 Brave Browser - https://brave.com/dis872 
📽️ Open Broadcaster Software: https://obsproject.com/
🎬 Kdenlive: https://kdenlive.org
🎨 GIMP: https://www.gimp.org/
💻 VirtualBox: https://www.virtualbox.org/
🗒️ Doom Emacs: https://github.com/hlissner/doom-emacs

Your support is very much appreciated. Thanks, guys!


guid: yt:video:XONP03uMq08
title: Warehouse Makes Flatpaks Even Easier To Use
author: DistroTube
url: https://www.youtube.com/watch?v=XONP03uMq08
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg
enclosure_url: https://www.youtube.com/v/XONP03uMq08?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Warehouse is a versatile toolbox and provides a simple UI to do simple Flatpak actions like installing or uninstalling Flatpaks, as well as doing more complex Flatpak options, without resorting to the command line.

REFERENCED:
► https://github.com/flattool/warehouse

WANT TO SUPPORT THE CHANNEL? 
💰 Patreon: https://www.patreon.com/distrotube 
💳 Paypal: https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqazNocEhiaGFBT1l1MnRHbnlIcHFKbXJWVnpQd3xBQ3Jtc0tsLVZJc19YeFlwZ2JqbXVOa3g0Skw4TVhTV2otNm1tM3A1bUNnamh3S2V6OGQtLTBnSjBxYTlvUXMxeEVIS3o4US10NENHMUQ3STk2a01FOFBhUnZjZFctMEhFUTg1TVctQmFfVUdxZXJ4TDl0azlYNA&q=https%3A%2F%2Fwww.paypal.com%2Fcgi-bin%2Fwebscr%3Fcmd%3D_donations%26business%3Dderek%2540distrotube%252ecom%26lc%3DUS%26item_name%3DDistroTube%26no_note%3D0%26currency_code%3DUSD%26bn%3DPP%252dDonationsBF%253abtn_donateCC_LG%252egif%253aNonHostedGuest
🛍️ Amazon: https://amzn.to/2RotFFi
👕 Teespring: https://teespring.com/stores/distrotube

DT ON THE WEB:
🕸️ Website: http://distrotube.com/
📁 GitLab: https://gitlab.com/dwt1  
🗨️ Mastodon: https://fosstodon.org/@distrotube
👫 Reddit: https://www.reddit.com/r/DistroTube/
📽️ LBRY/Odysee: https://odysee.com/@DistroTube:2

FREE AND OPEN SOURCE SOFTWARE THAT I USE:
🌐 Brave Browser - https://brave.com/dis872 
📽️ Open Broadcaster Software: https://obsproject.com/
🎬 Kdenlive: https://kdenlive.org
🎨 GIMP: https://www.gimp.org/
💻 VirtualBox: https://www.virtualbox.org/
🗒️ Doom Emacs: https://github.com/hlissner/doom-emacs

Your support is very much appreciated. Thanks, guys!


guid: yt:video:jFKcfapSy4k
title: Artists And Creators Should Stop Disowning Their Work
author: DistroTube
url: https://www.youtube.com/watch?v=jFKcfapSy4k
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg
enclosure_url: https://www.youtube.com/v/jFKcfapSy4k?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
One of the things that kinda bugs me is that so many artists will later disown their own work.  This seems especially true of movie directors and rock bands.  And, in my opinion, it makes no sense to do so.

REFERENCED VIDEO FROM THE LINUX CAST:
► https://www.youtube.com/watch?v=YSIVD-kmjrY

WANT TO SUPPORT THE CHANNEL? 
💰 Patreon: https://www.patreon.com/distrotube 
💳 Paypal: https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqazNocEhiaGFBT1l1MnRHbnlIcHFKbXJWVnpQd3xBQ3Jtc0tsLVZJc19YeFlwZ2JqbXVOa3g0Skw4TVhTV2otNm1tM3A1bUNnamh3S2V6OGQtLTBnSjBxYTlvUXMxeEVIS3o4US10NENHMUQ3STk2a01FOFBhUnZjZFctMEhFUTg1TVctQmFfVUdxZXJ4TDl0azlYNA&q=https%3A%2F%2Fwww.paypal.com%2Fcgi-bin%2Fwebscr%3Fcmd%3D_donations%26business%3Dderek%2540distrotube%252ecom%26lc%3DUS%26item_name%3DDistroTube%26no_note%3D0%26currency_code%3DUSD%26bn%3DPP%252dDonationsBF%253abtn_donateCC_LG%252egif%253aNonHostedGuest
🛍️ Amazon: https://amzn.to/2RotFFi
👕 Teespring: https://teespring.com/stores/distrotube

DT ON THE WEB:
🕸️ Website: http://distrotube.com/
📁 GitLab: https://gitlab.com/dwt1  
🗨️ Mastodon: https://fosstodon.org/@distrotube
👫 Reddit: https://www.reddit.com/r/DistroTube/
📽️ LBRY/Odysee: https://odysee.com/@DistroTube:2

FREE AND OPEN SOURCE SOFTWARE THAT I USE:
🌐 Brave Browser - https://brave.com/dis872 
📽️ Open Broadcaster Software: https://obsproject.com/
🎬 Kdenlive: https://kdenlive.org
🎨 GIMP: https://www.gimp.org/
💻 VirtualBox: https://www.virtualbox.org/
🗒️ Doom Emacs: https://github.com/hlissner/doom-emacs

Your support is very much appreciated. Thanks, guys!


guid: yt:video:is0iYEh8OmU
title: A Quick Look At Makulu LinDoz 2025 Edition
author: DistroTube
url: https://www.youtube.com/watch?v=is0iYEh8OmU
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg
enclosure_url: https://www.youtube.com/v/is0iYEh8OmU?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Makulu LinDoz 2025 marks a significant shift in the LinDoz ecosystem, introducing a new features, including cutting-edge AI integration.  

REFERENCED:
► https://www.makululinux.com/wp/2024/12/24/lindoz-2025-is-live/

WANT TO SUPPORT THE CHANNEL? 
💰 Patreon: https://www.patreon.com/distrotube 
💳 Paypal: https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqazNocEhiaGFBT1l1MnRHbnlIcHFKbXJWVnpQd3xBQ3Jtc0tsLVZJc19YeFlwZ2JqbXVOa3g0Skw4TVhTV2otNm1tM3A1bUNnamh3S2V6OGQtLTBnSjBxYTlvUXMxeEVIS3o4US10NENHMUQ3STk2a01FOFBhUnZjZFctMEhFUTg1TVctQmFfVUdxZXJ4TDl0azlYNA&q=https%3A%2F%2Fwww.paypal.com%2Fcgi-bin%2Fwebscr%3Fcmd%3D_donations%26business%3Dderek%2540distrotube%252ecom%26lc%3DUS%26item_name%3DDistroTube%26no_note%3D0%26currency_code%3DUSD%26bn%3DPP%252dDonationsBF%253abtn_donateCC_LG%252egif%253aNonHostedGuest
🛍️ Amazon: https://amzn.to/2RotFFi
👕 Teespring: https://teespring.com/stores/distrotube

DT ON THE WEB:
🕸️ Website: http://distrotube.com/
📁 GitLab: https://gitlab.com/dwt1  
🗨️ Mastodon: https://fosstodon.org/@distrotube
👫 Reddit: https://www.reddit.com/r/DistroTube/
📽️ LBRY/Odysee: https://odysee.com/@DistroTube:2

FREE AND OPEN SOURCE SOFTWARE THAT I USE:
🌐 Brave Browser - https://brave.com/dis872 
📽️ Open Broadcaster Software: https://obsproject.com/
🎬 Kdenlive: https://kdenlive.org
🎨 GIMP: https://www.gimp.org/
💻 VirtualBox: https://www.virtualbox.org/
🗒️ Doom Emacs: https://github.com/hlissner/doom-emacs

Your support is very much appreciated. Thanks, guys!


guid: yt:video:NffloetOJG8
title: Businesses Dump Free Licenses For Proprietary
author: DistroTube
url: https://www.youtube.com/watch?v=NffloetOJG8
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg
enclosure_url: https://www.youtube.com/v/NffloetOJG8?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
There is this disturbing trend over the last couple of years...open source businesses abandoning their FOSS licensing in favor or proprietary licensing.

WANT TO SUPPORT THE CHANNEL? 
💰 Patreon: https://www.patreon.com/distrotube 
💳 Paypal: https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqazNocEhiaGFBT1l1MnRHbnlIcHFKbXJWVnpQd3xBQ3Jtc0tsLVZJc19YeFlwZ2JqbXVOa3g0Skw4TVhTV2otNm1tM3A1bUNnamh3S2V6OGQtLTBnSjBxYTlvUXMxeEVIS3o4US10NENHMUQ3STk2a01FOFBhUnZjZFctMEhFUTg1TVctQmFfVUdxZXJ4TDl0azlYNA&q=https%3A%2F%2Fwww.paypal.com%2Fcgi-bin%2Fwebscr%3Fcmd%3D_donations%26business%3Dderek%2540distrotube%252ecom%26lc%3DUS%26item_name%3DDistroTube%26no_note%3D0%26currency_code%3DUSD%26bn%3DPP%252dDonationsBF%253abtn_donateCC_LG%252egif%253aNonHostedGuest
🛍️ Amazon: https://amzn.to/2RotFFi
👕 Teespring: https://teespring.com/stores/distrotube

DT ON THE WEB:
🕸️ Website: http://distrotube.com/
📁 GitLab: https://gitlab.com/dwt1  
🗨️ Mastodon: https://fosstodon.org/@distrotube
👫 Reddit: https://www.reddit.com/r/DistroTube/
📽️ LBRY/Odysee: https://odysee.com/@DistroTube:2

FREE AND OPEN SOURCE SOFTWARE THAT I USE:
🌐 Brave Browser - https://brave.com/dis872 
📽️ Open Broadcaster Software: https://obsproject.com/
🎬 Kdenlive: https://kdenlive.org
🎨 GIMP: https://www.gimp.org/
💻 VirtualBox: https://www.virtualbox.org/
🗒️ Doom Emacs: https://github.com/hlissner/doom-emacs

Your support is very much appreciated. Thanks, guys!


guid: yt:video:Byt613DZ64k
title: What Normies Think Of Tech
author: DistroTube
url: https://www.youtube.com/watch?v=Byt613DZ64k
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg
enclosure_url: https://www.youtube.com/v/Byt613DZ64k?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
What kind of answers would you get if you asked "normies" about certain tech terms?

WANT TO SUPPORT THE CHANNEL? 
💰 Patreon: https://www.patreon.com/distrotube 
💳 Paypal: https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqazNocEhiaGFBT1l1MnRHbnlIcHFKbXJWVnpQd3xBQ3Jtc0tsLVZJc19YeFlwZ2JqbXVOa3g0Skw4TVhTV2otNm1tM3A1bUNnamh3S2V6OGQtLTBnSjBxYTlvUXMxeEVIS3o4US10NENHMUQ3STk2a01FOFBhUnZjZFctMEhFUTg1TVctQmFfVUdxZXJ4TDl0azlYNA&q=https%3A%2F%2Fwww.paypal.com%2Fcgi-bin%2Fwebscr%3Fcmd%3D_donations%26business%3Dderek%2540distrotube%252ecom%26lc%3DUS%26item_name%3DDistroTube%26no_note%3D0%26currency_code%3DUSD%26bn%3DPP%252dDonationsBF%253abtn_donateCC_LG%252egif%253aNonHostedGuest
🛍️ Amazon: https://amzn.to/2RotFFi
👕 Teespring: https://teespring.com/stores/distrotube

DT ON THE WEB:
🕸️ Website: http://distrotube.com/
📁 GitLab: https://gitlab.com/dwt1  
🗨️ Mastodon: https://fosstodon.org/@distrotube
👫 Reddit: https://www.reddit.com/r/DistroTube/
📽️ LBRY/Odysee: https://odysee.com/@DistroTube:2

FREE AND OPEN SOURCE SOFTWARE THAT I USE:
🌐 Brave Browser - https://brave.com/dis872 
📽️ Open Broadcaster Software: https://obsproject.com/
🎬 Kdenlive: https://kdenlive.org
🎨 GIMP: https://www.gimp.org/
💻 VirtualBox: https://www.virtualbox.org/
🗒️ Doom Emacs: https://github.com/hlissner/doom-emacs

Your support is very much appreciated. Thanks, guys!


guid: yt:video:-bh1JEsssxU
title: Rhino Linux Is Quickly Becoming One Of The Best Distros
author: DistroTube
url: https://www.youtube.com/watch?v=-bh1JEsssxU
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg
enclosure_url: https://www.youtube.com/v/-bh1JEsssxU?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Rhino Linux is an Ubuntu-based rolling release distribution that includes is XFCE-based Unicorn desktop, as well as custom package managers to help installing packages from Pacstall, Snap, Flatpak and Appimages.

REFERENCED:
► https://rhinolinux.org/

WANT TO SUPPORT THE CHANNEL? 
💰 Patreon: https://www.patreon.com/distrotube 
💳 Paypal: https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqazNocEhiaGFBT1l1MnRHbnlIcHFKbXJWVnpQd3xBQ3Jtc0tsLVZJc19YeFlwZ2JqbXVOa3g0Skw4TVhTV2otNm1tM3A1bUNnamh3S2V6OGQtLTBnSjBxYTlvUXMxeEVIS3o4US10NENHMUQ3STk2a01FOFBhUnZjZFctMEhFUTg1TVctQmFfVUdxZXJ4TDl0azlYNA&q=https%3A%2F%2Fwww.paypal.com%2Fcgi-bin%2Fwebscr%3Fcmd%3D_donations%26business%3Dderek%2540distrotube%252ecom%26lc%3DUS%26item_name%3DDistroTube%26no_note%3D0%26currency_code%3DUSD%26bn%3DPP%252dDonationsBF%253abtn_donateCC_LG%252egif%253aNonHostedGuest
🛍️ Amazon: https://amzn.to/2RotFFi
👕 Teespring: https://teespring.com/stores/distrotube

DT ON THE WEB:
🕸️ Website: http://distrotube.com/
📁 GitLab: https://gitlab.com/dwt1  
🗨️ Mastodon: https://fosstodon.org/@distrotube
👫 Reddit: https://www.reddit.com/r/DistroTube/
📽️ LBRY/Odysee: https://odysee.com/@DistroTube:2

FREE AND OPEN SOURCE SOFTWARE THAT I USE:
🌐 Brave Browser - https://brave.com/dis872 
📽️ Open Broadcaster Software: https://obsproject.com/
🎬 Kdenlive: https://kdenlive.org
🎨 GIMP: https://www.gimp.org/
💻 VirtualBox: https://www.virtualbox.org/
🗒️ Doom Emacs: https://github.com/hlissner/doom-emacs

Your support is very much appreciated. Thanks, guys!


guid: yt:video:SW2B5AT-vlU
title: A Quick Look At Solus 4.7 "Endurance"
author: DistroTube
url: https://www.youtube.com/watch?v=SW2B5AT-vlU
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg
enclosure_url: https://www.youtube.com/v/SW2B5AT-vlU?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I'm going to take a quick first look at the latest release of Solus OS with the Budgie desktop.  Solus is an independent distro that is designed for desktop use.  It's simple to use and very beautiful.

REFERENCED:
► https://getsol.us/

WANT TO SUPPORT THE CHANNEL? 
💰 Patreon: https://www.patreon.com/distrotube 
💳 Paypal: https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqazNocEhiaGFBT1l1MnRHbnlIcHFKbXJWVnpQd3xBQ3Jtc0tsLVZJc19YeFlwZ2JqbXVOa3g0Skw4TVhTV2otNm1tM3A1bUNnamh3S2V6OGQtLTBnSjBxYTlvUXMxeEVIS3o4US10NENHMUQ3STk2a01FOFBhUnZjZFctMEhFUTg1TVctQmFfVUdxZXJ4TDl0azlYNA&q=https%3A%2F%2Fwww.paypal.com%2Fcgi-bin%2Fwebscr%3Fcmd%3D_donations%26business%3Dderek%2540distrotube%252ecom%26lc%3DUS%26item_name%3DDistroTube%26no_note%3D0%26currency_code%3DUSD%26bn%3DPP%252dDonationsBF%253abtn_donateCC_LG%252egif%253aNonHostedGuest
🛍️ Amazon: https://amzn.to/2RotFFi
👕 Teespring: https://teespring.com/stores/distrotube

DT ON THE WEB:
🕸️ Website: http://distrotube.com/
📁 GitLab: https://gitlab.com/dwt1  
🗨️ Mastodon: https://fosstodon.org/@distrotube
👫 Reddit: https://www.reddit.com/r/DistroTube/
📽️ LBRY/Odysee: https://odysee.com/@DistroTube:2

FREE AND OPEN SOURCE SOFTWARE THAT I USE:
🌐 Brave Browser - https://brave.com/dis872 
📽️ Open Broadcaster Software: https://obsproject.com/
🎬 Kdenlive: https://kdenlive.org
🎨 GIMP: https://www.gimp.org/
💻 VirtualBox: https://www.virtualbox.org/
🗒️ Doom Emacs: https://github.com/hlissner/doom-emacs

Your support is very much appreciated. Thanks, guys!


guid: yt:video:A3csqlk8kFw
title: Useful Terminal Commands For Distro-Hoppers
author: DistroTube
url: https://www.youtube.com/watch?v=A3csqlk8kFw
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg
enclosure_url: https://www.youtube.com/v/A3csqlk8kFw?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I love using the terminal.  This video highlights some of the commands that I often use when I'm installing a new Linux distro or checking out a new distro release.

WANT TO SUPPORT THE CHANNEL? 
💰 Patreon: https://www.patreon.com/distrotube 
💳 Paypal: https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqazNocEhiaGFBT1l1MnRHbnlIcHFKbXJWVnpQd3xBQ3Jtc0tsLVZJc19YeFlwZ2JqbXVOa3g0Skw4TVhTV2otNm1tM3A1bUNnamh3S2V6OGQtLTBnSjBxYTlvUXMxeEVIS3o4US10NENHMUQ3STk2a01FOFBhUnZjZFctMEhFUTg1TVctQmFfVUdxZXJ4TDl0azlYNA&q=https%3A%2F%2Fwww.paypal.com%2Fcgi-bin%2Fwebscr%3Fcmd%3D_donations%26business%3Dderek%2540distrotube%252ecom%26lc%3DUS%26item_name%3DDistroTube%26no_note%3D0%26currency_code%3DUSD%26bn%3DPP%252dDonationsBF%253abtn_donateCC_LG%252egif%253aNonHostedGuest
🛍️ Amazon: https://amzn.to/2RotFFi
👕 Teespring: https://teespring.com/stores/distrotube

DT ON THE WEB:
🕸️ Website: http://distrotube.com/
📁 GitLab: https://gitlab.com/dwt1  
🗨️ Mastodon: https://fosstodon.org/@distrotube
👫 Reddit: https://www.reddit.com/r/DistroTube/
📽️ LBRY/Odysee: https://odysee.com/@DistroTube:2

FREE AND OPEN SOURCE SOFTWARE THAT I USE:
🌐 Brave Browser - https://brave.com/dis872 
📽️ Open Broadcaster Software: https://obsproject.com/
🎬 Kdenlive: https://kdenlive.org
🎨 GIMP: https://www.gimp.org/
💻 VirtualBox: https://www.virtualbox.org/
🗒️ Doom Emacs: https://github.com/hlissner/doom-emacs

Your support is very much appreciated. Thanks, guys!


guid: yt:video:FoAP9eqeVBg
title: Varia Is A Download Manager On Steroids
author: DistroTube
url: https://www.youtube.com/watch?v=FoAP9eqeVBg
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg
enclosure_url: https://www.youtube.com/v/FoAP9eqeVBg?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Varia is a download manager that supports videos and torrents on top of just regular files, and with a variety of advanced features wrapped inside an easy to use interface.

REFERENCED:
► https://flathub.org/apps/io.github.giantpinkrobots.varia

WANT TO SUPPORT THE CHANNEL? 
💰 Patreon: https://www.patreon.com/distrotube 
💳 Paypal: https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqazNocEhiaGFBT1l1MnRHbnlIcHFKbXJWVnpQd3xBQ3Jtc0tsLVZJc19YeFlwZ2JqbXVOa3g0Skw4TVhTV2otNm1tM3A1bUNnamh3S2V6OGQtLTBnSjBxYTlvUXMxeEVIS3o4US10NENHMUQ3STk2a01FOFBhUnZjZFctMEhFUTg1TVctQmFfVUdxZXJ4TDl0azlYNA&q=https%3A%2F%2Fwww.paypal.com%2Fcgi-bin%2Fwebscr%3Fcmd%3D_donations%26business%3Dderek%2540distrotube%252ecom%26lc%3DUS%26item_name%3DDistroTube%26no_note%3D0%26currency_code%3DUSD%26bn%3DPP%252dDonationsBF%253abtn_donateCC_LG%252egif%253aNonHostedGuest
🛍️ Amazon: https://amzn.to/2RotFFi
👕 Teespring: https://teespring.com/stores/distrotube

DT ON THE WEB:
🕸️ Website: http://distrotube.com/
📁 GitLab: https://gitlab.com/dwt1  
🗨️ Mastodon: https://fosstodon.org/@distrotube
👫 Reddit: https://www.reddit.com/r/DistroTube/
📽️ LBRY/Odysee: https://odysee.com/@DistroTube:2

FREE AND OPEN SOURCE SOFTWARE THAT I USE:
🌐 Brave Browser - https://brave.com/dis872 
📽️ Open Broadcaster Software: https://obsproject.com/
🎬 Kdenlive: https://kdenlive.org
🎨 GIMP: https://www.gimp.org/
💻 VirtualBox: https://www.virtualbox.org/
🗒️ Doom Emacs: https://github.com/hlissner/doom-emacs

Your support is very much appreciated. Thanks, guys!


guid: yt:video:3rwe3d9nwvc
title: How To Create Strong And Complicated Passwords
author: DistroTube
url: https://www.youtube.com/watch?v=3rwe3d9nwvc
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg
enclosure_url: https://www.youtube.com/v/3rwe3d9nwvc?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
When it comes to computers, phones and online services, you have to create accounts and passwords.  These passwords need to be strong and complicated in order to fend off would-be hackers.  In this video, I discuss what makes a good password, as well as some Linux command line tools that help in this process.

WANT TO SUPPORT THE CHANNEL? 
💰 Patreon: https://www.patreon.com/distrotube 
💳 Paypal: https://www.youtube.com/redirect?event=channel_banner&redir_token=QUFFLUhqazNocEhiaGFBT1l1MnRHbnlIcHFKbXJWVnpQd3xBQ3Jtc0tsLVZJc19YeFlwZ2JqbXVOa3g0Skw4TVhTV2otNm1tM3A1bUNnamh3S2V6OGQtLTBnSjBxYTlvUXMxeEVIS3o4US10NENHMUQ3STk2a01FOFBhUnZjZFctMEhFUTg1TVctQmFfVUdxZXJ4TDl0azlYNA&q=https%3A%2F%2Fwww.paypal.com%2Fcgi-bin%2Fwebscr%3Fcmd%3D_donations%26business%3Dderek%2540distrotube%252ecom%26lc%3DUS%26item_name%3DDistroTube%26no_note%3D0%26currency_code%3DUSD%26bn%3DPP%252dDonationsBF%253abtn_donateCC_LG%252egif%253aNonHostedGuest
🛍️ Amazon: https://amzn.to/2RotFFi
👕 Teespring: https://teespring.com/stores/distrotube

DT ON THE WEB:
🕸️ Website: http://distrotube.com/
📁 GitLab: https://gitlab.com/dwt1  
🗨️ Mastodon: https://fosstodon.org/@distrotube
👫 Reddit: https://www.reddit.com/r/DistroTube/
📽️ LBRY/Odysee: https://odysee.com/@DistroTube:2

FREE AND OPEN SOURCE SOFTWARE THAT I USE:
🌐 Brave Browser - https://brave.com/dis872 
📽️ Open Broadcaster Software: https://obsproject.com/
🎬 Kdenlive: https://kdenlive.org
🎨 GIMP: https://www.gimp.org/
💻 VirtualBox: https://www.virtualbox.org/
🗒️ Doom Emacs: https://github.com/hlissner/doom-emacs

Your support is very much appreciated. Thanks, guys!


guid: yt:video:8Mfw0X5jY3A
title: eevBLAB 123 - MORE Youtube AI BS! - AI Description Summaries
author: EEVblog
url: https://www.youtube.com/watch?v=8Mfw0X5jY3A
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC2DjFE7Xf11URZqWBigcVOQ
enclosure_url: https://www.youtube.com/v/8Mfw0X5jY3A?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Youtube are shoving even more AI BS down our throat with AI description summaries, whether we like it or not. Screw the creators.

AI Voice Dubbing Dave: https://www.youtube.com/watch?v=ea-i2DG_9FE

Forum: https://www.eevblog.com/forum/blog/eevblab-123-more-youtube-ai-bs!-ai-description-summaries/

If you find my videos useful you may consider supporting the EEVblog on Patreon: http://www.patreon.com/eevblog
Or with crypto:
BTC: 33BsprBQNBtHuVzVwDmqWkpDjYnCouwASM
ETH: 0x68114e40ff4dcdd384750500501e20acf3875f8c
BCH: 35n9KBPw9T7M3NGzpS3t4nUYEf9HbRmkm4
USDC: 0x68114e40ff4dcdd384750500501e20acf3875f8c
LTC: MJfK57ujxy55su4XicVGQc9wcEJf6mAoXF
Web Site: http://www.eevblog.com
Store: https://eevblog.store/

Other channels:
EEVblog2: http://www.youtube.com/EEVblog2
EEVdiscover: https://www.youtube.com/eevdiscover

T-Shirts: http://teespring.com/stores/eevblog
#ElectronicsCreators #AI #Yotutube


guid: yt:video:pXZtk68B3zY
title: EEVblog 1655 - How to Discharge Capacitors SAFELY using a Multimeter!
author: EEVblog
url: https://www.youtube.com/watch?v=pXZtk68B3zY
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC2DjFE7Xf11URZqWBigcVOQ
enclosure_url: https://www.youtube.com/v/pXZtk68B3zY?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
You can use almost any decent modern multimeter to safely discharge high voltage capacitor banks WITHOUT a LowZ function. Not a universal solution, but a handy tip to remember if you are in a pinch.
Forum: https://www.eevblog.com/forum/blog/eevblog-1655-multimeter-tip-discharge-capacitors-using-any-meter/

Transistor Zener Clamp video: https://www.youtube.com/watch?v=BGcKjy_UNQ4



If you find my videos useful you may consider supporting the EEVblog on Patreon: http://www.patreon.com/eevblog
Or with crypto:
BTC: 33BsprBQNBtHuVzVwDmqWkpDjYnCouwASM
ETH: 0x68114e40ff4dcdd384750500501e20acf3875f8c
BCH: 35n9KBPw9T7M3NGzpS3t4nUYEf9HbRmkm4
USDC: 0x68114e40ff4dcdd384750500501e20acf3875f8c
LTC: MJfK57ujxy55su4XicVGQc9wcEJf6mAoXF
Web Site: http://www.eevblog.com
Store: https://eevblog.store/

Other channels:
EEVblog2: http://www.youtube.com/EEVblog2
EEVdiscover: https://www.youtube.com/eevdiscover

T-Shirts: http://teespring.com/stores/eevblog
#ElectronicsCreators #Multimeter #Tip


guid: yt:video:hG9WeiMo3mQ
title: EEVblog Lab - Reloaded
author: EEVblog
url: https://www.youtube.com/watch?v=hG9WeiMo3mQ
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC2DjFE7Xf11URZqWBigcVOQ
enclosure_url: https://www.youtube.com/v/hG9WeiMo3mQ?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Something very rare happened in the EEVblog lab...
NEW Merch Store! https://www.teepublic.com/stores/eevblog?ref_id=37825

If you find my videos useful you may consider supporting the EEVblog on Patreon: http://www.patreon.com/eevblog
Or with crypto:
BTC: 33BsprBQNBtHuVzVwDmqWkpDjYnCouwASM
ETH: 0x68114e40ff4dcdd384750500501e20acf3875f8c
BCH: 35n9KBPw9T7M3NGzpS3t4nUYEf9HbRmkm4
USDC: 0x68114e40ff4dcdd384750500501e20acf3875f8c
LTC: MJfK57ujxy55su4XicVGQc9wcEJf6mAoXF
Web Site: http://www.eevblog.com
Store: https://eevblog.store/

Other channels:
EEVblog2: http://www.youtube.com/EEVblog2
EEVdiscover: https://www.youtube.com/eevdiscover

T-Shirts: http://teespring.com/stores/eevblog
#ElectronicsCreators #Lab #Cleanup


guid: yt:video:FqN77SZF5zU
title: EEVblog 1656 - MAILBAG: ElectroPermanent Magnet, DIN PSU's, Sponge, Beelink EQ14 N150 PC
author: EEVblog
url: https://www.youtube.com/watch?v=FqN77SZF5zU
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC2DjFE7Xf11URZqWBigcVOQ
enclosure_url: https://www.youtube.com/v/FqN77SZF5zU?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
More Mailbag!
00:00 - DPS Ultrathin DIN 5V PSU's
https://digitalpowersystems.eu/de/standard-produkte/
01:15 - The Knife
06:16 - USB-C Isolator
https://digitalpowersystems.eu/de/schnelle-und-sichere-usb-zu-uart-kommunikation-dank-digitaler-isolierung-und-esd-schutz-fur-ein-und-ausgange/
07:34 - Zubax FluxGrip FG40 Electropermanent Magnet for Drones
https://zubax.com/products/magnets/fluxgrip/fg40
11:55 - Testing the magnet
14:04 - Drone delivered multimeters?
14:53 - Why did someone send this?
15:46 - Wireless Freakin' Road Charging
https://www.youtube.com/watch?v=sisD61ohzK0
19:37 - Sponge Bonanza
21:21 - Beelink EQ14 Intel Twin Lake N150 Mini PC
https://s.click.aliexpress.com/e/_oDn9WuR

Forum: https://www.eevblog.com/forum/blog/eevblog-1656-mailbag-electropermanent-magnet-din-psus-sponge-beelink-eq14/

If you find my videos useful you may consider supporting the EEVblog on Patreon: http://www.patreon.com/eevblog
Or with crypto:
BTC: 33BsprBQNBtHuVzVwDmqWkpDjYnCouwASM
ETH: 0x68114e40ff4dcdd384750500501e20acf3875f8c
BCH: 35n9KBPw9T7M3NGzpS3t4nUYEf9HbRmkm4
USDC: 0x68114e40ff4dcdd384750500501e20acf3875f8c
LTC: MJfK57ujxy55su4XicVGQc9wcEJf6mAoXF
Web Site: http://www.eevblog.com
Store: https://eevblog.store/

Other channels:
EEVblog2: http://www.youtube.com/EEVblog2
EEVdiscover: https://www.youtube.com/eevdiscover

T-Shirts: http://teespring.com/stores/eevblog
#ElectronicsCreators #Mailbag


guid: yt:video:JVep7rWhDeE
title: EEVblog 1657 - DUMPSTER Samsung 75" QLED One Connect TV
author: EEVblog
url: https://www.youtube.com/watch?v=JVep7rWhDeE
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC2DjFE7Xf11URZqWBigcVOQ
enclosure_url: https://www.youtube.com/v/JVep7rWhDeE?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Almost 30 minutes of tearing down a Samsung 75" QLED One Connect dumpster TV and trying to power it up to see if it's busted or not. QA75Q7FNA

NEW Merch store: https://www.teepublic.com/stores/eevblog?ref_id=37825

Part 2: https://youtube.com/shorts/sZl_1bxqeic

00:00 Dumpster Samsung QLED 75"
04:46 - Teardown wasn't easy as expected...
08:11 - What is this cable retention BS?
11:26 - I'm still at it...
14:22 - Where's Wally? Follow the voltage.
17:26 - Where do I get 350V DC at a few hundred watts?
21:21 - DIY 350V DC power supply
22:52 - 350V DC right up the clacker
24:19 - I need MORE voltage

Elecami Wolf videos:
https://www.youtube.com/watch?v=NF-MVDc1K9Y
https://www.youtube.com/watch?v=w_39JC2Dkdc
Trolley Riding videos: 
https://www.youtube.com/watch?v=g3A1XNfDxe0
https://www.youtube.com/watch?v=MC_xeEKd5t4
https://www.youtube.com/watch?v=H9erf8rt54s

Forum: https://www.eevblog.com/forum/blog/eevblog-1657-dumpster-samsung-75-inch-qled-one-connect-tv/

If you find my videos useful you may consider supporting the EEVblog on Patreon: http://www.patreon.com/eevblog
Or with crypto:
BTC: 33BsprBQNBtHuVzVwDmqWkpDjYnCouwASM
ETH: 0x68114e40ff4dcdd384750500501e20acf3875f8c
BCH: 35n9KBPw9T7M3NGzpS3t4nUYEf9HbRmkm4
USDC: 0x68114e40ff4dcdd384750500501e20acf3875f8c
LTC: MJfK57ujxy55su4XicVGQc9wcEJf6mAoXF
Web Site: http://www.eevblog.com
Store: https://eevblog.store/

Other channels:
EEVblog2: http://www.youtube.com/EEVblog2
EEVdiscover: https://www.youtube.com/eevdiscover

#ElectronicsCreators #dumpsterdiving #Repair


guid: yt:video:1wYQy4AwC48
title: EEVblog 1658 - TUTORIAL: Mean vs Median
author: EEVblog
url: https://www.youtube.com/watch?v=1wYQy4AwC48
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC2DjFE7Xf11URZqWBigcVOQ
enclosure_url: https://www.youtube.com/v/1wYQy4AwC48?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
It's important to understand the difference between Mean and Median, not just for engineering, but for everyday life, so you don't get manipulated by people with bad intentions.

UBS Global Wealth Report:
https://www.ubs.com/content/dam/assets/wm/global/insights/doc/global-wealth-report.pdf

Forum: https://www.eevblog.com/forum/blog/eevblog-1658-tutorial-mean-vs-median/

Web Site: http://www.eevblog.com
Hardware Store: https://eevblog.store/
Merch Store: https://www.teepublic.com/stores/eevblog?ref_id=37825

If you find my videos useful you may consider supporting the EEVblog on Patreon: http://www.patreon.com/eevblog
Or with crypto:
BTC: 33BsprBQNBtHuVzVwDmqWkpDjYnCouwASM
ETH: 0x68114e40ff4dcdd384750500501e20acf3875f8c
BCH: 35n9KBPw9T7M3NGzpS3t4nUYEf9HbRmkm4
USDC: 0x68114e40ff4dcdd384750500501e20acf3875f8c
LTC: MJfK57ujxy55su4XicVGQc9wcEJf6mAoXF

Other channels:
EEVblog2: http://www.youtube.com/EEVblog2
EEVdiscover: https://www.youtube.com/eevdiscover

#ElectronicsCreators #math #tutorial


guid: yt:video:KjcZCN7e1zU
title: EEVblog 1659 - Quick 861 Pro Hot Air Station REVIEW
author: EEVblog
url: https://www.youtube.com/watch?v=KjcZCN7e1zU
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC2DjFE7Xf11URZqWBigcVOQ
enclosure_url: https://www.youtube.com/v/KjcZCN7e1zU?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Review of the new Quick 861 Pro hot air station compared to the original 861DW. 
https://s.click.aliexpress.com/e/_oFOiU2R

Forum: https://www.eevblog.com/forum/blog/eevblog-1659-quick-861-pro-hot-air-station-review/

Web Site: http://www.eevblog.com
Hardware Store: https://eevblog.store/
Merch Store: https://www.teepublic.com/stores/eevblog?ref_id=37825

If you find my videos useful you may consider supporting the EEVblog on Patreon: http://www.patreon.com/eevblog
Or with crypto:
BTC: 33BsprBQNBtHuVzVwDmqWkpDjYnCouwASM
ETH: 0x68114e40ff4dcdd384750500501e20acf3875f8c
BCH: 35n9KBPw9T7M3NGzpS3t4nUYEf9HbRmkm4
USDC: 0x68114e40ff4dcdd384750500501e20acf3875f8c
LTC: MJfK57ujxy55su4XicVGQc9wcEJf6mAoXF

Other channels:
EEVblog2: http://www.youtube.com/EEVblog2
EEVdiscover: https://www.youtube.com/eevdiscover

#ElectronicsCreators #Review #Soldering


guid: yt:video:i54YDHeU4ww
title: EEVblog 1660 - AC Basics Tutorial Part 4: Resistors, Capacitors, Inductors
author: EEVblog
url: https://www.youtube.com/watch?v=i54YDHeU4ww
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC2DjFE7Xf11URZqWBigcVOQ
enclosure_url: https://www.youtube.com/v/i54YDHeU4ww?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Part 4 in the AC basics tutorial series. AC applied to resistors, capacitors and inductors, along with Capacitive Reactance and Inductive reactance.

AC Theory Playlist: https://www.youtube.com/playlist?list=PLvOlSehNtuHvD6M_7WeN071OVsZFE0_q-

Forum: https://www.eevblog.com/forum/blog/eevblog-1660-ac-basics-tutorial-part-4-resistors-capacitors-inductors/

Web Site: http://www.eevblog.com
Hardware Store: https://eevblog.store/
Merch Store: https://www.teepublic.com/stores/eevblog?ref_id=37825

If you find my videos useful you may consider supporting the EEVblog on Patreon: http://www.patreon.com/eevblog
Or with crypto:
BTC: 33BsprBQNBtHuVzVwDmqWkpDjYnCouwASM
ETH: 0x68114e40ff4dcdd384750500501e20acf3875f8c
BCH: 35n9KBPw9T7M3NGzpS3t4nUYEf9HbRmkm4
USDC: 0x68114e40ff4dcdd384750500501e20acf3875f8c
LTC: MJfK57ujxy55su4XicVGQc9wcEJf6mAoXF

Other channels:
EEVblog2: http://www.youtube.com/EEVblog2
EEVdiscover: https://www.youtube.com/eevdiscover

#ElectronicsCreators #Tutorial #circuittheory


guid: yt:video:oz6HuxMkjvI
title: EEVblog 1661 - AC Basics Tutorial Part 5: Time Domain vs Frequency Domain
author: EEVblog
url: https://www.youtube.com/watch?v=oz6HuxMkjvI
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC2DjFE7Xf11URZqWBigcVOQ
enclosure_url: https://www.youtube.com/v/oz6HuxMkjvI?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
The difference between Time Domain and Frequency Domain in AC circuit analysis.
Capacitive reactance, inductive reactance, angular frequency, steady state analysis.

AC Theory Playlist: https://www.youtube.com/playlist?list=PLvOlSehNtuHvD6M_7WeN071OVsZFE0_q-

Forum: https://www.eevblog.com/forum/blog/eevblog-1661-ac-basics-tutorial-part-5-time-domain-vs-frequency-domain/

Web Site: http://www.eevblog.com
Hardware Store: https://eevblog.store/
Merch Store: https://www.teepublic.com/stores/eevblog?ref_id=37825

If you find my videos useful you may consider supporting the EEVblog on Patreon: http://www.patreon.com/eevblog
Or with crypto:
BTC: 33BsprBQNBtHuVzVwDmqWkpDjYnCouwASM
ETH: 0x68114e40ff4dcdd384750500501e20acf3875f8c
BCH: 35n9KBPw9T7M3NGzpS3t4nUYEf9HbRmkm4
USDC: 0x68114e40ff4dcdd384750500501e20acf3875f8c
LTC: MJfK57ujxy55su4XicVGQc9wcEJf6mAoXF

Other channels:
EEVblog2: http://www.youtube.com/EEVblog2
EEVdiscover: https://www.youtube.com/eevdiscover

#ElectronicsCreators #Tutorial


guid: yt:video:pD0dVebSZMs
title: EEVblog 1662 - Vintage Tandy 200 Portable Computer Claytons Repair/Teardown
author: EEVblog
url: https://www.youtube.com/watch?v=pD0dVebSZMs
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC2DjFE7Xf11URZqWBigcVOQ
enclosure_url: https://www.youtube.com/v/pD0dVebSZMs?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
This was going to be a repair of a vintage Tandy 200 Portable Computer...

Forum: https://www.eevblog.com/forum/blog/eevblog-1662-vintage-tandy-200-portable-computer-claytons-repairteardown/

00:00 - I sear this Tandy 200 had a problem...
02:54 - Teardown
03:57 - The new BM2257 Multimeter
05:25 - I think it's the buzzer
08:06 - Microscope teardown
16:20 - They don't make service manuals like they used to
25:57 - Try to reproduce the fault

Web Site: http://www.eevblog.com
Hardware Store: https://eevblog.store/
Merch Store: https://www.teepublic.com/stores/eevblog?ref_id=37825

If you find my videos useful you may consider supporting the EEVblog on Patreon: http://www.patreon.com/eevblog
Or with crypto:
BTC: 33BsprBQNBtHuVzVwDmqWkpDjYnCouwASM
ETH: 0x68114e40ff4dcdd384750500501e20acf3875f8c
BCH: 35n9KBPw9T7M3NGzpS3t4nUYEf9HbRmkm4
USDC: 0x68114e40ff4dcdd384750500501e20acf3875f8c
LTC: MJfK57ujxy55su4XicVGQc9wcEJf6mAoXF

Other channels:
EEVblog2: http://www.youtube.com/EEVblog2
EEVdiscover: https://www.youtube.com/eevdiscover

#ElectronicsCreators #Tandy #VintageComputer


guid: yt:video:ETopbGankfo
title: EEVblog 1663 - BM786 Multimeter REPAIR + InEr Error Investigation
author: EEVblog
url: https://www.youtube.com/watch?v=ETopbGankfo
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC2DjFE7Xf11URZqWBigcVOQ
enclosure_url: https://www.youtube.com/v/ETopbGankfo?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Repairing a customers Brymen BM786 multimeter, and investigating the cause of the InEr error message on the input jack alert feature.
Plus a giveaway to a local youngster.

Keysight OLED meter repair: https://www.youtube.com/watch?v=CKdeqqo2diI

00:00 - A returned BM786 Multimeter with InEr error message
03:23 - Split jacks and input alert circuit
05:19 - In-Circuit probing TIP and Low Ohms mode.
07:19 - A clue?
08:05 - A need a new desoldering gun. Removing the input jacks
10:30 - Bodge testing of the input detection threshold
12:38 - Not one but TWO failed Megger Insulation meters!
13:50 - Megger testing the connectors at 500V
15:19 - Testing a 2nd failed InEr error meter
17:00 - Cleaning the input jacks
19:11 - Heating up the input jacks
20:18 - Getting desperate, removing the input jacks
21:49 - Getting really desparate, removing the input resistors
22:38 - Reassembling the original repaired unit
24:26 - Repaired BM786 GIVEAWAY

Forum: https://www.eevblog.com/forum/blog/eevblog-1663-bm786-multimeter-repair-iner-error-investigation/

Web Site: http://www.eevblog.com
Hardware Store: https://eevblog.store/
Merch Store: https://www.teepublic.com/stores/eevblog?ref_id=37825

If you find my videos useful you may consider supporting the EEVblog on Patreon: http://www.patreon.com/eevblog
Or with crypto:
BTC: 33BsprBQNBtHuVzVwDmqWkpDjYnCouwASM
ETH: 0x68114e40ff4dcdd384750500501e20acf3875f8c
BCH: 35n9KBPw9T7M3NGzpS3t4nUYEf9HbRmkm4
USDC: 0x68114e40ff4dcdd384750500501e20acf3875f8c
LTC: MJfK57ujxy55su4XicVGQc9wcEJf6mAoXF

Other channels:
EEVblog2: http://www.youtube.com/EEVblog2
EEVdiscover: https://www.youtube.com/eevdiscover

#ElectronicsCreators #Repair #Brymen


guid: yt:video:9lXCqePhJ4g
title: 2025 EEVblog Viewer Survey and GIVEAWAY
author: EEVblog
url: https://www.youtube.com/watch?v=9lXCqePhJ4g
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC2DjFE7Xf11URZqWBigcVOQ
enclosure_url: https://www.youtube.com/v/9lXCqePhJ4g?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I'd really appreciate if you could fill in the 2025 viewer survey and tell me what you like and don't like about the channel, and what changes I can make. It is ANONYMOUS unless you want to enter the giveaway.
LINK:
https://docs.google.com/forms/d/e/1FAIpQLSdLeQRdLRmbwyLT4yn4d9BZU3kzxjOoFAq-XpqS4g8VL1hXpw/viewform?usp=dialog

I will be giving away three new BM2257 multimeters to random people who fill it out. Thanks.

Forum: https://www.eevblog.com/forum/blog/2025-eevblog-viewer-survey-and-giveaway/

Web Site: http://www.eevblog.com
Hardware Store: https://eevblog.store/
Merch Store: https://www.teepublic.com/stores/eevblog?ref_id=37825

If you find my videos useful you may consider supporting the EEVblog on Patreon: http://www.patreon.com/eevblog
Or with crypto:
BTC: 33BsprBQNBtHuVzVwDmqWkpDjYnCouwASM
ETH: 0x68114e40ff4dcdd384750500501e20acf3875f8c
BCH: 35n9KBPw9T7M3NGzpS3t4nUYEf9HbRmkm4
USDC: 0x68114e40ff4dcdd384750500501e20acf3875f8c
LTC: MJfK57ujxy55su4XicVGQc9wcEJf6mAoXF

Other channels:
EEVblog2: http://www.youtube.com/EEVblog2
EEVdiscover: https://www.youtube.com/eevdiscover

#ElectronicsCreators #Survey


guid: yt:video:D3c3UVDSKTg
title: EEVblog 1664 - REPAIR with Junk Bin Parts! Keithley 2302
author: EEVblog
url: https://www.youtube.com/watch?v=D3c3UVDSKTg
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC2DjFE7Xf11URZqWBigcVOQ
enclosure_url: https://www.youtube.com/v/D3c3UVDSKTg?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Repair of a Keithley 2302 battery simulator with junk bin parts. But it did put up a fight!

Teardown video: https://www.youtube.com/watch?v=5LK8wduZsy0

Forum: https://www.eevblog.com/forum/blog/eevblog-1664-repair-with-junk-bin-parts!-keithley-2302/

00:00 - Faulty VFD display in a Keithley 2302 Battery Simulator
01:22 - Teardown
03:14 - The Display driver PCB
04:30 - Solder Sucking Sucks
05:26 - The VFD display module, a Newhaven Display VFM162SDAR8 
06:50 - Probing Pro Tip
07:28 - Probing the VFD signals on the oscilloscope
09:42 - Searching for a replacement 16x2 VFD display
15:03 - Potential replacement LCD 
16:38 - Identical replacement found
17:44 - Lets check the junk bin...
18:33 - Pinout trap for young players
19:25 - First test FAIL, but hold on a second, lets try something...
21:09 - Winner Winner Chicken Dinner
22:12 - WOAH, now it's not working?
24:09 - Lets try THIS...

Web Site: http://www.eevblog.com
Hardware Store: https://eevblog.store/
Merch Store: https://www.teepublic.com/stores/eevblog?ref_id=37825

If you find my videos useful you may consider supporting the EEVblog on Patreon: http://www.patreon.com/eevblog
Or with crypto:
BTC: 33BsprBQNBtHuVzVwDmqWkpDjYnCouwASM
ETH: 0x68114e40ff4dcdd384750500501e20acf3875f8c
BCH: 35n9KBPw9T7M3NGzpS3t4nUYEf9HbRmkm4
USDC: 0x68114e40ff4dcdd384750500501e20acf3875f8c
LTC: MJfK57ujxy55su4XicVGQc9wcEJf6mAoXF

Other channels:
EEVblog2: http://www.youtube.com/EEVblog2
EEVdiscover: https://www.youtube.com/eevdiscover

#ElectronicsCreators #Repair #keithley


guid: yt:video:c_mmVFMXFQo
title: EEVblog 1665 - Keithley VFD REPAIR 2 - Electric Boogaloo
author: EEVblog
url: https://www.youtube.com/watch?v=c_mmVFMXFQo
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC2DjFE7Xf11URZqWBigcVOQ
enclosure_url: https://www.youtube.com/v/c_mmVFMXFQo?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Part 2 of the Keithley 2302 battery simulator repair of the VFD display.
Just a follow-up on testing the actual VFD display itself to see if there is any fault that's not the VFD vacuum.

00:00 - Having another look at the failed Newhaven VFD dispaly module
05:37 - Measurign voltages
07:32 - Oscilloscope probing
08:33 - HELLO capacitor! But not the one I expected.
12:25 - To the SMD cap replacement kit
13:11 - Rail measurements again
14:38 - Big ripple improvement, but lets qild the lilly.
15:53 - Bugger! Ok, let's try the belt'n'braces approach.
17:21 - Winner Winner Extra Chicken Dinner!

Forum: https://www.eevblog.com/forum/blog/eevblog-1664-repair-with-junk-bin-parts!-keithley-2302/

How VFD Displays Work: https://www.youtube.com/watch?v=gZIRPJt69sM
Hacking a VFD Display: https://www.youtube.com/watch?v=clUVEyi_YNM

Web Site: http://www.eevblog.com
Hardware Store: https://eevblog.store/
Merch Store: https://www.teepublic.com/stores/eevblog?ref_id=37825

If you find my videos useful you may consider supporting the EEVblog on Patreon: http://www.patreon.com/eevblog
Or with crypto:
BTC: 33BsprBQNBtHuVzVwDmqWkpDjYnCouwASM
ETH: 0x68114e40ff4dcdd384750500501e20acf3875f8c
BCH: 35n9KBPw9T7M3NGzpS3t4nUYEf9HbRmkm4
USDC: 0x68114e40ff4dcdd384750500501e20acf3875f8c
LTC: MJfK57ujxy55su4XicVGQc9wcEJf6mAoXF

Other channels:
EEVblog2: http://www.youtube.com/EEVblog2
EEVdiscover: https://www.youtube.com/eevdiscover

#ElectronicsCreators


guid: yt:video:Q4tcpHrTSP0
title: EEVblog 1666 - Blown SMD Component Identification
author: EEVblog
url: https://www.youtube.com/watch?v=Q4tcpHrTSP0
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UC2DjFE7Xf11URZqWBigcVOQ
enclosure_url: https://www.youtube.com/v/Q4tcpHrTSP0?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Let's find out what this blown SMD part is, sent in by a viewer.

Forum: https://www.eevblog.com/forum/blog/eevblog-1666-blown-smd-component-identification/

Component Playlist: https://www.youtube.com/playlist?list=PLvOlSehNtuHtdQF-m5UFZ5GEjABadI3kI

Web Site: http://www.eevblog.com
Hardware Store: https://eevblog.store/
Merch Store: https://www.teepublic.com/stores/eevblog?ref_id=37825

If you find my videos useful you may consider supporting the EEVblog on Patreon: http://www.patreon.com/eevblog
Or with crypto:
BTC: 33BsprBQNBtHuVzVwDmqWkpDjYnCouwASM
ETH: 0x68114e40ff4dcdd384750500501e20acf3875f8c
BCH: 35n9KBPw9T7M3NGzpS3t4nUYEf9HbRmkm4
USDC: 0x68114e40ff4dcdd384750500501e20acf3875f8c
LTC: MJfK57ujxy55su4XicVGQc9wcEJf6mAoXF

Other channels:
EEVblog2: http://www.youtube.com/EEVblog2
EEVdiscover: https://www.youtube.com/eevdiscover

#ElectronicsCreators #Repair #SMD


guid: yt:video:ey3sKdOmPa8
title: Making Linux Distro with Buildroot
author: Nir Lichtman
url: https://www.youtube.com/watch?v=ey3sKdOmPa8
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCAMu6Dso0ENoNm3sKpQsy0g
enclosure_url: https://www.youtube.com/v/ey3sKdOmPa8?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
In this video I will demonstrate how you can use Buildroot to create a simple x64 Linux distro

Dependencies (Ubuntu packages):
apt install g++ make libncurses-dev unzip bc bzip2 libelf-dev libssl-dev extlinux


guid: yt:video:-i-YcX-qd2E
title: Drawing Graphics with C and Windows API is Easy
author: Nir Lichtman
url: https://www.youtube.com/watch?v=-i-YcX-qd2E
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCAMu6Dso0ENoNm3sKpQsy0g
enclosure_url: https://www.youtube.com/v/-i-YcX-qd2E?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
In this video I will demonstrate basic usage of Windows GDI to draw graphics on the screen.

Code: https://github.com/nir9/poc/blob/master/win/draw.c


guid: yt:video:FR1P6g89Vrk
title: Diving into Windows Keyboard Driver
author: Nir Lichtman
url: https://www.youtube.com/watch?v=FR1P6g89Vrk
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCAMu6Dso0ENoNm3sKpQsy0g
enclosure_url: https://www.youtube.com/v/FR1P6g89Vrk?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
In this video I will demonstrate how you can cause funny behavior of the Windows PS/2 keyboard driver by connecting with a kernel debugger and modifying the assembly.

Checkout my channel welcome link for setup information about windbg and VirtualBox.
You can grab the Windows 10 ISO from the Microsoft official website.

Articles:
- https://reactos.org/wiki/I8042prt.sys
- https://wiki.osdev.org/%228042%22_PS/2_Controller


guid: yt:video:d8eDTE_MaEQ
title: How to Call Assembly Code from C
author: Nir Lichtman
url: https://www.youtube.com/watch?v=d8eDTE_MaEQ
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCAMu6Dso0ENoNm3sKpQsy0g
enclosure_url: https://www.youtube.com/v/d8eDTE_MaEQ?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
In this video I will demonstrate how you can call a function written in x64 Assembly from C.

- https://sourceware.org/binutils/docs-2.42/as.html
- https://en.wikipedia.org/wiki/X86_calling_conventions


guid: yt:video:D4k1Q3aHpT8
title: Exploring How Linux Boots with GDB
author: Nir Lichtman
url: https://www.youtube.com/watch?v=D4k1Q3aHpT8
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCAMu6Dso0ENoNm3sKpQsy0g
enclosure_url: https://www.youtube.com/v/D4k1Q3aHpT8?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
In this video I will demonstrate how you can setup kernel debugging with QEMU and explore how the kernel boots.

Checkout my channel welcome link for information about how to setup the environment for kernel dev on Linux.

Documentation: https://docs.kernel.org/dev-tools/gdb-kernel-debugging.html


guid: yt:video:bWbbGSqiYPQ
title: Screwing Up Linux Kernel VGA Driver
author: Nir Lichtman
url: https://www.youtube.com/watch?v=bWbbGSqiYPQ
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCAMu6Dso0ENoNm3sKpQsy0g
enclosure_url: https://www.youtube.com/v/bWbbGSqiYPQ?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
In this video we will play around with the source code of the VGA graphics driver in the Linux kernel.

For information on how to setup the Linux kernel dev environment, checkout the welcome link on my channel


guid: yt:video:aAuw2EVCBBg
title: How Linux Kernel Prints Text on Screen
author: Nir Lichtman
url: https://www.youtube.com/watch?v=aAuw2EVCBBg
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCAMu6Dso0ENoNm3sKpQsy0g
enclosure_url: https://www.youtube.com/v/aAuw2EVCBBg?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
In this video we will dive into a simple call to the printf function and see what happens in the kernel and how it gets eventually printed on screen.

For more information about setting up an environment for kernel dev, checkout the welcome link on my channel.

Docs used in video:
- https://docs.kernel.org/dev-tools/gdb-kernel-debugging.html
- https://wiki.osdev.org/Text_UI


guid: yt:video:OYq9rpwl9Dc
title: How Windows Kernel Draws Graphics
author: Nir Lichtman
url: https://www.youtube.com/watch?v=OYq9rpwl9Dc
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCAMu6Dso0ENoNm3sKpQsy0g
enclosure_url: https://www.youtube.com/v/OYq9rpwl9Dc?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
In this video we will take a look at an overview of the graphics architecture of Windows, and make a demonstration of manipulating the framebuffer.

Setup information can be found on the welcome link on my channel.

Docs:
- https://learn.microsoft.com/en-us/windows-hardware/drivers/display/windows-vista-and-later-display-driver-model-architecture
- https://learn.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-rectangle


guid: yt:video:ZlZDWeVL2LI
title: How Linux Kernel Runs Executables
author: Nir Lichtman
url: https://www.youtube.com/watch?v=ZlZDWeVL2LI
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCAMu6Dso0ENoNm3sKpQsy0g
enclosure_url: https://www.youtube.com/v/ZlZDWeVL2LI?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
In this video I will demonstrate how the Linux kernel runs executables by diving into the flow of the execve system call handling.

Information about kernel dev setup: https://github.com/nir9/welcome
GNU Bash: https://www.gnu.org/software/bash/
Documentation about debugging the Linux kernel with GDB: https://docs.kernel.org/dev-tools/gdb-kernel-debugging.html


guid: yt:video:32i9qhjKXOI
title: Modifying x64 Machine Code by Hand
author: Nir Lichtman
url: https://www.youtube.com/watch?v=32i9qhjKXOI
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCAMu6Dso0ENoNm3sKpQsy0g
enclosure_url: https://www.youtube.com/v/32i9qhjKXOI?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
In this video I will make a simple demonstration of modifying the machine code of a C program.


Documentation:
- Intel SDM


guid: yt:video:u2Juz5sQyYQ
title: Making Smallest Possible Linux Distro (x64)
author: Nir Lichtman
url: https://www.youtube.com/watch?v=u2Juz5sQyYQ
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCAMu6Dso0ENoNm3sKpQsy0g
enclosure_url: https://www.youtube.com/v/u2Juz5sQyYQ?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
In this video I will demonstrate how you can setup the most minimal kernel configuration and we will create a very minimal program runner which will run on top of the kernel.

Setup information:
- github.com/nir9/welcome has basic info about a kernel dev setup
- for making the isoimage you also need to do the following: "apt install genisoimage"

Refs:
- https://en.wikipedia.org/wiki/X86_calling_conventions#System_V_AMD64_ABI
- Intel SDM
- https://www.lua.org/home.html

Src: https://github.com/nir9/welcome/tree/master/lnx/very-minimal-shell


guid: yt:video:u-4LO03ynM4
title: PET Cemetery: SuperPET Resurrection
author: Dave's Garage
url: https://www.youtube.com/watch?v=u-4LO03ynM4
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCNzszbnvQeFzObW0ghk0Ckw
enclosure_url: https://www.youtube.com/v/u-4LO03ynM4?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Dave rescues two rare Commodore SuperPETs.  Free Sample of my Book on the Spectrum: https://amzn.to/3zBinWM

For Rudy's Retro Intel and PET Repair: https://www.youtube.com/@RudysRetroIntel  

Dave's Attic - Friday 4PM Podcast - https://www.youtube.com/@UCtb6a_CnmGbSns9G8W2Ny0w 

Follow me for updates!  
Twitter:   @davepl1968 davepl1968
Facebook: fb.com/davepl


guid: yt:video:I2nZXNi_LxI
title: New M4 Pro Mac Mini vs M2 Ultra Mac Pro vs PC Threadripper - We Test Them!
author: Dave's Garage
url: https://www.youtube.com/watch?v=I2nZXNi_LxI
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCNzszbnvQeFzObW0ghk0Ckw
enclosure_url: https://www.youtube.com/v/I2nZXNi_LxI?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Dave benchmarks and evaluates the new M4 Pro Mac Mini vs the M2 Ultra Mac Pro and a 7995WX Threadripper PC with dual RTX6000 Ada GPUs.  Free Sample of my Book on the Spectrum: https://amzn.to/3zBinWM

Dave's Attic - Friday 4PM Podcast - https://www.youtube.com/@UCtb6a_CnmGbSns9G8W2Ny0w 

Follow me for updates!  
Twitter:   @davepl1968 davepl1968
Facebook: fb.com/davepl

Just a note: when the total for the M4 Mini shows $2598, I have Final Cut in the cart, so the actual machine price is $2399 at that point.


guid: yt:video:IR0wyxp0IqA
title: I Cloned My Own Voice to Waste Telemarketer's Time
author: Dave's Garage
url: https://www.youtube.com/watch?v=IR0wyxp0IqA
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCNzszbnvQeFzObW0ghk0Ckw
enclosure_url: https://www.youtube.com/v/IR0wyxp0IqA?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
I built a convincing AI with a clone of my own voice and extensive training in how to seem VERY interested in whatever is being sold, but to never commit!   Free Sample of my Book on the Spectrum: https://amzn.to/3zBinWM

Dave's Attic - Friday 4PM Podcast - https://www.youtube.com/@UCtb6a_CnmGbSns9G8W2Ny0w 

Follow me for updates!  
Twitter:   @davepl1968 davepl1968
Facebook: fb.com/davepl


guid: yt:video:XBrUI3PRTeo
title: Surviving a Week Without Power: Ultimate Home Backup Solution!
author: Dave's Garage
url: https://www.youtube.com/watch?v=XBrUI3PRTeo
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCNzszbnvQeFzObW0ghk0Ckw
enclosure_url: https://www.youtube.com/v/XBrUI3PRTeo?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Dave describes the various stages of emergency power backup, from small Costco generators to large industrial standby units, and compares their capabilities.  Free Sample of my Book on the Spectrum: https://amzn.to/3zBinWM

Dave's Attic - Friday 4PM Podcast - https://www.youtube.com/@UCtb6a_CnmGbSns9G8W2Ny0w 

Washington Generators: https://www.washingtongenerators.com/

Follow me for updates!  
Twitter:   @davepl1968 davepl1968
Facebook: fb.com/davepl


guid: yt:video:877Nfr2In2g
title: I Restored a 1983 PDP-11 UNIX Powerhouse—and You Can Log In Right Now!
author: Dave's Garage
url: https://www.youtube.com/watch?v=877Nfr2In2g
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCNzszbnvQeFzObW0ghk0Ckw
enclosure_url: https://www.youtube.com/v/877Nfr2In2g?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Dave takes you on amazing build of a PDP-11/73 featuring a CPU upgrade, math unit, disk controllers, RL02 drives, MFM drives, RX50 floppy drives, a VT220 terminal, and even more DEC hardware!  Free Sample of my Book on the Spectrum: https://amzn.to/3zBinWM

To connect to the PDP-11:
telnet pdp1173.com
login: guest

Alternate: 
telnet davepl.dyndns.org

Dave's Attic - Friday 4PM Podcast - https://www.youtube.com/@UCtb6a_CnmGbSns9G8W2Ny0w 

Washington Generators: https://www.washingtongenerators.com/

Follow me for updates!  
Twitter:   @davepl1968 davepl1968
Facebook: fb.com/davepl


guid: yt:video:QHBr8hekCzg
title: NVIDIA's $249 Secret Weapon for Edge AI - Jetson Orin Nano Super: Driveway Monitor
author: Dave's Garage
url: https://www.youtube.com/watch?v=QHBr8hekCzg
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCNzszbnvQeFzObW0ghk0Ckw
enclosure_url: https://www.youtube.com/v/QHBr8hekCzg?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
FREE GIVEAWAY OF JENSEN-HUANG-SIGNED ORIN NANO SUPER!  See Below!
Join Dave as he explores NVIDIA's Jetson Orin Nano Super, a compact AI powerhouse with 1024 CUDA cores and 6 ARM cores for just $249. Learn why this could be the best AI board for your projects in robotics, IoT, or AI development.  Free Sample of my Book on the Spectrum: https://amzn.to/3zBinWM

Orin Nano Super: https://nvda.ws/41DSukS

We're giving away a free Jetson Orin Nano Super to a lucky winner randomly selected from the comments.  Better yet, it's personally signed by Jensen Huang!

Leave a useful comment to be automatically entered to win!  Winner will be announced by their ebay username in a FUTURE VIDEO.  I will not contact you on YouTube, and I do not use Telegram. 

Highlights:
Unboxing and First Impressions
Performance Comparison: Against Raspberry Pi and high-end desktops
Real-World Use: Smart driveway with AI vehicle detection
Software Setup: Ubuntu, CUDA, and AI models like YOLOv8
AI Experiments: Running Llama 3.2 on this tiny board

Why Watch:
Dive into edge computing and AI on a budget
See practical applications of AI hardware
Understand NVIDIA's CUDA cores for machine learning

Python Code:
https://github.com/davepl/ObjectDetect


guid: yt:video:IBFeM-sa2YY
title: The Hardest Thing: Building and Running the UNIX Kernel from Original Sources
author: Dave's Garage
url: https://www.youtube.com/watch?v=IBFeM-sa2YY
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCNzszbnvQeFzObW0ghk0Ckw
enclosure_url: https://www.youtube.com/v/IBFeM-sa2YY?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Dave takes you on an adventure where he builds and deploys the 2.11 BSD Kernel on a PDP-11/83.  Free Sample of my Book on the Spectrum: https://amzn.to/3zBinWM

Do you use X?  Follow me on X, where I post frequently!  https://x.com/davepl1968
Are you old like me?  Follow me on Facebook!  https://www.facebook.com/davepl

Check out the weekly viewer Q&A, ShoptTalk!:  https://www.youtube.com/@UCtb6a_CnmGbSns9G8W2Ny0w


guid: yt:video:-foAV_zU2as
title: Making the Matrix Screensaver in C on a PDP-11/83
author: Dave's Garage
url: https://www.youtube.com/watch?v=-foAV_zU2as
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCNzszbnvQeFzObW0ghk0Ckw
enclosure_url: https://www.youtube.com/v/-foAV_zU2as?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Dave shows you how to create the famous Matrix screensaver in pure C on a PDP-11/83 running 211BSD UNIX!  Free Sample of my Book on the Spectrum: https://amzn.to/3zBinWM

Watch ShopTalk Now on Dave's Attic: https://youtu.be/5Emgx0lhllE

Follow me on X: https://x.com/davepl1968
Facebook: https://www.facebook.com/davepl

Highlights

- Bringing a vintage PDP-11/83 Minicomputer back to life with BSD Unix and K&R C
- Showcasing a custom-built MATRIX screensaver that uses classic VT220 control sequences
- Demonstrating four different retro-style “screensavers,” including Conway’s Game of Life
- Exploring the shared lineage between 211BSD and modern macOS through easy cross-compilation

Why to Watch

- Learn how to write and compile retro C code on authentic PDP-11 hardware
- See how low-level terminal control codes enable surprisingly dynamic on-screen visuals
- Discover tips and tricks for preserving a usable UNIX environment after custom programs exit
- Experience a hands-on approach to bridging decades of computing history in one fun project


guid: yt:video:91VaTyTGYfw
title: How Passwords Work and How to Hack Them: From DES to ZIP
author: Dave's Garage
url: https://www.youtube.com/watch?v=91VaTyTGYfw
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCNzszbnvQeFzObW0ghk0Ckw
enclosure_url: https://www.youtube.com/v/91VaTyTGYfw?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Dave explains how DES encryption works, how it was broken, and show show to break encrypted zip files in this ethical hacking breakdown.  Learn how to protect your system!  Free Sample of my Book on the Spectrum: https://amzn.to/3zBinWM

Watch ShopTalk Now on Dave's Attic: https://youtu.be/5Emgx0lhllE

Follow me on X: https://x.com/davepl1968
Facebook: https://www.facebook.com/davepl


guid: yt:video:nbeR-23NH_U
title: I Bought the Biggest Hard Drive Ever Made For the PDP-11!
author: Dave's Garage
url: https://www.youtube.com/watch?v=nbeR-23NH_U
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCNzszbnvQeFzObW0ghk0Ckw
enclosure_url: https://www.youtube.com/v/nbeR-23NH_U?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Dave locates and sets up the DEC RA 73, the largest hard drive that DEC ever produced for the PDP-11 and installs BSD UNIX and more.  Free Sample of my Book on the Spectrum: https://amzn.to/3zBinWM

Watch ShopTalk Now on Dave's Attic: https://youtu.be/5Emgx0lhllE

Follow me on X: https://x.com/davepl1968
Facebook: https://www.facebook.com/davepl


guid: yt:video:LLykqRNuEwA
title: Don't Make These 3 Mistakes in C! Can YOU spot the bug?
author: Dave's Garage
url: https://www.youtube.com/watch?v=LLykqRNuEwA
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCNzszbnvQeFzObW0ghk0Ckw
enclosure_url: https://www.youtube.com/v/LLykqRNuEwA?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Dave takes you through some common bugs in C and explores how and why they manifest!   Free Sample of my Book on the Spectrum: https://amzn.to/3zBinWM

Watch ShopTalk Now on Dave's Attic: https://youtu.be/5Emgx0lhllE

Follow me on X: https://x.com/davepl1968
Facebook: https://www.facebook.com/davepl


guid: yt:video:ZdDbk3VEzIk
title: From Empty Chassis to Full System: My eBay PDP-11/73 Rebuild Adventure
author: Dave's Garage
url: https://www.youtube.com/watch?v=ZdDbk3VEzIk
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCNzszbnvQeFzObW0ghk0Ckw
enclosure_url: https://www.youtube.com/v/ZdDbk3VEzIk?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Join me as I rebuild a vintage PDP-11/73 from a bare DEC chassis, step by step. In this episode, I install a QBUS CPU card, two PMI memory boards (for a full 4MB), and interface with RQDX3 and M3104 serial boards to bring everything online. I’ll show how I tackled slot configurations, DMA bus grants, and the magic of the QBone for emulating boot media. We’ll format a classic DEC hard drive, then load XXDP diagnostics, and prep the system for BSD or RT-11. If you’re into retro computing, DEC hardware, or PDP-11 restorations, this is your backstage pass to a full rebuild—from backplane setup to kernel tweaks!  

Free Sample of my Book on the Spectrum: https://amzn.to/3zBinWM

Watch ShopTalk Now on Dave's Attic: https://youtu.be/5Emgx0lhllE

Follow me on X: https://x.com/davepl1968
Facebook: https://www.facebook.com/davepl


guid: yt:video:r3TpcHebtxM
title: Deepseek R1 Explained by a Retired Microsoft Engineer
author: Dave's Garage
url: https://www.youtube.com/watch?v=r3TpcHebtxM
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCNzszbnvQeFzObW0ghk0Ckw
enclosure_url: https://www.youtube.com/v/r3TpcHebtxM?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Dave explains why Deepseek R1 is such a big deal, explains how it works, what's new, and brings you up to date on the implications and fall out!  Free Sample of my Book on the Spectrum: https://amzn.to/3zBinWM

Watch ShopTalk Now on Dave's Attic: https://youtu.be/5Emgx0lhllE

Follow me on X: https://x.com/davepl1968
Facebook: https://www.facebook.com/davepl


guid: yt:video:e-EG3B5Uj78
title: Run Deepseek R1 at Home on Hardware from $250 to $25,000: From Installation to Questions
author: Dave's Garage
url: https://www.youtube.com/watch?v=e-EG3B5Uj78
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCNzszbnvQeFzObW0ghk0Ckw
enclosure_url: https://www.youtube.com/v/e-EG3B5Uj78?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Dave installs Deepseek on a Jetson Orin Nano and a Threadripper and explores the self-hosted editions of Deepseek R1 and evaluates their performance on a wide range of hardware.  Free Sample of my Book on the Spectrum: https://amzn.to/3zBinWM

Secrets of the Autistic Millionaire: https://amzn.to/3WNDDkJ

Watch ShopTalk Now on Dave's Attic: https://youtu.be/5Emgx0lhllE

Follow me on X: https://x.com/davepl1968
Facebook: https://www.facebook.com/davepl

Introduction to the Affordable NVIDIA Jetson Orin Nano Super: 00:00
Why Run AI Locally?: 00:31
Advantages of Self-Hosted AI: 01:02
Jetson Nano Specifications: 01:33
Setting Up DeepSeek R1 with Olama: 02:04
Privacy Benefits of Local AI: 03:06
Running Queries Locally: 03:57
Use Cases for Home Automation: 05:09
Cost-Effectiveness of Jetson Nano: 05:40
Reasoning Models vs Traditional LLMs: 06:42
7B Parameter Model Performance Review On Affordable Jetson Orin Nano: 8:53
Running the full DeepSeek-R1 671B on $10,000+ machine 9:20
Outro - 11:58


guid: yt:video:3w4INVpTg9E
title: From Microsoft to TikTok: Your Rude Questions Answered!
author: Dave's Garage
url: https://www.youtube.com/watch?v=3w4INVpTg9E
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCNzszbnvQeFzObW0ghk0Ckw
enclosure_url: https://www.youtube.com/v/3w4INVpTg9E?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Dave and Glen answer the best of more than 8000 comments about the Deepseek R1 episode!  Free Sample of my Book on the Spectrum: https://amzn.to/3zBinWM

Secrets of the Autistic Millionaire: https://amzn.to/3WNDDkJ

Watch ShopTalk Now on Dave's Attic: https://youtu.be/5Emgx0lhllE

Follow me on X: https://x.com/davepl1968
Facebook: https://www.facebook.com/davepl


guid: yt:video:2VErB9DG7dI
title: IM DOING JAVASCRIPT
author: TheVimeagen
url: https://www.youtube.com/watch?v=2VErB9DG7dI
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCVk4b-svNJoeytrrlOixebQ
enclosure_url: https://www.youtube.com/v/2VErB9DG7dI?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
LIVE ON TWITCH: https://twitch.tv/ThePrimeagen

Become a backend engineer.  Its my favorite site
https://boot.dev/?promo=PRIMEYT

This is also the best way to support me is to support yourself becoming a better backend engineer.  

Get in on Discord: https://discord.gg/ThePrimeagen

Get in on Twitter: https://twitter.com/ThePrimeagen

### Got Something For Me to Read or Watch??: 
https://www.reddit.com/r/ThePrimeagenReact/


guid: yt:video:ID6I3tN0gos
title: The Latest Celebrity Tech Scam…
author: Linus Tech Tips
url: https://www.youtube.com/watch?v=ID6I3tN0gos
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw
enclosure_url: https://www.youtube.com/v/ID6I3tN0gos?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Try Rocket Money for free: https://RocketMoney.com/ltt (US Residents Only)  #rocketmoney #personalfinance

Use code LTT25 to save $20 on your Cloud Servers at Hetzner https://htznr.li/LTT2501

Celebrities like Russell Brand, the UFC and Tiki Barber are trying to get you to buy an expensive amulet that will protect you from 5G and Wifi.  But does their amulet even do anything? And do you even have to be worried about 5G radiation?

Buy an RF Venue RF Explorer Pro Spectrum Analyzer from Sweetwater: https://sweetwater.sjv.io/191Kna

Purchases made through some store links may provide some compensation to Linus Media Group.

Discuss on the forum: https://linustechtips.com/topic/1597531-the-latest-celebrity-tech-scam%E2%80%A6/

► GET OUR MERCH: https://lttstore.com
► GET EXCLUSIVE CONTENT ON FLOATPLANE: https://lmg.gg/lttfloatplane
► GET A VPN: http://www.piavpn.com/linus
► SPONSORS, AFFILIATES, AND PARTNERS: https://lmg.gg/partners

CHAPTERS
---------------------------------------------------
0:00 Intro
1:08 Sponsor
1:21 What are they claiming?
3:02 What is Electromagnetic Radiation?
4:52 Can the amulet block RF?
5:48 What it takes to block RF
6:48 Reaching out to Airestech
8:33 Explaining what Airestech said
9:49 CT scanning the amulet
10:23 Safety of Electromagnetic Radiation
12:46 Debunking their claims
15:59 "Delidding" the amulet
17:56 Conclusion
18:20 Sponsor
19:00 Credits


guid: yt:video:Q82tQJyJwgk
title: The RTX 5090 - Our Biggest Review Ever
author: Linus Tech Tips
url: https://www.youtube.com/watch?v=Q82tQJyJwgk
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw
enclosure_url: https://www.youtube.com/v/Q82tQJyJwgk?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Visit https://www.squarespace.com/LTT and use offer code LTT for 10% off

Sell your old graphics card the easy way and offset the cost of your new card at https://jawa.link/LTTJan24

After more than 2 years, the 4090 is finally getting a successor. But is the new Blackwell architecture going to bring improvements over Ada Lovelace? Or is it all just AI magic? It's a bit of both. Join us as we delve into the world of Neural Rendering and DLSS 4 with the latest generation of Nvidia graphics. Is AMD cooked? Will Intel even be on the charts? I'm not gonna tell you here. Scroll up and watch the video!

Discuss on the forum: https://linustechtips.com/topic/1597779-the-rtx-5090-our-biggest-review-ever/

Buy a NVIDIA RTX 5090 Graphics Card: https://geni.us/fx1si or https://geni.us/UyAE  or https://geni.us/orqdgbU
Buy a NVIDIA RTX 4090 FE Graphics Card: https://geni.us/jCDlUE
Buy a NVIDIA RTX 4080 SUPER FE Graphics Card: https://geni.us/K0G6a
Buy a XFX Speedster NERC310 AMD Radeon RX 7900 XTX Graphics Card: https://geni.us/Ag2Kr8w
Buy an Intel Arc B580 Graphics Card: https://geni.us/y414VP
Shop Used Graphics Cards on Jawa: https://lmg.gg/Nmb5P

Purchases made through some store links may provide some compensation to Linus Media Group.

► GET OUR MERCH: https://lttstore.com
► GET EXCLUSIVE CONTENT ON FLOATPLANE: https://lmg.gg/lttfloatplane
► GET A VPN: http://www.piavpn.com/linus
► SPONSORS, AFFILIATES, AND PARTNERS: https://lmg.gg/partners

Purchases made through some store links may provide some compensation to Linus Media Group.

CHAPTERS
---------------------------------------------------
0:00 Intro
1:20 1440 Results
2:41 4K Results
3:50 Blackwell Architecture & Neural Rendering
7:29 Ray Tracing Results
9:58 DLSS 4 and Multi Frame Gen
16:25 Content Creation
17:14 AI Benchmarks
18:52 Power and Thermals
20:45 Conclusion


guid: yt:video:ocso_AETK1c
title: Ask me Anything!
author: Linus Tech Tips
url: https://www.youtube.com/watch?v=ocso_AETK1c
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw
enclosure_url: https://www.youtube.com/v/ocso_AETK1c?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Thanks to NexiGo for sponsoring this short! Learn more about the HelloCam Pro at: https://lmg.gg/Nexigo25


guid: yt:video:IlXU34yxg8w
title: I Just Wanna Do Tech Tips - WAN Show January 24, 2025
author: Linus Tech Tips
url: https://www.youtube.com/watch?v=IlXU34yxg8w
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw
enclosure_url: https://www.youtube.com/v/IlXU34yxg8w?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Visit https://www.squarespace.com/WAN and use offer code WAN for 10% off

Go to http://notion.com/wan to try Notion for free.

Take advantage of Ohsnap’s Valentine’s BOGO50 promo to buy one for yourself and get one 50% off for your partner at https://ohsnap.com/WAN. It’s the least you can do.

Buy something from dbrand so they have an excuse to keep messing with Linus. Visit http://dbrand.com/WAN

Pick up a Secretlab Titan Evo Ergonomic Gaming Chair today at: https://lmg.gg/secretlabwan

Get a special deal on Private Internet Access VPN today at https://www.piavpn.com/LinusWan

Purchases made through some store links may provide some compensation to Linus Media Group. 

Podcast Download: https://pdst.fm/e/chrt.fm/track/C76EG6/mgln.ai/e/94/claritaspod.com/measure/verifi.podscribe.com/rss/p/chtbl.com/track/289382/pfx.vpixl.com/j0JIg/traffic.megaphone.fm/ROOSTER3024713968.mp3?updated=1737785786

Timestamps (courtesy of NoKi1119): 
0:00 Chapters
4:38 Louis Rossmann's video, closing thoughts on Gamers Nexus
5:34 Intro
6:04 Topic #1: anyon_e, an open-source laptop built by a student
7:26 Specs, laptop standards, boots up faster than a Macbook
11:24 History of DIY laptops
14:45 Should LTT support him?
16:36 Topic #2: LTT's RTX 5090 review
20:26 Linus's wisdom teeth FP vlog
21:56 Commending the team, Luke felt old LTT vibes, other reviews
25:23 AMD's RDNA delayed, Linus is rooting for all, tweet response
28:46 Hotspot sensor, die size, leaks, 7950 GX2, Linus's take on SLI
38:35 "One card for multiple users," Linus on Arc Alchemist, F
41:28 LTT mod mat delayed, LTT Labs hoodie, shirt, hat and lanyard
43:29 "Hopeful CEO" poster
45:28 Why LTT isn't selling standalone carabiner
46:15 Merch Messages - Hobbies to stay updated with tech? ft. Casting
54:48 Screwdriver material change?
56:01 Topic #3: Airestech responds to LTT's scamulet video
1:03:26 Topic #4: Game makers hope GTA VI costs over $100 at launch
1:07:02 Economy crisis, Irish pubs closure rate, spending time together
1:19:36 Squarespace
1:20:32 Notion
1:21:38 Ohsnap!
1:23:21 Merch Messages - Does the consumer benefit from price points?
1:25:28 What does Linus's The Tonight Show clip views tell?
1:32:18 Advice on hosting a giveaway?
1:36:12 Topic #5: Bambu Labs' security update
1:37:50 Topic #6: Samsung removes Bluetooth functionality from S-Pen
1:39:25 Topic #7: u/labtec901's script auto-rearranges what Linus says
1:42:08 Linus wants to try cable splicing, Dan suggests forums
1:42:52 Topic #8: Sony stops production of recordable Blu-Rays
1:43:36 Topic #9: TikTok unbanned in the US under conditions
1:44:41 Merch Messages ft. Linus's wisdom teeth experience
1:48:26 Thoughts on the 9950X3D matching 9800X3D performance?
1:49:34 You didn't want to go under for the wisdom teeth, what changed?
1:50:36 Decisions you've made recently past you wouldn't agree with?
1:53:58 Is an LTT skirt in the pipeline?
1:55:37 Which development you'd turn off - hardware or software?
1:58:45 Which social media you like V.S. using it at work?
2:02:24 Would LTT ever integrate robots into the staff?
2:04:20 3D benchy controversy
2:06:17 Steps one can take for moving without having a job lined up?
2:07:37 What was the wisdom teeth removal procedure like?
2:08:31 Most impressive non-tech thing someone did?
2:08:47 Brands you'd approve of for LTTStore-like underwear?
2:09:12 Is Linus's "UND EXACTLY!" a reference?
2:09:41 Advice for the potential data recovery from malware?
2:11:38 How's the glow wrapping on the Taycan holding up?
2:13:28 Must see shops & highlights in Japan?
2:14:50 Last video Linus wrote? Cancelled projects?
2:15:28 Devices you broke caused by bad manufacturer's docs?
2:17:16 Videos LTT writers & Linus did
2:19:29 Outro ft. Magic 8 ball


guid: yt:video:r_e21HhG5Ko
title: The LTT staff shows off their Latest Tech Purchase
author: Linus Tech Tips
url: https://www.youtube.com/watch?v=r_e21HhG5Ko
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw
enclosure_url: https://www.youtube.com/v/r_e21HhG5Ko?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Get 20% off DeleteMe US consumer plans when you go to http://joindeleteme.com/LTT20  and use promo code LTT20 at checkout.
DeleteMe International Plans: https://international.joindeleteme.com/

What Tech Product are you most proud of? Well we asked the LTT staff to bring in some tech items they have from home to show off to you guys! Including Drones, Cars, Sound Systems, Record Players, and an AirBrush? What product would you like to show off if you had the chance?

Buy a MiniDSP C-DSP 8x12 DL Digital Audio Processor: https://lmg.gg/dyAge
Buy a JL Audio 12W6v3-D4 Subwoofer: https://geni.us/wwh3ok
Buy a Miniot Wheel 2: https://lmg.gg/WNry5
Buy a Harder & Steenbeck Squidmar Ultra Airbrush: https://lmg.gg/phxAc
Buy a DJI Avata 2 FPV Drone: https://geni.us/LCV1BQ
Buy a DJI Mavic 3 Pro: https://geni.us/svuON

Purchases made through some store links may provide some compensation to Linus Media Group.

Discuss on the forum: https://linustechtips.com/topic/1598006-showing-off-our-latest-tech-purchases/

► GET OUR MERCH: https://lttstore.com
► GET EXCLUSIVE CONTENT ON FLOATPLANE: https://lmg.gg/lttfloatplane
► GET A VPN: http://www.piavpn.com/linus
► SPONSORS, AFFILIATES, AND PARTNERS: https://lmg.gg/partners

Purchases made through some store links may provide some compensation to Linus Media Group.

CHAPTERS
---------------------------------------------------
0:00 Intro
0:34 Alex's Golf!
5:16 Bell's EXPENSIVE Record Player
9:30 Plouffe's AirBursh
13:16 Shawn's Drones
18:02 Elijah's Tech Product!


guid: yt:video:TNUf2LI-K8o
title: The Hunt for the BEST Controller (Hall Effect)
author: Linus Tech Tips
url: https://www.youtube.com/watch?v=TNUf2LI-K8o
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw
enclosure_url: https://www.youtube.com/v/TNUf2LI-K8o?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Go to https://sponsr.is/bootdev_LTT and use code LTT to get 25% off your first month or year of boot.dev. Take your coding skills to the next level and learn backend developing with boot.dev today!

This is the ULTIMATE showdown of game controllers that we missed in our last video; we’ve got over 20 remotes and we’re trying to find which is THE BEST! What has the lowest input latency? Which has key features like Hall Effect Sticks and Triggers? Which feels comfiest?  Which is the best for the budget? We’re covering it all, and including a handy tier list.

Discuss on the forum: https://linustechtips.com/topic/1598435-10-underrated-game-controllers/

Check out the controllers in the lineup (in alphabetical order):
8BitDo Ultimate 2C: https://geni.us/UZpt0v
Candy Con: https://geni.us/dno1bPB
EasySMX X05: https://geni.us/hRw8Q
EasySMX X10: https://geni.us/Uic7Uyx
EasySMX X20: https://geni.us/8bAJM
Flydigi Apex 4: https://geni.us/eH9opr
Flydigi Direwolf 3: https://lmg.gg/R8QmA
Flydigi Vader 4 Pro: https://geni.us/O7rtV
GameSir G7 HE: https://geni.us/ZePQbx
GameSir Nova Lite: https://geni.us/ncYJpgW
Guilikit KK3 MAX: https://geni.us/Wl4z8
Machenike G5 Pro: https://geni.us/5LP3O5
NYXI Master P1: https://geni.us/Vw6kk
PDP Victrix Pro BFG: https://geni.us/u4sIB
Power A OPS V1: https://geni.us/JE8cfX
Razer Wolverine V3 Pro: https://geni.us/LY8bb
Turtle Beach Stealth Ultra: https://geni.us/Bg7u3r

Purchases made through some store links may provide some compensation to Linus Media Group.

► GET OUR MERCH: https://lttstore.com
► GET EXCLUSIVE CONTENT ON FLOATPLANE: https://lmg.gg/lttfloatplane
► GET A VPN: http://www.piavpn.com/linus
► SPONSORS, AFFILIATES, AND PARTNERS: https://lmg.gg/partners

Purchases made through some store links may provide some compensation to Linus Media Group.

CHAPTERS
---------------------------------------------------
0:00 What are we doing here?
1:07 The Pre-Tournament Luxury Eliminations
4:30 Round 1 - All Round Experience
10:27 Input Latency Charts
10:37 Round 1 Continues
15:10 - Round 2 -  Sticks and Triggers
18:52 - The Semi-Finals - Precision and D-pad
20:15 The Loser Final 
21:02 The Final Finals - All Round Experience… Again 
21:50 AND THE WINNER IS…
22:50 David’s Adjusted Tier List


guid: yt:video:F2-6RkgB5Us
title: Do LTT Staff Actually Have Good Computers at Home??
author: Linus Tech Tips
url: https://www.youtube.com/watch?v=F2-6RkgB5Us
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw
enclosure_url: https://www.youtube.com/v/F2-6RkgB5Us?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Get a free 15-day trial of Odoo’s all-in-one business solution and see how it can make your life easier! Check it out at https://www.odoo.com/ltt

Check out some of the rigs our team members have at home! Whether it's strictly for gaming, storing Linux ISOs, or messing around with AI, we're here to show off the computers we're proud of.

Discuss on the forum: https://linustechtips.com/topic/1598701-do-ltt-staff-actually-have-good-computers-at-home/

► GET OUR MERCH: https://lttstore.com
► GET EXCLUSIVE CONTENT ON FLOATPLANE: https://lmg.gg/lttfloatplane
► GET A VPN: http://www.piavpn.com/linus
► SPONSORS, AFFILIATES, AND PARTNERS: https://lmg.gg/partners

Purchases made through some store links may provide some compensation to Linus Media Group.

CHAPTERS
---------------------------------------------------
0:00 Intro
0:47 Introductions
3:50 How old is it?
5:00 What do you use it for?
7:18 What was your budget?
8:12 Any regrets?
8:58 Any quirks?
12:07 Any other systems at home?
13:20 Upgrade plans?
15:37 Outro


guid: yt:video:Fbg7ChsjmEA
title: I Can’t Put a Positive Spin on the RTX 5080 - Full Review
author: Linus Tech Tips
url: https://www.youtube.com/watch?v=Fbg7ChsjmEA
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw
enclosure_url: https://www.youtube.com/v/Fbg7ChsjmEA?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Say yes to every opportunity in 2025 with Vessi. Explore https://vessi.com/Linustechtips to keep your feet dry and start your year with 15% off your first order.

Sell your old graphics card the easy way and offset the cost of your new card at https://jawa.link/LinusTechTipsFeb

Nvidia's follow-up to the RTX 4080 Super is finally here! But does the new Blackwell Architecture impress? The 5090 wasn't the best thing on the planet. But hey, so long as we're still waiting for AMD's 9070 XT and Intel to have any competition in the high end... well i guess this is what we get.

Discuss on the forum: https://linustechtips.com/topic/1598928-i-can%E2%80%99t-put-a-positive-spin-on-the-rtx-5080-full-review/

Buy a:
NVIDIA GeForce RTX 5080: https://geni.us/RwFaf
NVIDIA GeForce RTX 5090: https://geni.us/7u8cD
NVIDIA GeForce RTX 4090: https://geni.us/Z1vKF
NVIDIA GeForce RTX 4080 Super: https://geni.us/nAA1
NVIDIA GeForce RTX 4070 Ti Super: https://geni.us/wzvAQf
NVIDIA GeForce RTX 4070 Super: https://geni.us/qUnjNoB
AMD Radeon RX 7900 XTX: https://geni.us/RBZQ3bH
AMD Radeon RX 7900 XT: https://geni.us/Kd636fc
Intel Arc B580: https://geni.us/M5RONnN

Buy used Graphics Cards on Jawa: https://lmg.gg/Nmb5P

► GET OUR MERCH: https://lttstore.com
► GET EXCLUSIVE CONTENT ON FLOATPLANE: https://lmg.gg/lttfloatplane
► GET A VPN: http://www.piavpn.com/linus
► SPONSORS, AFFILIATES, AND PARTNERS: https://lmg.gg/partners

Purchases made through some store links may provide some compensation to Linus Media Group.

CHAPTERS
---------------------------------------------------
0:00 Intro
1:53 1440 Results
2:54 4K Results
4:10 Blackwell Architecture
5:49 Ray Tracing
6:29 VRAM Issues?
7:12 Ray Tracing Cont.
7:23 Productivity and AI
8:16 DLSS and MFG
10:31 Quick visit to 1080p
10:53 Power and Thermals
11:28 Conclusion


guid: yt:video:9JJDy8x5APM
title: Does What We Do Even Matter? - WAN Show January 31, 2025
author: Linus Tech Tips
url: https://www.youtube.com/watch?v=9JJDy8x5APM
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw
enclosure_url: https://www.youtube.com/v/9JJDy8x5APM?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Say yes to every opportunity in 2025 with Vessi. Explore https://vessi.com/Wanshow to keep your feet dry and start your year with 15% off your first order.

Get a free 15-day trial of Odoo’s all-in-one business solution and see how it can make your life easier! Check it out at https://www.odoo.com/wan

Ready for a puzzle like no other? Get 15% off your first order at https://oddpieces.com/wanshow

Buy something from dbrand so they have an excuse to keep messing with Linus. Visit http://dbrand.com/WAN

Pick up a Secretlab Titan Evo Ergonomic Gaming Chair today at: https://lmg.gg/secretlabwan

Get a special deal on Private Internet Access VPN today at https://www.piavpn.com/LinusWan

Purchases made through some store links may provide some compensation to Linus Media Group.

Podcast Download: https://pdst.fm/e/chrt.fm/track/C76EG6/mgln.ai/e/94/claritaspod.com/measure/verifi.podscribe.com/rss/p/chtbl.com/track/289382/pfx.vpixl.com/j0JIg/traffic.megaphone.fm/ROOSTER8928505904.mp3?updated=1738385596
Timestamps (courtesy of NoKi1119): 
0:00 Chapters
1:00 Intro
1:30 Topic #1: RTX 5080 reviews, paper launch
2:55 Scalping, price hike, was the work on the reviews worth it?
7:31 Reviews, upgrading, upcoming 8K gaming video, Plouffe's 4090
12:48 Linus on upgrading, Luke on local LLMs, on-prem storage
14:52 1080P charts on LTT Labs, RTX 5080 video analytics
16:54 Topic #2: Major tech stock crashes due to DeepSeek
18:02 DeepSeek accused of data distilling, AI scraper bots
21:15 Utilizing local LLMs, open source & forks, interests spiking
26:58 Mac Mini & Studio, second hand RTX 3090 GPU prices
33:40 Linus on buying RTX from launch then flipping it today
35:06 GeForce NOW membership
38:21 OpenAI & efficiency, "more gaming PCs," most boring consoles
42:46 Linus on 4:2:2 encoding for streaming, ANNO 1800 on Deck
46:56 Luke's plans for open source LLMs, closing thoughts
47:33 LTTStore's new sport button-up shirt
49:37 Help make LTTStore better
50:06 Merch Messages - Fixing mistypes with mechanical keyboards?
53:05 Single thing in tech that made you feel the oldest?
58:08 Topic #3: Pebble makes a return with open source OS
1:03:06 Topic #4: Making AI scraping difficult by poisoning them
1:05:52 Topic #5: SteamOS to be used on other handhelds
1:07:28 Topic #6: Sony removes PSN requirements for some PC games
1:09:47 WAN Show played on a school's jumbotron
1:10:38 Rugby, US fields, past schools, kickball, "shuttle"
1:18:16 Vessi
1:19:21 Odoo
1:20:27 Odd Pieces
1:21:49 Merch Message - Morning routine? ft. "Big boi," Allen HS
1:27:55 Topic #7: Protonmail "politically neutral" under fire
1:29:36 Topic #8: Meta AI uses your FB messages & data, MS 365 has Copilot
1:30:24 Facebook marketplace, Linus likes the ads
1:33:15 Topic #9: Gobi cameras use proprietary cables?
1:34:48 FP's executives week, Linus's post surgery, why is WAN late?
1:35:59 Merch Mesages ft. Missing dark after dark, narcissists
1:37:38 LTT pants to go with the new shirt? ft. Prototype' "issues"
1:40:23 Does Linus still find Dennis's stickers in his house?
1:40:48 Cool tech that influenced your badminton spot?
1:43:46 Is the way Linus talks in videos on purpose?
1:45:10 If it's the 20th century, what tech would you revisit?
1:46:42 Would X86 CPUs be able to scale beyond 128 cores?
1:47:51 How come we've seen +30% performance for ARM but not X86?
1:51:18 How to restore the LTT screwdriver's black finish?
1:52:29 Should I insist on my warranty for RMA or switch brands?
1:54:26 How do you think development will evolve with AI?
1:59:48 Using rattle can for car hood painting?
2:00:48 Thoughts on companies that struggle due to misinformation?
2:04:12 Has Linus heard of Manor Lords?
2:07:22 Technology or equipment you liked that never released?
2:10:10 Would Linus replace his limbs or organs to become a cyborg?
2:14:33 Insights on logistics of huge tech releases?
2:17:21 "GTA VI will release before Linus paints his bike"
2:19:00 Advice for a takeover of a company? ft. "Review body parts"
2:22:52 Linus's bike painting update ft. Cake
2:23:52 How do you measure input latency?
2:24:55 Linus watched a bit of Louis Rossmann's video
2:26:09 "Intentionally messaged Steve's wrong number"
2:26:34 Outro ft. Luke's cybernetic arm


guid: yt:video:TihoKTILOrs
title: Find the FAKE PC Gamer
author: Linus Tech Tips
url: https://www.youtube.com/watch?v=TihoKTILOrs
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw
enclosure_url: https://www.youtube.com/v/TihoKTILOrs?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Power your PC with confidence! Check out Seasonic’s Core GX and Focus GX ATX 3 power supplies at https://seasonic.com/core-gx-atx-3-2024/ and https://seasonic.com/focus-gx-white-atx-3/

Five people CLAIM they are PC gamers, but one of them is LYING. In this reality tv style format, 2 people compete to identify the imposter by asking the hard questions and slowly eliminating them 1 by 1. Are they in Jeopardy? Who is going to be the Weakest Link? And will YOU be able to identify the Console Gamer before the Hosts do? PLAY ALONG AT HOME!

Discuss on the forum: https://linustechtips.com/topic/1599714-find-the-fake-pc-gamer/

► GET OUR MERCH: https://lttstore.com
► GET EXCLUSIVE CONTENT ON FLOATPLANE: https://lmg.gg/lttfloatplane
► GET A VPN: http://www.piavpn.com/linus
► SPONSORS, AFFILIATES, AND PARTNERS: https://lmg.gg/partners

CHAPTERS
---------------------------------------------------
0:00 What is happening?
1:23 Choice NUMBER 1
3:04 The second selection
4:35 The THIRD number
6:31 Will we have our first ELIMINATION?
8:51 TWO IN A ROW????
12:17 The Final Guess


guid: yt:video:8FeiXml-U6c
title: The $300 GAMING PC Challenge - The Original Scrapyard Wars COMPLETE
author: Linus Tech Tips
url: https://www.youtube.com/watch?v=8FeiXml-U6c
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw
enclosure_url: https://www.youtube.com/v/8FeiXml-U6c?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Our FIRST reality competition series AND NOW ITS ONE BIG FREAKING VIDEO! Luke and Linus go head 2 head to build the ultimate gaming PC for $300 bucks in 48 hours, meaning they gotta be cheap with all their components, like GPU and CPU. Find the deals to claim the crown. But things never go as expected, do they? It's hard to remember when we shot this like 10 years ago… so retro.

Discuss on the forum: https://linustechtips.com/topic/1600073-the-300-gaming-pc-challenge-the-original-scrapyard-wars-complete/

► GET OUR MERCH: https://lttstore.com
► GET EXCLUSIVE CONTENT ON FLOATPLANE: https://lmg.gg/lttfloatplane
► GET A VPN: http://www.piavpn.com/linus
► SPONSORS, AFFILIATES, AND PARTNERS: https://lmg.gg/partners

Purchases made through some store links may provide some compensation to Linus Media Group.

CHAPTERS
---------------------------------------------------
0:00 Intro
1:17 Part 1
17:14 Part 2
29:16 Part 3
47:48 Outro


guid: yt:video:YX29Hk08lAY
title: The ULTIMATE Sleeper Gaming TV
author: Linus Tech Tips
url: https://www.youtube.com/watch?v=YX29Hk08lAY
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw
enclosure_url: https://www.youtube.com/v/YX29Hk08lAY?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Join us and over 70 million players in one of the most comprehensive vehicle combat games EVER MADE! Check out War Thunder for free today on PC, Console, and Mobile using our links!

PC/Console: https://playwt.link/linustechtips

Mobile: https://wtm.game/linustechtips

Old TVs are huge.. But what if you used that space for modern hardware? Well that is exactly what we did, cramming every relevant console into an old rear projection TV.. and 1200W of speakers for good measure.

Discuss on the forum: https://linustechtips.com/topic/1600198-the-ultimate-sleeper-gaming-tv/

Buy SVS Prime Elevation Speakers: https://geni.us/XDZ2
Buy a Streacom STDA6B Open ITX Case: https://geni.us/WWPc
Buy a Sony Bravia 8 65" 4K OLED TV: https://geni.us/iBvxIpx (Thanks to Sony for sending one over!)
Buy a SVS Prime Wireless Pro SoundBase Streaming Box: https://geni.us/dMTS

► GET OUR MERCH: https://lttstore.com
► GET EXCLUSIVE CONTENT ON FLOATPLANE: https://lmg.gg/lttfloatplane
► GET A VPN: http://www.piavpn.com/linus
► SPONSORS, AFFILIATES, AND PARTNERS: https://lmg.gg/partners

Purchases made through some store links may provide some compensation to Linus Media Group.

CHAPTERS
---------------------------------------------------
0:00 Intro
0:51 Sponsor
1:07 What is a rear projection TV?
2:50 Disassembling the TV
4:30 Fresnel lens shenanigans
5:14 Planning the layout
7:10 Building the layout
9:35 Installing the Wii and speakers
12:13 Listening to the speakers
12:28 The PC
13:35 Buttoning it back up
15:10 Linus does a handstand
15:26 The PS5
15:49 The Switch
17:05 The OLED panel
18:14 Closing it up
19:36 Trying it out
21:03 Sponsor
21:57 Credits


guid: yt:video:n5BOFsiDpYQ
title: I Painted his House to Fix his WiFi
author: Linus Tech Tips
url: https://www.youtube.com/watch?v=n5BOFsiDpYQ
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw
enclosure_url: https://www.youtube.com/v/n5BOFsiDpYQ?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
ASUS’s ROG Rapture GT-BE98 and RT-BE88U routers are both driven by WIFI 7 with full support for 10G networking and ASUS’s AiProtection - powered by Trend Micro™. The GT-BE98 also has a 2.6GHz quad-core CPU, triple-level game acceleration to boost PC gaming traffic, and an optimized array of 8 antennas to eliminate dead zones! Check them out using our links:

https://rog.asus.com/us/networking/rog-rapture-gt-be98-pro/

https://www.asus.com/us/networking-iot-servers/wifi-routers/asus-gaming-routers/rt-be88u/

https://www.asus.com/us/content/wifi7/

Remember the Woremor RF Blocking Paint we tested last year? WELP Elijah decided to volunteer his apartment to test out if this paint can be used to BLOCK his neighbors WIFI to see if we can improve his! So join us as we install an ASUS router and break out the paint rollers to paint Elijah’s apartment pitch black…

Discuss on the forum: https://linustechtips.com/topic/1600335-i-painted-his-house-to-fix-his-wifi/

Buy WaveForm Cel-Fi Go Booster: https://www.waveform.com/products/cel-fi-go-g41
Buy WOREMOR RF-IE50 EMR & RF Shielding Paint: https://geni.us/3gRmR
Buy a RF Explorer Pro Spectrum Analyzer: https://sweetwater.sjv.io/e1qxyD
Buy a WOREMOR Grounding Plate Set: https://geni.us/OuBtvX

► GET OUR MERCH: https://lttstore.com
► GET EXCLUSIVE CONTENT ON FLOATPLANE: https://lmg.gg/lttfloatplane
► GET A VPN: http://www.piavpn.com/linus
► SPONSORS, AFFILIATES, AND PARTNERS: https://lmg.gg/partners

Purchases made through some store links may provide some compensation to Linus Media Group.

CHAPTERS
---------------------------------------------------
0:00 Intro
1:35 What is RF Blocking Paint
2:24 "Health Claims"
3:00 Elijah Picks his new Router
4:20 How are we testing if it works?
6:45 Moving Furniture
7:37 Why we need to Ground the walls
9:40 Linus Painting Tips
12:30 Subtle Foreshadowing...
13:20 More painting
14:07 Its completed!
15:00 It works!
16:32 How Well did it work?
20:33 Thank you ASUS for a new Router - Elijah
22:29 Outro


guid: yt:video:xX4mBbJjdYM
title: My Business Is In Danger - WAN Show February 7, 2025
author: Linus Tech Tips
url: https://www.youtube.com/watch?v=xX4mBbJjdYM
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw
enclosure_url: https://www.youtube.com/v/xX4mBbJjdYM?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Visit https://www.squarespace.com/LTT and use offer code LTT for 10% off

Find the perfect partner for your February adventures. Explore Vessi's waterproof shoes at https://vessi.com/wanshow for the ultimate versatile footwear and get 15% off your first purchase at checkout!

Get 20% off DeleteMe US consumer plans when you go to http://joindeleteme.com/LTT20 and use promo code LTT20 at checkout.
DeleteMe International Plans: https://international.joindeleteme.com/

Buy something from dbrand so they have an excuse to keep messing with Linus. Visit http://dbrand.com/WAN

Pick up a Secretlab Titan Evo Ergonomic Gaming Chair today at: https://lmg.gg/secretlabwan

Get a special deal on Private Internet Access VPN today at https://www.piavpn.com/LinusWan

Purchases made through some store links may provide some compensation to Linus Media Group.

Podcast Download: TBD
Timestamps (courtesy of NoKi1119): TBD


guid: yt:video:G6_Kd1qVfS0
title: I Forced 3 iPhone users to Switch to Android - 30 Day Android Challenge Pt.1
author: Linus Tech Tips
url: https://www.youtube.com/watch?v=G6_Kd1qVfS0
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw
enclosure_url: https://www.youtube.com/v/G6_Kd1qVfS0?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Grab yourself a case or some overpriced stickers at https://iamveryshort.com

Linus has become so use to switching phones, that its time we brought in some fresh meat! We asked 3 iPhone users in our office to willingly switch to Android for 1 whole month. Will the more bothered by the switch, or if Android really that "terrible" of an operating system?

Discuss on the forum: https://linustechtips.com/topic/1600738-i-forced-3-iphone-users-to-switch-to-android-30-day-android-challenge/

Buy some Phones used in the Video!
Google Pixel 9 Pro XL: https://geni.us/gt3B9H6
Google Pixel 9 Pro Fold: https://geni.us/95UW8O
Samsung Galaxy S24: https://geni.us/b1BB
Samsung Galaxy S24 Ultra: https://geni.us/JrIyGyx
Samsung Galaxy Z Flip 6: https://geni.us/WLDSl1y
Oppo X8 on eBay: https://ebay.us/ha0i8o
OnePlus 13: https://geni.us/nAeUYD5
ASUS ROG Phone 8: https://geni.us/K8lQsx
Nothing Phone (2a): https://tidd.ly/4hMaTRq
Sony Xperia 1 V: https://geni.us/1RqsTHq
Apple iPhone 16 Pro: https://lmg.gg/ShEKh
Apple iPhone 14 Pro: https://lmg.gg/r2zPP

► GET OUR MERCH: https://lttstore.com
► GET EXCLUSIVE CONTENT ON FLOATPLANE: https://lmg.gg/lttfloatplane
► GET A VPN: http://www.piavpn.com/linus
► SPONSORS, AFFILIATES, AND PARTNERS: https://lmg.gg/partners

Purchases made through some store links may provide some compensation to Linus Media Group.

CHAPTERS
---------------------------------------------------
0:00 Intro
1:48 Meet our Contestants
3:23 Google Phones
6:43 Samsung
11:37 "iPhony" Phones
14:20 Special Phones
20:43 Everyone's Top 3
25:56 Predictions and Special Offer


guid: yt:video:_AEyyCRtBVA
title: The End Of Linux Is Only 13 Years Away
author: Brodie Robertson
url: https://www.youtube.com/watch?v=_AEyyCRtBVA
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA
enclosure_url: https://www.youtube.com/v/_AEyyCRtBVA?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
A few years back I did a video on the 2038 problem and whilst progress has been made, this is a problem that still absolutely exists in software you use today and many of the bugs likely remain undiscovered.

==========Support The Channel==========
► Patreon: https://brodierobertson.xyz/patreon
► Paypal: https://brodierobertson.xyz/paypal
► Liberapay: https://brodierobertson.xyz/liberapay
► Amazon USA: https://brodierobertson.xyz/amazonusa

==========Resources==========
2038 Post: https://www.reddit.com/r/linux/comments/1i4otpo/today_is_y2k38_commemoration_day_t13/

=========Video Platforms==========
🎥 Odysee: https://brodierobertson.xyz/odysee
🎥 Podcast: https://techovertea.xyz/youtube
🎮 Gaming: https://brodierobertson.xyz/gaming

==========Social Media==========
🎤 Discord: https://brodierobertson.xyz/discord
🐦 Twitter: https://brodierobertson.xyz/twitter
🌐 Mastodon: https://brodierobertson.xyz/mastodon
🖥️ GitHub: https://brodierobertson.xyz/github

==========Credits==========
🎨 Channel Art:
Profile Picture:
https://www.instagram.com/supercozman_draws/

#Linux #Unix #FOSS #OpenSource

🎵 Ending music
Track: Debris & Jonth - Game Time [NCS Release]
Music provided by NoCopyrightSounds.
Watch:  https://www.youtube.com/watch?v=yDTvvOTie0w 
Free Download / Stream: http://ncs.io/GameTime

DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase I may receive a small commission or other compensation.


guid: yt:video:4UfmqKc-u7Q
title: Appreciate Your Local Linux Beta Testers
author: Brodie Robertson
url: https://www.youtube.com/watch?v=4UfmqKc-u7Q
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA
enclosure_url: https://www.youtube.com/v/4UfmqKc-u7Q?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
You have no idea how many bugs get spotted by users on Linux testing branches, rolling releases and especially the testing branches of a rolling release, so be sure to appreciate the people who save you from all those issues.

==========Support The Channel==========
► Patreon: https://brodierobertson.xyz/patreon
► Paypal: https://brodierobertson.xyz/paypal
► Liberapay: https://brodierobertson.xyz/liberapay
► Amazon USA: https://brodierobertson.xyz/amazonusa

==========Resources==========
Arch Linux Issue: https://gitlab.archlinux.org/archlinux/packaging/packages/pango/-/issues/1
Old Arch 1: https://bugs.archlinux.org/task/40134 
Old Arch 2: https://bugs.archlinux.org/task/41742
Font Config Issue: https://gitlab.freedesktop.org/fontconfig/fontconfig/-/issues/444

=========Video Platforms==========
🎥 Odysee: https://brodierobertson.xyz/odysee
🎥 Podcast: https://techovertea.xyz/youtube
🎮 Gaming: https://brodierobertson.xyz/gaming

==========Social Media==========
🎤 Discord: https://brodierobertson.xyz/discord
🐦 Twitter: https://brodierobertson.xyz/twitter
🌐 Mastodon: https://brodierobertson.xyz/mastodon
🖥️ GitHub: https://brodierobertson.xyz/github

==========Credits==========
🎨 Channel Art:
Profile Picture:
https://www.instagram.com/supercozman_draws/

🎵 Ending music
Track: Debris & Jonth - Game Time [NCS Release]
Music provided by NoCopyrightSounds.
Watch:  https://www.youtube.com/watch?v=yDTvvOTie0w 
Free Download / Stream: http://ncs.io/GameTime

#Linux #ArchLinux #FOSS #OpenSource

DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase I may receive a small commission or other compensation.


guid: yt:video:hPN636VhRtM
title: I Love The COSMIC Desktop But...
author: Brodie Robertson
url: https://www.youtube.com/watch?v=hPN636VhRtM
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA
enclosure_url: https://www.youtube.com/v/hPN636VhRtM?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
The COSMIC desktop is great and the alpha has been going well so far, however there's a few areas where I wish things would change.

==========Support The Channel==========
► Patreon: https://brodierobertson.xyz/patreon
► Paypal: https://brodierobertson.xyz/paypal
► Liberapay: https://brodierobertson.xyz/liberapay
► Amazon USA: https://brodierobertson.xyz/amazonusa

==========Resources==========
Fullscreen: https://github.com/pop-os/cosmic-comp/issues/646
Sizing 1: https://github.com/pop-os/cosmic-panel/issues/319 
Sizing 2: https://github.com/pop-os/cosmic-settings/issues/705
Static Old Solution: https://github.com/pop-os/cosmic-epoch/issues/908
Static Reddit Post:  https://www.reddit.com/r/pop_os/comments/1i1ayl0/comment/m74wn6w/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button
Static New: https://github.com/pop-os/cosmic-workspaces-epoch/issues/108
Decorations:  https://github.com/pop-os/cosmic-comp/issues/1132

=========Video Platforms==========
🎥 Odysee: https://brodierobertson.xyz/odysee
🎥 Podcast: https://techovertea.xyz/youtube
🎮 Gaming: https://brodierobertson.xyz/gaming

==========Social Media==========
🎤 Discord: https://brodierobertson.xyz/discord
🐦 Twitter: https://brodierobertson.xyz/twitter
🌐 Mastodon: https://brodierobertson.xyz/mastodon
🖥️ GitHub: https://brodierobertson.xyz/github

==========Credits==========
🎨 Channel Art:
Profile Picture:
https://www.instagram.com/supercozman_draws/

🎵 Ending music
Track: Debris & Jonth - Game Time [NCS Release]
Music provided by NoCopyrightSounds.
Watch:  https://www.youtube.com/watch?v=yDTvvOTie0w 
Free Download / Stream: http://ncs.io/GameTime

#Linux #COSMIC #PopOS #FOSS #OpenSource

DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase I may receive a small commission or other compensation.


guid: yt:video:YsnOoxLhves
title: KDE Is Ready To Claim Its Rightful Throne
author: Brodie Robertson
url: https://www.youtube.com/watch?v=YsnOoxLhves
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA
enclosure_url: https://www.youtube.com/v/YsnOoxLhves?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Fedora KDE has always been quite a popular option for a distro but it's always been a second class citizen and now that's getting ready to change.

==========Support The Channel==========
► Patreon: https://brodierobertson.xyz/patreon
► Paypal: https://brodierobertson.xyz/paypal
► Liberapay: https://brodierobertson.xyz/liberapay
► Amazon USA: https://brodierobertson.xyz/amazonusa

==========Resources==========
Fedora Announcement: https://pagure.io/Fedora-Council/tickets/issue/504
Fedora Change Proposal: https://fedoraproject.org/wiki/Changes/Promote_KDE_Plasma_Desktop_variant_to_Edition

=========Video Platforms==========
🎥 Odysee: https://brodierobertson.xyz/odysee
🎥 Podcast: https://techovertea.xyz/youtube
🎮 Gaming: https://brodierobertson.xyz/gaming

==========Social Media==========
🎤 Discord: https://brodierobertson.xyz/discord
🐦 Twitter: https://brodierobertson.xyz/twitter
🌐 Mastodon: https://brodierobertson.xyz/mastodon
🖥️ GitHub: https://brodierobertson.xyz/github

==========Credits==========
🎨 Channel Art:
Profile Picture:
https://www.instagram.com/supercozman_draws/

#KDE #Linux #OpenSource #FOSS #LinuxDesktop

🎵 Ending music
Track: Debris & Jonth - Game Time [NCS Release]
Music provided by NoCopyrightSounds.
Watch:  https://www.youtube.com/watch?v=yDTvvOTie0w 
Free Download / Stream: http://ncs.io/GameTime

DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase I may receive a small commission or other compensation.


guid: yt:video:6lqRRG6vvEY
title: The Arch Linux Results Are In, It's Really The Best
author: Brodie Robertson
url: https://www.youtube.com/watch?v=6lqRRG6vvEY
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA
enclosure_url: https://www.youtube.com/v/6lqRRG6vvEY?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
You may recall a few weeks back I did a video on a survey being hosted by the Arch Linux subreddit, well the results of that survey are finally in and some of the results are pretty interesting.

==========Support The Channel==========
► Patreon: https://brodierobertson.xyz/patreon
► Paypal: https://brodierobertson.xyz/paypal
► Liberapay: https://brodierobertson.xyz/liberapay
► Amazon USA: https://brodierobertson.xyz/amazonusa

==========Resources==========
Prior Video: https://www.youtube.com/watch?v=xSyUvkpHv6M
Reddit Post: https://www.reddit.com/r/archlinux/comments/1i3818i/rarchlinux_community_survey_results/
Survey Results: https://docs.google.com/forms/d/1c1MAsXxMFp_UbNJur5-v7k5-4aBWzsm9fXmdZp7dmpA/viewanalytics

=========Video Platforms==========
🎥 Odysee: https://brodierobertson.xyz/odysee
🎥 Podcast: https://techovertea.xyz/youtube
🎮 Gaming: https://brodierobertson.xyz/gaming

==========Social Media==========
🎤 Discord: https://brodierobertson.xyz/discord
🐦 Twitter: https://brodierobertson.xyz/twitter
🌐 Mastodon: https://brodierobertson.xyz/mastodon
🖥️ GitHub: https://brodierobertson.xyz/github

==========Credits==========
🎨 Channel Art:
Profile Picture:
https://www.instagram.com/supercozman_draws/

🎵 Ending music
Track: Debris & Jonth - Game Time [NCS Release]
Music provided by NoCopyrightSounds.
Watch:  https://www.youtube.com/watch?v=yDTvvOTie0w 
Free Download / Stream: http://ncs.io/GameTime

#ArchLinux #Linux #OpenSource #FOSS #LinuxDistro

DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase I may receive a small commission or other compensation.


guid: yt:video:DaNSbpaoXzc
title: One Step Closer To A Fully Wayland Desktop
author: Brodie Robertson
url: https://www.youtube.com/watch?v=DaNSbpaoXzc
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA
enclosure_url: https://www.youtube.com/v/DaNSbpaoXzc?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
We're pretty much at the point where you can run a 99% Wayland native desktop however there's still that tiny edge case of some Chromium stuff but more notably anything run in WINE or Steam's Proton but soon that'll come to an end.

==========Support The Channel==========
► Patreon: https://brodierobertson.xyz/patreon
► Paypal: https://brodierobertson.xyz/paypal
► Liberapay: https://brodierobertson.xyz/liberapay
► Amazon USA: https://brodierobertson.xyz/amazonusa

==========Resources==========
Wine 10 Change Log: https://gitlab.winehq.org/wine/wine/-/releases/wine-10.0
Wine Wayland MRs: https://gitlab.winehq.org/wine/wine/-/merge_requests?scope=all&state=opened&search=wayland
MR 1: https://gitlab.winehq.org/wine/wine/-/merge_requests/6938
MR 2: https://gitlab.winehq.org/wine/wine/-/merge_requests/6025
MR 3: https://gitlab.winehq.org/wine/wine/-/merge_requests/6199

=========Video Platforms==========
🎥 Odysee: https://brodierobertson.xyz/odysee
🎥 Podcast: https://techovertea.xyz/youtube
🎮 Gaming: https://brodierobertson.xyz/gaming

==========Social Media==========
🎤 Discord: https://brodierobertson.xyz/discord
🐦 Twitter: https://brodierobertson.xyz/twitter
🌐 Mastodon: https://brodierobertson.xyz/mastodon
🖥️ GitHub: https://brodierobertson.xyz/github

==========Credits==========
🎨 Channel Art:
Profile Picture:
https://www.instagram.com/supercozman_draws/

#Wine #Proton #Wayland #Linux #LinuxGaming

🎵 Ending music
Track: Debris & Jonth - Game Time [NCS Release]
Music provided by NoCopyrightSounds.
Watch:  https://www.youtube.com/watch?v=yDTvvOTie0w 
Free Download / Stream: http://ncs.io/GameTime

DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase I may receive a small commission or other compensation.


guid: yt:video:HMMIxFEIlHY
title: Pebble's Return As An OPEN SOURCE Smart Watch
author: Brodie Robertson
url: https://www.youtube.com/watch?v=HMMIxFEIlHY
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA
enclosure_url: https://www.youtube.com/v/HMMIxFEIlHY?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
You may recall the Pebble Smart watches from about 10 years back, well it looks like they'll be coming back some time following Google open sourcing the Pebble OS used on these devices.

==========Support The Channel==========
► Patreon: https://brodierobertson.xyz/patreon
► Paypal: https://brodierobertson.xyz/paypal
► Liberapay: https://brodierobertson.xyz/liberapay
► Amazon USA: https://brodierobertson.xyz/amazonusa

==========Resources==========
KIckstarter 1: https://www.kickstarter.com/projects/getpebble/pebble-e-paper-watch-for-iphone-and-android
Kickstarter 2: https://www.kickstarter.com/projects/getpebble/pebble-time-awesome-smartwatch-no-compromises
Kicktarter 3: https://www.kickstarter.com/projects/getpebble/pebble-2-time-2-and-core-an-entirely-new-3g-ultra
Failure Followup:  https://medium.com/@ericmigi/why-pebble-failed-d7be937c6232
Repebble: https://repebble.com/
Google OpenSource: https://opensource.googleblog.com/2025/01/see-code-that-powered-pebble-smartwatches.html
Pebble OS Repo: https://github.com/google/pebble
Rebble: https://rebble.io/
Eric Blog: https://ericmigi.com/blog/why-were-bringing-pebble-back

=========Video Platforms==========
🎥 Odysee: https://brodierobertson.xyz/odysee
🎥 Podcast: https://techovertea.xyz/youtube
🎮 Gaming: https://brodierobertson.xyz/gaming

==========Social Media==========
🎤 Discord: https://brodierobertson.xyz/discord
🐦 Twitter: https://brodierobertson.xyz/twitter
🌐 Mastodon: https://brodierobertson.xyz/mastodon
🖥️ GitHub: https://brodierobertson.xyz/github

==========Credits==========
🎨 Channel Art:
Profile Picture:
https://www.instagram.com/supercozman_draws/

#Pebble #OpenSource #Linux #FOSS

🎵 Ending music
Track: Debris & Jonth - Game Time [NCS Release]
Music provided by NoCopyrightSounds.
Watch:  https://www.youtube.com/watch?v=yDTvvOTie0w 
Free Download / Stream: http://ncs.io/GameTime

DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase I may receive a small commission or other compensation.


guid: yt:video:n7f1LI9DnP0
title: Who Let Microsoft Do This
author: Brodie Robertson
url: https://www.youtube.com/watch?v=n7f1LI9DnP0
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA
enclosure_url: https://www.youtube.com/v/n7f1LI9DnP0?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
You may recall those Copilot+ PCs from last year well, they had a really odd key, the Copilot key but would you be be surprised to find out the way the key works makes absolutely no sense

==========Support The Channel==========
► Patreon: https://brodierobertson.xyz/patreon
► Paypal: https://brodierobertson.xyz/paypal
► Liberapay: https://brodierobertson.xyz/liberapay
► Amazon USA: https://brodierobertson.xyz/amazonusa

==========Resources==========
Verge Office And Emoji Keys: https://www.theverge.com/2019/10/11/20909475/microsoft-office-key-emoji-key-keyboards
Reddit Post: https://www.reddit.com/r/pcmasterrace/comments/1f0po3s/i_just_learned_that_windows_11_has_a_shortcut/
Ars Technica Post: https://arstechnica.com/gadgets/2024/04/shoehorned-windows-copilot-key-is-just-a-reprogrammable-macro-journalist-shows/
Kernel Patch: https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git/commit/?h=next&id=907bc9268a5a9f823ffa751957a5c1dd59f83f42

=========Video Platforms==========
🎥 Odysee: https://brodierobertson.xyz/odysee
🎥 Podcast: https://techovertea.xyz/youtube
🎮 Gaming: https://brodierobertson.xyz/gaming

==========Social Media==========
🎤 Discord: https://brodierobertson.xyz/discord
🐦 Twitter: https://brodierobertson.xyz/twitter
🌐 Mastodon: https://brodierobertson.xyz/mastodon
🖥️ GitHub: https://brodierobertson.xyz/github

==========Credits==========
🎨 Channel Art:
Profile Picture:
https://www.instagram.com/supercozman_draws/

🎵 Ending music
Track: Debris & Jonth - Game Time [NCS Release]
Music provided by NoCopyrightSounds.
Watch:  https://www.youtube.com/watch?v=yDTvvOTie0w 
Free Download / Stream: http://ncs.io/GameTime

#Linux #Microsoft #OpenSource #FOSS

DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase I may receive a small commission or other compensation.


guid: yt:video:fsJR0g40-RU
title: Is It Time To Leave BCacheFS In The Past
author: Brodie Robertson
url: https://www.youtube.com/watch?v=fsJR0g40-RU
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA
enclosure_url: https://www.youtube.com/v/fsJR0g40-RU?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Bcachefs has had a fairly rocky time in the kernel over the years and as it's going it's unclear whether or not it'll actually stick around in the kernel or now and one dev has decided to leave it behind.

==========Support The Channel==========
► Patreon: https://brodierobertson.xyz/patreon
► Paypal: https://brodierobertson.xyz/paypal
► Liberapay: https://brodierobertson.xyz/liberapay
► Amazon USA: https://brodierobertson.xyz/amazonusa

==========Resources==========
Blog Post: https://blog.sesse.net/blog/tech/2025-01-20-21-45_migrating_away_from_bcachefs.html

=========Video Platforms==========
🎥 Odysee: https://brodierobertson.xyz/odysee
🎥 Podcast: https://techovertea.xyz/youtube
🎮 Gaming: https://brodierobertson.xyz/gaming

==========Social Media==========
🎤 Discord: https://brodierobertson.xyz/discord
🐦 Twitter: https://brodierobertson.xyz/twitter
🌐 Mastodon: https://brodierobertson.xyz/mastodon
🖥️ GitHub: https://brodierobertson.xyz/github

==========Credits==========
🎨 Channel Art:
Profile Picture:
https://www.instagram.com/supercozman_draws/

#Linux #kernel #FOSS #OpenSource #bcachefs

🎵 Ending music
Track: Debris & Jonth - Game Time [NCS Release]
Music provided by NoCopyrightSounds.
Watch:  https://www.youtube.com/watch?v=yDTvvOTie0w 
Free Download / Stream: http://ncs.io/GameTime

DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase I may receive a small commission or other compensation.


guid: yt:video:GIqhJLbOaOk
title: Just Delete The Fedora Flatpak Repo Already
author: Brodie Robertson
url: https://www.youtube.com/watch?v=GIqhJLbOaOk
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA
enclosure_url: https://www.youtube.com/v/GIqhJLbOaOk?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
The Fedora Flatpak repo is a weird thing that unless you're on Fedora you probably never think about but for those who are especially on Workstation the ordering of the repos has caused a lot of issues for people over the years and still does today.

==========Support The Channel==========
► Patreon: https://brodierobertson.xyz/patreon
► Paypal: https://brodierobertson.xyz/paypal
► Liberapay: https://brodierobertson.xyz/liberapay
► Amazon USA: https://brodierobertson.xyz/amazonusa

==========Resources==========
Flatpak 2023 Change: https://fosstodon.org/@fedora/109802129126311440
Fedora Flatpak: https://pagure.io/fedora-workstation/issue/463

=========Video Platforms==========
🎥 Odysee: https://brodierobertson.xyz/odysee
🎥 Podcast: https://techovertea.xyz/youtube
🎮 Gaming: https://brodierobertson.xyz/gaming

==========Social Media==========
🎤 Discord: https://brodierobertson.xyz/discord
🐦 Twitter: https://brodierobertson.xyz/twitter
🌐 Mastodon: https://brodierobertson.xyz/mastodon
🖥️ GitHub: https://brodierobertson.xyz/github

==========Credits==========
🎨 Channel Art:
Profile Picture:
https://www.instagram.com/supercozman_draws/

🎵 Ending music
Track: Debris & Jonth - Game Time [NCS Release]
Music provided by NoCopyrightSounds.
Watch:  https://www.youtube.com/watch?v=yDTvvOTie0w 
Free Download / Stream: http://ncs.io/GameTime

#Fedora #Linux #LinuxDistro #FOSS #Flatpak #FedoraLinux

DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase I may receive a small commission or other compensation.


guid: yt:video:6XTQPsnSu5E
title: "Everything Is Open Source If You Know Assembly"
author: Brodie Robertson
url: https://www.youtube.com/watch?v=6XTQPsnSu5E
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA
enclosure_url: https://www.youtube.com/v/6XTQPsnSu5E?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
There's a common phrase people in the FOSS world say "Everything Is Open Source If You Know Assembly" and whilst this is obviously a joke there's some truth to it if you play some mental gymnastics

==========Support The Channel==========
► Patreon: https://brodierobertson.xyz/patreon
► Paypal: https://brodierobertson.xyz/paypal
► Liberapay: https://brodierobertson.xyz/liberapay
► Amazon USA: https://brodierobertson.xyz/amazonusa

=========Video Platforms==========
🎥 Odysee: https://brodierobertson.xyz/odysee
🎥 Podcast: https://techovertea.xyz/youtube
🎮 Gaming: https://brodierobertson.xyz/gaming

==========Social Media==========
🎤 Discord: https://brodierobertson.xyz/discord
🐦 Twitter: https://brodierobertson.xyz/twitter
🌐 Mastodon: https://brodierobertson.xyz/mastodon
🖥️ GitHub: https://brodierobertson.xyz/github

==========Credits==========
🎨 Channel Art:
Profile Picture:
https://www.instagram.com/supercozman_draws/

🎵 Ending music
Track: Debris & Jonth - Game Time [NCS Release]
Music provided by NoCopyrightSounds.
Watch:  https://www.youtube.com/watch?v=yDTvvOTie0w 
Free Download / Stream: http://ncs.io/GameTime

#FOSS #Linux #OpenSource #LinuxDestkop #Assembly

DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase I may receive a small commission or other compensation.


guid: yt:video:ieejhux6E7o
title: Linux Development And The Eternal Bus Factor
author: Brodie Robertson
url: https://www.youtube.com/watch?v=ieejhux6E7o
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA
enclosure_url: https://www.youtube.com/v/ieejhux6E7o?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
The bus factor is a problem that every open source has to deal with and the Linux kernel suffers from the exact same problem recently losing 2 maintainers who were the only maintainers on certain drivers and subsystems

==========Support The Channel==========
► Patreon: https://brodierobertson.xyz/patreon
► Paypal: https://brodierobertson.xyz/paypal
► Liberapay: https://brodierobertson.xyz/liberapay
► Amazon USA: https://brodierobertson.xyz/amazonusa

==========Resources==========
First Maintainer: https://lore.kernel.org/dri-devel/20250123-remove-myself-as-maintainer-v1-1-cc3ab7cd98ae@tronnes.org/
Second Maintainer: https://lore.kernel.org/linux-wireless/87wmefguqt.fsf@kernel.org/
Maintainer List: https://docs.kernel.org/process/maintainers.html

=========Video Platforms==========
🎥 Odysee: https://brodierobertson.xyz/odysee
🎥 Podcast: https://techovertea.xyz/youtube
🎮 Gaming: https://brodierobertson.xyz/gaming

==========Social Media==========
🎤 Discord: https://brodierobertson.xyz/discord
🐦 Twitter: https://brodierobertson.xyz/twitter
🌐 Mastodon: https://brodierobertson.xyz/mastodon
🖥️ GitHub: https://brodierobertson.xyz/github

==========Credits==========
🎨 Channel Art:
Profile Picture:
https://www.instagram.com/supercozman_draws/

#Linux #FOSS #OpenSource #LinuxKernel #LinuxDesktop

🎵 Ending music
Track: Debris & Jonth - Game Time [NCS Release]
Music provided by NoCopyrightSounds.
Watch:  https://www.youtube.com/watch?v=yDTvvOTie0w 
Free Download / Stream: http://ncs.io/GameTime

DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase I may receive a small commission or other compensation.


guid: yt:video:wPbMOj53F_g
title: Rust Is Taking Over The World Of NVIDIA GPUs
author: Brodie Robertson
url: https://www.youtube.com/watch?v=wPbMOj53F_g
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA
enclosure_url: https://www.youtube.com/v/wPbMOj53F_g?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Whilst there's a lot of drama around Rust in the Linux kernel, the people who really seem to like Rust are the graphics developers, not only people involved in projects like Asahi Linux but also developers involved in open source Nvidia efforts.

==========Support The Channel==========
► Patreon: https://brodierobertson.xyz/patreon
► Paypal: https://brodierobertson.xyz/paypal
► Liberapay: https://brodierobertson.xyz/liberapay
► Amazon USA: https://brodierobertson.xyz/amazonusa

==========Resources==========
NVK: https://docs.mesa3d.org/drivers/nvk.html
Nvidia Open Source: https://github.com/NVIDIA/open-gpu-kernel-modules
Nova RFC: https://lore.kernel.org/rust-for-linux/20240520172059.181256-1-dakr@redhat.com/
Nova Core: https://lore.kernel.org/dri-devel/20250131220432.17717-1-dakr@kernel.org/
Rust Cuda: https://github.com/Rust-GPU/Rust-CUDA
Blog Post: https://rust-gpu.github.io/blog/2025/01/27/rust-cuda-reboot/?s=09

=========Video Platforms==========
🎥 Odysee: https://brodierobertson.xyz/odysee
🎥 Podcast: https://techovertea.xyz/youtube
🎮 Gaming: https://brodierobertson.xyz/gaming

==========Social Media==========
🎤 Discord: https://brodierobertson.xyz/discord
🐦 Twitter: https://brodierobertson.xyz/twitter
🌐 Mastodon: https://brodierobertson.xyz/mastodon
🖥️ GitHub: https://brodierobertson.xyz/github

==========Credits==========
🎨 Channel Art:
Profile Picture:
https://www.instagram.com/supercozman_draws/

🎵 Ending music
Track: Debris & Jonth - Game Time [NCS Release]
Music provided by NoCopyrightSounds.
Watch:  https://www.youtube.com/watch?v=yDTvvOTie0w 
Free Download / Stream: http://ncs.io/GameTime

#Nvidia #Rust #Linux #OpenSource

DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase I may receive a small commission or other compensation.


guid: yt:video:hrgeM1ZD5yQ
title: Freedesktop Home Of Everything Has A Server Crisis
author: Brodie Robertson
url: https://www.youtube.com/watch?v=hrgeM1ZD5yQ
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA
enclosure_url: https://www.youtube.com/v/hrgeM1ZD5yQ?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Infrastructure is an issue that every large project is going to be and when your provider and sponsor shuts down you're going to be in for a bit of pain like has been recently seen with Equnix Metal shutting down and causing problems for Freedesktop and Alpine Linux

==========Support The Channel==========
► Patreon: https://brodierobertson.xyz/patreon
► Paypal: https://brodierobertson.xyz/paypal
► Liberapay: https://brodierobertson.xyz/liberapay
► Amazon USA: https://brodierobertson.xyz/amazonusa

==========Resources==========
The Register Article: https://www.theregister.com/2024/11/18/equinix_ends_metal_iaas/
Freedesktop 2020 Issue: https://lists.freedesktop.org/archives/wayland-devel/2020-February/041232.html
Freedesktop Issue: https://gitlab.freedesktop.org/freedesktop/freedesktop/-/issues/2011
Alpine Linux Post: https://alpinelinux.org/posts/Seeking-Support-After-Equinix-Metal-Sunsets.html

=========Video Platforms==========
🎥 Odysee: https://brodierobertson.xyz/odysee
🎥 Podcast: https://techovertea.xyz/youtube
🎮 Gaming: https://brodierobertson.xyz/gaming

==========Social Media==========
🎤 Discord: https://brodierobertson.xyz/discord
🐦 Twitter: https://brodierobertson.xyz/twitter
🌐 Mastodon: https://brodierobertson.xyz/mastodon
🖥️ GitHub: https://brodierobertson.xyz/github

==========Credits==========
🎨 Channel Art:
Profile Picture:
https://www.instagram.com/supercozman_draws/

#Linux #FOSS #OpenSource #LinuxKernel #LinuxDesktop

🎵 Ending music
Track: Debris & Jonth - Game Time [NCS Release]
Music provided by NoCopyrightSounds.
Watch:  https://www.youtube.com/watch?v=yDTvvOTie0w 
Free Download / Stream: http://ncs.io/GameTime

DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase I may receive a small commission or other compensation.


guid: yt:video:110DgytaKLQ
title: Stop Trusting AI Detection Tools
author: Brodie Robertson
url: https://www.youtube.com/watch?v=110DgytaKLQ
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA
enclosure_url: https://www.youtube.com/v/110DgytaKLQ?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
You may recall Mozilla's AI text summarizer I covered a few weeks back and now we're covering the other end of the spectrum, Mozilla's AI text detection tool called Deep Fake Detector.

==========Support The Channel==========
► Patreon: https://brodierobertson.xyz/patreon
► Paypal: https://brodierobertson.xyz/paypal
► Liberapay: https://brodierobertson.xyz/liberapay
► Amazon USA: https://brodierobertson.xyz/amazonusa

==========Resources==========
Mozilla Orbit: https://orbitbymozilla.com/
Deep Fake Detector: https://addons.mozilla.org/en-US/firefox/addon/deep-fake-detector/
Zippy: https://github.com/thinkst/zippy
UAR: https://github.com/LLNL/LUAR
Binoculars: https://github.com/ahans30/Binoculars
OmgUbuntu Article: https://www.omgubuntu.co.uk/2025/02/deepfake-is-an-ai-detector-firefox-addon

=========Video Platforms==========
🎥 Odysee: https://brodierobertson.xyz/odysee
🎥 Podcast: https://techovertea.xyz/youtube
🎮 Gaming: https://brodierobertson.xyz/gaming

==========Social Media==========
🎤 Discord: https://brodierobertson.xyz/discord
🐦 Twitter: https://brodierobertson.xyz/twitter
🌐 Mastodon: https://brodierobertson.xyz/mastodon
🖥️ GitHub: https://brodierobertson.xyz/github

==========Credits==========
🎨 Channel Art:
Profile Picture:
https://www.instagram.com/supercozman_draws/

🎵 Ending music
Track: Debris & Jonth - Game Time [NCS Release]
Music provided by NoCopyrightSounds.
Watch:  https://www.youtube.com/watch?v=yDTvvOTie0w 
Free Download / Stream: http://ncs.io/GameTime

#Linux #Mozilla #AI #Firefox

DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase I may receive a small commission or other compensation.


guid: yt:video:jdvCqb25myQ
title: Performance-Aware Programming Series Announcement
author: Molly Rocket
url: https://www.youtube.com/watch?v=jdvCqb25myQ
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCaTznQhurW5AaiYPbhEA-KA
enclosure_url: https://www.youtube.com/v/jdvCqb25myQ?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
https://www.computerenhance.com
Like other high-profile tech companies, we wanted to make sure we had a no-expense-spared corporate advertisement ready for the big game weekend. Here it is. Enjoy!


guid: yt:video:tD5NrevFtbU
title: "Clean" Code, Horrible Performance
author: Molly Rocket
url: https://www.youtube.com/watch?v=tD5NrevFtbU
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCaTznQhurW5AaiYPbhEA-KA
enclosure_url: https://www.youtube.com/v/tD5NrevFtbU?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Bonus material from the Performance-Aware Programming Series: https://www.computerenhance.com/p/clean-code-horrible-performance


guid: yt:video:x2EOOJg8FkA
title: Performance Excuses Debunked
author: Molly Rocket
url: https://www.youtube.com/watch?v=x2EOOJg8FkA
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCaTznQhurW5AaiYPbhEA-KA
enclosure_url: https://www.youtube.com/v/x2EOOJg8FkA?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
For the complete article, including links to the source material, see https://computerenhance.com/performance-excuses-debunked


guid: yt:video:pZ0MF1q_LUE
title: How does QueryPerformanceCounter measure time?
author: Molly Rocket
url: https://www.youtube.com/watch?v=pZ0MF1q_LUE
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCaTznQhurW5AaiYPbhEA-KA
enclosure_url: https://www.youtube.com/v/pZ0MF1q_LUE?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
[From https://www.computerenhance.com/p/how-does-queryperformancecounter]
The way QueryPerformanceCounter measures time has changed across revisions of the Windows operating system. What method does it use today?


guid: yt:video:DS7ygFv84yk
title: The Four Programming Questions from My 1994 Microsoft Internship Interview
author: Molly Rocket
url: https://www.youtube.com/watch?v=DS7ygFv84yk
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCaTznQhurW5AaiYPbhEA-KA
enclosure_url: https://www.youtube.com/v/DS7ygFv84yk?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
For exact details of all four problems, head to https://www.computerenhance.com/p/the-four-programming-questions-from


guid: yt:video:ielZBraKsw8
title: 1994 Intern Question #1: Rectangle Copy
author: Molly Rocket
url: https://www.youtube.com/watch?v=ielZBraKsw8
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCaTznQhurW5AaiYPbhEA-KA
enclosure_url: https://www.youtube.com/v/ielZBraKsw8?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
https://www.computerenhance.com/p/microsoft-intern-interview-question
This is the first question I was asked in my interview for a summer internship at Microsoft in 1994.


guid: yt:video:sabeq-FtfGw
title: 1994 Intern Question #2: String Copy
author: Molly Rocket
url: https://www.youtube.com/watch?v=sabeq-FtfGw
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCaTznQhurW5AaiYPbhEA-KA
enclosure_url: https://www.youtube.com/v/sabeq-FtfGw?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
https://www.computerenhance.com/p/microsoft-intern-interview-question-ab7
This is the second question I was asked in my interview for a summer internship at Microsoft in 1994.


guid: yt:video:OE_UNZW-4_U
title: 1994 Intern Question #3: Flood Fill Detection
author: Molly Rocket
url: https://www.youtube.com/watch?v=OE_UNZW-4_U
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCaTznQhurW5AaiYPbhEA-KA
enclosure_url: https://www.youtube.com/v/OE_UNZW-4_U?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
https://www.computerenhance.com/p/microsoft-intern-interview-question-a3f
This is the third question I was asked in my interview for a summer internship at Microsoft in 1994.


guid: yt:video:JtgQJT08J1g
title: Efficient DDA Circle Outlines
author: Molly Rocket
url: https://www.youtube.com/watch?v=JtgQJT08J1g
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCaTznQhurW5AaiYPbhEA-KA
enclosure_url: https://www.youtube.com/v/JtgQJT08J1g?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
https://www.computerenhance.com/p/efficient-dda-circle-outlines
When I went to rework the 4th question from my 1994 Microsoft internship interview, I found to my surprise that I ended up with a more straightforward and efficient version than the commonly published solution.


guid: yt:video:H8THRznXxpQ
title: Powerful Page Mapping Techniques
author: Molly Rocket
url: https://www.youtube.com/watch?v=H8THRznXxpQ
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCaTznQhurW5AaiYPbhEA-KA
enclosure_url: https://www.youtube.com/v/H8THRznXxpQ?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Once you know how CPU address translation works, you can use it to do some surprisingly powerful operations that would have seemed difficult or impossible otherwise. From the Performance-Aware Programming series: https://www.computerenhance.com/p/powerful-page-mapping-techniques


guid: yt:video:CEkBsyN1j_Q
title: Intuiting Latency and Throughput
author: Molly Rocket
url: https://www.youtube.com/watch?v=CEkBsyN1j_Q
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCaTznQhurW5AaiYPbhEA-KA
enclosure_url: https://www.youtube.com/v/CEkBsyN1j_Q?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
Although they may seem highly technical, you've already experienced both concepts - and why they matter - if you've ever done a load of laundry. From https://computerenhance.com


guid: yt:video:uZEBkOrfUzM
title: The Apple M-Series GoFetch Attack
author: Molly Rocket
url: https://www.youtube.com/watch?v=uZEBkOrfUzM
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCaTznQhurW5AaiYPbhEA-KA
enclosure_url: https://www.youtube.com/v/uZEBkOrfUzM?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
A technical walkthrough of how the Apple M-Series DMP works, and how the GoFetch proof-of-concept exploits use it to leak private data to unprivileged user-space applications.

From https://www.computerenhance.com/p/the-apple-m-series-gofetch-attack
GoFetch site (with full paper): https://gofetch.fail


guid: yt:video:uBtuMsAY7J8
title: Zen, CUDA, and Tensor Cores - Part 1
author: Molly Rocket
url: https://www.youtube.com/watch?v=uBtuMsAY7J8
feedurl: https://www.youtube.com/feeds/videos.xml?channel_id=UCaTznQhurW5AaiYPbhEA-KA
enclosure_url: https://www.youtube.com/v/uBtuMsAY7J8?version=3
enclosure_type: application/x-shockwave-flash
content_mime_type: text/plain
content:
See https://www.computerenhance.com/p/zen-cuda-and-tensor-cores-part-i for more information, links, addenda, and more videos in this series.


guid: https://www.computerenhance.com/p/halloween-spooktacular-day-11-define
title: Halloween Spooktacular Day 11: Define Your Own Event UserData
url: https://www.computerenhance.com/p/halloween-spooktacular-day-11-define
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png" width="1456" height="657" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:657,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7926653,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><div class="pencraft pc-reset icon-container restack-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path><path d="M8 16H3v5"></path></svg></div><div class="pencraft pc-reset icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></div></div></div></div></a></figure></div><p>If you tried using <code>TraceEvent</code> after yesterday&#8217;s hint, you may have noticed a problem: even once you force ETW to produce events at the correct times, your event processing thread has no way to know which events correspond to which start/stop points.</p><p>Specifically, ETW requires you to use an asynchronous collection thread. That thread will see a continuous stream of events. When the user uses your API to bracket several start/stop points for PMC collection throughout their code, you can call <code>TraceEvent</code> to produce events at the start and end &#8212; but without more information, the collection thread has no way of knowing which events correspond to which start/stop points.</p><p>Today&#8217;s hint is about how to solve this problem: use event <code>UserData</code> to store whatever context you need to properly track events.</p><p>Specifically, you can use <code>RegisterTraceGuids</code> to register your own event type GUID. If you call <code>TraceEvent</code> using your own registered GUID, you are free to supply whatever <code>UserData</code> you want, and this <code>UserData</code> will be pointed to by the <code>EVENT_RECORD</code> that later arrives at your collection thread. <code>TraceEvent</code> will automatically take as much data after the <code>EVENT_TRACE_HEADER</code> as is indicated by the header&#8217;s <code>Size</code> field, so you are free to define your own event data by combining an <code>EVENT_TRACE_HEADER</code> with any collection of additional fields you want:</p><pre><code>struct pmc_tracer_etw_marker_userdata
{
    u64 AnyValueYouWant;
    u64 AnyOtherValueYouWantEtc;
};

struct pmc_tracer_etw_marker
{
    EVENT_TRACE_HEADER Header;
    pmc_tracer_etw_marker_userdata UserData;
};

// ...

pmc_tracer_etw_marker TraceMarker = {};

TraceMarker.Header.Size = sizeof(TraceMarker);
TraceMarker.Header.Flags = WNODE_FLAG_TRACED_GUID;
TraceMarker.Header.Guid = /* YOUR REGISTERED GUID GOES HERE */;
    
TraceMarker.UserData.AnyValueYouWant = 1234;
TraceMarker.UserData.AnyOtherValueYouWantEtc = 4567;
    
TraceEvent(TraceHandle, &amp;TraceMarker.Header);
 </code></pre><p>Since the <code>UserData</code> can contain anything you want, it should be straightforward to capture whatever data you need to ensure your collection thread knows which events go with which start and stop points.</p><p>That concludes today&#8217;s hint. Until tomorrow, good luck making progress on the Spooktacular Challenge!</p><p><em>I will post additional hints here every day until Halloween</em>. <em>If you&#8217;d like the rest of the Spooktacular Challenge to be delivered automatically to your inbox, you can select a subscription option here:</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.computerenhance.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.computerenhance.com/subscribe?"><span>Subscribe now</span></a></p>

enclosure_url:
https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png


guid: https://www.computerenhance.com/p/halloween-spooktacular-day-12-find
title: Halloween Spooktacular Day 12: Find Another PMC Event Type
url: https://www.computerenhance.com/p/halloween-spooktacular-day-12-find
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png" width="1456" height="657" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:657,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7926653,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><div class="pencraft pc-reset icon-container restack-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path><path d="M8 16H3v5"></path></svg></div><div class="pencraft pc-reset icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></div></div></div></div></a></figure></div><p>If you&#8217;ve managed to get PMC collection via ETW working, <em>and</em> you&#8217;ve managed to get <code>TraceEvent</code>-based insertion of events at profiling start/stop points, you are tantalizingly close to completing the challenge. But if you&#8217;ve gotten that far, you&#8217;ve no doubt also noticed a glaring problem: <code>TraceEvent</code>-inserted events <em>don&#8217;t support PMC collection</em>.</p><p>It would be wonderful if they did, but of course, this is Event Tracing for Windows. <em>Nothing is ever wonderful in Event Tracing for Windows! </em>If you try to add your own registered event GUID to your <code>TraceSetInformation</code> setup, ETW will just laugh and ignore you. Only kernel events support PMC sampling &#8212; and only a subset of kernel events at that!</p><p>Which brings us to today&#8217;s hint: in order to make forward progress, you&#8217;ll have to figure out <em>some way</em> to reliably record a PMC-enabled kernel event to compliment the user events you record via <code>TraceEvent</code>. This will require you to find a kernel event type that satisfies two separate requirements: it must be able to have PMCs attached to it via <code>TraceSetInformation</code>, and you must be able to reliably force one to be recorded at each of your stop and start points.</p><p>That concludes today&#8217;s hint. Until tomorrow, good luck making progress on the Spooktacular Challenge!</p><p><em>I will post additional hints here every day until Halloween</em>. <em>If you&#8217;d like the rest of the Spooktacular Challenge to be delivered automatically to your inbox, you can select a subscription option here:</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.computerenhance.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.computerenhance.com/subscribe?"><span>Subscribe now</span></a></p>

enclosure_url:
https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png


guid: https://www.computerenhance.com/p/halloween-spooktacular-day-13-use
title: Halloween Spooktacular Day 13: Use SysCallExit to Mark Start Points
url: https://www.computerenhance.com/p/halloween-spooktacular-day-13-use
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png" width="1456" height="657" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:657,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7926653,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><div class="pencraft pc-reset icon-container restack-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path><path d="M8 16H3v5"></path></svg></div><div class="pencraft pc-reset icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></div></div></div></div></a></figure></div><p>Today&#8217;s hint reveals the kernel event to use for marking the <em>start</em> of a profiling block. As far as I was able to determine after extensive testing, <a href="https://learn.microsoft.com/en-us/windows/win32/etw/syscallexit">SysCallExit</a> events are the best-suited events you can use for this purpose.</p><p>Specifically, as luck would have it, calls to <code>TraceEvent</code> are themselves recorded as system calls by ETW. This means that, if you request <code>SysCallExit</code> events when you start your trace, every one of your custom <code>TraceEvent</code> events will be <em>immediately followed</em> by a <code>SysCallExit</code> event. Because <code>SysCallExit</code> events are kernel events, and they happened to be one of the kernel events that support PMC collection, you can use this to get PMC counter values at the point in a program where your <code>TraceEvent</code> returns.</p><p>In your collection thread, you can watch for your custom event, then read the PMC values attached to the <code>SysCallExit</code> event that immediately follows it. Combined, the two events give you both the <code>UserData</code> that specifies which collection point you&#8217;re processing, <em>and</em> the PMC data to know what the counter values are at that collection point.</p><p>Remember, to enable <code>SysCallExit</code> events <em>with</em> PMCs attached, you must do two things: ensure <code>EVENT_TRACE_FLAG_SYSTEMCALL</code> is in your <code>EVENT_TRACE_PROPERTIES_V2</code> <code>EnableFlags</code> field, and add the proper GUID and opcode to the event listing you pass to <code>TraceSetInformation</code>. You can find the GUID and opcode <a href="https://learn.microsoft.com/en-us/windows/win32/etw/perfinfo">on MSDN</a>.</p><p>That concludes today&#8217;s hint. Until tomorrow, good luck making progress on the Spooktacular Challenge!</p><p><em>I will post additional hints here every day until Halloween</em>. <em>If you&#8217;d like the rest of the Spooktacular Challenge to be delivered automatically to your inbox, you can select a subscription option here:</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.computerenhance.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.computerenhance.com/subscribe?"><span>Subscribe now</span></a></p>

enclosure_url:
https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png


guid: https://www.computerenhance.com/p/halloween-spooktacular-day-13-use-421
title: Halloween Spooktacular Day 14: Use SysCallEnter to Mark Stop Points
url: https://www.computerenhance.com/p/halloween-spooktacular-day-13-use-421
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png" width="1456" height="657" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:657,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7926653,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><div class="pencraft pc-reset icon-container restack-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path><path d="M8 16H3v5"></path></svg></div><div class="pencraft pc-reset icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></div></div></div></div></a></figure></div><p>Technically, to mark stop points, you could recycle <a href="https://www.computerenhance.com/p/halloween-spooktacular-day-13-use">yesterday&#8217;s hint</a> and use <code>SysCallExit</code> events. After all, they <em>will</em> appear after the custom event you would trigger at each stop point by calling <code>TraceEvent</code>.</p><p>However, it&#8217;s arguably a bit better not to. Since the corresponding <code>SysCallExit</code> event is recorded <em>after</em> <code>TraceEvent</code> completes, if you use it to record PMCs at the <em>stop</em> point, you&#8217;ll be including the entire call to <code>TraceEvent</code> in your profile region.</p><p>Today&#8217;s (relatively minor) hint is to reduce this inaccuracy by using <code>SysCallEnter</code> events for stop points instead. Since the <code>SysCallEnter</code> event will be recorded <em>before</em> <code>TraceEvent</code> executes, using its PMCs rather than those from the <code>SysCallExit</code> will avoid counting <code>TraceEvent</code>&#8217;s execution as part of the profiling region.</p><p>Mercifully, the only ETW API change you&#8217;ll need to make for this is one GUID/opcode addition to the array you pass to <code>TraceSetInformation</code>.</p><p>That concludes today&#8217;s hint. Until tomorrow, good luck making progress on the Spooktacular Challenge!</p><p><em>I will post additional hints here every day until Halloween</em>. <em>If you&#8217;d like the rest of the Spooktacular Challenge to be delivered automatically to your inbox, you can select a subscription option here:</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.computerenhance.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.computerenhance.com/subscribe?"><span>Subscribe now</span></a></p>


guid: https://www.computerenhance.com/p/halloween-spooktacular-day-15-use
title: Halloween Spooktacular Day 15: Use GetEventProcessorIndex to Help Track Profile Regions
url: https://www.computerenhance.com/p/halloween-spooktacular-day-15-use
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png" width="1456" height="657" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:657,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7926653,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842c46cf-39ee-4618-9830-a30c827ab165_3744x1689.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><div class="pencraft pc-reset icon-container restack-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path><path d="M8 16H3v5"></path></svg></div><div class="pencraft pc-reset icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></div></div></div></div></a></figure></div><p>Today is the last day of the Spooktacular Challenge! If you&#8217;ve made it this far, you are a truly intrepid programmer. Either that, or you&#8217;ve been permanently deranged by the horrors of ETW, and you&#8217;re mindlessly opening your email and randomly happened to pick this one.</p><p>In case it happens to be the former rather than the latter, I have one last hint for you.</p><p>If you want to make your API work <em>with multiple threads, </em>such that a user can profile regions in more than one of their threads at the same time, you may find yourself needing to track several profiling regions in your collection loop &#8212; especially if you want to handle <a href="https://learn.microsoft.com/en-us/windows/win32/etw/cswitch">CSwitch</a> events properly.</p><p>Today&#8217;s hint is to use <a href="https://learn.microsoft.com/en-us/windows/win32/api/evntcons/nf-evntcons-geteventprocessorindex">GetEventProcessorIndex</a> to determine which processor core generated each event. Because processor cores are enumerated from 0 to the number of cores in the system, this gives you nice flat array indexing scheme you can use to track which of your profile regions are actively accumulating PMCs at any given time, since there can only be as many regions active as there are cores in the machine.</p><p>That concludes today&#8217;s hint &#8212; and the entire set of hints, for that matter! Tomorrow is Halloween, which means today is your last day to complete the challenge! Good luck, and I&#8217;ll be back tomorrow to walk through my solution with you.</p>


guid: https://www.computerenhance.com/p/real-time-pmcs-on-windows-with-etw
title: Real-time PMCs on Windows with ETW
url: https://www.computerenhance.com/p/real-time-pmcs-on-windows-with-etw
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<p>The <a href="https://www.computerenhance.com/p/announcing-the-etw-halloween-spooktacular">Halloween Spooktacular Challenge</a> has officially concluded! Congratulations to anyone who made it through. For those curious about what a solution looks like, in this video I do a complete walkthrough of the code.</p><p>All-in-all, it <em>is</em> nice to finally have a way to gather PMCs for arbitrary regions in a running program on a vanilla install of Windows. Before I attempted it, I wasn&#8217;t sure it was possible. In fact, given the tricks I had to pull to make it work &#8212; like the SysCall event pairing tick &#8212; it&#8217;s not clear to me that Microsoft ever even <em>intended</em> this use case to be possible. So it&#8217;s nice to know it <em>is</em> possible, and actually works reasonably well.</p><p>That said, due to the convoluted nature of the API, and the contortions I had to do to make this kind of PMC collection work, there are still some notable drawbacks:</p>
      <p>
          <a href="https://www.computerenhance.com/p/real-time-pmcs-on-windows-with-etw">
              Read more
          </a>
      </p>
   

enclosure_url:
https://substack-video.s3.amazonaws.com/video_upload/post/151050747/482598a5-1a37-46f1-b456-7361d4116d82/transcoded-248777.png


guid: https://www.computerenhance.com/p/meowhash
title: Meow Hash
author: Casey Muratori
url: https://www.computerenhance.com/p/meowhash
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<p>This is a temporary landing page for Meow Hash. I have a number of updates I need to post, and haven&#8217;t had time.</p><p>At the moment, Meow Hash is the fastest bulk hash that passes quality testing, as you can see from the <a href="https://gitlab.com/fwojcik/smhasher3/-/tree/main/results?ref_type=heads">smhasher3 suite results</a>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0939a1d-ad61-4c6e-ae54-827ad85d1ef2_875x782.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0939a1d-ad61-4c6e-ae54-827ad85d1ef2_875x782.png 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0939a1d-ad61-4c6e-ae54-827ad85d1ef2_875x782.png 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0939a1d-ad61-4c6e-ae54-827ad85d1ef2_875x782.png 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0939a1d-ad61-4c6e-ae54-827ad85d1ef2_875x782.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0939a1d-ad61-4c6e-ae54-827ad85d1ef2_875x782.png" width="875" height="782" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f0939a1d-ad61-4c6e-ae54-827ad85d1ef2_875x782.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:782,&quot;width&quot;:875,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:84824,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0939a1d-ad61-4c6e-ae54-827ad85d1ef2_875x782.png 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0939a1d-ad61-4c6e-ae54-827ad85d1ef2_875x782.png 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0939a1d-ad61-4c6e-ae54-827ad85d1ef2_875x782.png 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0939a1d-ad61-4c6e-ae54-827ad85d1ef2_875x782.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><div class="pencraft pc-reset icon-container restack-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path><path d="M8 16H3v5"></path></svg></div><div class="pencraft pc-reset icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></div></div></div></div></a></figure></div><p>There is still a lot of work that could be done on Meow Hash, but, it is one of those things that only gets updated when time permits.</p>

enclosure_url:
https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0939a1d-ad61-4c6e-ae54-827ad85d1ef2_875x782.png


guid: https://www.computerenhance.com/p/q-and-a-67-2024-11-18
title: Q&A #67 (2024-11-18)
url: https://www.computerenhance.com/p/q-and-a-67-2024-11-18
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<p><em>In each Q&amp;A video, I answer questions from the comments on the previous Q&amp;A video, which can be from any part of the course.</em></p><p>Questions addressed in this video: </p><ul><li><p><strong>[00:02]</strong> &#8220;You've talked a lot about the sorry state of modern software caused by a lot of unnecessary bloat at lower levels. If one was to pursue the goal of moving it in a better direction (either directly or by acquiring the necessary knowledge and skills to use later), which software areas would be best to go into? OS dev? Embedded? Gamedev? Server infrastructure? Developer tools (e.g. compilers, IDEs, frameworks, etc.)? Anything else?&#8221;</p></li><li><p><strong>[02:52]</strong> &#8220;Since Multithreading is such a vast topic and won't be covered here, do you have any good books or other resources you can recommend? How did you learn to do effective Multithreading?&#8221;</p></li><li><p><strong>[05:28]</strong> &#8220;Out of curiosity, because you mentioned that you have a Linux machine, do you have any resources for learning low-level Linux? I can't seem to find anything good on Linux Multithreading that doesn't involve pthreads, or is that just the best way to go?&#8221;</p></li><li><p><strong>[07:39]</strong> &#8220;The results for the performance of reading a file with MapViewOfFile on my computer look different than the ones on yours. The speed is better than large pages and comparable to a reused buffer. All the page faults are still there (indeed further tests show that when using MapViewOfFile the page fault count goes up *every page*, not even every 16 pages as with VirtualAlloc), but somehow we seem to not be paying the associated price in terms of performance. Any idea to what might be causing this discrepancy ?&#8221;</p></li><li><p><strong>[11:06]</strong> &#8220;Say you have a function that is embarrassingly parallel (like matrix multiplication), and an ideal candidate for multithreading. However, other higher-level components/systems in the codebase are already multithreaded (i.e., one thread for physics, another for rendering, etc). How do you determine whether a multithreaded implementation of the function would be prudent? Would you be concerned about contention for threads? Should you be careful not to do this too many times for low level functions?&#8221;</p></li><li><p><strong>[13:45]</strong> &#8220;When I'm running the listing_0168 with the fread, the sum and the overlapped sum, I'm not seeing that big drop when the buffer size gets too large for the cache. First I ran my own implementation, but even when running your code, the result is the same. The regular OpenAllocateAndSum starts out with ~1.42 GB/s at 256 KB buffer size and slowly drops to ~1.28 GB/s at 256 MB buffer size. The overlapped one has a similar curve, but starts higher and drops a bit faster. I'm also on Windows with the Intel i7-10850H. Do you have a clue what's going on here?&#8221;</p></li><li><p><strong>[15:36]</strong> &#8220;I'm probably missing something on the memory mapped file tests, but, couldn't we have two buffers on the struct memory_mapped_file, and map to one buffer while we sum the previous one?&#8221;</p></li><li><p><strong>[17:59]</strong> &#8220;I'm currently at the very beginning of part 3 on the repetition tester part, I was able to reproduce the page fault issue, however, for the worst case bandwidth I'm getting very low results at seemingly random times (without doing any mallocs so no page faults are involved here), to give an idea, here are the results produced by listing 104 running on my pc after just a few minutes (and the Max keeps going down over time, which seems totally unexpected because I would expect after everything being cached for speed to go up), in perfmon I don't see any anomalies, this is run on a file with 1 million points (on a file with 1 thousand points the difference between min and max is even much worse), any ideas what I can check? thanks.&#8221;</p></li><li><p><strong>[20:10]</strong> &#8220;I wrote the simplest possible memory clear function and the compiler converted it into a memset. Going through the assembly code for memset I discovered the "movntdq" instruction. You stated in the non-temporal stores episode that it is quite rare that you need this instruction, but memset is a pretty common thing to use. Maybe I misunderstood something, but can you explain how is this instruction rare if something as common as memset generates it?&#8221;</p></li><li><p><strong>[24:16]</strong> &#8220;Next I went ahead and wrote my own SIMD version of clearing memory. I wrote two versions, one with a regular store and the second with non-temporal store. The non-temporal was thrice as fast. Maybe it was thrice as fast because of non-temporal store but I wanted to be certain by taking you opinion on these routines. Maybe I did the temporal version in a bad way so that is slower than it needs to be making the non-temporal version seem faster. Would you be able to do an analysis of this code?&#8221;</p></li><li><p><strong>[26:45]</strong> &#8220;I multithreaded the non-temporal store, but couldn't gain much performance improvement. The throughput in the non-multithreaded version was 24GB/s whereas the multithreaded one peaked at 30GB/s. I have spent two days trying to find a reason and my hunch is that the memory bandwidth is the bottleneck here. What sort of tests should be done to investigate this further?&#8221;</p></li><li><p><strong>[28:36]</strong> &#8220;Regarding the wonderful Halloween Spooktacular Challenge - As far as I understood, it would be possible to create a far simpler implementation with fewer limitations if we could use a custom kernel driver to retrieve the PMCs, correct? If we assume that we are fine with installing a kernel driver for collecting PMCs, are there some such kernel drivers available that you would recommend? If not, do you perchance have any tips on how one should approach writing a driver? (I know you're not a driver developer, but maybe you know a thing or two about it anyways)&#8221;</p></li><li><p><strong>[30:02]</strong> &#8220;What is the reason that Linux is struggling to make so many applications work on it? Why is basically everything made for Windows, even MacOS has better applications support than Linux. I'm talking about stuff like video games, apps like Photoshop for instance.</p><p>While it is possible to run those applications on Linux (although sometimes not), why is it such a struggle and there is always something that doesn't work? Is it because MacOS/Windows are kind of stable operating systems where programmers know what they have available and Linux comes in so many variations that it's hard to know what's included? Or maybe is it because Windows is just more popular among regular users and the market for Linux is not worth it? Also endemic to this is problem with support for any kind of specific hardware. You bought a WiFi adapter that plugs into USB and brings internet to your laptop and requires custom driver from the vendor? Forget it will be supported on Linux.&#8221;</p></li></ul>
      <p>
          <a href="https://www.computerenhance.com/p/q-and-a-67-2024-11-18">
              Read more
          </a>
      </p>
   

enclosure_url:
https://substack-video.s3.amazonaws.com/video_upload/post/151829943/d97dd690-f07f-4a4b-92b3-a79786cbd507/transcoded-79066.png


guid: https://www.computerenhance.com/p/reference-haversine-code
title: Reference Haversine Code
url: https://www.computerenhance.com/p/reference-haversine-code
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa24ee886-209c-4c8f-a63f-7c5d88b1c0aa_5634x2864.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa24ee886-209c-4c8f-a63f-7c5d88b1c0aa_5634x2864.jpeg 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa24ee886-209c-4c8f-a63f-7c5d88b1c0aa_5634x2864.jpeg 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa24ee886-209c-4c8f-a63f-7c5d88b1c0aa_5634x2864.jpeg 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa24ee886-209c-4c8f-a63f-7c5d88b1c0aa_5634x2864.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa24ee886-209c-4c8f-a63f-7c5d88b1c0aa_5634x2864.jpeg" width="1456" height="740" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a24ee886-209c-4c8f-a63f-7c5d88b1c0aa_5634x2864.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:740,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2362184,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa24ee886-209c-4c8f-a63f-7c5d88b1c0aa_5634x2864.jpeg 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa24ee886-209c-4c8f-a63f-7c5d88b1c0aa_5634x2864.jpeg 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa24ee886-209c-4c8f-a63f-7c5d88b1c0aa_5634x2864.jpeg 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa24ee886-209c-4c8f-a63f-7c5d88b1c0aa_5634x2864.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><div class="pencraft pc-reset icon-container restack-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path><path d="M8 16H3v5"></path></svg></div><div class="pencraft pc-reset icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></div></div></div></div></a></figure></div><p><em>This is the first video in Part 4 of the Performance-Aware Programming series. Please see the <a href="https://www.computerenhance.com/p/table-of-contents">Table of Contents</a> to quickly navigate through the rest of the course as it is updated weekly. The listings referenced in the video (listings 172 and 173) are available <a href="https://github.com/cmuratori/computer_enhance/tree/main/perfaware/part4">on the github</a>.</em></p>
      <p>
          <a href="https://www.computerenhance.com/p/reference-haversine-code">
              Read more
          </a>
      </p>
   

enclosure_url:
https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa24ee886-209c-4c8f-a63f-7c5d88b1c0aa_5634x2864.jpeg


guid: https://www.computerenhance.com/p/identifying-non-inlined-math-functions
title: Identifying Non-inlined Math Functions
url: https://www.computerenhance.com/p/identifying-non-inlined-math-functions
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dcc233-4678-4ca8-ace5-167d5fb8e915_1920x877.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dcc233-4678-4ca8-ace5-167d5fb8e915_1920x877.jpeg 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dcc233-4678-4ca8-ace5-167d5fb8e915_1920x877.jpeg 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dcc233-4678-4ca8-ace5-167d5fb8e915_1920x877.jpeg 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dcc233-4678-4ca8-ace5-167d5fb8e915_1920x877.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dcc233-4678-4ca8-ace5-167d5fb8e915_1920x877.jpeg" width="1456" height="665" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46dcc233-4678-4ca8-ace5-167d5fb8e915_1920x877.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:665,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:337902,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dcc233-4678-4ca8-ace5-167d5fb8e915_1920x877.jpeg 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dcc233-4678-4ca8-ace5-167d5fb8e915_1920x877.jpeg 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dcc233-4678-4ca8-ace5-167d5fb8e915_1920x877.jpeg 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dcc233-4678-4ca8-ace5-167d5fb8e915_1920x877.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><div class="pencraft pc-reset icon-container restack-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path><path d="M8 16H3v5"></path></svg></div><div class="pencraft pc-reset icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></div></div></div></div></a></figure></div><p><em>This is the second video in Part 4 of the Performance-Aware Programming series. Please see the <a href="https://www.computerenhance.com/p/table-of-contents">Table of Contents</a> to quickly navigate through the rest of the course as it is updated.</em></p>
      <p>
          <a href="https://www.computerenhance.com/p/identifying-non-inlined-math-functions">
              Read more
          </a>
      </p>
   

enclosure_url:
https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dcc233-4678-4ca8-ace5-167d5fb8e915_1920x877.jpeg


guid: https://www.computerenhance.com/p/determining-input-ranges
title: Determining Input Ranges
url: https://www.computerenhance.com/p/determining-input-ranges
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e73629-634c-4243-83ae-0d9bbf0e36b7_3428x1071.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e73629-634c-4243-83ae-0d9bbf0e36b7_3428x1071.jpeg 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e73629-634c-4243-83ae-0d9bbf0e36b7_3428x1071.jpeg 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e73629-634c-4243-83ae-0d9bbf0e36b7_3428x1071.jpeg 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e73629-634c-4243-83ae-0d9bbf0e36b7_3428x1071.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e73629-634c-4243-83ae-0d9bbf0e36b7_3428x1071.jpeg" width="1456" height="455" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/06e73629-634c-4243-83ae-0d9bbf0e36b7_3428x1071.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:455,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:184282,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e73629-634c-4243-83ae-0d9bbf0e36b7_3428x1071.jpeg 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e73629-634c-4243-83ae-0d9bbf0e36b7_3428x1071.jpeg 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e73629-634c-4243-83ae-0d9bbf0e36b7_3428x1071.jpeg 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e73629-634c-4243-83ae-0d9bbf0e36b7_3428x1071.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><div class="pencraft pc-reset icon-container restack-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path><path d="M8 16H3v5"></path></svg></div><div class="pencraft pc-reset icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></div></div></div></div></a></figure></div><p><em>This is the third video in Part 4 of the Performance-Aware Programming series. Please see the <a href="https://www.computerenhance.com/p/table-of-contents">Table of Contents</a> to quickly navigate through the rest of the course as it is updated. The listing referenced in the video (listing 174) are available <a href="https://github.com/cmuratori/computer_enhance/tree/main/perfaware/part4">on the github</a>.</em></p>
      <p>
          <a href="https://www.computerenhance.com/p/determining-input-ranges">
              Read more
          </a>
      </p>
   

enclosure_url:
https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e73629-634c-4243-83ae-0d9bbf0e36b7_3428x1071.jpeg


guid: https://www.computerenhance.com/p/q-and-a-68-2025-01-06
title: Q&A #68 (2025-01-06)
url: https://www.computerenhance.com/p/q-and-a-68-2025-01-06
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<p><em>In each Q&amp;A video, I answer questions from the comments on the previous Q&amp;A video, which can be from any part of the course.</em></p><p>Questions addressed in this video: </p><ul><li><p><strong>[00:04]</strong> &#8220;Many people on the internet suggest that &#8216;returning early&#8217; from a function reduces complexity and makes code more readable. Your seem to prefer the complete opposite in your code, i.e. large and nested if statements. Why is that?&#8221;</p></li><li><p><strong>[06:38]</strong> &#8220;You mention that JSON is terrible for performance. However, would you still recommend it for non-performance-critical use cases, such as configuration or settings files, where readability and simplicity take precedence?&#8221;</p></li><li><p><strong>[11:49]</strong> &#8220;I am curious about std::execution from the C++ standard library, e.g. std::execution::par for parallel processing. Is it multi-threading? Is it vectorization (SIMD)? It's definitely faster. Is there a way to get the same behavior without standard library? Thanks.&#8221;</p></li><li><p><strong>[14:30]</strong> &#8220;Hi! I have a question about how CPUTimerFreq is used in NewTestWave when using the repetition tester. TLDR: Shouldn't the CPUTimerFreq value in NewTestWave be updated each time using EstimateCPUTimerFreq() for accurate comparisons, instead of always using the same initial CPUTimerFreq value?&#8221;</p></li><li><p><strong>[20:12]</strong> &#8220;When computing sines, cosines and similar, using tables looks promising in order to reduce the amount of online computation needed.</p><p>Also, the library math functions are geared towards computing one value at a time, or sometimes two as with sincos. When doing the computation in batch with independent computations as is the case with the haversine problem, it looks like it should be possible to use the simd instructions better than how they are used in the normal math library.</p><p>Are there any good libraries for batch computations that has table size as a parameter so one may easily experiment?&#8221;</p></li><li><p><strong>[22:30]</strong> &#8220;I am a bit behind i was working through listing 150_read_widths and noticed a couple of things that made my code a lot worse performing than yours and i put it down to 2 things which i only half understand. Firstly you switched at some point from the previous listings to using rax as the comparator and using jb instead of the sub rcx of the counter and jnle (for example in listing 146)</p><p>Using the latter seems to halve, or worse the throughput measured , i was able to reproduce this on your code by changing it as above. If you explained why you made this change I missed it i tried to go back and forth on the videos but could not find it.</p><p>Secondly, changing VirtualAlloc in your code to malloc also simialrly affects performance but my instinct was that since we are only doing 1 allocation ever of 1gb why would it matter whether we use malloc or virtual alloc. Is this somehow because of the alignment of the memory returned by virtalalloc versus malloc.&#8221;</p></li><li><p><strong>[26:02]</strong> &#8220;What do you think about NISC (no instruction set, in contrary to RISC or CISC)? From my understanding, it may move a lot of responsibility from processor to compilers, allowing for more performance and cheaper chips, as there will be no decoding and compilers already know all dependency chains, while having a lot of computational power to do optimizations.&#8221;</p></li><li><p><strong>[33:40]</strong> &#8220;Does the branch predictor predict well if the branch changes but then remains stable. Ie the first 10000 calls a function pointer points to A ( or jnz is taken) , after which for the next 10000 it points to B (or jnz is not taken)?</p><p>We already tested that the branch predictor will successfully predict the first steady state , but im not sure if it will always adapt to a change later. In my mind im imagining a massive table of all jumps that have some statistic on whether a branch should be taken but i guess it couldnt be that?&#8221;</p></li><li><p><strong>[37:08]</strong> &#8220;What do you mean by paraphrase the writings on the wall for windows" and that we are all going to be linux programmers eventually. I dont mind :) , but i have not heard that perspective from you before and am not sure if this came up somewhere else ,is windows dead/dying?&#8221;</p></li><li><p><strong>[48:18]</strong> &#8220;Been reading some materials on how to correctly do dynamic dispatch between different instructions set (like one hand written function using SSE intrinsics and another one using AVX2 for example), and a lot of people seem to go for some SIMD libraries like Google Highway. You said once, in the molly rocket discord, that you were using CPUID for it, and having different builds. Can you explain a little more in detail how you do it?&#8221;</p></li></ul>
      <p>
          <a href="https://www.computerenhance.com/p/q-and-a-68-2025-01-06">
              Read more
          </a>
      </p>
   

enclosure_url:
https://substack-video.s3.amazonaws.com/video_upload/post/154287600/10f2a6f4-9574-4dcd-93b5-d3d52e7e312e/transcoded-198810.png


guid: https://www.computerenhance.com/p/q-and-a-69-2025-01-13
title: Q&A #69 (2025-01-13)
url: https://www.computerenhance.com/p/q-and-a-69-2025-01-13
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<p><em>In each Q&amp;A video, I answer questions from the comments on the previous Q&amp;A video, which can be from any part of the course.</em></p><p>Questions addressed in this video: </p><ul><li><p><strong>[00:03]</strong> &#8220;I still have this dilemma about when to if branch and when to not. My personal preference is to always have some map or enums with unions and dispatch functions with one of those combinations where the enum gets mapped to a function (either through a hashmal that holds enum keys and func value pairs or unions that straight up give you an enum with a callable ), and there&#8217;s no need for if branching. Do you have a general rule where this would just be too much? I prefer very deterministic behaviour, so I am always inclined to make as many enum to callable pairs than to have if statements.&#8221;</p></li><li><p><strong>[14:43]</strong> &#8220;Follow up to my earlier question which you asked for a gist to show what i meant. Here is your code with a new modified Read_32x2Slow (which is sort of like what i wrote myself based on the listing146 before i saw your example in listing150). I have pasted a results file there too showing the timings i get on my system.</p><p>The version with the following runs at 469gb/s</p><p>add rax, 64</p><p>cmp rax, rcx</p><p>jb .loop</p><p>While the following runs at 317gb/s</p><p>sub rcx, 64</p><p>jnle .loop&#8221;</p></li><li><p><strong>[22:10]</strong> <em>The moment when Casey realizes what is actually going on.</em></p></li><li><p><strong>[34:08]</strong> &#8220;Let's say you want to implement something new, that you haven't done before, for example a Particle System for your in-house engine. Would you try implementing it yourself first, or would you rather go study prior art before attempting your own implementation?&#8221;</p></li><li><p><strong>[39:29]</strong> &#8220;Hey Casey what is your stance on programming languages having metaprogramming built in (like jai) vs generating C files yourself in a two step compilation (like rjfleury does). What would be the pros and cons of the two apporaches?&#8221;</p></li><li><p><strong>[42:42]</strong> &#8220;In your recent discussion with ThePrimeagen you said you want a modern language that is simd based. What would you say a minimum set of features or capacities a modern simd langage/compiler should have to meet your needs?&#8221;</p></li></ul>
      <p>
          <a href="https://www.computerenhance.com/p/q-and-a-69-2025-01-13">
              Read more
          </a>
      </p>
   

enclosure_url:
https://substack-video.s3.amazonaws.com/video_upload/post/154790265/f2a0a7f5-d3af-4e12-a4e4-b8cd2a653772/transcoded-148523.png


guid: https://www.computerenhance.com/p/introduction-to-sse-intrinsics
title: Introduction to SSE Intrinsics
url: https://www.computerenhance.com/p/introduction-to-sse-intrinsics
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f835238-a9c1-4278-8f44-2553f445289a_1920x787.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f835238-a9c1-4278-8f44-2553f445289a_1920x787.jpeg 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f835238-a9c1-4278-8f44-2553f445289a_1920x787.jpeg 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f835238-a9c1-4278-8f44-2553f445289a_1920x787.jpeg 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f835238-a9c1-4278-8f44-2553f445289a_1920x787.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f835238-a9c1-4278-8f44-2553f445289a_1920x787.jpeg" width="1456" height="597" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f835238-a9c1-4278-8f44-2553f445289a_1920x787.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:597,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:442610,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f835238-a9c1-4278-8f44-2553f445289a_1920x787.jpeg 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f835238-a9c1-4278-8f44-2553f445289a_1920x787.jpeg 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f835238-a9c1-4278-8f44-2553f445289a_1920x787.jpeg 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f835238-a9c1-4278-8f44-2553f445289a_1920x787.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><div class="pencraft pc-reset icon-container restack-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path><path d="M8 16H3v5"></path></svg></div><div class="pencraft pc-reset icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></div></div></div></div></a></figure></div><p><em>This is the fourth video in Part 4 of the Performance-Aware Programming series. Please see the <a href="https://www.computerenhance.com/p/table-of-contents">Table of Contents</a> to quickly navigate through the rest of the course as it is updated. The listing referenced in the video (listings 175 and 176) are available <a href="https://github.com/cmuratori/computer_enhance/tree/main/perfaware/part4">on the github</a>.</em></p>
      <p>
          <a href="https://www.computerenhance.com/p/introduction-to-sse-intrinsics">
              Read more
          </a>
      </p>
   

enclosure_url:
https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f835238-a9c1-4278-8f44-2553f445289a_1920x787.jpeg


guid: https://www.computerenhance.com/p/q-and-a-70-2025-01-20
title: Q&A #70 (2025-01-20)
url: https://www.computerenhance.com/p/q-and-a-70-2025-01-20
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<p><em>In each Q&amp;A video, I answer questions from the comments on the previous Q&amp;A video, which can be from any part of the course.</em></p><p>Questions addressed in this video: </p><ul><li><p><strong>[00:02]</strong> &#8220;Question about latency / throughput. Let's look at `SQRTPD XMM, XMM` on Skylake: it has latency 19, and throughput 4.5 (taken from uops.info). This means that we can dispatch the instruction every 4.5 cycles. But Skylake has only one port for `SQRTPD`, so the execution unit should stay busy for 19 cycles. Does this mean that the execution itself is also pipelined?&#8221;</p></li><li><p><strong>[12:32]</strong> &#8220;was catching up to the course and have a question regarding hardware/software prefetchers: how "smart" are they when it comes to evicting cache lines?</p><p>Say we have an instruction stream with the `prefetcht0` instruction, but the instruction that accesses that memory has more dependencies, is it possible that future prefetches executed out of order would evict the earlier prefetched cache line (due to an aliasing issue, for example)? And similarly, how far ahead in a data stream the hardware prefetcher operates?&#8221;</p></li><li><p><strong>[22:02]</strong> &#8220;For listing 0127 (testing with Large Pages), did you happen to have to enable the "Lock Pages in Memory" policy to enable the privilege for large pages or was that policy already enabled for your machine. Wasn't sure we knew if that policy is enabled by default or not.&#8221;</p></li><li><p><strong>[23:48]</strong> &#8220;I often find myself debating the appropriate size of my variables in order to "optimize space/performance", should I use u16, u32, u64 etc. However it seems to me like this is a waste of mental energy for one off variables such as for loop counters that would easily fit in the cache, therefore it seems reasonable to default to u64? I'm guessing variable size would be more relevant in large collections so that they would fit in the cache? That said, I&#8217;ve noticed you use b32 for booleans instead of b64. How do you decide on the size of your variables?&#8221;</p></li><li><p><strong>[28:54]</strong> &#8220;After watching quite some Handmade Hero episodes, I can observe that oftentimes you are able to explain and implement a feature, like a projection matrix or a sorting algorithm, from the ground up.</p><p>When I implement something once or twice, I tend to forget how it works and I have to go read about it again and again. Surely, if I made something many many times, I will know it by heart.</p><p>Given that you know *a lot* of things on a very high level, do you have any specific approach you use to get to that state, something like The Feynman Technique, or maybe you just have done those things so many times, that you have naturally absorbed them?&#8221;</p></li></ul>
      <p>
          <a href="https://www.computerenhance.com/p/q-and-a-70-2025-01-20">
              Read more
          </a>
      </p>
   

enclosure_url:
https://substack-video.s3.amazonaws.com/video_upload/post/155296442/a3e68879-b267-4e16-8ada-158789982b9b/transcoded-49709.png


guid: https://www.computerenhance.com/p/function-approximation
title: Function Approximation
url: https://www.computerenhance.com/p/function-approximation
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26edc124-3b52-4d2b-83dc-0b90bf42661a_1920x626.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26edc124-3b52-4d2b-83dc-0b90bf42661a_1920x626.jpeg 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26edc124-3b52-4d2b-83dc-0b90bf42661a_1920x626.jpeg 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26edc124-3b52-4d2b-83dc-0b90bf42661a_1920x626.jpeg 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26edc124-3b52-4d2b-83dc-0b90bf42661a_1920x626.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26edc124-3b52-4d2b-83dc-0b90bf42661a_1920x626.jpeg" width="1456" height="475" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/26edc124-3b52-4d2b-83dc-0b90bf42661a_1920x626.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:475,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:952928,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26edc124-3b52-4d2b-83dc-0b90bf42661a_1920x626.jpeg 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26edc124-3b52-4d2b-83dc-0b90bf42661a_1920x626.jpeg 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26edc124-3b52-4d2b-83dc-0b90bf42661a_1920x626.jpeg 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26edc124-3b52-4d2b-83dc-0b90bf42661a_1920x626.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><div class="pencraft pc-reset icon-container restack-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path><path d="M8 16H3v5"></path></svg></div><div class="pencraft pc-reset icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></div></div></div></div></a></figure></div><p><em>This is the fifth video in Part 4 of the Performance-Aware Programming series. Please see the <a href="https://www.computerenhance.com/p/table-of-contents">Table of Contents</a> to quickly navigate through the rest of the course as it is updated. The listing referenced in the video (listing 177) are available <a href="https://github.com/cmuratori/computer_enhance/tree/main/perfaware/part4">on the github</a>.</em></p>
      <p>
          <a href="https://www.computerenhance.com/p/function-approximation">
              Read more
          </a>
      </p>
   

enclosure_url:
https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26edc124-3b52-4d2b-83dc-0b90bf42661a_1920x626.jpeg


guid: https://www.computerenhance.com/p/range-reduction
title: Range Reduction
url: https://www.computerenhance.com/p/range-reduction
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F763935e5-9da8-45d9-a7eb-c83901ab6edb_1920x908.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F763935e5-9da8-45d9-a7eb-c83901ab6edb_1920x908.jpeg 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F763935e5-9da8-45d9-a7eb-c83901ab6edb_1920x908.jpeg 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F763935e5-9da8-45d9-a7eb-c83901ab6edb_1920x908.jpeg 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F763935e5-9da8-45d9-a7eb-c83901ab6edb_1920x908.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F763935e5-9da8-45d9-a7eb-c83901ab6edb_1920x908.jpeg" width="1456" height="689" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/763935e5-9da8-45d9-a7eb-c83901ab6edb_1920x908.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:689,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:381989,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F763935e5-9da8-45d9-a7eb-c83901ab6edb_1920x908.jpeg 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F763935e5-9da8-45d9-a7eb-c83901ab6edb_1920x908.jpeg 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F763935e5-9da8-45d9-a7eb-c83901ab6edb_1920x908.jpeg 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F763935e5-9da8-45d9-a7eb-c83901ab6edb_1920x908.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><div class="pencraft pc-reset icon-container restack-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path><path d="M8 16H3v5"></path></svg></div><div class="pencraft pc-reset icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></div></div></div></div></a></figure></div><p><em>This is the sixth video in Part 4 of the Performance-Aware Programming series. Please see the <a href="https://www.computerenhance.com/p/table-of-contents">Table of Contents</a> to quickly navigate through the rest of the course as it is updated. The listing referenced in the video (listing 178) are available <a href="https://github.com/cmuratori/computer_enhance/tree/main/perfaware/part4">on the github</a>.</em></p>
      <p>
          <a href="https://www.computerenhance.com/p/range-reduction">
              Read more
          </a>
      </p>
   

enclosure_url:
https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F763935e5-9da8-45d9-a7eb-c83901ab6edb_1920x908.jpeg


guid: https://www.computerenhance.com/p/math-tester-retcon
title: Math Tester Retcon
url: https://www.computerenhance.com/p/math-tester-retcon
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<p><em>This is a supplemental video in Part 4 of the Performance-Aware Programming series. It covers changes to the math testing code that make it easier to use, and its output easier to read. Please see the <a href="https://www.computerenhance.com/p/table-of-contents">Table of Contents</a> to quickly navigate through the rest of the course as it is updated. The listings referenced in the video (listing 175 and 176) are available <a href="https://github.com/cmuratori/computer_enhance/tree/main/perfaware/part4">on the github</a>.</em></p>
      <p>
          <a href="https://www.computerenhance.com/p/math-tester-retcon">
              Read more
          </a>
      </p>
   

enclosure_url:
https://substack-video.s3.amazonaws.com/video_upload/post/155984763/9f22f508-19b6-4bbd-a08b-5dd7fda80684/transcoded-00001.png


guid: https://www.computerenhance.com/p/q-and-a-71-2025-02-03
title: Q&A #71 (2025-02-03)
url: https://www.computerenhance.com/p/q-and-a-71-2025-02-03
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<p><em>In each Q&amp;A video, I answer questions from the comments on the previous Q&amp;A video, which can be from any part of the course.</em></p><p>I felt compelled to annotate this post with the following amusing anecdote:</p><p>In this Q&amp;A, one of the questions was about &#8220;64k aliasing&#8221;. I happened to know about 64k aliasing because Michael Abrash and Mike Sartain ran into this problem when optimizing the Pixomatic software renderer. Since I was also working at RAD Game Tools at the time, I specifically remember them tracking it down. I want to say it even involved having Intel run their code on the internal Intel simulator, whose output we were allowed to see a screenshot of, but which is otherwise a closely-guarded secret<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>.</p><p>When answering the question in the Q&amp;A, I assumed that this would have been a documented issue with (old) Intel hardware, and that it&#8217;d be easy to post a link here for anyone who wanted to investigate further. However, 64k aliasing turned out to be more esoteric than I thought.</p>
      <p>
          <a href="https://www.computerenhance.com/p/q-and-a-71-2025-02-03">
              Read more
          </a>
      </p>
   

enclosure_url:
https://substack-video.s3.amazonaws.com/video_upload/post/156414046/06dcddc1-d49e-43cb-a13a-305dbaceb63f/transcoded-143137.png


guid: https://www.computerenhance.com/p/approximation-using-higher-power
title: Approximation Using Higher-Power Polynomials
url: https://www.computerenhance.com/p/approximation-using-higher-power
feedurl: https://www.computerenhance.com/feed
enclosure_type: image/jpeg
content_mime_type: text/html
content:
<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa806a868-1849-4676-8731-3850ba7e8b66_2912x1133.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa806a868-1849-4676-8731-3850ba7e8b66_2912x1133.jpeg 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa806a868-1849-4676-8731-3850ba7e8b66_2912x1133.jpeg 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa806a868-1849-4676-8731-3850ba7e8b66_2912x1133.jpeg 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa806a868-1849-4676-8731-3850ba7e8b66_2912x1133.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa806a868-1849-4676-8731-3850ba7e8b66_2912x1133.jpeg" width="1456" height="567" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a806a868-1849-4676-8731-3850ba7e8b66_2912x1133.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:567,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:385791,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa806a868-1849-4676-8731-3850ba7e8b66_2912x1133.jpeg 424w, https://substackcdn.com/image/fetch/w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa806a868-1849-4676-8731-3850ba7e8b66_2912x1133.jpeg 848w, https://substackcdn.com/image/fetch/w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa806a868-1849-4676-8731-3850ba7e8b66_2912x1133.jpeg 1272w, https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa806a868-1849-4676-8731-3850ba7e8b66_2912x1133.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><div class="pencraft pc-reset icon-container restack-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path><path d="M8 16H3v5"></path></svg></div><div class="pencraft pc-reset icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></div></div></div></div></a></figure></div><p><em>This is the seventh video in Part 4 of the Performance-Aware Programming series. Please see the <a href="https://www.computerenhance.com/p/table-of-contents">Table of Contents</a> to quickly navigate through the rest of the course as it is updated. The listing referenced in the video (listing 179) is available <a href="https://github.com/cmuratori/computer_enhance/tree/main/perfaware/part4">on the github</a>.</em></p>
      <p>
          <a href="https://www.computerenhance.com/p/approximation-using-higher-power">
              Read more
          </a>
      </p>
   

enclosure_url:
https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa806a868-1849-4676-8731-3850ba7e8b66_2912x1133.jpeg


guid: 66795338d4f17d00015b1879
title: A Eulogy for DevOps
author: Mathew Duggan
url: https://matduggan.com/a-eulogy-for-devops/
feedurl: https://matduggan.com/rss/
content_mime_type: text/html
content:
<p>We hardly knew ye. </p><p>DevOps, like many trendy technology terms, has gone from the peak of optimism to the depths of exhaustion. While many of the fundamental ideas behind the concept have become second-nature for organizations, proving it did in fact have a measurable outcome, the difference between the initial intent and where we ended up is vast. For most organizations this didn&apos;t result in a wave of safer, easier to use software but instead encouraged new patterns of work that centralized risk and introduced delays and irritations that didn&apos;t exist before. We can move faster than before, but that didn&apos;t magically fix all our problems. </p><p>The cause of its death was a critical misunderstanding over what was causing software to be hard to write. The belief was by removing barriers to deployment, more software would get deployed and things would be easier and better. Effectively that the issue was that developers and operations teams were being held back by ridiculous process and coordination. In reality these &quot;soft problems&quot; of communication and coordination are much more difficult to solve than the technical problems around pushing more code out into the world more often. </p><h3 id="what-is-devops">What is DevOps?</h3><p>DevOps, when it was introduced around 2007, was a pretty radical concept of removing the divisions between people who ran the hardware and people who wrote the software. Organizations still had giant silos between teams, with myself experiencing a lot of that workflow. </p><p>Since all computer nerds also love space, it was basically us cosplaying as NASA. Copying a lot of the procedures and ideas from NASA to try and increase the safety around pushing code out into the world. Different organizations would copy and paste different parts, but the basic premise was every release was as close to bug free as time allowed. You were typically shooting for zero exceptions.</p><p>When I worked for a legacy company around that time, the flow for releasing software looked as follows. </p><ul><li>Development team would cut a release of the server software with a release number in conjunction with the frontend team typically packaged together as a full entity. They would test this locally on their machines, then it would go to dev for QA to test, then finally out to customers once the QA checks were cleared. </li><li>Operations teams would receive a playbook of effectively what the software was changing and what to do if it broke. This would include how it was supposed to be installed, if it did anything to the database, it was a whole living document. The idea was the people managing the servers, networking equipment and SANs had no idea what the software did or how to fix it so they needed what were effectively step by step instructions. Sometimes you would even get this as a paper document. </li><li>Since these happened often inside of your datacenter, you didn&apos;t have unlimited elasticity for growth. So, if possible, you would slowly roll out the update and stop to monitor at intervals. But you couldn&apos;t do what people see now as a blue/green deployment because rarely did you have enough excess server capacity to run two versions at the same time for all users. Some orgs did do different datacenters at different times and cut between them (which was considered to be sort of the highest tier of safety). </li><li>You&apos;d pick a deployment day, typically middle of the week around 10 AM local time and then would monitor whatever metrics you had to see if the release was successful or not. These were often pretty basic metrics of success, including some real eyebrow raising stuff like &quot;is support getting more tickets&quot; and &quot;are we getting more hits to our uptime website&quot;. Effectively &quot;is the load balancer happy&quot; and &quot;are customers actively screaming at us&quot;. </li><li>You&apos;d finish the deployment and then the on-call team would monitor the progress as you went. </li></ul><h3 id="why-didnt-this-work">Why Didn&apos;t This Work</h3><p>Part of the issue was this design was very labor-intensive. You needed enough developers coordinating together to put together a release. Then you needed a staffed QA team to actually take that software and ensure, on top of automated testing which was jusssttttt starting to become a thing, that the software actually worked. Finally you needed a technical writer working with the development team to walk through what does a release playbook look like and then finally have the Operations team receive, review the book and then implement the plan. </p><p>It was also slow. Features would often be pushed for months even when they were done just because a more important feature had to go out first. Or this update was making major changes to the database and we didn&apos;t want to bundle in six things with the one possibly catastrophic change. It&apos;s effectively the Agile vs Waterfall design broken out to practical steps. </p><figure class="kg-card kg-image-card"><img src="https://kruschecompany.com/wp-content/uploads/2021/09/Waterfall-vs-Agile-in-software-development-infographic.jpg" class="kg-image" alt="Waterfall vs Agile in software development infographic" loading="lazy" width="1000" height="2000"></figure><p>A lot of the lip service around this time that was given as to why organizations were changing was, frankly, bullshit. The real reason companies were so desperate to change was the following:</p><ul><li>Having lots of mandatory technical employees they couldn&apos;t easily replace was a bummer</li><li>Recruitment was hard and expensive. </li><li>Sales couldn&apos;t easily inject whatever last-minute deal requirement they had into the release cycle since that was often set it stone. </li><li>It provided an amazing opportunity for SaaS vendors to inject themselves into the process by offloading complexity into their stack so they pushed it hard.</li><li>The change also emphasized the strengths of cloud platforms at the time when they were starting to gobble market share. You didn&apos;t need lots of discipline, just allocate more servers. </li><li>Money was (effectively) free so it was better to increase speed regardless of monthly bills. </li><li>Developers were understandably frustrated that minor changes could take weeks to get out the door while they were being blamed for customer complaints.</li></ul><p>So executives went to a few conferences and someone asked them if they were &quot;doing DevOps&quot; and so we all changed our entire lives so they didn&apos;t feel like they weren&apos;t part of the cool club. </p><h3 id="what-was-devops">What Was DevOps?</h3><p>Often this image is used to sum it up:</p><figure class="kg-card kg-image-card"><img src="https://wac-cdn.atlassian.com/dam/jcr:ef9fe684-c6dc-4ba0-a636-4ef7bcfa11f1/New%20DevOps%20Loop%20image.png?cdnVersion=1833" class="kg-image" alt="DevOps Infinity Wheel" loading="lazy" width="2240" height="1090"></figure><p>In a nutshell, the basic premise was that development teams and operations teams were now one team. QA was fired and replaced with this idea that because you could very quickly deploy new releases and get feedback on those releases, you didn&apos;t need a lengthy internal test period where every piece of functionality was retested and determined to still be relevant. </p><p>Often this is <em>conflated</em> with the concept of SRE from Google, which I will argue until I die is a giant mistake. SRE is in the same genre but a very different tune, with a much more disciplined and structured approach to this problem. DevOps instead is about the simplification of the stack such that any developer on your team can deploy to production as many times in a day as they wish with only the minimal amounts of control on that deployment to ensure it had a reasonably high chance of working. </p><p>In reality DevOps as a practice looks much more like how Facebook operated, with employees committing to production on their first day and relying extensively on real-world signals to determine success or failure vs QA and tightly controlled releases. </p><p>In practice it looks like this:</p><ul><li>Development makes a branch in git and adds a feature, fix, change, etc. </li><li>They open up a PR and then someone else on that team looks at it, sees it passes their internal tests, approves it and then it gets merged into main. This is effectively the only safety step, relying on the reviewer to have perfect knowledge of all systems. </li><li>This triggers a webhook to the CI/CD system which starts the build (often of an entire container with this code inside) and then once the container is built, it&apos;s pushed to a container registry. </li><li>The CD system tells the servers that the new release exists, often through a Kubernetes deployment or pushing a new version of an internal package or using the internal CLI of the cloud providers specific &quot;run a container as a service&quot; platform. It then monitors and tells you about the success or failure of that deployment. </li><li>Finally there are release-aware metrics which allow that same team, who is on-call for their application, to see if something has changed since they released it. Is latency up, error count up, etc. This is often just a line in a graph saying this was old and this is new. </li><li>Depending on the system, this can either be something where every time the container is deployed it is on brand-new VMs or it is using some system like Kubernetes to deploy &quot;the right number&quot; of containers. </li></ul><p>The sales pitch was simple. Everyone can do everything so teams no longer need as many specialized people. Frameworks like Rails made database operations less dangerous, so we don&apos;t need a team of DBAs. Hell, use something like Mongo and you never need a DBA! </p><p>DevOps combined with Agile ended up with a very different philosophy of programming which had the following conceits:</p><ul><li>The User is the Tester</li><li>Every System Is Your Specialization </li><li>Speed Of Shipping Above All</li><li>Catch It In Metrics</li><li>Uptime Is Free, SSO Costs Money (free features were premium, expensive availability wasn&apos;t charged for)</li><li>Logs Are Business Intelligence</li></ul><h3 id="what-didnt-work">What Didn&apos;t Work</h3><p>The first cracks in this model emerged pretty early on. Developers were testing on their local Mac and Windows machines and then deploying code to Linux servers configured from Ansible playbooks and left running for months, sometimes years. Inevitably small differences in the running fleet of production servers emerged, either from package upgrades for security reasons or just from random configuration events. This could be mitigated by frequently rotating the running servers by destroying and rebuilding them as fresh VMs, but in practice this wasn&apos;t done as often as it should have been. </p><p>Soon you would see things like &quot;it&apos;s running fine on box 1,2, 4, 5, but 3 seems to be having problems&quot;. It wasn&apos;t clear in the DevOps model <em>who</em> exactly was supposed to go figure out what was happening or how. In the previous design someone who worked with Linux for years and with these specific servers would be monitoring the release, but now those team members often wouldn&apos;t even know a deployment was happening. Telling someone who is amazing at writing great Javascript to go &quot;find the problem with a Linux box&quot; turned out to be easier said than done. </p><p>Quickly feedback from developers started to pile up. They didn&apos;t want to have to spend all this time figuring out what Debian package they wanted for this or that dependency. It wasn&apos;t what they were interested in doing and also they weren&apos;t being rewarded for that work, since they were almost exclusively being measured for promotions by the software they shipped. This left the Operations folks in charge of &quot;smoothing out&quot; this process, which in practice often meant really wasteful practices. </p><p>You&apos;d see really strange workflows around this time of doubling the number of production servers you were paying for by the hour during a deployment and then slowly scaling them down, all relying on the same AMI (server image) to ensure some baseline level of consistency. However since any update to the AMI required a full dev-stage-prod check, things like security upgrades took <em>a very long time</em>. </p><p>Soon you had just a pile of issues that became difficult to assign. Who &quot;owned&quot; platform errors that didn&apos;t result in problems for users? When a build worked locally but failed inside of Jenkins, what team needed to check that? The idea of we&apos;re all working on the same team broke down when it came to assigning ownership of annoying issues because <em>someone</em> had to own them or they&apos;d just sit there forever untouched. </p><h3 id="enter-containers">Enter Containers</h3><p>DevOps got a real shot in the arm with the popularization of containers, which allowed the movement to progress past its awkward teenage years. Not only did this (mostly) solve the &quot;it worked on my machine&quot; thing but it also allowed for a massive simplification of the Linux server component part. Now servers were effectively dumb boxes running containers, either on their own with Docker compose or as part of a fleet with Kubernetes/ECS/App Engine/Nomad/whatever new thing that has been invented in the last two weeks. </p><p>Combined with you could move almost everything that might previous be a networking team problem or a SAN problem to configuration inside of the cloud provider through tools like Terraform and you saw a real flattening of the skill curve. This greatly reduced the expertise required to operate these platforms and allowed for more automation. Soon you started to see what we now recognize as the current standard for development which is &quot;I push out a bajillion changes a day to production&quot;. </p><h3 id="what-containers-didnt-fix">What Containers Didn&apos;t Fix</h3><p>So there&apos;s a lot of other shit in that DevOps model we haven&apos;t talked about. </p><figure class="kg-card kg-image-card"><img src="https://matduggan.com/content/images/2024/06/New-DevOps-Loop-image.png" class="kg-image" alt loading="lazy" width="2000" height="973" srcset="https://matduggan.com/content/images/size/w600/2024/06/New-DevOps-Loop-image.png 600w, https://matduggan.com/content/images/size/w1000/2024/06/New-DevOps-Loop-image.png 1000w, https://matduggan.com/content/images/size/w1600/2024/06/New-DevOps-Loop-image.png 1600w, https://matduggan.com/content/images/2024/06/New-DevOps-Loop-image.png 2240w" sizes="(min-width: 720px) 720px"></figure><p>So far teams had improved the &quot;build, test and deploy&quot; parts. However operating the crap was still very hard. Observability was <em>really really</em> hard and expensive. Discoverability was actually harder than ever because stuff was constantly changing beneath your feet and finally the Planning part immediately collapsed into the ocean because now teams could do whatever they wanted all the time. </p><p><strong>Operate</strong></p><p>This meant someone going through and doing all the boring stuff. Upgrading Kubernetes, upgrading the host operating system, making firewall rules, setting up service meshes, enforcing network policies, running the bastion host, configuring the SSH keys, etc. What organizations quickly discovered was that this stuff was very time consuming to do and often required <em>more</em> specialization than the roles they had previously gotten rid of. </p><p>Before you needed a DBA, a sysadmin, a network engineer and some general Operations folks. Now you needed someone who not only understood databases but understood <em>your specific cloud providers</em> version of that database. You still needed someone with the sysadmin skills, but in addition they needed to be experts in your cloud platform in order to ensure you weren&apos;t exposing your database to the internet. Networking was still critical but now it all existed at a level outside of your control, meaning weird issues would sometimes have to get explained as &quot;well that sometimes happens&quot;. </p><p>Often teams would delay maintenance tasks out of a fear of breaking something like k8s or their hosted database, but that resulted in delaying the pain and making their lives more difficult. This was the era where every startup I interviewed with basically just wanted someone to update all the stuff in their stack &quot;safely&quot;. Every system was well past EOL and nobody knew how to Jenga it all together. </p><p><strong>Observe</strong></p><p>As applications shipped more often, knowing they worked became more important so you could roll back if it blew up in your face. However replacing simple uptime checks with detailed traces, metrics and logs was hard. These technologies are specialized and require detailed understanding of what they do and how they work. A syslog centralized box lasts <em>to a point</em> and then it doesn&apos;t. Prometheus scales to x amount of metrics and then no longer works on a single box. You needed someone who had a detailed understanding of how metrics, logs and traces worked and how to work with development teams in getting them sending the correct signal to the right places at the right amount of fidelity. </p><p>Or you could pay a SaaS a <em>shocking amount</em> to do it for you. The rise of companies like Datadog and the eye-watering bills that followed was proof that they understood how important what they were providing was. You quickly saw Observability bills exceed CPU and networking costs for organizations as one team would misconfigure their application logs and suddenly you have blown through your monthly quota in a week. </p><p>Developers were being expected to monitor with detailed precision what was happening with their applications without a full understanding of what they were seeing. How many metrics and logs were being dropped on the floor or sampled away, how did the platform work in displaying these logs to them, how do you write an query for terabytes of logs so that you can surface what you need quickly, all of this was being passed around in Confluence pages being written by desperate developers who were learning as they were getting paged at 2AM how all this shit works together. </p><p><strong>Continuous Feedback</strong></p><p>This to me is the same problem as Observe. It&apos;s about whether your deployment worked or not and whether you had signal from internal tests if it was likely to work. It&apos;s also about feedback from the team on what in this process worked and what didn&apos;t, but because nobody ever did anything with that internal feedback we can just throw that one directly in the trash. </p><p>I guess in theory this would be retros where we all complain about the same six things every sprint and then continue with our lives. I&apos;m not an Agile Karate Master so you&apos;ll need to talk to the experts. </p><p><strong>Discover</strong></p><p>A big pitch of combining these teams was the idea of more knowledge sharing. Development teams and Operation teams would be able to cross-share more about what things did and how they worked. Again it&apos;s an interesting idea and there was some improvement to discoverability, but in practice that isn&apos;t how the incentives were aligned. </p><p>Developers weren&apos;t rewarded for discovering more about how the platform operated and Operations didn&apos;t have any incentive to sit down and figure out how the frontend was built. It&apos;s not a lack of intellectual curiosity by either party, just the finite amount of time we all have before we die and what we get rewarded for doing. Being surprised that this didn&apos;t work is like being surprised a mouse didn&apos;t go down the tunnel with no cheese just for the experience. </p><p>In practice I &quot;discovered&quot; that if NPM was down nothing worked and the frontend team &quot;discovered&quot; that troubleshooting Kubernetes was a bit like Warhammer 40k Adeptus Mechanicus waving incense in front of machines they didn&apos;t understand in the hopes that it would make the problem go away. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://warhammeruniverse.com/wp-content/uploads/2023/12/00007-2552221792-1024x569.png" class="kg-image" alt="The Adeptus Mechanicus - Warhammer Universe (2024)" loading="lazy" width="1024" height="569"><figcaption><span style="white-space: pre-wrap;">Try restarting the Holy Deployment</span></figcaption></figure><p><strong>Plan</strong></p><p>Maybe more than anything else, this lack of centralization impacted planning. Since teams weren&apos;t syncing on a regular basis anymore, things could continue in crazy directions unchecked. In theory PMs were syncing with each other to try and ensure there were railroad tracks in front of the train before it plowed into the ground at 100 MPH, but that was a lot to put on a small cadre of people. </p><p>We see this especially in large orgs with microservices where it is easier to write a new microservice to do something rather than figure out which existing microservice does the thing you are trying to do. This model was sustainable when money was free and cloud budgets were unlimited, but once that gravy train crashed into the mountain of &quot;businesses need to be profitable and pay taxes&quot; that stopped making sense. </p><h3 id="the-part-where-we-all-gave-up">The Part Where We All Gave Up</h3><p>A lot of orgs solved the problems above by simply throwing bodies into the mix. More developers meant it was possible for teams to have someone (anyone) learn more about the systems and how to fix them. Adding more levels of PMs and overall planning staff meant even with the frantic pace of change it was...more possible to keep an eye on what was happening. While cloud bills continued to go unbounded, for the most part these services worked and allowed people to do the things they wanted to do. </p><p>Then layoffs started and budget cuts. Suddenly it wasn&apos;t acceptable to spend unlimited money with your logging platform and your cloud provider as well as having a full team. Almost instantly I saw the shift as organizations started talking about &quot;going back to basics&quot;. Among this was a hard turn in the narrative around Kubernetes where it went from an amazing technology that lets you grow to Google-scale to a weight around an organizations neck nobody understood. </p><p><strong>Platform Engineering</strong></p><p>Since there are no new ideas, just new terms, a successor to the throne has emerged. No longer are development teams expected to understand and troubleshoot the platforms that run their software, instead the idea is that the entire process is completely abstracted away from them. They provide the container and that is the end of the relationship. </p><p>From a certain perspective this makes more sense since it places the ownership for the operation of the platform with the people who should have owned it from the beginning. It also removes some of the ambiguity over what is whose problem. The development teams are still on-call for their specific application errors, but platform teams are allowed to enforce more global rules. </p><p>Well at least in theory. In practice this is another expansion of roles. You went from needing to be a Linux sysadmin to being a cloud-certified Linux sysadmin to being a Kubernetes-certified multicloud Linux sysadmin to finally being an application developer who can create a useful webUI for deploying applications on top of a multicloud stack that runs on Kubernetes in multiple regions with perfect uptime and observability that doesn&apos;t blow the budget. I guess at some point between learning the difference between AWS and GCP we were all supposed to go out and learn how to make useful websites. </p><figure class="kg-card kg-image-card"><img src="https://cdn.prod.website-files.com/622b2fcc29fc56492b771cb8/637d1841fc5e9a6a942d5a02_1.png" class="kg-image" alt loading="lazy" width="1600" height="683"></figure><p>This division of labor makes no sense but at least it&apos;s something I guess. Feels like somehow Developers got stuck with a lot more work and Operation teams now need to learn 600 technologies a week. Surprisingly tech executives didn&apos;t get any additional work with this system. I&apos;m sure the next reorg they&apos;ll chip in more. </p><h3 id="conclusion">Conclusion</h3><p>We are now seeing a massive contraction of the Infrastructure space. Teams are increasingly looking for simple, less platform specific tooling. In my own personal circles it feels like a real return to basics, as small and medium organizations abandon technology like Kubernetes and adopt much more simple and easy-to-troubleshoot workflows like &quot;a bash script that pulls a new container&quot;. </p><p>In some respects it&apos;s a positive change, as organizations stop pretending they needed a &quot;global scale&quot; and can focus on actually servicing the users and developers they have. In reality a lot of this technology was adopted by organizations who weren&apos;t ready for it and didn&apos;t have a great plan for how to use it. </p><p>However Platform Engineering is not a magical solution to the problem. It is instead another fabrication of an industry desperate to show monthly growth in cloud providers who know teams lack the expertise to create the kinds of tooling described by such practices. In reality organizations need to be more brutally honest about what they <em>actually need</em> vs what bullshit they&apos;ve been led to believe they need. </p><p>My hope is that we keep the gains from the DevOps approach and focus on simplification and stability over rapid transformation in the Infrastructure space. I think we desperately need a return to basics ideology that encourages teams to stop designing with the expectation that endless growth is the only possible outcome of every product launch. </p>


guid: 6698c55ad4f17d00015b199b
title: Sears
author: Mathew Duggan
url: https://matduggan.com/sears/
feedurl: https://matduggan.com/rss/
enclosure_url: https://matduggan.com/content/images/2024/07/-1x-1.jpg
content_mime_type: text/html
content:
<img src="https://matduggan.com/content/images/2024/07/-1x-1.jpg" alt="Sears"><p>It was 4 AM when I first heard the tapping on the glass. I had been working for 30 minutes trying desperately to get everything from the back store room onto the sales floor when I heard a light knocking. Peeking out from the back I saw an old woman wearing sweat pants and a Tweetie bird jacket, oxygen tank in tow, tapping a cane against one of the big front windows. &quot;WE DON&apos;T OPEN UNTIL 5&quot; shouted my boss, who shook her head and resumed stacking boxes. &quot;Black Friday is the worst&quot; she said to nobody as we continued to pile the worthless garbage into neat piles on the store floor. </p><p>What people know now but didn&apos;t understand then was the items for sale on Black Friday weren&apos;t our normal inventory. These were TVs so poorly made they needed time to let their CRT tubes warm up before the image became recognizable. Radios with dials so brittle some came out of the box broken. Finally a mixer that when we tested it in the back let out such a stench of melted plastic we all screamed to turn it off before we burned down the building. I remember thinking as I unloaded it from the truck <em>certainly nobody is gonna want this crap</em>. </p><p>Well here they were and when we opened the doors they rushed in with a violence you wouldn&apos;t expect from a crowd of mostly senior citizens. One woman pushed me to get at the TVs, which was both unnecessary (I had already hidden one away for myself and put it behind the refrigerators in the back) and not helpful as she couldn&apos;t lift the thing on her own. I watched in silence as she tried to get her hands around the box with no holes cut out, presumably a cost savings on Sears part, grunting with effort as the box slowly slid while she held it. At the checkout desk a man told me he was buying the radio &quot;as a Christmas gift for his son&quot;. &quot;Alright but no returns ok?&quot; I said keeping a smile on my face. </p><p>We had digital cameras the size of shoe-boxes, fire-hazard blenders and an automatic cat watering dish that I just knew was going to break a lot of hearts when Fluffy didn&apos;t survive the family trip to Florida. You knew it was quality when the dye from the box rubbed off on your hands when you picked it up. Despite my jokes about worthless junk, people couldn&apos;t purchase it fast enough. I saw arguments break out in the aisles and saw Robert, our marine veteran sales guy, whisper &quot;forget this&quot; and leave for a smoke by the loading dock. When I went over to ask if I could help, the man who had possession of the digital camera spun around and told me to &quot;either find another one of these cameras or butt the fuck out&quot;. They resumed their argument and I resumed standing by the front telling newcomers that everything they wanted was already gone.</p><p>Hours later I was still doing that, informing everyone who walked in that the item they had circled in the newspaper was already sold out. &quot;See, this is such a scam, why don&apos;t you stock more of it? It&apos;s just a trick to get us into the store&quot;. Customer after customer told me variations on the above, including one very kind looking grandfather type informing me I could &quot;go fuck myself&quot; when I wished him a nice holiday. </p><h3 id="beginnings">Beginnings</h3><p>The store was in my small rural farming town in Ohio, nestled between the computer shop where I got my first job and a carpet store that was almost certainly a money laundering front since nobody ever went in or out. I was interviewed by the owner, a Vietnam veteran who spent probably half our interview talking about his two tours in Vietnam. &quot;We used to throw oil drums in the water and shoot at them from our helicopter, god that was fun. Don&apos;t even get me started about all the beautiful local woman.&quot; I nodded, unsure what this had to do with me but sensing this was all part of his process. In the years to come I would learn to avoid sitting down in his office, since then you would be trapped listening to stories like these for an hour plus. </p><p>After these tales of what honestly sounded like a super fun war full of drugs and joyrides on helicopters, he asked me why I wanted to work at Sears. &quot;It&apos;s an American institution and I&apos;ve always had a lot of respect for it&quot; I said, not sure if he would believe it. He nodded and went on to talk about how Sears build America. &quot;Those kit houses around town, all ordered from Sears. Boy we were something back in the day. Anyway fill out your availability and we&apos;ll get you out there helping customers.&quot; I had assumed at some point I would get training on the actual products, which never happened in the years I worked there. In the back were dust covered training manuals which I was told I should look at &quot;when I got some time&quot;. I obviously never did and still sometimes wonder about what mysteries they contained. </p><p>I was given my lanyard and put on the floor, which consisted of half appliances, one quarter electronics and then the rest being tools. Jane, one of the saleswomen told me to &quot;direct all the leads for appliances to her&quot; and not check one out myself, since I didn&apos;t get commission. Most of my job consisted of swapping broken Craftsmen tools since they had a lifetime warranty. You filled out a carbon paper form, dropped the broken tool into a giant metal barrel and then handed them a new one. I would also set up deliveries for rider lawnmowers and appliances, working on an ancient IBM POS terminal that required memorizing a series of strange keyboard shortcuts to navigate the calendar. </p><p>When there was downtime, I would go into the back and help Todd assemble the appliances and rider lawnmowers. Todd was a special needs student at my high school who was the entirety of our &quot;expert assembly&quot; service. He did a good job, carefully following the manual every time. Whatever sense of superiority as an honor role student I felt disappeared when he watched me try to assemble a rider mower myself. &quot;You need to read the instructions and then do what they say&quot; he would helpfully chime in as I struggled to figure out why the brakes did nothing. His mowers always started on the first try while mine were safety hazards that I felt certain was going to be on the news. &quot;Tonight a Craftsman rider lawnmower killed a family of 4. It was assembled by this idiot.&quot; Then just my yearbook photo where I had decided to bleach my hair blonde like a chonky backstreet boy overlaid on top of live footage of blood splattered house siding. </p><p>Any feeling I had that people paying us $200 to assemble their rider mowers disappeared when I saw the first one where a customer tried to assemble it. If my mowers were death traps these were actual IEDs whose only conceivable purpose on Earth would be to trick innocent people into thinking they were rider lawnmowers until you turned the key and they blew you into the atmosphere. One guy brought his back with several ziplock bags full of screws bashfully explaining that he tried his best but &quot;there&apos;s just no way that&apos;s right&quot;. That didn&apos;t stop me from holding my breath every time someone drove a mower I had worked on up the ramp into the back of the truck. &quot;Please god just don&apos;t fall apart right now, wait until they get it home&quot; was my prayer to whatever deity looked after idiots in jobs they shouldn&apos;t have. </p><p>Sometimes actual adults with real jobs would come in asking me questions about tools, conversations that both of us hated. &quot;I&apos;m looking for a oil filter wrench&quot; they would say, as if this item was something I knew about and could find. &quot;Uh sure, could you describe it?&quot; &quot;It&apos;s a wrench, used for changing oil filters, has a loop on it.&quot; I&apos;d nod and then feebly offer them up random items until they finally grabbed it themselves. One mechanic when I offered a claw hammer up in response to his request for a cross-pein hammer said &quot;you aren&apos;t exactly handy, are you?&quot; I shook my head and went back behind the counter, attempting to establish what little authority I had left with the counter. I might not know anything about the products we sell, but only one of us is allowed back here sir. </p><h3 id="sears-expert">Sears Expert</h3><p>As the months dragged on I was moved from the heavier foot traffic shifts to the night shifts. This was because customers &quot;didn&apos;t like talking to me&quot;, a piece of feedback I felt was true but still unfair. I had learned a lot, like every incorrect way to assemble a lawn mower and that refrigerators are all the same except for the external panels. Night shifts were mostly getting things ready for the delivery company, a father and son team who were always amusing. </p><p>The father was a chain-smoking tough guy who would regularly talk about his &quot;fuck up&quot; of a son. &quot;That idiot dents another oven when we&apos;re bringing it in I swear to god I&apos;m going to replace him with one of those Japanese robots I keep seeing on the news.&quot; The son was the nicest guy on Earth, really hard working, always on time for deliveries and we got like mountains of positive feedback about him. Old ladies would tear up as they told me about the son hauling their old appliances away in a blizzard on his back. He would just sit there, smile frozen on his face while his father went on and on about how much of a failure he was. &quot;He&apos;s just like this sometimes&quot; the son would tell me by the loading dock, even though I would never get involved. &quot;He&apos;s actually a nice guy&quot;. This was often punctuated by the father running into a minor inconvenience and flying off the handle. &quot;What kind of jackass would sort the paperwork alphabetically instead of by order of delivery?&quot; he&apos;d scream from the parking lot. </p><p>When the son went off to college he was replaced by a Hispanic man who took zero shit. His response to customer complaints was always that they were liars and I think the father was afraid of him. &quot;Oh hey don&apos;t bother Leo with that, he&apos;s not in the mood, I&apos;ll call them and work it out&quot; the father would tell me as Leo glared at us from the truck. Leo was incredibly handy though, able to fix almost any dent or scratch in minutes. He popped the dent out of my car door by punching the panel, which is still one of the cooler things I&apos;ve seen someone do.</p><p>Other than the father and son duo, I was mostly alone with a woman named Ruth. She fascinated me because her life was unspeakably bleak. She had been born and raised in this town and had only left the county once in her life, to visit the Sears headquarters in Chicago. She&apos;d talk about it like she had been permitted to visit heaven. &quot;Oh it was something, just a beautiful shiny building full of the smartest people you ever met. Boy I&apos;d love to see it again sometime.&quot; She had married her high school boyfriend, had children and now worked here in her 60s as her reward for a life of hard work. She had such bad pain in her knees she had to lean on the stocking cart as she pushed it down the aisles, often stopping to catch her breath. The store would be empty except for the sounds of a wheezing woman and squeaky wheels. </p><p>When I would mention Chicago was a 4 hour drive and she could see it again, she&apos;d roll her eyes at me and continue stocking shelves. Ruth was a type of rural person I encountered a lot who seemed to get off on the idea that we were actually isolated from the outside world by a force field. Mention leaving the county to go perhaps to the next county and she would laugh or make a comment about how she wasn&apos;t &quot;that kind of person&quot;. Every story she would tell had these depressing endings that left me pondering what kind of response she was looking for. &quot;My brother, well he went off to war and when he came back was just a shell of a man. Never really came back if you ask me. Anyway let&apos;s clean the counters.&quot; </p><p>She&apos;d talk endlessly about her grandson, a 12 year old who was &quot;stupid but kind&quot;. His incredibly minor infractions were relayed to me like she was telling me about a dark family scandal. &quot;Then I said, who ate all the chips? I knew he had, but he just sat there looking at me and I told him you better wipe those crumbs off your t-shirt smartass and get back to your homework&quot;. He finally visited and I was shocked to discover there was also a granddaughter who I had never heard about. He smirked when he met me and told me that Ruth had said I was &quot;a lazy snob&quot;. </p><p>I&apos;ll admit, I was actually a little hurt. Was I a snob compared to Ruth? Absolutely. To be honest with you I&apos;m not entirely sure she was literate. I&apos;d sneak books under the counter to read during the long periods where nothing was happening and she&apos;d often ask me what they were about even if the title sort of explained it. &quot;What is <em>Battle Cry of Freedom: The Civil War Era </em>about? Um well the Civil War.&quot; I&apos;d often get called over to &quot;check&quot; documents for her, which typically included anything more complicated than a few sentences. I still enjoyed working with her. </p><p>Our relationship never really recovered after I went to Japan when I was 16. I went by myself and wandered around Tokyo, having a great time. When I returned full of stories and pictures of the trip, I could tell she was immediately sick of me. &quot;Who wants to see a place like Japan? Horrible people&quot; she&apos;d tell me as I tried to tell her that things had changed a tiny bit since WWII. &quot;No it&apos;s really nice and clean, the food was amazing, let me tell you about these cool trains they have&quot;. She wasn&apos;t interested and it was clear my getting a passport and leaving the US had changed her opinion of me. </p><p>So when her grandson confided that she had called me lazy AND a snob my immediate reaction was to lean over and tell him that she had called him &quot;a stupid idiot&quot;. Now she had never actually said &quot;stupid idiot&quot;, but in the heat of the moment I went with my gut. Moments after I did that the reality of a 16 year old basically bullying a 12 year old sunk in and I decided it was time for me to go take out some garbage. Ruth of course found out what I said and mentioned it every shift after that. &quot;Saying I called my grandson a stupid idiot, who does that, a rude person that&apos;s who, a rude snob&quot; she&apos;d say loud enough for me to hear as the cart very slowly inched down the aisles. I deserved it. </p><h3 id="trouble-in-paradise">Trouble In Paradise</h3><p>At a certain point I was allowed back in front of customers and realized with a shock that I had worked there for a few years. The job paid very little, which was fine as I had nothing in the town to actually buy, but enough to keep my lime green Ford Probe full of gas. It shook violently if you exceeded 70 MPH, which I should have asked someone about but never did. I was paired with Jane, the saleswoman who was a devout Republican and liked to make fun of me for being a Democrat. This was during the George W Bush vs Kerry election and she liked to point out how Kerry was a &quot;flipflopper&quot; on things. &quot;He just flips and flops, changes his mind all the time&quot;. I&apos;d point out we had vaporized the country of Iraq for no reason and she&apos;d roll her eyes and tell me I&apos;d get it when I was older. </p><p>My favorite was when we were working together during Reagan&apos;s funeral, an event which elicited no emotion from me but drove her to tears multiple times. &quot;Now that was a man and a president&quot; she&apos;d exclaim to the store while the funeral procession was playing on the 30 TVs. &quot;He won the Cold War you know?&quot; she&apos;d shout at a woman looking for replacement vacuum cleaner bags. Afterwards she asked me what my favorite Reagan memory was. All I could remember was that he had invaded the small nation of Grenada for some reason, so I said that. &quot;Really showed those people not to mess with the US&quot; she responded. I don&apos;t think either one of us knew that Grenada is a tiny island nation with a population less than 200,000. </p><p>Jane liked to dispense country wisdom, witty one-liners that only sometimes were relevant to the situation at hand. When confronted with an angry customer she would often say afterwards that you &quot;You can&apos;t make a silk purse out of a sow&apos;s ear&quot; which still means nothing to me. &#xA0;Whatever rural knowledge I was supposed to obtain through osmosis my brain clearly rejected. Jane would send me over to sell televisions since I understood what an HDMI cord was and the difference between SD and HD television. </p><p>Selling TVs was perhaps the only thing I did well, that and the fun vacuum demonstration where we would dump a bunch of dirt on a carpet tile and suck it up. Some poor customer would tell me she didn&apos;t have the budget for the Dyson and I&apos;d put my hand up to silence her. &quot;You don&apos;t have to buy it, just watch it suck up a bunch of pebbles. I don&apos;t make commission anyway so who cares.&quot; Then we&apos;d both watch as the Dyson would make a horrible screeching noise and suck in a cups worth of small rocks. &quot;That&apos;s pretty cool huh?&quot; and the customer would nod, probably terrified of what I would do if she said no. </p><h3 id="graduation">Graduation</h3><p>When I graduated high school and prepared to go off to college, I had the chance to say goodbye to everyone before I left. They had obviously already replaced me with another high school student, one that knew things about tools and was better looking. You like to imagine that people will miss you when you leave a job, but everyone knew that wasn&apos;t true here. I had been a normal employee who didn&apos;t steal and mostly showed up on time. </p><p>My last parting piece of wisdom from Ruth was not to let college &quot;make me forget where I came from&quot;. Sadly for her I was desperate to do just that, entirely willing to adopt whatever new personality that was presented to me. I&apos;d hated rural life and still do, the spooky dark roads surrounded by corn. Yelling at Amish teens to stop shoplifting during their Rumspringa where they would get dropped off in the middle of town and left to their own devices. </p><p>Still I&apos;m grateful that I at least know how to assemble a rider lawnmower, even if it did take a lot of practice runs on customers mowers. </p><p></p><p></p>


guid: 66acab9cd4f17d00015b1bd1
title: Teaching to the Test. Why It Security Audits Aren’t Making Stuff Safer
author: Mathew Duggan
url: https://matduggan.com/teaching-to-the-test/
feedurl: https://matduggan.com/rss/
content_mime_type: text/html
content:
<p>A lot has been written in the last few weeks about the state of IT security in the aftermath of the CrowdStrike outage. A range of opinions have emerged, ranging from blaming Microsoft for signing the CrowdStrike software (who in turn blame the EU for making them do it) to blaming the companies themselves for allowing all of these machines access to the Internet to receive the automatic template update. Bike-shedding among the technical community continues to be focused on the underlying technical deployment, which misses the forest for the trees. </p><p>The better question is what was the forcing mechanism that convinced every corporation in the world that it was a good idea to install software like this on every single machine? Why is there such a cottage industry of companies that are effectively undermining Operating System security with the argument that they are doing more &quot;advanced&quot; security features and allowing (often unqualified) security and IT departments to make fundamental changes to things like TLS encryption and basic OS functionality? How did all these smart people let a random company push updates to everyone on Earth with zero control? The justification often give is &quot;to pass the audit&quot;. </p><p>These audits and certifications, of which there are many, are a fundamentally broken practice. The <em>intent</em> of the frameworks was good, allowing for the standardization of good cybersecurity practices while not relying on the expertise of an actual cybersecurity expert to validate the results. We can all acknowledge there aren&apos;t enough of those people on Earth to actually audit all the places that need to be audited. The issue is the audits don&apos;t actually fix real problems, but instead create busywork for people so it looks like they are fixing problems. It lets people cosplay as security experts without needing to actually understand what the stuff is. </p><p>I don&apos;t come to this analysis lightly. Between HIPAA, PCI, GDPR, ISO27001 and SOC2 I&apos;ve seen every possible attempt to boil requirements down to a checklist that you can do. Add in the variations on these that large companies like to send out when you are attempting to sell them an enterprise SaaS and it wouldn&apos;t surprise me at all to learn that I&apos;ve spent over 10,000 hours answering and implementing solutions to meet the arbitrary requirements of these documents. I have both produced the hundred page PDFs full of impressive-looking screenshots and diagrams AND received the PDFs full of diagrams and screenshots. I&apos;ve been on many calls where it is clear neither of us understands what the other is talking about, but we agree that it sounds necessary and good. </p><p>I have also been there in the room when inept IT and Security teams use these regulations, or more specifically their interpretation of these regulations, to justify kicking off expensive and unnecessary projects. I&apos;ve seen laptops crippled due to full filesystem scans looking for leaked AWS credentials and Social Security numbers, even if the employee has nothing to do with that sort of data. I&apos;ve watched as TLS encryption is broken with proxies so that millions of files can be generated and stored inside of S3 for security teams to never ever look at again. Even I have had to reboot my laptop to apply a non-critical OS update in the middle of an important call. All this inflicted on poor people who had to work up the enthusiasm to even show up to their stupid jobs today. </p><h3 id="why">Why? </h3><p>Why does this keep happening? How is it that every large company keeps falling into the same trap of repeating the same expensive, bullshit processes? </p><ul><li>The actual steps to improve cybersecurity are hard and involve making executives mad. You need to update your software, including planning ahead for end of life technology. Since this dark art is apparently impossible to do and would involve a lot of downtime to patch known-broken shit and reboot it, we won&apos;t do that. Better apparently to lose the entire Earths personal data. </li><li>Everyone is terrified that there might be a government regulation with actual consequences if they don&apos;t have an industry solution to this problem that sounds impressive but has no real punishments. If Comcast executives could go to jail for knowingly running out-of-date Citrix NetScaler software, it would have been fixed. So instead we need impressive-sounding things which can be held up as evidence of compliance that if, ultimately, don&apos;t end up preventing leaks the consequences are minor. </li><li>Nobody questions the justification of &quot;we need to do x because of our certification&quot;. The actual requirements are too boring to read so it becomes this blank check that can be used to roll out nearly anything. </li><li>Easier to complete a million nonsense steps than it is to get in contact with someone who understands why the steps are nonsense. The number of times I&apos;ve turned on silly &quot;security settings&quot; to pass an audit when the settings weren&apos;t applicable to how we used the product is almost too high to count. </li><li>Most Security teams aren&apos;t capable of stopping a dedicated attacker and, in their souls, know that to be true. Especially with large organizations, the number of conceivable attack vectors becomes too painful to even think about. Therefore too much faith is placed in companies like Zscaler and CloudStrike to use &quot;machine learning and AI&quot; (read: magic) to close up all the possible exploits before they happen. </li><li>If your IT department works exclusively with Windows and spends their time working with GPOs and Powershell, every problem you hand them will be solved with Windows. If you handed the same problem to a Linux person, you&apos;d get a Linux solution. People just use what they know. So you end up with a one-size-fits-all approach to problems. Like mice in a maze where almost every step is electrified, if Windows loaded up with bullshit is what they are allowed to deploy without hassles that is what you are going to get. </li></ul><h3 id="future">Future</h3><p>We all know this crap doesn&apos;t work and the sooner we can stop pretending it makes a difference, the better. AT&amp;T had every certification on the planet and still didn&apos;t take the <em>incredibly basic</em> step of enforcing 2FA on a database of all the most sensitive data it has in the world. If following these stupid checklists and purchasing the required software ended up with more secure platforms, I&apos;d say &quot;well at least there is a payoff&quot;. But time after time we see the exact same thing which is an audit is not an adequate replacement for someone who knows what they are doing looking at your stack and asking hard questions about your process. These audits aren&apos;t resulting in organizations doing the hard but necessary step of taking downtime to patch critical flaws or even applying basic security settings across all of their platforms. </p><p>Because cryptocurrency now allows for hacking groups to demand millions of dollars in payments (thanks crypto!), the financial incentives to cripple critical infrastructure have never been better.  At the same time most regulations designed to encourage the right behavior are completely toothless. Asking the tech industry to regulate itself has failed, without question. All that does is generate a lot of pain and suffering for their employees, who most businesses agree are disposable and idiots. All this while doing nothing to secure personal data. Even in organizations that had smart security people asking hard questions, that advice is entirely optional. There is no stick with cybersecurity and businesses, especially now that almost all of them have made giant mistakes. </p><p>I don&apos;t know what the solution is, but I know this song and dance isn&apos;t working. The world would be better off if organizations stopped wasting so much time and money on these vendor solutions and instead stuck to <em>much more basic</em> solutions. Perhaps if we could just start with &quot;have we patched all the critical CVEs in our organization&quot; and &quot;did we remove the shared username and password from the cloud database with millions of call records&quot;, then perhaps AFTER all the actual work is done we can have some fun and inject dangerous software into the most critical parts of our employees devices. </p><p>Find me at: <a href="https://c.im/@matdevdug">https://c.im/@matdevdug</a></p>


guid: 66b6030dd4f17d00015b1cbb
title: Replace Docker Compose with Quadlet for Servers
author: Mathew Duggan
url: https://matduggan.com/replace-compose-with-quadlet/
feedurl: https://matduggan.com/rss/
content_mime_type: text/html
content:
<img src="https://images.unsplash.com/photo-1703227373720-cff89520dd31?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDI1fHxkb2NrZXJ8ZW58MHx8fHwxNzIzNTUzOTEzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Replace Docker Compose with Quadlet for Servers"><p>So for years I&apos;ve used Docker Compose as my stepping stone to k8s. If the project is small, or mostly for my own consumption OR if the business requirements don&apos;t really support the complexity of k8s, I use Compose. It&apos;s simple to manage with bash scripts for deployments, not hard to setup on fresh servers with <code>cloud-init</code> and the process of removing a server from a load balancer, pulling the new container, then adding it back in has been bulletproof for teams with limited headcount or services where uptime is less critical than cost control and ease of long-term maintenance. You avoid almost all of the complexity of really &quot;running&quot; a server while being able to scale up to about 20 VMs while still having a reasonable deployment time. </p><h3 id="what-are-you-talking-about">What are you talking about</h3><p>Sure, so one common issue I hear is &quot;we&apos;re a small team, k8s feels like overkill, what else is on the market&quot;? The issue is there are <em>tons and tons</em> of ways to run containers on virtually every cloud platform, but a lot of them are locked to that cloud platform. They&apos;re also typically billed at premium pricing because they remove all the elements of &quot;running a server&quot;. </p><p>That&apos;s fine but for small teams buying in too heavily to a vendor solution can be hard to get out of. Maybe they pick wrong and it gets deprecated, etc. So I try to push them towards a more simple stack that is more idiot-proof to manage. It varies by VPS provider but the basic stack looks like the following:</p><ul><li>Debian servers setup with <code>cloud-init</code> to run all the updates, reboot, install the container manager of choice. </li><li>This also sets up Cloudflare tunnels so we can access the boxes securely and easily. Tailscale also works great/better for this. Avoids needing public IPs for each box. </li><li>Add a tag to each one of those servers so we know what it does (redis, app server, database)</li><li>Put them into a VPC together so they can communicate</li><li>Take the deploy script, have it SSH into the box and run the container update process</li></ul><p>Linux updates involve a straightforward process of de-registering, destroying the VM and then starting fresh. Database is a bit more complicated but still doable. It&apos;s all easily done in simple scripts that you can tie to github actions if you are so inclined.  Docker compose has been the glue that handles the actual launching and restarting of the containers for this sample stack. </p><p>When you outgrow this approach, you are big enough that you should have a pretty good idea of where to go now. Since everything is already in containers you haven&apos;t been boxed in and can migrate in whatever direction you want. </p><h3 id="why-not-docker">Why Not Docker</h3><p>However I&apos;m not thrilled with the current state of Docker as a full product. Even when I&apos;ve paid for Docker Desktop I found it to be a profoundly underwhelming tool. It&apos;s slow, the UI is clunky, there&apos;s always an update pending, it&apos;s sort of expensive for what people use it for, Windows users seem to hate it. When I&apos;ve compared Podman vs Docker on servers or my local machines, Podman is faster, seems better designed and just in general as a product is trending in a stronger direction. If I don&apos;t like Docker Desktop and prefer Podman Desktop, to me its worth migrating the entire stack over and just dumping Docker as a tool I use. Fewer things to keep track of. </p><p>Now the problem is that while <code>podman</code> has <em>sort of</em> a compatibility layer with Docker Compose, it&apos;s not a one to one replacement and you want to be careful using it. My testing showed it worked ok for basic examples, but more complex stuff and you started to run into problems. It also seems like work on the project has mostly been abandoned by the core maintainers. You can see it here: <a href="https://github.com/containers/podman-compose">https://github.com/containers/podman-compose</a> </p><p>I think <code>podman-compose</code> is the right solution for local dev, where you aren&apos;t using terribly complex examples and the uptime of the stack matters less. It&apos;s hard to replace Compose in this role because its just so straight-forward. As a production deployment tool I would stay away from it. This is important to note because right now the local dev container story often involves running k3 on your laptop. My experience is people loath Kubernetes for local development and will go out of their way to avoid it. </p><p>The people I know who are all-in on Podman pushed me towards Quadlet as an alternative which uses <code>systemd</code> to manage the entire stack. That makes a lot of sense to me, because my Linux servers already have <code>systemd</code> and it&apos;s already a critical piece of software that (as far as I can remember) works pretty much as expected. So the idea of building on top of that existing framework makes more sense to me than attempting to recreate the somewhat haphazard design of Compose. </p><h3 id="wait-i-thought-this-already-existed">Wait I thought this already existed?</h3><p>Yeah I was <em>also</em> confused. So there was a command, <code>podman-generate-systemd</code>, that I had used previously to run containers with Podman using Systemd. That has been deprecated in favor of Quadlet, which are more powerful and offer more of the Compose functionality, but are also more complex and less magically generated. </p><p>So if all you want to do is run a container or pod using Systemd, then you can <em>still use</em> <code>podman-generate-systemd</code> which in my testing worked fine and did exactly what it says on the box. However if you want to emulate the functionality of Compose with networks and volumes, then you want Quadlet. </p><h3 id="what-is-quadlet">What is Quadlet</h3><p>The name comes from this excellent pun:</p><pre><code>What do you get if you squash a Kubernetes kubelet?
A quadlet</code></pre><p>Actually laughed out loud at that. Anyway Quadlet is a tool for running Podman containers under Systemd in a declarative way. It has been merged into Podman 4.4 so it now comes in the box with Podman. When you install Podman it registers a systemd-generator that looks for files in the following directories:</p><pre><code>/usr/share/containers/systemd/
/etc/containers/systemd/
# Rootless users
$HOME/.config/containers/systemd/
$XDG_RUNTIME_DIR/containers/systemd/
$XDG_CONFIG_HOME/containers/systemd/
/etc/containers/systemd/users/$(UID)
/etc/containers/systemd/users/
</code></pre><p>You put unit files in the directory you want (creating them if they aren&apos;t present which I assume they aren&apos;t) with the file extension telling you what you are looking at. </p><p>For example, if I wanted a simple volume I would make the following file:</p><p><code>/etc/containers/systemd/example-db.volume</code></p><pre><code class="language-systemd">[Unit]
Description=Example Database Container Volume

[Volume]
Label=app=myapp</code></pre><p>You have all the same options you would on the command line.</p><figure class="kg-card kg-image-card"><img src="https://matduggan.com/content/images/2024/08/image.png" class="kg-image" alt="Replace Docker Compose with Quadlet for Servers" loading="lazy" width="725" height="493" srcset="https://matduggan.com/content/images/size/w600/2024/08/image.png 600w, https://matduggan.com/content/images/2024/08/image.png 725w" sizes="(min-width: 720px) 720px"></figure><p>You can see the entire list here: <a href="https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html">https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html</a></p><p>Here are the units you can create: <em>name</em>.container, <em>name</em>.volume, <em>name</em>.network, <em>name</em>.kube, <em>name</em>.image, <em>name</em>.build, <em>name</em>.pod</p><h3 id="workflow">Workflow</h3><p>So you have a pretty basic Docker Compose you want to replace with Quadlets. You probably need the following:</p><ul><li>A network</li><li>Some volumes</li><li>A database container</li><li>An application container</li></ul><p>The process is pretty straight forward. </p><p><strong>Network</strong></p><p>We&apos;ll make this one at: <code>/etc/containers/systemd/myapp.network</code></p><pre><code>[Unit]
Description=Myapp Network

[Network]
Label=app=myapp</code></pre><p><strong>Volume</strong></p><p><code>/etc/containers/systemd/myapp.volume</code></p><pre><code>[Unit]
Description=Myapp Container Volume

[Volume]
Label=app=myapp</code></pre><p><code>/etc/containers/systemd/myapp-db.volume</code></p><pre><code>[Unit]
Description=Myapp Database Container Volume

[Volume]
Label=app=myapp</code></pre><p><strong>Database</strong></p><p><code>/etc/containers/systemd/postgres.container</code></p><pre><code>[Unit]
Description=Myapp Database Container

[Service]
Restart=always

[Container]
Label=app=myapp
ContainerName=myapp-db
Image=docker.io/library/postgres:16-bookworm
Network=myapp.network
Volume=myapp-db.volume:/var/lib/postgresql/data
Environment=POSTGRES_PASSWORD=S3cret
Environment=POSTGRES_USER=user
Environment=POSTGRES_DB=myapp_db

[Install]
WantedBy=multi-user.target default.target</code></pre><p><strong>Application</strong></p><p><code>/etc/containers/systemd/myapp.container</code></p><pre><code>[Unit]
Description=Myapp Container
Requires=postgres.service
After=postgres.service

[Container]
Label=app=myapp
ContainerName=myapp
Image=wherever-you-get-this
Network=myapp.network
Volume=myapp.volume:/tmp/place_to_put_stuff
Environment=DB_HOST=postgres
Environment=WORDPRESS_DB_USER=user
Environment=WORDPRESS_DB_NAME=myapp_db
Environment=WORDPRESS_DB_PASSWORD=S3cret
PublishPort=9000:80

[Install]
WantedBy=multi-user.target default.target</code></pre><p>Now you need to run </p><pre><code class="language-shell">systemctl daemon-reload</code></pre><p>and you should be able to use <code>systemctl status</code> to check all of these running processes. You don&apos;t need to run <code>systemctl enable</code> to get them to run on next boot IF you have the [Install] section defined. Also notice that when you are setting the dependencies (requires, after) that it is called name-of-thing.service, not name-of-thing.container or .volume. It threw me off at first but just wanted to call that out. </p><p><strong>One thing I want to call out</strong></p><p>Containers support AutoUpdate, which means if you just want Podman to pull down the freshest image from your registry that is supported out of the box. It&apos;s just <code>AutoUpdate=registry</code>. If you change that to <code>local</code>, Podman will restart when you trigger a new build of that image locally with a deployment. If you need more information about logging into registries with Podman <a href="https://docs.podman.io/en/latest/markdown/podman-login.1.html#options" rel="noreferrer">you can find that here</a>. </p><p>I find this very helpful for testing environments where I can tell servers to just run <code>podman auto-update</code> and just getting the newest containers. It&apos;s also great because it has options to help handle rolling back and failure scenarios, which are rare but can really blow up in your face with containers without k8s. You can see that <a href="https://docs.podman.io/en/latest/markdown/podman-auto-update.1.html" rel="noreferrer">here</a>.</p><h3 id="what-if-you-dont-store-images-somewhere">What if you don&apos;t store images somewhere?</h3><p>So often with smaller apps it doesn&apos;t make sense to add a middle layer of build and storage the image in one place and then pull that image vs just building the image on the machine you are deploying to with <code>docker compose up -d --no-deps --build myapp</code></p><p>You can do the same thing with Quadlet build files. The unit files are similar to the ones above but with a <code>.build</code> extension and the documentation is pretty simple to figure out how to convert whatever you are looking at to it.</p><figure class="kg-card kg-image-card"><img src="https://matduggan.com/content/images/2024/08/image-1.png" class="kg-image" alt="Replace Docker Compose with Quadlet for Servers" loading="lazy" width="681" height="866" srcset="https://matduggan.com/content/images/size/w600/2024/08/image-1.png 600w, https://matduggan.com/content/images/2024/08/image-1.png 681w"></figure><p>I found this nice for quick testing so I could easily <code>rsync</code> changes to my test box and trigger a fast rebuild with the container layers mostly getting pulled from cache and only my code changes making a difference. </p><h3 id="how-do-secrets-work">How do secrets work?</h3><p>So secrets are supported with Quadlets. Effectively they just build on top of <code>podman secret</code> or secrets in Kubernetes. Assuming you don&apos;t want to go the Kubernetes route for this purpose, you have a couple of options. </p><ol><li>Make a secret from a local file (probably bad idea): <code>podman secret create my_secret ./secret.txt</code></li><li>Make a secret from an environmental variable on the box (better idea):  <code>podman secret create --env=true my_secret MYSECRET</code></li><li>Use stdin: <code>printf &lt;secret&gt; | podman secret create my_secret -</code></li></ol><p>Then you can reference these secrets inside of the <code>.container</code> file with the <code>Secret=name-of-podman-secret</code> and then the options. By default these secrets are mounted to <code>run/secrets/secretname</code> as a file inside of the container. You can configure it to be an environmental variable (along with a bunch of other stuff) with the options outlined <a href="https://docs.podman.io/en/v4.6.0/markdown/options/secret.html" rel="noreferrer">here</a>. </p><h3 id="rootless">Rootless</h3><p>So my examples above were not rootless containers which are best practice. You can get them to work, but the behavior is more complicated and has problems I wanted to call out. You need to use <code>default.target</code> and not <code>multi-user.target</code> and then also it looks like you do need <code>loginctl enable-linger</code> to allow your user to start the containers without that user being logged in. </p><p>Also remember that all of the <code>systemctl</code> commands need the <code>--user</code> argument and that you might need to change your <code>sysctl</code> parameters to allow rootless containers to run on privileged ports. </p><pre><code>sudo sysctl net.ipv4.ip_unprivileged_port_start=80</code></pre><p>Unblocks 80, for example. </p><p><strong>Networking</strong></p><p>So for rootless networking Podman previously used <code>slirp4netns</code> and now uses <code>pasta</code>. Pasta doesn&apos;t do NAT and instead copies the IP address from your main network interface to the container namespace. Main in this case is defined as whatever interface as the default route. This can cause (obvious) problems with inter-container connections since its all the same IP. You need to configure the <code>containers.conf</code> to get around this problem. </p><pre><code>[network]
pasta_options = [&quot;-a&quot;, &quot;10.0.2.0&quot;, &quot;-n&quot;, &quot;24&quot;, &quot;-g&quot;, &quot;10.0.2.2&quot;, &quot;--dns-forward&quot;, &quot;10.0.2.3&quot;]</code></pre><p>Also ping didn&apos;t work for me. You can fix that with the solution <a href="https://github.com/containers/podman/blob/main/troubleshooting.md#5-rootless-containers-cannot-ping-hosts" rel="noreferrer">here</a>. </p><h3 id="that-sounds-like-a-giant-pain-in-the-ass">That sounds like a giant pain in the ass.</h3><p>Yeah I know. It&apos;s not actually the fault of the Podman team. The way rootless containers work is basically they use <code>user_namespaces</code> to emulate the privileges to create containers. Inside of the UserNS they can do things like mount namespaces and networking. Outgoing connections are tricky because vEth pairs cannot be created across UserNS boundaries without root. Inbound relies on port forwarding. </p><p>So tools like <code>slirp</code> and <code>pasta</code> are used since they can translate Ethernet packets to unprivileged socket system calls by making a tap interface available in the namespace. However the end result is you need to account for a lot of potential strangeness in the configuration file. I&apos;m confident this will let less fiddly as time goes on. </p><p>Podman also has a tutorial on how to get it set up here: <a href="https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md">https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md</a> which did work for me. If you do the work of rootless containers now you have a much easier security story for the rest of your app, so I do think it ultimately pays off even if it is annoying in the beginning. </p><h3 id="impressions">Impressions</h3><p>So as a replacement for Docker Compose on servers, I&apos;ve really liked Quadlet. I find the logging to be easier to figure out since we&apos;re just using the standard <code>systemctl</code> commands, checking status is also easier and more straightforward. Getting the rootless containers running took....more time than I expected because I didn&apos;t think about how they wouldn&apos;t start by default until the user logged back in without the <code>linger</code> work. </p><p>It does stink that this is absolutely not a solution for local-dev for most places. I prefer that Podman remains daemonless and instead hooks into the existing functionality of Systemd but for people not running Linux as their local workstations (most people on Earth) you are either going to need to use the Podman Desktop Kubernetes functionality or use the <code>podman-compose</code> and just be aware that it&apos;s not something you should use in actual production deployments. </p><p>But if you are looking for something that scales well, runs containers and is super easy to manage and keep running, this has been a giant hit for me. </p><p>Questions/comments/concerns: <a href="https://c.im/@matdevdug">https://c.im/@matdevdug</a></p><p></p>

enclosure_url:
https://images.unsplash.com/photo-1703227373720-cff89520dd31?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3wxMTc3M3wwfDF8c2VhcmNofDI1fHxkb2NrZXJ8ZW58MHx8fHwxNzIzNTUzOTEzfDA&ixlib=rb-4.0.3&q=80&w=2000


guid: 66cededa5b7cd000016d30a8
title: Why Login Security Sucks
author: Mathew Duggan
url: https://matduggan.com/why-login-security-sucks/
feedurl: https://matduggan.com/rss/
content_mime_type: text/html
content:
<p>I&apos;ve complained a lot about the gaps in offerings for login security in the past. The basic problem is this domain of security serves a lot of masters. To get the widest level of buy-in from experts, the solution has to scale from normal logins to national security. This creates a frustrating experience for users because it is often overkill for the level of security they need. Basically is it reasonable that you need Google Authenticator to access your gym website?  In terms of communication, the solutions we hear about the most, i.e. with the most marketing, allow for the insertion of SaaS services into the chain so that an operation that was previously free now pays a monthly fee based on usage. </p><p>This creates a lopsided set of incentives where only the most technologically complex and extremely secure solutions are endorsed and when teams are (understandably) overwhelmed by their requirements a SaaS attempts to get inserted into a critical junction of their product. </p><p>The tech community have mostly agreed that username and passwords assigned by the user are not sufficient for even basic security. What we haven&apos;t done is precisely explained what it is that we want normal average non-genius developers to do about that. We&apos;ve settled on this really weird place with the following rules:</p><ul><li>Email accounts are always secure but SMS is never secure. You can always email a magic link and that&apos;s fine for some reason. </li><li>You should have TOTP but we&apos;ve settled on very short time windows because I guess we decided NTP was a solved problem. There&apos;s no actual requirement the code changes every 30 seconds, we&apos;re just pretending that we&apos;re all spies and someone is watching your phone. Also consumers should be given recovery codes, which are basically just passwords you generate and give to them and only allow to be used once. It is unclear why generating a one-time password for the user is bad but if we call the password a &quot;recovery code&quot; it is suddenly sufficient. </li></ul><figure class="kg-card kg-image-card"><img src="https://matduggan.com/content/images/2024/09/image-2.png" class="kg-image" alt loading="lazy" width="553" height="451"></figure><ul><li>TOTP serves two purposes. One is it ensures there is one randomly generated secret associated with the account that we don&apos;t hash (even though I think you could....but nobody seems to), so it&apos;s actually kind of a dangerous password that we need to encrypt and can&apos;t rotate. The other is we tacked on this stupid idea that it is multi-device, even though there&apos;s zero requirement that the code lives on another device. Just someone decided that because there is a QR code it is now multi-device because phones scan QR codes.</li><li>At some point we decided to add a second device requirement, but those devices live in entirely different ecosystems. Even if you have an iPhone and a work MacBook, they shouldn&apos;t be using the same Apple ID, so I&apos;m not really clear how things would ever line up. It seems like most people sync things like TOTP with their personal Google accounts across different work devices over time. I can&apos;t imagine that was the intended functionality.</li><li>Passkeys are great but also their range of behavior is bizarre and unpredictable so if you implement them you will be expected to effectively build every other possible recovery flow into this system. Even highly technical users cannot be relied upon to know whether they will lose their passkey when they do something. </li><li>Offloading the task to a large corporation is good, but you cannot pick one big corporation. You must have a relationship with Apple and Facebook and Microsoft and Google and Discord and anyone else who happens to be wandering around when you build this. Their logins are secured with magic and unbreakable, but if they are bypassed you can go fuck yourself because that is your problem, not theirs. </li></ul><p>All of this is sort of a way to talk around the basic problem. I need a username and a password for every user on my platform. That password needs to be randomly generated and never stored as plain text in my database. If I had a way to know that the browser generated and stored the password, this basic level of security is met. As far as I can tell, there&apos;s no way for me to know that for sure. I can <em>guess</em> based on the length of the password and how quickly it was entered into a form field. </p><p>Keep in mind <em>all I am trying to do</em> is build a simple login route on an application that is portable, somewhat future proof and doesn&apos;t require a ton of personal data from the user to resolve common human error problems. Ideally I&apos;d like to be able to hand this to someone else, they generate a new secret and they too can enroll as many users as they want. This is a simple thing to build so it <em>should</em> be simple to solve the login story as well. </p><h3 id="making-a-simple-cms">Making a simple CMS</h3><p>The site you are reading this on is hosted on Ghost, a CMS that is written in Node. It supports a lot of very exciting features I don&apos;t use and comes with a lot of baggage I don&apos;t need. Effectively all I actually use for is:</p><ul><li>RSS</li><li>Writing posts in its editor</li><li>Fixing typos in the posts I publish (sometimes, my writing is <em>not good</em>)</li><li>Let me write a million drafts for every thing I publish</li><li>Minimize the amount of JS I&apos;m inflicting on people and try whenever possible to stick to just HTML and CSS</li></ul><p>Ghost supports a million things on top of the things I have listed and it also comes with some strange requirements like running MySQL. I don&apos;t really need a lot of that stuff and running a full MySQL for a CMS that doesn&apos;t have any sort of multi-instance scaling functionality seems odd. I also don&apos;t want to stick something this complicated on the internet for people to use for long periods of time without regular maintenance. </p><p>Before you say it I don&apos;t care for static site generators. I find it&apos;s easier for me to have a tab open, write for ten minutes, then go back to what I was doing before. </p><p>My goal with this is just to make a normal friendly baby CMS that I could share with a group of people, less technical people, so they could write stuff when they felt like it. We&apos;re not trading nuclear secrets here. The requirements are: </p><ul><li>Needs to be open to the public internet with no special device enrollment or network segmentation </li><li>Not administered by me. Whatever normal problem arises it has to be solvable by a non-technical person. </li></ul><h3 id="making-the-cms">Making the CMS </h3><p>So in a day when I was doing other stuff I put this together: <a href="https://gitlab.com/matdevdug/ezblog">https://gitlab.com/matdevdug/ezblog</a>. It&apos;s nothing amazing, just sort of a basic template I can build on top of later. Uses sqlite and it does the things you would expect it to do. I can:</p><ul><li>Write posts in Quill</li><li>Save the posts as drafts or as published posts</li><li>Edit the posts after I publish them</li><li>Have a valid RSS feed of the posts</li><li>The whole frontend is just HTML/CSS so it&apos;ll load fast and be easy to cache</li></ul><figure class="kg-card kg-image-card"><img src="https://matduggan.com/content/images/2024/08/image-2.png" class="kg-image" alt loading="lazy" width="1942" height="1178" srcset="https://matduggan.com/content/images/size/w600/2024/08/image-2.png 600w, https://matduggan.com/content/images/size/w1000/2024/08/image-2.png 1000w, https://matduggan.com/content/images/size/w1600/2024/08/image-2.png 1600w, https://matduggan.com/content/images/2024/08/image-2.png 1942w" sizes="(min-width: 720px) 720px"></figure><p>Then there is the whole workflow of draft to published. </p><figure class="kg-card kg-image-card"><img src="https://matduggan.com/content/images/2024/08/image-3.png" class="kg-image" alt loading="lazy" width="1938" height="1354" srcset="https://matduggan.com/content/images/size/w600/2024/08/image-3.png 600w, https://matduggan.com/content/images/size/w1000/2024/08/image-3.png 1000w, https://matduggan.com/content/images/size/w1600/2024/08/image-3.png 1600w, https://matduggan.com/content/images/2024/08/image-3.png 1938w" sizes="(min-width: 720px) 720px"></figure><p>For one days work this seems to be roughly where I hoped to be. Now we get to the crux of the matter. How do I log in?</p><p><strong>What you built is bad and I hate it</strong></p><p>The point is I should be able to solve this problem quickly and easily for a hobby website, not that you personally like what I made. The examples are not fully-fleshed out examples, just templates to demonstrate the problem. Also I&apos;m allowed to make stuff that serves no other function than it amuses me. </p><h2 id="password-login">Password Login</h2><p>The default for most sites (including Ghost) is just a username and password. The reason for this: it&apos;s easy, works on everything and it&apos;s pretty simple to work out a fallback flow for users. Everyone understands it, there&apos;s no concerns around data ownership or platform lock-in. </p><p>My login page:</p><pre><code>{% extends &apos;base.html&apos; %}

{% block header %}
  &lt;h1&gt;{% block title %}Log In{% endblock %}&lt;/h1&gt;
{% endblock %}

{% block content %}
  &lt;form method=&quot;post&quot;&gt;
    &lt;input type=&quot;hidden&quot; name=&quot;csrf_token&quot; value=&quot;{{ csrf_token() }}&quot;&gt;
    &lt;label for=&quot;username&quot;&gt;Username&lt;/label&gt;
    &lt;input name=&quot;username&quot; id=&quot;username&quot; required&gt;
    &lt;label for=&quot;password&quot;&gt;Password&lt;/label&gt;
    &lt;input type=&quot;password&quot; name=&quot;password&quot; id=&quot;password&quot; required&gt;
    &lt;input type=&quot;submit&quot; value=&quot;Log In&quot;&gt;
  &lt;/form&gt;
{% endblock %}
</code></pre><p>I&apos;ve got a <code>csrf_token</code> in there and the rest is pretty straight forward. Server-side is also pretty easy. </p><pre><code>@bp.route(&apos;/login&apos;, methods=(&apos;GET&apos;, &apos;POST&apos;))
@limiter.limit(&quot;5 per minute&quot;)
def login():
    if request.method == &apos;POST&apos;:
        username = request.form[&apos;username&apos;]
        password = request.form[&apos;password&apos;]
        db = get_db()
        error = None
        user = db.execute(
            &apos;SELECT * FROM user WHERE username = ?&apos;, (username,)
        ).fetchone()

        if user is None:
            error = &apos;Incorrect username.&apos;
        elif not check_password_hash(user[&apos;password&apos;], password):
            error = &apos;Incorrect password.&apos;

        if error is None:
            session.clear()
            session[&apos;user_id&apos;] = user[&apos;id&apos;]
            return redirect(url_for(&apos;index&apos;))

        flash(error)

    return render_template(&apos;auth/login.html&apos;)

</code></pre><p>I&apos;m not storing the raw password, just the hash. It&apos;s requires almost no work to do. It works exactly the way I think it should. Great fine. </p><h3 id="why-are-passwords-insufficient">Why are passwords insufficient?</h3><p>This has been talked <em>to death</em> but let&apos;s recap for the sake of me being able to say I did it and you can just kinda scroll quickly through this part. </p><ul><li>Users reuse usernames and passwords, so even though I might not know the raw text of the password another website might be (somehow) even lazier than me and their database gets leaked and then oh no I&apos;m hacked. </li><li>The password might be a bad password and it&apos;s just one people try and oh no they are in the system. </li><li>I have to build in a password reset flow because humans are bad at remembering things and that&apos;s just how it is. </li></ul><h3 id="password-reset-flow">Password Reset Flow</h3><p>Everyone has seen this, but let&apos;s talk about what I would need to modify about this small application to allow more than one person to use it. </p><ul><li>I would need to add a route that handles allowing the user to reset their password by requesting it through their email</li><li>To know where to send that email, I would need to receive and store the email address for every user</li><li>I would also need to verify the users email to ensure it worked</li><li>All of this hinges on having a token I could send to that user that I could generate with something like the following:</li></ul><pre><code>def generate_reset_password_token(self):
    serializer = URLSafeTimedSerializer(current_app.config[&quot;SECRET_KEY&quot;])

    return serializer.dumps(self.email, salt=self.password_hash)</code></pre><p>Since I&apos;m salting it with the hash of the current password which will change when they change the password, the token can only be used once. Makes sense. </p><p><strong>Why is this bad?</strong></p><p>For a ton of reasons. </p><ul><li>I don&apos;t want to know an email address if I don&apos;t need it. There&apos;s no reason to store more personal information about a user that makes the database more valuable if someone were to steal it.</li><li>Email addresses change. You need to write another route which handles that process, which isn&apos;t hard but then you need to decide whether you need to confirm that the user has access to address 1 with another magic URL or if it is sufficient to say they are currently logged in. </li><li>Finally it sort of punts the problem to email and says &quot;well I assume and hope your email is secure even if statistically you probably use the same password for both&quot;. </li></ul><h3 id="how-do-you-fix-this">How do you fix this?</h3><p>The problem can be boiled down to 2 basic parts:</p><ul><li>I don&apos;t want the user to tell me a username, I want a randomly generated username so it further reduces the value of information stored in my database. It also makes it harder to do a random drive-by login attempt. </li><li>I don&apos;t want to own the password management story. Ideally I want the browser to do this on its side. </li><li>In a perfect world I want a response that says &quot;yes we have stored these credentials somewhere under this users control&quot; and I can wash my hands of that until we get into the situation where somehow they&apos;ve lost access to the sync account (which should hopefully be rare enough that we can just do that in the database).</li></ul><p><strong>The annoying thing is this technology already exists. </strong></p><p>The <a href="https://developer.mozilla.org/en-US/docs/Web/API/Credential_Management_API" rel="noreferrer">Credential Manager API </a>does the things I am talking about. Effectively I would need to add some Javascript to my Registration page:</p><pre><code>    &lt;script&gt;
        document.getElementById(&apos;register-form&apos;).addEventListener(&apos;submit&apos;, function(event) {
            event.preventDefault(); // Prevent form submission

            const username = document.getElementById(&apos;username&apos;).value;
            const password = document.getElementById(&apos;password&apos;).value;

            // Save credentials using Credential Management API
            if (&apos;credentials&apos; in navigator) {
                const cred = new PasswordCredential({
                    id: username,
                    password: password
                });

                // Store credentials in the browser&apos;s password manager
                navigator.credentials.store(cred).then(() =&gt; {
                    console.log(&apos;Credentials stored successfully&apos;);
                    // Proceed with registration, for example, send credentials to your server
                    registerUser(username, password);
                }).catch(error =&gt; {
                    console.error(&apos;Error storing credentials:&apos;, error);
                });
            } 
        });

        function registerUser(username, password) {
            // Simulate server registration request
            fetch(&apos;/register&apos;, {
                method: &apos;POST&apos;,
                headers: { &apos;Content-Type&apos;: &apos;application/json&apos; },
                body: JSON.stringify({ username: username, password: password })
            }).then(response =&gt; {
                if (response.ok) {
                    console.log(&apos;User registered successfully&apos;);
                    // Redirect or show success message
                } else {
                    console.error(&apos;Registration failed&apos;);
                }
            });
        }
    &lt;/script&gt;</code></pre><p>Then on my login page something like this:</p><pre><code>function attemptAutoLogin() {
    if (&apos;credentials&apos; in navigator) {
        navigator.credentials.get({password: true}).then(cred =&gt; {
            if (cred) {
                // Send the credentials to the server to log in the user
                fetch(&apos;/login&apos;, {
                    method: &apos;POST&apos;,
                    body: new URLSearchParams({
                        &apos;username&apos;: cred.id,
                        &apos;password&apos;: cred.password
                    })
                }).then(response =&gt; {
                    // Handle login success or failure
                    if (response.ok) {
                        console.log(&apos;User logged in&apos;);
                    } else {
                        console.error(&apos;Login failed&apos;);
                    }
                });
            }
        }).catch(error =&gt; {
            console.error(&apos;Error retrieving credentials:&apos;, error);
        });
    }
}

// Call the function when the page loads
document.addEventListener(&apos;DOMContentLoaded&apos;, attemptAutoLogin);</code></pre><p>So great, I assign a random cred.id and cred.password, stick it in the browser and then I sorta wash my hands of it. </p><ul><li>We know the password is stored somewhere and can be synced for free</li><li>We know the user can pull the password out and put it somewhere else if they want to switch platforms </li><li>Browsers handle password migrations for users</li></ul><p>The problem with this approach is I don&apos;t know if I&apos;m supposed to use it. </p><figure class="kg-card kg-image-card"><img src="https://matduggan.com/content/images/2024/08/image-5.png" class="kg-image" alt loading="lazy" width="1596" height="942" srcset="https://matduggan.com/content/images/size/w600/2024/08/image-5.png 600w, https://matduggan.com/content/images/size/w1000/2024/08/image-5.png 1000w, https://matduggan.com/content/images/2024/08/image-5.png 1596w" sizes="(min-width: 720px) 720px"></figure><p>I have no idea what this means. Could this go away? In testing it does seem like the performance is all over the place. Firefox seems to have some issues with this, whereas Chrome seems to always nail it. iOS Safari also seems to have some problems. So this isn&apos;t seemingly reliable enough to use. </p><p>Just <em>please just make this a thing that works everywhere</em>. </p><p>Before you yell at me about Math.random I think the following would make a good password:</p><figure class="kg-card kg-code-card"><pre><code>function generatePassword(length) {
  const charset = &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789&quot;;
  let password = &quot;&quot;;
  for (let i = 0; i &lt; length; i++) {
    const randomIndex = Math.floor(Math.random() * charset.length);
    password += charset.charAt(randomIndex);
  }
  return password;
}

const password = generatePassword(32);
console.log(password);</code></pre><figcaption><p><a href="https://levelup.gitconnected.com/generating-a-strong-and-secure-password-with-javascript-7225e9c72768" rel="noreferrer"><span style="white-space: pre-wrap;">Source</span></a></p></figcaption></figure><p>But also maybe I&apos;m wrong. I never have any idea if I&apos;m generating random things in a safe way. Every time I do it someone tells me I did it wrong. </p><h2 id="totp">TOTP</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://matduggan.com/content/images/2024/08/image-7.png" class="kg-image" alt loading="lazy" width="895" height="648" srcset="https://matduggan.com/content/images/size/w600/2024/08/image-7.png 600w, https://matduggan.com/content/images/2024/08/image-7.png 895w" sizes="(min-width: 720px) 720px"><figcaption><a href="https://www.protectimus.com/blog/totp-algorithm-explained/" rel="noreferrer"><span style="white-space: pre-wrap;">Source</span></a></figcaption></figure><p>Alright so I can&apos;t get away with just a password, so I have to assume the password is bunk and use it as one element of login. Then I have to use either TOTP or HOTP. </p><p>From a user perspective TOTP works as follows:</p><ol><li>Set up 2FA for your online account.</li><li>Get a QR code.</li><li>You scan this QR code with an authenticator app of your choice </li><li>Your app will immediately start generating these six-digit tokens.</li><li>The website asks you to provide one of these six-digit tokens.</li></ol><p>Practically this is pretty straight forward. I add a few extra libraries:</p><pre><code>import io
import pyotp
import qrcode
from flask import send_file
</code></pre><p>I have to generate a secret <code>totp_secret = pyotp.random_base32()</code> which then I have to store in the database. Then I have to generate a QR code to show the user so they can generate the time-based codes. </p><pre><code>otp_uri = pyotp.totp.TOTP(totp_secret).provisioning_uri(username, issuer_name=&quot;ezblog&quot;)
                qr = qrcode.make(otp_uri)
                buf = io.BytesIO()
                qr.save(buf)
                buf.seek(0)

                return send_file(buf, mimetype=&apos;image/png&apos;)
</code></pre><p>However the more you look into this, the more complicated it gets. </p><ul><li>You actually don&apos;t need the token to be 6 digits. It can be up to 10. I don&apos;t know why I&apos;d want more or less. Presumably more is better.</li><li>The token can be valid for longer than 30 seconds. From reading it seems like that makes the code less reliant on perfect time sync between client and server (great) but also increases the probability of someone stealing the TOTP and using it. That doesn&apos;t seem like a <em>super</em> likely attack vector here so I&apos;ll make it way longer. But then why don&apos;t more services use longer tokens if the only concern then is if someone sees my code? Is this just people being unspeakably annoying?</li><li>I need to add some recovery step in case you lose access to the TOTP code. </li></ul><p><strong>How do you recover from a TOTP failure?</strong></p><p>Effectively I&apos;m back to my original problem. I can either:</p><ul><li>Go back to the email workflow I don&apos;t want because again I don&apos;t want to rely on email as some sort of super-secure bastion and I really don&apos;t want to store email addresses.</li><li>Or I generate a recovery code and give you those codes which let you bypass the TOTP requirement. That at least lets me be like &quot;this is no longer my fault&quot;. I like that. </li></ul><p><strong>How do I make a recovery code?</strong></p><p>Honest to god I have no idea. As far as I can tell a &quot;recovery code&quot; is just a randomly generated value I hash and stick in the database and then when the user enters it on a form, check the hash. It&apos;s just another password. I don&apos;t know why all the recovery codes I see are numbers, since it seems to have no relationship to that and would likely work with any string. </p><p>Effectively all I need to do with the recovery code is ensure it gets burned once used. Which is fine, but now I&apos;m confused. So I&apos;m generating passwords for the user and then I give the passwords back to the user and tell them to store them somewhere? Why don&apos;t I just give them the one good password for the initial login and call it a day? Why is one forbidden and the other is mandatory? </p><p><strong>Does HOTP help?</strong></p><p>I&apos;m really still not clear how HOTP works. Like I understand the basics:</p><pre><code>@app.route(&apos;/verify_2fa&apos;, methods=[&apos;GET&apos;, &apos;POST&apos;])
def verify_2fa():
    if request.method == &apos;POST&apos;:
        hotp = pyotp.HOTP(user_data[&apos;hotp_secret&apos;])
        otp = request.form[&apos;otp&apos;]
        if hotp.verify(otp, user_data[&apos;counter&apos;]):
            user_data[&apos;counter&apos;] += 1  # Increment the counter after successful verification
            return redirect(url_for(&apos;index&apos;))
        flash(&apos;Invalid OTP&apos;)
    return render_template(&apos;verify_2fa.html&apos;)</code></pre><p>There is a secret per-user and a counter and then I increment the counter every single time the user logs in. As far as I can tell there isn&apos;t a forcing mechanism which keeps the client and the server in-sync, so basically you tap a button and generate a password and then if you accidentally tap the button <em>again</em> the two counters are off. It seems like then the server has to decide &quot;are you a reasonable number of times off or an <em>unreasonable</em> amount of counts off&quot;. With the PyOTP library I don&apos;t see a way for me to control that:</p><pre><code>verify(otp: str, counter: int) &#x2192; bool[source]

    Verifies the OTP passed in against the current counter OTP.

    Parameters:

            otp &#x2013; the OTP to check against

            counter &#x2013; the OTP HMAC counter

</code></pre><p>So I mean I could test it against a certain range of counters from the counter I know and then accept it if it falls within that window, but you still are either running a different application or an app on your phone to enter this code. I&apos;m not sure exactly why I would ever use this over TOTP, but it definitely doesn&apos;t seem easier to recover from. </p><p>So TOTP would work with the recovery code but this <em>seems aggressive </em>to ask a normal people to install a different program on their computer or phone in order to login based on a time-based code which will stop working if the client and server (who have zero way to sync time with each other) drift too far apart. Then I need to give you recovery codes and just sorta hope you have somewhere good to put those. </p><p>That said, it is the <em>closest</em> to solving the problem because those are at least normal understandable human problems and it does meet my initial requirement of &quot;the user has one good password&quot;. It&apos;s also portable and allows administrators to be like &quot;well you fell through the one safety net, account is locked, make a new one&quot;. </p><p><strong>What is the expected treatment of the TOTP secret?</strong></p><p>When I was writing this out I became unsure if I&apos;m allowed to hash this secret. Like in theory I should be able to, because I don&apos;t need to recover it. If the user was to go through a TOTP reset flow, then I would probably (presumably) want to generate a new secret in which case there&apos;s nothing stopping me from using a strong key derivation function. </p><p>None of the tutorials I was able to find seemed to have any opinion on this topic. It <em>seems</em> like using encryption is the SOP, which is fine (it&apos;s not sitting on disk as a plain string) but introduces another failure point. It seems odd there isn&apos;t a way to negotiate a rotation with a client or really provide any sort of feedback. It meets my initial requirement, but the more I read about TOTP the more surprised I was it hasn&apos;t been better thought out. </p><p><strong>Things I would love from TOTP/HOTP</strong></p><ul><li>Some sort of secret rotation process would be great. It doesn&apos;t have to be common, but it would be nice if there was some standard way of informing the client.</li><li>Be great if we more clearly explained to people how long the codes should be valid for. Certainly 1 hour is sufficient for consumer-level applications right? </li><li>Explain like what would I do if the counters get off with HOTP. Certainly <em>some human error</em> must be accounted for by the designers. People are going to hit the button too many times at some point. </li></ul><h3 id="use-googlefacebookapple">Use Google/Facebook/Apple</h3><p>I&apos;m not against using these sorts of login buttons except I can&apos;t offer just one, I need to offer all of them. I have no idea what login that user is going to have or what make sense for them to use. It also means I need to manage some sort of app registration with each one of these companies for each domain that they can suspend approximately whenever they feel like it because they&apos;re giant megacorps. </p><figure class="kg-card kg-image-card"><img src="https://matduggan.com/content/images/2024/08/image-6.png" class="kg-image" alt loading="lazy" width="616" height="353" srcset="https://matduggan.com/content/images/size/w600/2024/08/image-6.png 600w, https://matduggan.com/content/images/2024/08/image-6.png 616w"></figure><p>So now I can&apos;t just spin up as many copies of this thing as I want with different URLs and I need to go through and test each one to ensure they work. I also need to come up with <em>some sort</em> of migration path for if one of them disappears and I need to authenticate the users into their <em>existing</em> accounts but using a different source of truth. </p><p>Since I cannot think of a way to do that which doesn&apos;t involve me basically emailing a magic link to the email address I get sent in the response from your corpo login and then allowing that form to update your user account with a different &quot;real_user_id&quot; I gotta abandon this. It just seems like a tremendous amount of work to not really &quot;solve&quot; the problem but just make the problem someone else&apos;s fault if it doesn&apos;t work. </p><p>Like if a user could previously log into a Facebook account and now no longer can, there&apos;s no customer service escalation they can go on. They can effectively go fuck themselves because nobody cares about one user encountering a problem. But that means you would still need some way of being like &quot;you were a Facebook user and now you are a Google user&quot;. Or what if the user typically logs in with Google, clicks Facebook instead and now has two accounts? Am I expected to reconcile the two?</p><p>It&apos;s also important to note that I don&apos;t want any permissions and I don&apos;t want all the information I get back. I don&apos;t want to store email address or real name or anything like that, so again like the OAuth flow is overkill for my usage. I have no intention of requesting permissions on behalf of these users with any of these providers. </p><h3 id="use-passkeys">Use Passkeys</h3><p>Me and passkeys don&apos;t get along super well, mostly because I think they&apos;re insane. I&apos;ve written a lot about them in the past: <a href="https://matduggan.com/passkeys-as-a-tool-for-user-retention/">https://matduggan.com/passkeys-as-a-tool-for-user-retention/</a> and I won&apos;t dwell on it except to say I don&apos;t think passkeys are designed with the first goal being an easy user experience. </p><p>But regardless passkeys do solve <em>some of my problems</em>. </p><ul><li>Since I&apos;m getting a public key I don&apos;t care if my database gets leaked</li><li>In theory I don&apos;t need an email address for fallback because <em>on some platforms some of the time</em> they sync</li><li>If users care a lot about ownership of personal data they can use a password manager sometimes if the password manager knows the right people and idk is friends with the mayor of passkeys or something. I don&apos;t really understand how that works, like what qualifies you to store the passkeys. </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://matduggan.com/content/images/2024/09/image.png" class="kg-image" alt loading="lazy" width="495" height="700"><figcaption><span style="white-space: pre-wrap;">Mayor of passkeys</span></figcaption></figure><p>My issue with passkeys is I cannot conceive of a even &quot;somewhat ok&quot; fallback plan. So you set it up on an iPhone with a Windows computer at home. You break your iPhone and get an Android. It doesn&apos;t seem that crazy of a scenario to me to not have any solution for. Do I need your phone number on top of all of this? I don&apos;t want that crap sitting in a database. </p><p><strong>Tell the users to buy a cross-platform password manager</strong></p><p>Oh ok yeah absolutely normal people care enough about passwords to pay a monthly fee. Thanks for the awesome tip. I think everyone on Earth would agree they&apos;d give up most of the price of a streaming platform full of fun content to pay for a password manager. Maybe I should tell them to spin up a docker container and run bitwarden while we&apos;re at it. </p><p><strong>Anyway</strong> I have a hyper-secure biometric login as step 1 and then what is step 2, as the fallback? An email magic link? Based on what? Do I give you &quot;recovery codes&quot; like I did with TOTP? It seems crazy to layer TOTP on top of passkeys but maybe that...makes some sense as a fallback route? That seems way too secure but also possibly the right answer?</p><p>I&apos;m not even trying to be snarky, I just don&apos;t understand what would be the acceptable position to take here. </p><h3 id="what-to-do-from-here">What to do from here</h3><p>Basically I&apos;m left where I started. Here are my options:</p><ul><li>Let the user assign a username and password and hope they let the browser or password manager do it and assume it is a good one. </li><li>Use the API in the browser to generate a good username and password and store it, hoping they always use a supported browser and that this API doesn&apos;t go away in the future. </li><li>Generate a TOTP but then also give them passwords called &quot;recovery codes&quot; and then hope they store those passwords somewhere good. </li><li>Use email magic links a lot and hope they remember to change their email address here when they lose access to an old email. </li><li>Use passkeys and then add on one of the other recovery systems and sort of hope for the best. </li></ul><p><strong>What basic stuff would I need to solve this problem forever:</strong></p><ul><li>The browser could <em>tell me</em> if it generated the password or if the user typed the password. If they type the password, force the 2FA flow. If not, don&apos;t. Let me tell the user &quot;seriously let the system make the password&quot;. 1 good password criteria met. </li><li>Have the PasswordCredential API work everywhere all the time and I&apos;ll make a random username and password on the client and then we can just be done with this forever. </li><li>Passkeys but they live in the browser and sync like a normal password. Passkey lite. Passkey but not for nuclear secrets. </li><li>TOTP but if recovery codes are gonna be a requirement can we make it part of the spec? It seems like a made-up concept we sorta tacked on top. </li></ul><p>I don&apos;t think these are crazy requirements.  I just think if we want people to build more stuff and for that stuff to be secure, someone needs to sit down and realistically map out &quot;how does a normal person do this&quot;. We need consistent reliable conventions I can build on top of, not weird design patterns we came up with because the initial concept was never tested on normal people before being formalized into a spec. </p>


