Latest Tech News

Stay updated with the latest in technology, AI, cybersecurity, and more

Filtered by: function Clear Filter

To be a better programmer, write little proofs in your head

This is a brief write-up of a trick I learned that helps me write code faster and more accurately. I say "trick", but it's really something I started to do without noticing as I moved further into my career. When you're working on something difficult, sketch a proof in your head as you go that your code will actually do what you want it to do. A simple idea, but easier said than done: doing this "online" without interrupting your flow takes a lot of practice. But once you get really good at it,

A better Ghidra MCP server – GhidrAssistMCP

GhidrAssistMCP A powerful Ghidra extension that provides an MCP (Model Context Protocol) server, enabling AI assistants and other tools to interact with Ghidra's reverse engineering capabilities through a standardized API. Overview GhidrAssistMCP bridges the gap between AI-powered analysis tools and Ghidra's comprehensive reverse engineering platform. By implementing the Model Context Protocol, this extension allows external AI assistants, automated analysis tools, and custom scripts to seaml

Malware found in official gravityforms plugin indicating supply chain breach

Update 7-12-2025 06:00 UTC: We have observed some activity in regard to one of the backdoors that involves a gf_api_token parameter. The IP address 193.160.101.6 tries to request, for every site, the following URLs with a spoofed user agent: /wp-content/plugins/gravityforms_2.9.12/notification.php?gf_api_token=Cx3VGSwAHkB9yzIL9Qi48IFHwKm4sQ6Te5odNtBYu6Asb9JX06KYAWmrfPtG1eP3&action=ping /wp-content/plugins/gravityforms_2.9.11.1/notification.php?gf_api_token=Cx3VGSwAHkB9yzIL9Qi48IFHwKm4sQ6Te5odNt

Malware Found in Official GravityForms Plugin Indicating Supply Chain Breach

Update 8-11-2025 06:00 UTC: We have observed some activity in regard to one of the backdoors that involves a gf_api_token parameter. The IP address 193.160.101.6 tries to request, for every site, the following URLs with a spoofed user agent: /wp-content/plugins/gravityforms_2.9.12/notification.php?gf_api_token=Cx3VGSwAHkB9yzIL9Qi48IFHwKm4sQ6Te5odNtBYu6Asb9JX06KYAWmrfPtG1eP3&action=ping /wp-content/plugins/gravityforms_2.9.11.1/notification.php?gf_api_token=Cx3VGSwAHkB9yzIL9Qi48IFHwKm4sQ6Te5odNt

A fast 3D collision detection algorithm

This article will assume some familiarity with narrow phase collision detection methods and associated geometric concepts such as the Minkowski sum. A few years ago I was watching Dirk’s great presentation, The Separating Axis Test between Convex Polyhedra (video, slides). Around the 18 minute mark (slide 29) he starts talking about overlaying Gauss maps of convex polyhedra to find the faces of their Minkowski difference. Figure 1: A gauss map for two convex hulls The upshot is that all faces

Exploring Coroutines in PHP

The term "coroutine" often comes up when talking about asynchronous or non-blocking code, but what does it actually mean? In this post, we will explore coroutines as a concept and see how PHP supports them through Generators and Fibers. Whether you're building pipelines, CLI tools, or preparing to dive into concurrency, understanding coroutines is an essential first step. What are Coroutines? A coroutine is a function. However, where a regular function continuously runs from top to bottom unti

Async Queue – One of my favorite programming interview questions

For the past 7+ years, I've been conducting a programming interview that has been a true personal favorite of mine. It was passed down to me from good friends (Jeremy Kaplan and Carl Sverre, and it was the latter whom I believe invented it). This interview has probably been given by us between 500-1000 times across different companies, and upon googling for "async queue interview", I see tons of results. So, it's probably fine for me to blog about it. My main goal with this blog post is to disc

Building the Rust Compiler with GCC

Bootstrapping Rust with GCC If you know one thing about me, it is that I love working on the Rust compiler. Some people kayak, travel or play guitar - and I stare at assembly, trying to figure out what I broke. This summer, I am taking on quite a large task: bootstrapping the Rust compiler using `cg_gcc` What does that mean? "bootstrapping" is simply a name given to the Rust compiler build process. So, what I am really trying to do is build a Rust compiler, without using LLVM - and using GCC

The messy reality of SIMD (vector) functions

We’ve discussed SIMD and vectorization extensively on this blog, and it was only a matter of time before SIMD (or vector) functions came up. In this post, we explore what SIMD functions are, when they are useful, and how to declare and use them effectively. A SIMD function is a function that processes more than one piece of data. Take for example a mathematical sin function: double sin(double angle); This function takes one double and returns one double. The vector version that processes four

What's the difference between named functions and arrow functions in JavaScript?

Arrow functions (also known as ‘rocket’ functions) are concise and convenient. However, they have subtle differences compared to function declarations and function expressions. So how do you know which one to use, and when? Function declarations and function statements We have (at least) three ways of creating functions in JavaScript. The first is the function declaration. This binds a function to a given name. It looks something like this:1 1 I’ve used String.toLowercase() here, partly for b

Couchers is officially out of beta

A new chapter: Couchers is officially out of Beta! Quick summary: we are out of Beta and into version 1, we're releasing a new strategy around safe & active community instead of bashing our competitors, a fancy redesigned landing page, and a bunch of new features to make core couch surfing functionality better! Share the platform with your friends and let's grow the community together! We are super excited to share that Couchers is today finally out of the Beta phase with our version 1 (v1) la

Couchers is officially out of Beta

A new chapter: Couchers is officially out of Beta! Quick summary: we are out of Beta and into version 1, we're releasing a new strategy around safe & active community instead of bashing our competitors, a fancy redesigned landing page, and a bunch of new features to make core couch surfing functionality better! Share the platform with your friends and let's grow the community together! We are super excited to share that Couchers is today finally out of the Beta phase with our version 1 (v1) la

Asynchronous Error Handling Is Hard

(Ed. note: This article was originally published on The CUDA Handbook blog on November 2, 2023.) Every API designer has struggled with the question of how best to propagate errors to their callers, since before the term “API” was invented. Even decades ago (say 30+ years), interface designers knew to separate the error return from the payload, in functions that return other results to their caller. Since it is sometimes useful to know what not to do: My favorite example of an antipattern in th

NativeJIT: A C++ expression –> x64 JIT (2018)

NativeJIT NativeJIT is an open-source cross-platform library for high-performance just-in-time compilation of expressions involving C data structures. The compiler is light weight and fast and it takes no dependencies beyond the standard C++ runtime. It runs on Linux, OSX, and Windows. The generated code is optimized with particular attention paid to register allocation. The compiler was developed by the Bing team for use in the Bing search engine. One important use is scoring documents contai

NativeJIT: A C++ expression –> x64 JIT

NativeJIT NativeJIT is an open-source cross-platform library for high-performance just-in-time compilation of expressions involving C data structures. The compiler is light weight and fast and it takes no dependencies beyond the standard C++ runtime. It runs on Linux, OSX, and Windows. The generated code is optimized with particular attention paid to register allocation. The compiler was developed by the Bing team for use in the Bing search engine. One important use is scoring documents contai

Error handling in Rust

On Error Handling in Rust The current standard for error handling, when writing a crate, is to define one error enum per module, or one for the whole crate that covers all error cases that the module or crate can possibly produce, and each public function that returns a Result will use said error enum. This means, that a function will return an error enum, containing error variants that the function cannot even produce. If you match on this error enum, you will have to manually distinguish whi

Bloom Filters by Example

Bloom Filters by Example A Bloom filter is a data structure designed to tell you, rapidly and memory-efficiently, whether an element is present in a set. The price paid for this efficiency is that a Bloom filter is a probabilistic data structure: it tells us that the element either definitely is not in the set or may be in the set. The base data structure of a Bloom filter is a Bit Vector. Here's a small one we'll use to demonstrate: Each empty cell in that table represents a bit, and the nu

Rust in the Linux kernel: part 2

How to write Rust in the kernel: part 2 [LWN subscriber-only content] In 2023, Fujita Tomonori wrote a Rust version of the existing driver for the Asix AX88796B embedded Ethernet controller. At slightly more than 100 lines, it's about as simple as a driver can be, and therefore is a useful touchstone for the differences between writing Rust and C in the kernel. Looking at the Rust syntax, types, and APIs used by the driver and contrasting them with the C version will help illustrate those diffe

A Lisp adventure on the calm waters of the dead C (2021)

A Lisp adventure on the calm waters of the dead C I will use a C-like language throughout, with substantial liberties in its syntax, and I will try to answer "what if" and "how" questions regarding the implementation of some new features that actually cannot be implemented in C due to its limitations. I will examine and highlight those limitations. The scope of this exercise is to better understand Lisp and the power of the abstractions it offers over and above what most languages have, even th

Now Google’s Gemini AI is ready to fill in those empty cells in your spreadsheet

is a news writer who covers the streaming wars, consumer tech, crypto, social media, and much more. Previously, she was a writer and editor at MUO. Google is launching a new AI function in Sheets to help you generate text to fill out parts of your spreadsheet. The feature, powered by Google Gemini, can reference specific cells to create text, summarize information, or categorize your data. In the example shared by Google, you can use the new AI function to generate and tailor copy for an adver

Primitive Kolmogorov complexity is computable

/ 5 min read This post is mostly AI generated, of course with significant guidance, feedback, iteration and some edits from me. There was little for me to gain writing this myself, but I felt it needed to be written down regardless. Kolmogorov complexity and Solomonoff's theory of inductive inference offer formal, theoretical solutions to measuring complexity and forming predictions. However, both are uncomputable, a fact that is often treated as having significant implications in computabilit

Advanced Python Function Debugging with MCP Integration

Gnosis Mystic 🔮 AI-Powered Python Function Analysis and Control Gnosis Mystic gives AI assistants direct access to your Python functions through runtime hijacking and intelligent analysis. Add minimal decorators, and Claude can inspect, optimize, and control your code in real-time. Inspiration and Work Mystic was inspired by Giantswarm's mcp-debug. Code by fairly stock Claude Code. Prompts, code sketches, and planning by Claude Desktop using Gnosis Evolve tools. ✨ Why Gnosis Mystic? The P

Subsecond: A runtime hotpatching engine for Rust hot-reloading

§Subsecond: Hot-patching for Rust Subsecond is a library that enables hot-patching for Rust applications. This allows you to change the code of a running application without restarting it. This is useful for game engines, servers, and other long-running applications where the typical edit-compile-run cycle is too slow. Subsecond also implements a technique we call “ThinLinking” which makes compiling Rust code significantly faster in development mode, which can be used outside of hot-patching.

Minimal Boolean Formulas (2011)

Minimal Boolean Formulas Posted on Wednesday, May 18, 2011. 28. That's the minimum number of AND or OR operators you need in order to write any Boolean function of five variables. Alex Healy and I computed that in April 2010. Until then, I believe no one had ever known that little fact. This post describes how we computed it and how we almost got scooped by Knuth's Volume 4A which considers the problem for AND, OR, and XOR. A Naive Brute Force Approach Any Boolean function of two variables ca

Minimal Boolean Formulas

Minimal Boolean Formulas Posted on Wednesday, May 18, 2011. 28. That's the minimum number of AND or OR operators you need in order to write any Boolean function of five variables. Alex Healy and I computed that in April 2010. Until then, I believe no one had ever known that little fact. This post describes how we computed it and how we almost got scooped by Knuth's Volume 4A which considers the problem for AND, OR, and XOR. A Naive Brute Force Approach Any Boolean function of two variables ca

Verlet Integration and Cloth Physics Simulation (2022)

Physics simulation in games (or simply game physics) is a vast topic, and in this post we'll cover only a tiny part of it; yet certainly an interesting one! Let's understand what Verlet integration is by implementing a simple 2D cloth simulation with C++. Physics in games is always fun, isn't it? Have you ever ditched the main quest of a level just to blow something up? I know I have. But even more fun than watching objects bounce around the screen is to understand how we can use simple concep

Sound As Pure Form: Music Language Inspired by Supercollider, APL, and Forth

WHAT This program is called: "A tool for exploring sound as pure form." or "sound as pure form" or "sapf" It is an interpreter for a language for creating and transforming sound. The language is mostly functional, stack based and uses postfix notation similar to FORTH. It represents audio and control events using lazy, possibly infinite sequences. It intends to do for lazy sequences what APL does for arrays: provide very high level functions with pervasive automatic mapping, scanning, and reduct

Homegrown Closures for Uxn

Homegrown closures for uxn at least, kind of... For a week or so now, I've been writing niënor, a "lispy environment for uxn". I did not want it to become a full-blown lisp but just another way of writing uxntal. Uxntal is a bit too dense for my liking, and I prefer lisp/scheme s-expression syntax. Niënor is just a compiler and a macroexpander that takes in scheme-like code and spits out uxn roms. This article describes my homegrown method of creating lexically scoped closures in this environ

Topics: 05 80 adder function make

Game Hacking – Valve Anti-Cheat (VAC)

Intro In 2002 Valve created an Anti-Cheat solution called “Valve Anti-Cheat” aka VAC. The first game they implemented VAC into was Counter-Strike. When VAC was introduced it only operated in User Mode (Still does) meaning it runs entirely in user space and has no kernel component. Below is a list of games that use VAC.. Call of Duty: Modern Warfare 2 Call of Duty: Modern Warfare 3 Counter-Strike (video game) Counter-Strike: Condition Zero Counter-Strike: Source Counter-Strike 2 Day of Defeat