Adam Savage Sortimo Bins – Gemini Ai Capture

Bin 1 Contents (Thread Repair & Rivets): Blind pop rivets, Pop rivets, Semi-tubular rivets, Solid rivets

Bin 2 Contents (Crafting & Textiles): Decorative nails, Thumb tacks, Upholstery tacks

Bin 3 Contents (Thread Repair & Rivets): Blind pop rivets, Hand riveter tool, Pop rivets, Rivet gun

Bin 4 Contents (Woodworking & Rigging): Automotive push clips, Drywall anchors, Toggle bolts

Bin 5 Contents (Mechanical & Bearings): Compression springs, Extension springs, Springs

Bin 6 Contents (Mechanical & Bearings): Compression springs, Extension springs, Springs

Bin 7 Contents (Plumbing & Pneumatics): Brass pipe fittings, Galvanized pipe fittings, Pipe valves, Plumbing fittings

Bin 8 Contents (Plumbing & Pneumatics): Air fittings, Pneumatic push-to-connect fittings, PTC fittings Continue reading

Great Database Creation and Best Schema Practices

20 Tips for Great Database Creation and Best Schema Practices

  1. Normalize for integrity, but denormalize for performance. Start by structuring your database in 3rd Normal Form to reduce redundancy, but introduce denormalization selectively if specific joins are proven bottlenecks.
  2. Every table must have a Primary Key. This is a strict requirement, as it acts as the unique identifier for a row, allows you to reliably update or delete records, and helps the database engine organize data efficiently.
  3. Use surrogate keys over natural keys. Natural keys (like a Social Security Number or email) can change, forcing you to update every related foreign key. Surrogate keys (like UUIDs or auto-incrementing IDs) are immutable and safer.
  4. Use NOT NULL by default. Allowing NULLs introduces complex “three-valued logic.” Forcing columns to be NOT NULL ensures data quality at the point of entry and simplifies application logic.
  5. Enforce proper data types. Never store dates or numbers as strings. Proper data types allow the database to validate information, compress storage, and let you utilize built-in functions.
  6. Standardize your naming conventions. Pick a consistent format (like snake_case), choose either singular or plural for your table names (e.g., user vs. users), and never mix them.
  7. Always use Foreign Keys. Foreign keys are the only way to guarantee that a parent record actually exists before creating a related child record, which prevents orphaned data from breaking your application.
  8. Maintain a “Single Source of Truth.” Do not store calculated values (such as a total price derived from quantity * price) directly in a table unless extreme performance requires it, to avoid the risk of values falling out of sync.
  9. Include created_at and updated_at timestamps. Without these audit columns, you cannot properly troubleshoot data corruption or sync effectively to external analytics tools.
  10. Version your schema. Never run manual ALTER TABLE commands in production. Track every change using migration tools (like Flyway or Liquibase) and version control.
  11. Isolate Personally Identifiable Information (PII). Store sensitive data like passwords and addresses in heavily restricted, separate tables to apply stricter access controls.
  12. Use Check Constraints. Constraints like CHECK (price > 0) act as a final line of defense against application bugs, ensuring your data remains logically sound.
  13. Design for the “Delete.” Clearly define what should happen when a parent record is removed using ON DELETE CASCADE (to remove children) or SET NULL (to keep them), preventing database errors and garbage data.
  14. Index your Foreign Keys. Most databases do not index foreign keys automatically. Since almost every join uses a foreign key, failing to index them is a massive cause of slow performance.
  15. Utilize Partial Indexes. If you frequently query a specific subset of data (like WHERE status = 'active'), create a partial index to keep it tiny and incredibly fast compared to indexing the entire table.
  16. Prefer BIGINT over INT. A standard INT caps out at around 2.1 billion rows. For high-traffic tables, use BIGINT from the start to avoid catastrophic system failures when the database runs out of IDs.
  17. Use schemas and namespaces. Keep your database organized by grouping related tables into schemas (like billing, audit, and public) rather than dumping hundreds of tables into one space.
  18. Document your columns. Add comments directly to the database columns (e.g., COMMENT ON COLUMN) so that the “living documentation” stays intimately tied to the data itself.
  19. Use BOOLEAN instead of INT(1). Using proper true/false boolean flags is far more semantic and prevents invalid integers (like “99”) from entering a binary field.
  20. Design in three tiers. Create a conceptual data model for business scope, a logical data model for detailed attributes without technical compromise, and a physical data model tailored to your specific database software.

10 Things People Constantly Do Wrong

  1. Creating “The God Table.” Cramming 150+ columns into a single table makes the database slow to query, difficult to reason about, and implies multiple entities were improperly mashed together.
  2. Using SELECT *. Fetching every single column wastes network I/O, prevents the database from using highly optimized “covering indexes,” and risks breaking the application if a massive new column is added.
  3. Storing files or images directly in the database. Pushing large BLOBs into relational tables makes backups massive and painfully slow. You should store the actual files in an object store (like S3) and only save the file path in the database.
  4. Falling for the “N+1 Query Problem.” Fetching a list of 100 records and then looping through your application to run 100 separate queries for their related data is a top application killer. You should use a JOIN to fetch it all in one network trip.
  5. Overusing “Soft Deletes.” Adding an is_deleted column to everything breaks unique constraints and forces developers to clutter every single future query with WHERE is_deleted = false.
  6. Performing math inside WHERE clauses. Wrapping an indexed column in a function or calculation (e.g., WHERE YEAR(date) = 2023) completely blinds the database to the index. Keep the column “naked” on one side of the operator.
  7. Abusing EAV (Entity-Attribute-Value) patterns. Storing your schema as rows of attributes and values might seem infinitely flexible, but it makes even basic queries require dozens of joins, turning data retrieval into a nightmare.
  8. Never testing backups. Believing you have a backup strategy when you have never successfully practiced a “Point-in-Time Recovery” (PITR). A backup is useless until you prove you can restore it.
  9. Sorting with ORDER BY RAND(). This command forces the database to assign a random number to every single row, sort the entire massive table, and then pick one, acting as a massive performance bottleneck.
  10. Using the database as a Message Queue. Treating a relational table as a high-volume “to-do list” for background jobs causes massive bloat and lock contention. Dedicated tools like RabbitMQ or Kafka should be used instead.

20 essential SQL commands and clauses

Data Manipulation: Reading and Modifying Data

1. SELECT

  • What it does: Retrieves data from one or more tables.

  • Why it’s important: It is the most fundamental and frequently used SQL command. Without it, you cannot view the information stored in your database.

  • Real-life example: An e-commerce site uses SELECT to display a list of all products currently in stock to a customer browsing the catalog.

2. INSERT INTO

  • What it does: Adds new rows of data to a table.

  • Why it’s important: It is the primary way new information enters your system.

  • Real-life example: When a new user creates an account on a social media app, an INSERT command saves their username, email, and password hash into the “Users” table.

3. UPDATE

  • What it does: Modifies existing data within a table.

  • Why it’s important: Data changes over time. This command ensures your database reflects the most current reality without having to delete and recreate records.

  • Real-life example: A banking application uses UPDATE to change a customer’s account balance after they make a withdrawal.

4. DELETE

  • What it does: Removes one or more rows from a table.

  • Why it’s important: Essential for removing obsolete, incorrect, or canceled records to save space and maintain data accuracy.

  • Real-life example: A healthcare system uses DELETE to remove an appointment record when a patient calls to cancel it.


Data Definition: Structuring the Database

5. CREATE

  • What it does: Builds a new database, table, index, or view.

  • Why it’s important: It sets up the actual architecture and containers where your data will live.

  • Real-life example: A developer launching a new blog uses CREATE TABLE to set up a structure with columns for “Post Title”, “Author”, “Publish Date”, and “Content”.

6. ALTER

  • What it does: Modifies the structure of an existing database object (like adding or dropping a column from a table).

  • Why it’s important: Business requirements evolve. ALTER lets you adapt your database schema without losing the existing data.

  • Real-life example: An HR platform adds a “Pronouns” column to an existing “Employee” table using the ALTER command.

7. DROP

  • What it does: Permanently deletes an entire database, table, or index, along with all its data.

  • Why it’s important: Used to clean up old, unused structures that are taking up server resources.

  • Real-life example: A company migrating to a completely new software system might use DROP TABLE on the legacy tables once the migration is fully verified.

8. TRUNCATE

  • What it does: Quickly removes all rows from a table, but leaves the table structure intact.

  • Why it’s important: It is much faster and uses fewer system resources than using DELETE to clear out a massive table.

  • Real-life example: A weather monitoring system uses TRUNCATE at midnight on the first of the month to clear out temporary daily logs after they’ve been archived elsewhere.


Filtering and Sorting: Refining Your Queries

9. WHERE

  • What it does: Filters records based on specific conditions.

  • Why it’s important: Databases contain millions of rows. WHERE allows you to isolate the exact specific data you need.

  • Real-life example: A customer service rep uses a WHERE clause to find an order using a specific tracking number (WHERE tracking_number = '12345').

10. ORDER BY

  • What it does: Sorts the result set of a query in ascending (ASC) or descending (DESC) order.

  • Why it’s important: Organizes raw data into a readable, logical format for the end user.

  • Real-life example: A real estate website uses ORDER BY price DESC to show the most expensive houses at the top of the search results.

11. GROUP BY

  • What it does: Groups rows that have the same values into summary rows (often used with aggregate functions like COUNT, MAX, SUM).

  • Why it’s important: Crucial for data analysis and generating reports.

  • Real-life example: A retail manager uses GROUP BY store_location alongside a SUM(sales) function to see total daily revenue for each branch.

12. HAVING

  • What it does: Filters records after they have been grouped by the GROUP BY clause (since WHERE cannot be used with aggregate functions).

  • Why it’s important: Allows you to set conditions on summarized data.

  • Real-life example: Using the retail example above, adding HAVING SUM(sales) > 10000 filters the report to only show store branches that made over $10,000 that day.

13. DISTINCT

  • What it does: Returns only distinct (different) values, removing duplicates from the result set.

  • Why it’s important: Useful for finding the unique categories or types of data within a massive column.

  • Real-life example: A marketing team uses SELECT DISTINCT country on their subscriber list to see exactly which countries their readers are from, without seeing the same country listed 5,000 times.

14. LIMIT (or TOP / FETCH FIRST)

  • What it does: Restricts the number of rows returned by a query.

  • Why it’s important: Improves performance by not loading unnecessary data, especially when you only need a sample or the “top X” results.

  • Real-life example: A gaming leaderboard query uses ORDER BY score DESC LIMIT 10 to display only the top 10 highest-scoring players.


Combining Data: Joins and Sets

15. INNER JOIN

  • What it does: Combines rows from two or more tables based on a related column between them, returning only records that have matching values in both tables.

  • Why it’s important: Relational databases split data into multiple tables to reduce redundancy. Joins are how you stitch that data back together into a meaningful picture.

  • Real-life example: An app combines a “Students” table and a “Classes” table using an INNER JOIN to generate a report showing only students who are actively enrolled in a class.

16. LEFT JOIN

  • What it does: Returns all records from the left table, and the matched records from the right table. If there is no match, the result is NULL from the right side.

  • Why it’s important: Vital for finding “orphaned” data or seeing a complete list of a primary entity regardless of whether they have secondary actions.

  • Real-life example: An e-commerce site uses a LEFT JOIN to show a list of all registered users, alongside their recent purchases. Users who haven’t bought anything yet still show up, but with a blank purchase history.

17. UNION

  • What it does: Combines the result sets of two or more SELECT statements into a single column output.

  • Why it’s important: Useful for consolidating similar data that lives in completely different tables.

  • Real-life example: A global company has a “North_America_Staff” table and a “Europe_Staff” table. They use UNION to pull a single, combined list of all employee email addresses.


Security and Transactions: Control and Safety

18. GRANT

  • What it does: Gives specific user accounts permission to perform certain actions (like SELECT or UPDATE) on specific database objects.

  • Why it’s important: The backbone of database security, ensuring users can only access or change what they are authorized to.

  • Real-life example: A database administrator uses GRANT SELECT ON payroll_table TO 'finance_team' so the finance department can read salary data, but cannot alter it.

19. COMMIT

  • What it does: Permanently saves all changes made during the current database transaction.

  • Why it’s important: Ensures that a series of interconnected database actions all succeed together before making them permanent, preventing partial data updates.

  • Real-life example: When you transfer money online, the database removes money from your account and adds it to another. COMMIT is called at the very end to finalize both actions simultaneously.

20. ROLLBACK

  • What it does: Undoes transactions that have not yet been saved to the database.

  • Why it’s important: Acts as a fail-safe. If an error occurs halfway through a complex multi-step update, ROLLBACK reverts the database to its previous stable state.

  • Real-life example: In the money transfer example above, if the system successfully deducts your money but the receiving bank’s server crashes before the money is deposited, ROLLBACK is triggered to refund your account as if the transaction never started.

The “Slippery I” Disease: Credit Theft in the Workplace

In the corporate world, a quiet epidemic often goes unnoticed by senior leadership: The Slippery “I” Disease. This occurs when managers or directors systematically replace “we” with “I” when presenting successes, effectively sliding into the spotlight on the back of their team’s hard work. It is a subtle form of professional erasure that can demoralize high performers and stall careers.

Recognizing the Symptoms

The disease manifests through “linguistic slippage.” During a high-stakes meeting, a manager might say, “I developed this strategy,” when they actually only approved a slide deck created by their subordinates. This behavior isn’t always malicious; often, it is a survival mechanism used by middle management to appear indispensable to executives. However, the result is the same: the true architects of the work become invisible.

How to Combat the “Slippery I”

To protect your career and ensure your contributions are recognized, consider these three tactical shifts:

1. The “Pre-Emptive Paper Trail”

The best way to combat credit theft is to make your ownership undeniable before the final presentation.

* The Progress Update: Send regular, high-level email updates to your manager and CC relevant stakeholders.

* The Metadata Defense: Ensure your name is on the “Properties” of every document and the “Version History” of every shared file.

2. The “Technical Pivot” in Real-Time

If you are present when a manager takes credit, don’t stay silent. Use a technical follow-up to reclaim the floor.

* The Tactic: Wait for them to finish, then add: “To expand on the point I built into that specific model, the reason I chose that data set was…”

* The Result: This demonstrates that while the manager may have “presented” the idea, you are the one who actually understands the mechanics behind it.

Strategic Visibility

Don’t rely on your manager to be your only spokesperson. Cultivate “sideways” relationships with peers in other departments and “upward” visibility by participating in cross-functional committees. When more people know what you are working on, it becomes much harder for a single director to claim your output as their own.

The “We” Culture

Ultimately, leadership is about multiplication, not subtraction. Healthy organizations reward leaders who say, “I am proud of what my team achieved,” because it shows they can build talent. If you find yourself in a culture where the “Slippery I” is the norm, it may be a sign of a deeper systemic issue regarding how performance is measured.

Pulse Protocol: Engineering at the Speed of Thought

The Pulse Protocol: Engineering at the Speed of Thought

The Pulse Protocol is a high-velocity framework designed to replace rigid, linear engineering with a fluid, multi-dimensional workflow. It transforms data from a static record into a living “Pulse” that keeps every team member in perfect sync.

1. The Core Philosophy: “Data-First Design”

In this model, the “Master Document” is a myth. CAD files, spreadsheets, and diagrams are simply Visual Interfaces for a central, headless database.

  • Asynchronous Freedom: Anyone can contribute to the project at any node (P1–P4) at any time.

  • Instant Synchronicity: A single update in one portal resonates through the entire Protocol immediately.

2. The Four Portals of Entry

The Pulse Protocol ensures that no process ever blocks another. Every entry point is live and valid.

Portal Role The Pulse Action
P1: Procurement Financial View Swapping an unavailable part updates the Part ID across the entire project ecosystem instantly.
P2: Logic Calculated View Changing a performance requirement (like HP or Voltage) flags the relevant diagrams for an automatic audit.
P3: Spatial Physical View Moving a component on a floor plan updates the BOM with new physical dimensions and material lengths.
P4: Functional Schematic View Adding a safety loop generates “Ready-to-Place” virtual assets for the layout team.

3. The “Unplaced Assets” Strategy

To maintain constant flow, the Protocol uses a Project Buffer.

Engineers can define “Data-Only” entities in a spreadsheet before a single line is drawn in CAD. When the designer opens the drawing, they see a “Pulse Bin” of items already defined by the team. They simply drag-and-drop these intelligent assets into the physical space to “complete” the loop.

4. The Technical Blueprint: How the Pulse Beats

For small and medium teams, we achieve this through the Triple-Link Method:

  1. The GUID: Every component has a unique digital fingerprint that stays the same across all platforms.

  2. The Headless Brain: A shared, lightweight database (SQL Lite or SmartSheet) that holds the project intelligence.

  3. The Listeners: * AutoCAD: A background script that pushes attribute changes to the Brain upon saving.

    • Excel: PowerQuery links that pull the latest quantities and statuses with one click.


5. From Friction to Freedom

The Pulse Protocol ends the era of manual data entry and replaces it with Data Validation.

  • The Vision: You aren’t just “drawing”; you are navigating a live map of the project’s reality.

  • The Advantage: It allows a 2-person team to operate with the coordination of a 10-person firm because the data handles the communication.

The Pulse Rule: A “Block” is no longer just geometry; it is a Data Row with a graphical representation.

Handy Linux command

“REISUB” (The Safe Reboot)

If your entire computer is frozen and the kills above don’t help, Linux users often use the REISUB sequence to reboot safely without corrupting the hard drive. You hold Alt + SysRq and slowly type:

R (unRaw keyboard)
E (tErminate processes)
I (kIll processes)
S (Sync data to disk)
U (Unmount disks)
B (reBoot)

Memory  Tool
sudo apt install htop

Hard Disk Tool:
sudo apt install baobab

MQTT SERVER:

sudo systemctl stop mosquitto
sudo rm /var/lib/mosquitto/mosquitto.db
sudo systemctl start mosquitto
systemctl status mosquitto //IS it running
tail -f /path/to/logfile // Outputs the last 10 lines of a file and actively monitors it for new entries.

PID

PS AUX //Show all process

KILL
Kill PID number
killall python3
killall chrome

Gemini –yolo //accepts all edits without prompting

Networking:
ss -tulpn // Shows all listening ports and the processes attached to them.

🛠️ The “Oops” Savers
history | grep <keyword>: Searches your terminal history for that complex, 50-character command you typed three days ago but forgot to save.

sudo !!: If you type a command and get a “Permission denied” error, running this will instantly rerun your last command with sudo appended to the front.

 

————————–
Python CACHE DELETE:
# Deletes all __pycache__ directories
find . -type d -name “__pycache__” -exec rm -rf {} +

# Deletes any stray compiled Python files (especially helpful for older Python versions)
find . -type f -name “*.py[co]” -delete

# pip cahse purge
pip cache purge

The Hall of Mirrors: Taming the Infinite Echo in Decoupled Systems

The promise of the decoupled architecture—the “Open Air” philosophy—is an engineer’s dream. You separate the physical control surface from the processing engine, granting yourself the ultimate agility. A fader isn’t just a volume slider anymore; it’s a universal, assignable control vector.

But as you start wiring the system together, Anthony, a dark reality quickly rears its head. You push the motorized fader up. The software volume goes up. Then, the fader violently twitches, fights your finger, and shoots back down, sending the software volume spiraling into a chaotic blur before crashing the network with a flood of packets.

You haven’t just built a control system. You’ve built an infinite feedback loop.

Here is the story of the hardest obstacles in decoupling hardware from software, and the technical gauntlet the Splinker must run to maintain order.


Obstacle 1: The “Ghost Touch” and the Infinite Echo

The Analogy: Imagine two people standing in an infinitely reflective hall of mirrors, trying to communicate with walkie-talkies that have their buttons permanently taped down. Every word one person says is immediately echoed back by the walls, and that echo is picked up by the other radio, which transmits it back again.

The Technical Reality: In a bi-directional system, devices are incredibly literal.

  1. The human finger moves a motorized fader to 0.7.

  2. The fader’s sensor detects this and fires an MQTT message: SET VOLUME 0.7.

  3. The software engine receives it, updates its internal state, and faithfully broadcasts the new state to the network: VOLUME IS NOW 0.7.

  4. The physical fader receives this state update. Its motor physically drives the fader to the 0.7 position.

  5. The Fatal Flaw: The fader’s sensor feels the motor moving it, assumes a human just pushed it, and fires a new control message: SET VOLUME 0.701.

The Overcome: This is why the origin_source and msg_guid are strictly necessary. The Splinker acts as the bouncer at the door, forcing every device to wear a nametag. When the hardware receives a state update, it must check the origin. If it sees its own ID, it applies a digital mute to its sensors: “I started this action, so I will update my motor to match the state, but I will ignore the resulting sensor twitch.”

Obstacle 2: The Physics of Meat and Metal (Inertia)

The Analogy: You are driving a massive cargo ship, but your steering wheel is connected to a laser pointer. The laser moves instantly to wherever you point it (digital software), but the ship takes five agonizing seconds to actually turn (physical motors). If you keep aggressively turning the wheel back and forth before the ship catches up, you snap the rudder.

The Technical Reality: Software updates in microseconds. Motors, gears, and belts take milliseconds or even tenths of a second to physically arrive at their destination. Furthermore, human hands are jittery. When you slide a fader, you aren’t sending one command; you are sending hundreds of granular micro-adjustments (0.61, 0.63, 0.68).

If the Splinker tries to force the motorized fader to physically track every single micro-bounce of a feedback loop while the human is still holding it, the motor will burn out or the fader will aggressively stutter against the user’s finger.

The Overcome: This requires a sophisticated Debounce and Settling protocol. The Splinker must recognize an active “Splice” stream. While a flood of commands is coming from a single source, the Splinker flags them as is_settled: false. It instructs the receiving hardware: “Do not fight the human. Let them move.” Only when the stream goes quiet for a predefined window (e.g., 50ms) does the Splinker send the is_settled: true command, signaling the physical motors to cleanly snap to their final resting position.

Obstacle 3: The Time-Warp of the Network

The Analogy: You are mailing a series of letters to a friend with instructions for a recipe. You mail Step 1 on Monday, Step 2 on Tuesday, and Step 3 on Wednesday. But because of chaos at the post office, your friend receives Step 3 on Thursday, Step 1 on Friday, and Step 2 on Saturday. If they follow them in the order they arrive, the cake explodes.

The Technical Reality: Networks are unpredictable. In an IP-based MQTT system, packets can take different routes. This causes network jitter. A user might quickly slide a fader from 0 to 10. The system generates:

  • Packet A: Value 2

  • Packet B: Value 7

  • Packet C: Value 10

If a micro-bottleneck occurs, the software might receive them in the order: A, C, B. The volume goes to 2, jumps correctly to 10, and then disastrously jerks back down to 7, where it stays.

The Overcome: Relying on the network to sort out the echo is a losing battle. The solution requires an Interaction Lock (The “Do Not Disturb” Protocol) built directly into the hardware and UI widgets.

When a human finger touches a motorized fader, the controller engages a strict hardware-level lock (is_locked = True). While the human is touching it, the fader violently deafens itself to the network. It drops all incoming LINK_FEEDBACK messages into the void, refusing to update its visual position or fire its motor, while simultaneously blasting its own SPLICE_ACTION commands out to the software.
The infinite loop is severed because the hardware is physically incapable of reacting to its own network echo. Only when the human lets go does the lock disengage, allowing the fader to listen to the network once again.

Structuring Python for Mission-Critical Aerospace Standards

Structuring Python for Mission-Critical Aerospace Standards

When developing software for safety-critical environments like the Joint Strike Fighter (JSF) Air Vehicle, predictability, determinism, and rigorous mathematical analyzability are paramount. The JSF AV coding standards were engineered to guarantee that software behaves exactly as intended under extreme conditions, with no hidden surprises.

https://www.stroustrup.com/JSF-AV-rules.pdf

Python, by its nature, is a highly dynamic, flexible, and forgiving language. If one were to adapt Python to meet the strict requirements of this aerospace standard, many of the language’s most beloved features and built-in functions would have to be strictly forbidden. Here is a breakdown of the core Python functions and paradigms that are not allowed under the standard, and the engineering rationale behind their prohibition.

1. Exception Handling (try, except, finally, raise)

In standard Python development, wrapping code in try and except blocks is the idiomatic way to handle errors. Under the JSF AV standard, this entire paradigm is completely banned.

Why it is not allowed: Exceptions introduce hidden, non-deterministic jump points in the execution of the program. When an error is raised, the program breaks its linear, predictable control flow and searches the call stack for an appropriate handler. In mission-critical software, every possible path of execution must be mathematically verifiable and tested.
Exceptions obscure the control flow graph, making it nearly impossible to guarantee execution time, state consistency, or memory stability when an error occurs. Instead, functions must return explicit error codes or status flags that are manually checked by the caller.

2. Recursion (Functions calling themselves)

A common algorithmic approach in Python is to use recursion—where a function calls itself to solve smaller instances of a problem (e.g., traversing a tree or calculating a factorial).

Why it is not allowed:
The standard strictly forbids any function from calling itself, either directly or indirectly. Recursion relies on dynamically allocating new frames on the call stack for every recursive jump. In an embedded aerospace system, memory is severely constrained and must be strictly bounded.
If a base case fails or an input is unexpectedly large, recursion can cause unbounded stack growth, ultimately resulting in a stack overflow and a catastrophic system crash. All repetitive logic must be rewritten using deterministic for or while loops.

3. Dynamic Execution and Metaprogramming (eval(), exec(), setattr())

Python allows developers to evaluate strings as code at runtime using eval(), execute dynamic blocks using exec(), or alter the structure of objects on the fly using setattr() (often called monkey-patching).

Why it is not allowed:
The standard mandates that there shall be absolutely no self-modifying code. The software that is analyzed, tested, and compiled on the ground must be the exact same software executing in the air. Dynamic execution allows the program’s logic and structure to change during runtime, which completely invalidates static analysis, security audits, and structural coverage reports.

4. System Interruption and Environment Hooks (sys.exit(), os.system(), os.environ)

Python developers frequently use sys.exit() to terminate a script early, or os.system() and subprocess modules to interact with the underlying operating system.

Why it is not allowed:
Mission-critical systems operate continuously and cannot abruptly “exit” or terminate their host processes without severe consequences. Functions like sys.exit() bypass the normal, controlled shutdown sequences of the hardware. Furthermore, interacting with the host environment via system calls or environment variables introduces dependencies on external, unverified factors. The software must be entirely self-contained and isolated from unpredictable operating system states.

5. Unbounded Arguments (*args, **kwargs)

Python functions can accept a variable number of positional or keyword arguments using *args and **kwargs.

Why it is not allowed:
The standard requires interfaces to be strictly defined, visible, and bounded. Banning variable argument lists ensures that the exact number and type of inputs to any function are known at design time. Additionally, the standard enforces a hard limit on the total number of arguments a function can accept (e.g., maximum of 7). Unbounded arguments prevent the compiler and static analysis tools from verifying that a function is being called safely and correctly.

6. Untyped Dynamic Data Structures (Raw list, dict, and mixed types)

Python lists and dictionaries can dynamically grow in size and can hold mixed data types simultaneously (e.g., my_list = [1, “two”, 3.0]).

Why it is not allowed:
There are two reasons these structures violate the standard:

Dynamic Memory Allocation: Native lists and dictionaries resize themselves automatically, which requires dynamic memory allocation under the hood. The standard severely restricts dynamic memory allocation because it can lead to memory fragmentation and out-of-memory errors during operation.

Type Ambiguity: The standard forbids mixed-type data structures (analogous to banning unions). Every variable and collection must have a single, statically defined, and unambiguous type to prevent runtime type-casting errors or data corruption. Bounded, strictly typed, and pre-allocated arrays must be used instead.

The anatomy of a fader cap

Overall Geometric Topology & Curvature

  • Base Volume: Begin with a standard rectangular cuboid. The lateral sides (left and right) remain strictly planar and parallel to each other.

  • The Primary Saddle (Concave): The top face features a deep, concave cylindrical boolean subtraction running along the transverse axis. This creates the central “scoop” or saddle where the finger rests. The nadir of this curve sits precisely at the center point of the top plane.

  • The Crests and Downward Trail (Convex): The front and back edges of the concave saddle do not end in sharp corners. Instead, they transition into high-radius convex fillets. These rounded crests roll smoothly downward, transforming the horizontal top surface into the vertical front and back faces. This continuous curve creates a soft, sweeping drop-off on both ends of the longitudinal axis.

  • OLYMPUS DIGITAL CAMERA

     

 

Surface Topography: The Grip Grooves

  • Geometry/Displacement: Embedded entirely within the concave saddle are a series of parallel, shallow horizontal striations.

  • Orientation: These grooves run along the transverse axis (perpendicular to the fader’s sliding direction).

  • Shading Execution: In a PBR workflow, these should be handled via a normal map or displacement map using a subtle sine-wave profile. They are designed to catch grazing light, creating alternating horizontal micro-bands of soft specular highlights and self-shadowing (ambient occlusion) within the deeper scoop.

The Indicator Line Wrap

  • UV Projection: The stark indicator line requires a continuous UV projection mapped along the longitudinal axis.

  • Path of the Wrap: The solid band originates on the flat, lower-front vertical face. It sweeps seamlessly up and over the front convex crest, plunges directly through the center of the ribbed concave saddle (bisecting the horizontal grooves at a perfect 90-degree perpendicular angle), climbs up the rear convex crest, and drops down to terminate on the rear vertical face.

  • Material Contrast: The painted line must have an independent material ID or a mask. It requires a high-albedo, purely diffuse surface (Roughness 0.9+) with zero specularity, ensuring the line remains readable and does not reflect light the way the base plastic does.

Material & PBR Shading Instructions

  • Base Material: Dielectric polymer (injection-molded plastic).

    Index of Refraction (IOR): ~1.45

  • Roughness: Set to medium-low (approx. 0.35). The plastic should exhibit a slight sheen. Specular reflections should be visible but slightly blurred, simulating a micro-texture that prevents a perfect, mirror-like gloss.

  • Specular Highlights: The primary lighting interaction will occur on the front and back convex crests. These tight curves should act as sharp specular catchers, grabbing overhead lights and creating bright, curved horizontal glints that define the upper boundaries of the fader cap.

  • Shadowing: Soft shadowing and heavy ambient occlusion should pool in the central concave depression, contrasting with the highly illuminated convex lips.

Drum kit desk

Merging a professional workspace with an electronic kit like your Alesis Nitro Max is the ultimate space-saving play, Anthony. By treating the desk frame as your drum rack, you can shift from “deep work” to “deep grooves” without ever leaving your seat.

Here is how to re-engineer that Alesis setup into a “Drum-Desk” hybrid.

1. The Core Foundation: Height & Footing

The primary challenge of a hybrid station is vertical clearance.

* The Desk: You almost certainly need an adjustable-height standing desk. A standard fixed desk (typically 29 inches) is too low to accommodate the upward travel of your knees while playing the kick and hi-hat pedals. You’ll want to raise it to “drumming height” to clear your sticks and lower it for “typing height.”

* The Seat: Swap the office chair for a high-quality drum throne. While it lacks a backrest for long-term lumbar support, it provides 360-degree mobility and—crucially—won’t roll away when you bury the beater into the kick pedal.

2. Component Placement: The “Wrap-Around” Strategy

To keep the workspace functional, the drum components must integrate into the desk’s footprint rather than fight it.

The “Under-Desk” Zone (Kick & Snare)

* Kick Pedal: Position the kick pad/trigger directly against a wall or a heavy desk leg to prevent “creep” during play.

* Snare Drum: This is the trickiest piece. Use a dedicated snare stand set to its lowest position. When working, it sits between your knees; when drumming, slide your keyboard back to clear “stick room” for rimshots.

The “Desktop” Zone (Toms & Hi-Hat)

* Hi-Hat: Position the Alesis hat pad to the left of your laptop. If you use a stand-alone hi-hat stand, place it just outside the desk’s left leg.

* Toms: Instead of using the bulky Alesis rack, use multiclamps. You can clamp the four tom pads directly to the desk edges or even to your monitor arms to keep the desk surface clear.

* High Toms: Flank your center monitor.

* Floor Toms: Clamp these to the right side of the desk, near your mouse area.

The “Aerial” Zone (Cymbals)

* Ride & Crashes: Use long cymbal boom arms clamped to the back of the desk or your monitor pole. This keeps the “swing” area of the cymbals above your three monitors so they don’t obstruct your view while you’re working.

3. Tech Integration & Cable Management

Since you’re running three monitors and a laptop, your “brain” (the Nitro Max module) should act as the audio bridge.

* Audio Routing: Connect the Module Out to your computer’s audio interface. This allows you to hear your drums through your studio monitors or workspace headset while simultaneously playing along to Spotify or YouTube lessons on your screens.

* Cable Management: This is critical. Use Velcro ties to run all trigger cables along the underside of the desk frame. A “rat’s nest” of cables near your feet will interfere with your pedal work and ruin the clean aesthetic of your office.

Hybrid Layout Summary

| Component | Placement Strategy |

|—|—|

| Snare | Centered, low-profile stand between the legs. |

| Kick | Floor level, braced against a desk leg. |

| Hi-Hat | Left side, clear of the laptop/outer monitor. |

| Toms | Clamped to desk edges or monitor poles. |

| Cymbals | Boom arms extending from the back of the desk. |

| Module | Mounted under the desk surface for easy “blind” reach. |

 

Drone-pressor

The Drone-pressor is a specialized audio restoration and spectral processing plugin designed for film post-production, broadcast, and field recording cleanup. Unlike a standard compressor or noise gate, it uses AI-driven motion-tracking algorithms to isolate and suppress the specific non-linear acoustic signatures of Unmanned Aerial Vehicles (UAVs).

Below are the technical specifications for its primary control parameters.

1. Pitch Take-Off Speed

This parameter controls the sensitivity of the plugin’s tracking oscillator. Because drone motors increase in pitch exponentially during takeoff or rapid maneuvers, a standard static filter would fail to track the sound.

* Specification: A temporal-frequency variable that defines the rate (in Hz/ms) at which the suppression filter can “climb” or “dive.”

* Function: Lower settings are used for stable, hovering drones. Higher settings allow the plugin to maintain suppression during aggressive vertical climbs or “punch-outs” where the RPM spikes instantly.

2. Doppler Effect Remover

This is the “spatial de-shifter.” It counteracts the frequency compression and expansion caused by the drone’s movement relative to the microphone.

* Specification: An inverse-motion algorithm that calculates the radial velocity of the sound source.

* Function: It “un-stretches” the audio in real-time. It identifies the pitch drop (the “Nee-Yum” sound) and applies a compensatory pitch-shift in the opposite direction, keeping the fundamental drone frequency centered so the narrow-band notch filters can remain locked on the target.

3. Drone Size (UAV Mass Class)

The acoustic signature of a drone is dictated by the length and material of its propellers. Smaller drones “whine” (high frequency), while larger drones “thrum” (low-mid frequency).

* Specification: A multi-band spectral profile selector ranging from Nano/Micro (250g) to Industrial/Heavy Lift (25kg+).

* Function: Adjusting this shifts the plugin’s “Attention Mask.”

* Small: Focuses on 2kHz to 15kHz.

* Large: Focuses on 150Hz to 1.5kHz.

4. Optical Metadata Integration (The Camera Toggle)

This unique feature allows the plugin to sync with visual data from the film set or the drone’s onboard feed to improve accuracy.

Parameter: Camera Sync (Enabled)

* Specification: Utilizes an Optical Flow Analysis bridge.

* Function: The plugin “looks” at the video file in the DAW. If the drone is visually moving left to right at a certain speed, the plugin automatically calculates the required Doppler correction and suppression strength based on the pixel-distance from the camera. It automates the parameters based on what is seen on screen.

Parameter: Blind Mode (No Camera)

* Specification: Pure Acoustic Inference Engine.

* Function: The plugin relies entirely on the audio signal. It uses a “best-guess” AI model to identify the drone type and distance based solely on harmonic distortion and the sound pressure level (SPL). This is used for audio-only recordings or when the drone is “off-camera.”

Summary Table for DAW Implementation

| Parameter | Unit | Purpose |

| Slew Rate | Hz/ms | Tracks how fast the motor pitch changes. |

| Shift Comp | Percentage | How much of the Doppler shift to flatten. |

| Mass Profile | grams/kg | Adjusts the frequency “sweet spot.” |

| Optic Link | On/Off | Syncs suppression to visual movement. |

To effectively remove the sound of a drone from an audio track, the “Drone-pressor” needs parameters that address the specific physics of multi-rotor flight. Because drones are moving targets with shifting frequencies, a simple static filter won’t work.

Here are the essential parameters for the removal engine:
1. Fundamental Frequency Tracking (f_0)
Since drone motors spin at variable speeds, the “noise” isn’t a single tone—it’s a moving target.
* Auto-Center: A real-time pitch tracker that locks onto the primary whine of the motors.
* Harmonic Multiplier: Drones produce integer multiples of their base frequency (overtones). This parameter allows you to suppress the 2nd, 3rd, and 4th harmonics simultaneously with a single slider.
2. Blade Count & Symmetry
The number of propellers changes the “texture” of the sound.
* Blade Parameter: Select between Tri-blade (smoother, higher frequency) or Bi-blade (choppier, more aggressive).
* Phase Offset: Adjusts for the fact that four motors are never perfectly in sync, creating a “beating” or “pulsing” effect.
3. Spatial Motion Parameters
These deal with the drone’s physical movement through the 3D sound field.
* Radial Velocity (Doppler Fix): A “Look Ahead” feature that predicts the pitch drop as the drone passes the microphone, adjusting the notch filters before the frequency shift occurs.
* Proximity Gain: An inverse-square law filter. As the drone gets closer (louder), the suppression intensity automatically increases to prevent clipping or “bleed.”
4. Turbulence & “Prop Wash” Removal
When a drone descends or turns sharply, it creates chaotic, low-frequency air turbulence that sounds like “buffeting.”
* Wash-Gate: A frequency-dependent transient shaper that targets the “thumping” air sounds without affecting the dialogue or ambient background.
* Jitter Reduction: Smooths out the micro-fluctuations in pitch caused by the flight controller making thousands of tiny motor adjustments per second.
5. Environment & Occlusion
* Reflectivity Scale: Adjusts how the plugin handles “echoes” of the drone bouncing off buildings or trees.
* Optical Occlusion (Camera Link): If the camera “sees” the drone go behind a wall, this parameter automatically softens the high-frequency suppression, as the wall would naturally act as a low-pass filter.
Summary of Parameter Controls
| Parameter Name | Unit | Action |
|—|—|—|
| Harmonic Depth | dB | How aggressively to cut the overtones. |
| Slew Rate | ms | How fast the filter follows a pitch change. |
| Blade Profile | 2 / 3 / 4 | Matches the filter shape to the prop type. |
| Doppler Ratio | M/S | Compensates for the speed of the passing drone. |

VU meter iterations

Ever wonder why VU meters are always rectangular or circular?

It’s usually a matter of mechanical necessity. In the analog world, the physical sweep of a needle and the housing required to protect it dictated the design. We’ve become so accustomed to these “skeuomorphic” constraints that anything else feels almost alien—mechanically impossible, and therefore, aesthetically foreign.

But when you move from physical hardware to dynamic variables, hooks, and handles, those walls disappear.

The Danger & Joy of “Outside the Box”

Iterating without boundaries is a double-edged sword:
-The Danger: You can lose the user. If a shape is too “unseen,” it loses its familiarity and function.
-The Joy: You unlock unlimited potential. By manipulating the geometry through code, I’ve been riffing on the classic VU meter to see where the math takes me.

I’ve had to invent a new vocabulary just to keep track of these iterations. Say hello to the Squircle, the Squectangle, and the Hex-Dome.

Breaking the Skewmorphic Ceiling:
By leaning into the “mechanically impossible,” we create something that couldn’t exist in a world of gears and glass. It challenges the eye and redefines what an interface can look like.

Personally, the Parking Meter style is my favorite—there’s something inherently authoritative and nostalgic about that heavy arc.

Which of these shapes do you think works best? Or have we pushed “outside the box” too far?

#DesignSystems #UIUX #IterativeDesign #CreativeCoding #VUMeters #ProductDesign

Zero-Copy Sound: How MXL Reinvents Audio Exchange for the Software-Defined Studio

The broadcast industry is undergoing a fundamental shift from hardware-centric systems to software-defined infrastructure, a move championed by initiatives like the EBU Dynamic Media Facility (DMF). At the heart of this transition lies the Media eXchange Layer (MXL), a high-performance data plane designed to solve the interoperability challenges of virtualized production. While MXL handles video through discrete grains, its approach to audio—via Continuous Flows—represents a sophisticated evolution in how compute resources exchange data using shared memory.

The Move from Sending to Sharing
Traditional IP broadcast workflows rely on a “sender/receiver” model involving packetization and network overhead. MXL replaces this with a shared memory model. In this architecture, media functions (such as audio processors or mixers) do not “send” audio; rather, they write data to memory-mapped files located in a tmpfs (RAM disk) backed volume known as an MXL Domain.
This allows for a “zero-overhead” exchange where readers and writers access the same physical memory, eliminating the CPU cycles usually wasted on copying data or managing network stacks. Continue reading

Schematic Semantics: Ethernet left or right side

The debate over whether an Ethernet port functions as a transmitter or a receiver on a schematic is the technical equivalent of the “toilet paper over or under” argument. It is a fundamental disagreement over orientation that often ignores the fact that the utility remains the same regardless of which way the roll is hanging.

Traditionally, schematics follow a rigid left-to-right flow: sources (transmitters) live on the left, and sinks (receivers) live on the right. This worked perfectly for analog audio or serial data where electricity moved in one direction. Ethernet, however, is a bidirectional transceiver technology. It is constantly “pushing” and “pulling” simultaneously, which breaks the traditional rules of drafting.

The Access vs. Consumption Debate

Many designers view the Ethernet switch as the “provider.” In this mental model, the switch is the source of connectivity, sitting on the left side of the page and “feeding” access to the edge devices on the right. The edge device is seen as the consumer of the network.

Conversely, others view the edge device as the “source” of the data itself. If a 4K camera is generating a video stream, that camera is the transmitter, and the switch is merely the consumer of that stream. In this scenario, the camera sits on the left, and the switch sits on the right.

Why It Is Like Toilet Paper

Just like the “over or under” debate, both sides have logical justifications that feel like common sense to the practitioner:

* The “Over” (Switch as Source) Argument

* It prioritizes infrastructure. Without the switch, there is no signal path.

* It follows the logic of power distribution, where the source of “energy” (in this case, data access) starts at the core.

* It treats the network as a utility, similar to a water main providing flow to a faucet.

* The “Under” (Edge as Source) Argument

* It prioritizes the payload. A switch with no devices has nothing to move.

* It maintains the “Signal Flow” tradition. If a microphone generates audio, it must be on the left, regardless of whether it uses an XLR or an RJ45 jack.

* It focuses on the intent of the system (e.g., getting video from a camera to a screen).

The Best Mechanism for Drafting

The shift in modern schematic design is moving away from seeing the switch as a “provider of access.” Instead of trying to force a bidirectional “highway” into a one-way “pipe” layout, the most effective designers are treating the switch as a neutral center point.

By placing the network switch in the center of the drawing, you acknowledge its role as a transceiver. You can then place “Signal Generators” (like cameras or microphones) to the left of the switch and “Signal Consumers” (like displays or speakers) to the right. This acknowledges that while the switch provides the “road,” it is the edge devices that provide the “traffic.”

Ultimately, as long as the drawing is consistent, it doesn’t matter if the “paper” is hanging over or under—as long as the data reaches its destination.

 

Reference of Audio Metering

The Master Reference of Audio Metering

Audio metering serves two distinct masters: Psychoacoustics (how loud the human ear perceives sound) and Electrical Limits (how much voltage the equipment can handle). No single meter can do both perfectly.

This document compiles the ballistics, scales, visual ergonomics, and technical implementations of the world’s major audio metering standards.

Continue reading