RSSAmplifier

Blog

radu's blog

Recent content on radu's blog

radu-matei.comRSS feed ↗62 posts

Latest posts

Raspberry Pi SpinKube livestream

I recently built a 5-node Raspberry Pi cluster running Wasm workloads using the new SpinKube project . This week, I joined Fermyon’s weekly live stream together with Sohan to talk about how I configured the cluster and to demonstrate running Spin applications on Kubernetes. You can follow along this gist to set up your own cluster, and stay tuned for a full write-up on this setup.

Trying something new

I’ve been writing on this blog since 2016. I’ve written about .NET , WebSockets , debugging microservices on Kubernetes , or about WebAssembly memory . I rarely have the time to write lengthy blog posts anymore, and social media seems to be the worst place to have a conversation these days; so I stopped posting almost entirely. I’m trying to change that with a new notes section…

Introducing Fermyon Serverless AI

Fermyon Serverless AI gives you the building blocks for integrating Artificial Intelligence into your serverless applications, with AI inferencing for Large Language Models (LLMs) for Llama2 and CodeLlama, support for generating sentence embeddings and storing them in a vector-ready database, built-in key-value storage, and a seamless developer experience.

Spin 1.0 — The Developer Tool for Serverless WebAssembly

Introducing the first stable release for Spin, the open source developer tool for building, distributing, and running serverless applications built with WebAssembly.

The Six Ways of Optimizing WebAssembly

This post is co-authored with Matt Butcher, and it originally appeared on InfoQ.com . Key Takeaways While many languages support Wasm, some are faster than others. Some compilers natively support optimizing Wasm for efficiency and speed. The wasm-opt tool can optimize a Wasm binary regardless of the original language it was used to create it. Using a JIT-enabled runtime can improve runtime…

Building host implementations for WebAssembly interfaces

WebAssembly and WASI show great promise for the future of computing outside the browser, and the WebAssembly component model aims to improve the portability, cross-language, and composition story for Wasm. This article introduces host implementations, and how to use tooling from the Bytecode Alliance to build and use such implementations.

Introduction to WebAssembly components

WebAssembly and WASI show great promise for the future of computing outside the browser, and the WebAssembly component model aims to improve the portability, cross-language, and composition story for Wasm. This article explains the goals of the component model, and showcases how to use tooling from the Bytecode Alliance to build and consume such components.

Neural network inferencing for PyTorch and TensorFlow with ONNX, WebAssembly System Interface, and WASI NN

WASI NN is a proposal that allows WebAssembly guest modules running outside the browser to perform neural network inferencing by using host-provided implementations that can leverage CPU multi-threading, host optimizations, or hardware devices such as GPUs or TPUs. This article explores the goals of WASI NN, existing implementations, and details a new experimental implementation targeting ONNX,…

Using Azure services from WebAssembly modules

With WAGI, the WebAssembly Gateway Interface, it is easier than ever to build microservices using WebAssembly. In this article, we explore building Wasm modules that use Azure services and how to run them using WAGI.

Updates on WAGI, the WebAssembly Gateway Interface

New features such as pulling from container registries and outbound HTTP connections are now part of WAGI.

An experimental outbound HTTP library for the WebAssembly System Interface

Send HTTP requests from Rust and AssemblyScript Wasm modules running in Wasmtime

A practical guide to WebAssembly memory

Memory in WebAssembly is one of the topics that creates confusion for newcomers, particularly for those with experience in languages with memory management features like garbage collection, such as JavaScript, Go, or Java. In this article we explore using memory in WebAssembly in various scenarios - passing JavaScript arrays to Rust and AssemblyScript modules, checking for some basic memory leaks…

A simple WebAssembly linker in JavaScript

An experimental JavaScript library that helps instantiating WebAssembly modules with imports by providing functionality to link JavaScript objects as imports, as well as automatically perform name based resolution for linking entire modules.

TensorFlow inferencing using WebAssembly and WASI

In this article, we experiment with building a Rust program that performs image classification using the MobileNet V2 TensorFlow model, compile it to WebAssembly, and instantiate the module using two WebAssembly runtimes that use the WebAssembly System Interface (WASI), the native NodeJS WASI runtime, and Wasmtime. A special interest is given to writing model and image data into the module’s…

Towards sockets and networking in WebAssembly and WASI

In this article we look at the current state of the networking API in WASI, and add a minimal implementation together with socket clients in AssemblyScript and Rust (with an upfront disclaimer that this should definitely not be used for anything other than experimentation).

Introduction to Brigade - video demo

Video demonstration of getting started with Brigade

Getting started with NodeJS and the WebAssembly System Interface

NodeJS recently added experimental support for executing WebAssembly modules using WASI, or the WebAssembly System Interface. In this article we explore how to get started with the WASI sandbox and writing various modules we can execute, in Rust, or AssemblyScript.

Writing a simple WASM API layer using interface types and Wasmtime

In this short article we explore how to get started with WebAssembly interface types by defining a simple API layer, then implementing that using Wiggle and Wasmtime

A beginner's guide to adding a new WASI syscall in Wasmtime

In this article, we explore how to add a new system call to WASI, the WebAssembly System Interface, and implement it in Wasmtime

From (C)Go to Rust: A practical guide to building shared and static libraries, linking, and FFI

In this article we will explore how to build shared and static libraries in Go, and import them in Rust.

Random WSL tips & tricks

If you’re getting started with using WSL2, here are a few tips for making the most of your experience - from running Linux GUI apps, to accessing the Linux filesystem from Windows Explorer or exporting your distribution.

Version control for your WSL distribution with a Dockerfile

In this article, we will explore how to build a WSL distribution using a Dockerfile, allowing us to version our entire WSL configuration.

Securely distributing and signing WebAssembly modules using OCI and TUF

Attacks on software repositories happen all the time, and any future WebAssembly repository and client tooling should be prepared to mitigate these attacks. In this article we will explore a minimum security model for WebAssembly registries and client tooling based on The Update Framework, and how to integrate this model when distributing WebAssembly modules using OCI registries.

Distributing WebAssembly modules using OCI registries

WebAssembly (WASM) is a binary instruction format for a stack-based virtual machine. In familiar terms, WASM is used as a compilation target for various programming languages (C, C++, Rust, or Golang, for example), generating a compact binary with a known format. Mozilla Developer Network describes WebAssembly as having huge implications for the web platform — it provides a way to run code written…

Cross platform GitHub Action for downloading, extracting, and adding tools to path

Ever since I started to use GitHub Actions, one of the tasks I copy and pasted the most contained the following steps: download a file or an archive containing a statically compiled tool extract if it is an archive copy the target tool to a directory in the path And after an embarrassing number of tries, my jobs would contain a step that would resemble the following (taken from an actual GitHub…

Glottal stops and alveolar taps as a non-native English speaker

Because of the notoriously confusing nature of English pronunciation in terms of phonemes, rather than letters of the alphabet, one must be aware, for example, that the word ‘enough’ begins with the same vowel phoneme as the beginning of the word ‘inept’, and ends with the same consonant as ‘stuff’.

The state of CNAB: Part 2 - CNAB Registries

In this series, we explore the state of the Cloud Native Application Bundles (CNAB) specifications, and do a deep dive into the distribution of bundles, and security and attestation.

The state of CNAB: Part 1 - CNAB Core

In this series, we explore the state of the Cloud Native Application Bundles (CNAB) specifications, and do a deep dive into the distribution of bundles, and security and attestation.

Building self-contained, single executable .NET Core 3 CLI tools

This is the .NET Core’s first iteration at self-contained binaries. It is not ideal - the resulting size of ~40M is probably way too large for simple applications. But the fact that now we can actually create a global tool with .NET and distribute it without requiring users to install .NET is extremely exciting! Not to mention the ease of packaging applications in containers, and not having to…

Adding dark mode to a Hugo static website without learning CSS

How I added a dark theme toggle to my Hugo website without writing a single line of CSS

Building Reusable GitHub Actions in TypeScript, using the official toolkit

GitHub Actions now supports CI/CD - and while the workers for Actions come pre-configured with support for lots of programming languages and frameworks, you have the option to use an existing action to configure the environment, or build your own. In this article we will see how to build reusable actions using the Actions toolkit

Running Kubernetes end-to-end tests with Kind and GitHub Actions

Using Kubernetes in Docker in GitHub Actions

Running end-to-end tests on your Kubernetes cluster with Kind and Brigade

The goal of this article is to show you how to configure running Kind in a pod in Kubernetes, then abstract the configuration and automate it using Brigade.

Rendering Helm templates in the browser, with WebAssembly

I’ve been trying to find a weekend to play around with Web Assembly for at least a couple of months now - I had previously read the hello world examples for both Go and Rust, but never had the time to actually try things out. So I decided to take a piece of real world Go code, that is used today in Helm, and see if I can get it to execute in the browser - I chose to replicate a simpler…

Writing controllers for Kubernetes CRDs with C#

The goal of this article is to show you how to use the Kubernetes C# client to write extremely simple controllers for your Kubernetes custom resources, and start watching resources in a few lines of C#

Instant Scaling on Demand: Serverless Kubernetes with Brigade

This article originally appeared on the Microsoft open source blog . Microservices built on Kubernetes are fast becoming one of the core scenarios where computing is done, and Kubernetes development and operations skills are therefore becoming a larger part of any cloud-native toolset. This article shows how to use some of the Cloud Native Computing Foundation (CNCF) and CNCF sandbox projects…

Filter secrets from Kubernetes logs

Running any non-trivial application on Kubernetes will most likely require authorized access to other components - databases, storage buckets, APIs - all of which require a connection string or some sort of access key. Storing these values in Kubernetes is done through Secrets , and while there are plenty of ways to make sure the secrets are safe while at rest , as well as how to configure an…

The state of debugging microservices on Kubernetes

For as long as we have been writing software, we have also introduced bugs in our applications. Back when we were developing monoliths, we could simply start the IDE of choice, add a couple of breakpoints, step through the code and hopefully solve the issue. There was a single place where the application was running, where logs were visible and where the application could be diagnosed.

Debug Helm and Tiller using VS Code and Draft

In today’s article we will explore how to take a real-world application and start developing, debugging and deploying it to a Kubernetes cluster and how to use a couple of open-source tools to make our lives easier in the process. Specifically, we will use Helm, the package manager for Kubernetes , the newly released Kubernetes extension for VS Code and Draft to develop, debug and deploy is…

Using Draft to develop front-end + back-end applications. Experimenting with Draft, VS Code and remote debugging.

Application containers have skyrocketed in popularity over the last few years. In recent months, Kubernetes has emerged as a popular solution for orchestrating these containers. While many turn to Kubernetes for its extensible architecture and vibrant open-source community, some still view Kubernetes as too difficult to use. Learn how to use Draft to simplify your cloud-native application…

kube-toolkit: Toolkit for creating gRPC-based CLI tools for Kubernetes, written in Go

Building tools like Helm and Draft for Kubernetes using gRPC and Go

Update Azure Container Instances with Docker Hub webhooks

Back in July, Microsoft announced Azure Container Instances, a new Azure service delivering containers with great simplicity and speed and without any Virtual Machine infrastructure to manage. ACIs are the fastest and easiest way to run a container in the cloud. In this article we will see how to update Azure Container Instances based on webhooks from Docker Hub

Getting started with SignalR Alpha 2

In this article we will explore how to get started with the Alpha 2 version of SignalR for ASP.NET Core 2.0 and understand streaming, sending binary data, using the Redis scaleout and, of course, chat!

Best of Both worlds: Azure App Service and Kubernetes

In this article we will explore how to integrate Azure App Service and Kubernetes within the same Azure Virtual Network and consume Kubernetes services from an Azure App Service app without exposing them on the public Internet. There will be lots of situations when we want to use both the simplicity and features of a PaaS service (such as autoscaling, easy SSL, or any other cool feature) for a…

Jenkins pipelines with Kubernetes

The goal of this article is to show you how to deploy Jenkins to your Kuberentes cluster using Helm and write Jenkins pipelines that execute builds within pods in your cluster - all of this while replicating your Jenkins configuration and persisting everything with Kubernetes persistent storage.

Get started with Helm and Draft for Kubernetes

This post shows you how to automatize and simplify working with multiple Kubernetes clusters and multiple tools such as kubectl, helm or draft - creating a container image with your desired version of the tools and mounting the config files to the container

Kubernetes 1.8 on Azure

In this post you’ll see how to deploy Kubernetes 1.8 and later on Azure using ACS Engine, an open-source tool that creates the entire configuration for your orchestration cluster and deploys it on Azure Container Service.

The Hybrid Cluster: A CI/CD Story [Part 1] - Configuring a hybrid swarm mode cluster in Azure with acs-engine

We’ll explore how to create a hybrid Docker Swarm Mode cluster with Linux and Windows agents, deploy it on Azure Container Service using ACS Engine, see how to connect to the cluster and manage it and finally how to deploy hybrid services with both Linux and Windows Server containers.

Real-Time ASP .NET Core

We will write an ASP.NET Core middleware for providing real-time functionality to your applications. To its core, this is a WebSockets middleware for ASP .NET Core applications with TypeScript / JavaScript and .NET clients - all this wile exploring the inner workings of ASP.NET Core middleware.

Creating a WebSockets middleware for ASP .NET Core 3

We’ll explore the low-level websockets API in .NET Core, understand the Middleware concept and finally write a websocket manager middleware that handles communication between various clients and your ASP.NET Core application.