EU Cyber Resilience Act (CRA) Compliance: Summary and Detailed Analysis

Summary The EU Cyber Resilience Act (CRA) is a groundbreaking regulation establishing mandatory cybersecurity standards for most hardware and software products with digital elements in the EU. It aims to embed cybersecurity “by design and by default” across the product lifecycle – from development through post-sales support – to safeguard consumers and businesses from insecure technology (Cyber Resilience Act | Shaping Europe’s digital future) (The EU Cyber Resilience Act: Implications for Companies). The CRA applies broadly to connected products (including IoT devices, software, and hardware) offered on the EU market, imposing obligations on manufacturers (and other supply-chain operators) to ensure ongoing product security and swift vulnerability management. Key principles include secure product design, regular security updates for at least 5 years, incident and vulnerability reporting within 24 hours, and increased accountability via CE marking and documentation. Non-compliance can trigger fines up to €15 million or 2.5% of global turnover (Council of the European Union Adopts the Cyber Resilience Act). The CRA complements existing EU laws like GDPR, NIS2, and the proposed AI Act, closing gaps and creating a more cohesive cybersecurity framework. This report provides both a high-level overview and an in-depth breakdown of CRA’s scope, requirements, and implications, with tailored guidance for tech companies, IoT manufacturers, and financial institutions on achieving compliance in a cost-effective, phased manner. ...

February 15, 2025 · 75 min

How to remove fields from JSON dynamically in dotnet using Json.Net

TL;DR Just parse JSON into a JToken, somehow try to match property names. Wherever there’s a match, you can remove the property from its parent object. RemoveFromLowestPossibleParent Use method RemoveFromLowestPossibleParent from nice JsonExtensions class from Brian Rogers stackoverflow answer Code public static partial class JsonExtensions { public static TJToken RemoveFromLowestPossibleParent<TJToken>(this TJToken node) where TJToken : JToken { if (node == null) return null; JToken toRemove; var property = node.Parent as JProperty; if (property != null) { // Also detach the node from its immediate containing property -- Remove() does not do this even though it seems like it should toRemove = property; property.Value = null; } else { toRemove = node; } if (toRemove.Parent != null) toRemove.Remove(); return node; } public static IEnumerable<TJToken> RemoveFromLowestPossibleParents<TJToken>(this IEnumerable<TJToken> nodes) where TJToken : JToken { var list = nodes.ToList(); foreach (var node in list) node.RemoveFromLowestPossibleParent(); return list; } } Json field name from lambda expression Using PropertyHelper<YourClass>.GetJsonName(c => c.Id) on property with JsonPropertyAttribute attribute will return you json field name for this property. ...

February 17, 2022

How to run Docker inside a virtual machine with Windows 10 in Unraid

TL;DR Shutdown all VMs than run modprobe -r kvm_intel and modprobe kvm_intel nested=1 in unraid terminal. After that add <feature policy='require' name='vmx'/> to the CPU Section of target VM. VM Make sure that all VM are stopped. Wait a little bit after stopping. Open the Unraid Terminal Run the following via a terminal in unraid (SpaceInvader’s thank you!) #!/bin/bash modprobe -r kvm_amd modprobe kvm_amd nested=1 echo "Nested vms are enabled for AMD cpus" sleep 10 exit Open VM Settings -> Toggle XML View Add feature to to the CPU Section ...

November 21, 2021

How to Install MacOS High Sierra as a VM in Unraid with pass through NVIDIA GPU

TL;DR Using SpaceinvaderOne’s docker app named Macinabox install MacOS, then install Splashtop Streamer and NVIDIA WebDriver for GPU and then update XML config Macinbox Start from this SpaceinvaderOne’s video about Macinbox - you will get all information Then install Macinbox - it will download all needed stuff for you and install MacOS Apps After that login to VM and install two apps: webdriver.sh - Bash script for managing NVIDIA’s web drivers on macOS High Sierra and later with an option to set the required build number in NVDAStartupWeb.kext and NVDAEGPUSupport.kext. Splashtop Personal - Remote Desktop gives you high-performance remote access to your PC or Mac from your Windows tablet. Splashtop is the ONLY remote access product capable of delivering full audio and HD video streaming and even interactive 3D gaming. (Access across the Internet requires purchase of the optional Anywhere Access Pack.) webdriver.sh Install webdriver.sh with Homebrew ...

May 29, 2020

How to measure of typescript method execution time using decorators and publish it to Prometheus?

TL;DR perf_hooks + wrapper which will redefine the original method to new method who will call the original method + publish information to Prometheus. Define a Histogram from prom-client library: import { Histogram } from 'prom-client' const requestDuration = new Histogram({ name: 'request_duration_ms', help: 'Duration of requests', labelNames: ['method'], buckets: [ 0.1, 50, 100, 200, 300, 400, 500, 1000 ] // buckets for response time from 0.1ms to 1000ms }) The decorator for non-async methods will be simple - redefine the method to this new method who will call the original method. Make sure that you use the function’s this context instead of the value of this when it is called (no arrow function) ...

March 24, 2020

How to play Rocksmith 2014 with a Roland Quad-Capture?

TL;DR No hacks or patches required 1-minute 1-day way to make it work. There are a lot of guides about Rocksmith and No Cable Mode both for Windows and Mac but not for Roland Quad-Capture. I don’t know actually why but the basic flow is: Start Audio MIDI Setup Go to Audio Devices Click + on the bottom, choose “Create Aggregate Device” Rename your new device to “Rocksmith USB Guitar Adapter” It didn’t work for me. So, I tried to find another way. I found an app named Loopback - usually, people used it to combine mic with audio sources or combine multiple input devices into a single virtual device. I used it the other way. I’ve created a virtual device with Rocksmith USB Guitar Adapter name where added Roland Quad-Capture Left channel as an output for this virtual device. After that my higher-quality audio interface works as the input instead of the RealTone cable. ...

March 19, 2020

Today I Learned: Undoing a git rebase

The easiest way would be to find the head commit of the branch as it was immediately before the rebase started in the reflog… git reflog and to reset the current branch to it (with the usual caveats about being absolutely sure before reseting with the --hard option). Suppose the old commit was HEAD@{5} in the ref log: git reset --hard HEAD@{5} In Windows, you may need to quote the reference: ...

June 20, 2019

Today I Learned: Mocking multiple named exports in Jest

I know only one way. Mock it: jest.mock('path/to/some/module', () => ({ someNamedExportFromModule: jest.fn() })); Then import it: import {someNamedExportFromModule} from 'path/to/some/module'; Setup value to return: someNamedExportFromModule.mockReturnValue('someValue'); ??? You are the best. gl hf

December 7, 2018

Today I Learned: Azure Cosmos Db: Query for Fields not defined

There are several ways: Using LINQ For anyone who wants a Linq solution, it’s: query.Where(d => !d.SomeField.IsDefined()) Note: To get the IsDefined extension method, you need to add Microsoft.Azure.Documents.SystemFunctions namespace Using SQL Query Grammar with built-in functions IS_DEFINED (expr) - returns a Boolean indicating if the property has been assigned a value. SELECT TOP {0} * FROM Telemetry t WHERE (is_defined(t.longitude) OR is_defined(t.latitude)) Thanks to Azure Feedback and Azure Cosmos DB SQL syntax reference

December 27, 2017

Today I Learned: SSH connection from macOS 10.12 to a My Cloud

Use the following command on Terminal to SSH from a macOS 10.12 (Sierra) computer to a My Cloud: Double-click on the Mac HD, the internal Mac hard drive visible on the top-right corner of the desktop screen. Click on Applications. Click on Utilities. Double-click on Disk Utility. In Disk Utility, double-click on Terminal. In Terminal, type the following command: ssh -oHostKeyAlgorithms=+ssh-dss sshd@wdmycloud.com.local Note: If the device name has changed, please use the IP address of the My Cloud instead. ...

March 4, 2017