From frankel.ch
Dynamic watermarking on the JVM
0 2
Displaying images on your website makes for an interesting problem: on one side, you want to make them publicly available; on the other, you want to protect them against undue use. The age-long method to achieve it is watermarking: A digital watermark is a kind of marker covertly embedded in...
on Sun, 4PM
From frankel.ch
0 0
You can configure Renovate for every package manager you can think of. Even better, Renovate allows the contribution of new package managers, contrary to Dependabot.
on Jun 28
From frankel.ch
0 0
I moved my blog from WordPress to GitLab Pages in… 2016. I’m happy with the solution. However, I used GitHub Pages when I was teaching for both the courses and the exercises, e.g., Java EE. At the time, there was no GitHub Actions: I used Travis CI to build and deploy. Recently, I had to use...
on Jun 25
From frankel.ch
Random and fixed routes with Apache APISIX
0 0
My ideas for blog posts inevitably start to dry up after over two years at Apache APISIX. Hence, I did some triage on the APISIX repo. I stumbled upon this one question: We have a requirement to use a plugin, where we need to route the traffic on percentage basis. I’ll give an example for...
on Jun 23
From frankel.ch
0 0
I continue to work on my Opentelemetry demo. Its main idea is to showcase traces across various technology stacks, including asynchronous communication via an MQTT queue. This week, I added a couple of components and changed the architecture. Here are some noteworthy learnings; note that some of...
on Jun 2
From frankel.ch
Parsing structured environment variables in Rust
0 0
I’m in the process of adding more components to my OpenTelemetry demo (again!). The new design deploys several warehouse services behind the inventory service so the latter can query the former for data via their respective HTTP interface. I implemented each warehouse on top of a different...
on May 26
From frankel.ch
Workflow, from stateless to stateful
0 0
A (long) time ago, my first job consisted of implementing workflows using the Staffware engine. In short, a workflow comprises tasks; an automated task delegates to code, while a manual task requires somebody to do something and mark it as done. Then, it proceeds to the next task - or tasks....
on May 19
From frankel.ch
My opinion on the Tauri framework
0 0
I’ve always liked GUI, both desktop-based and browser-based before you needed five years of training on the latter. That’s the reason I loved, and still love Vaadin: you can develop web UIs without writing a single line of HTML, JavaScript, and CSS. I’m still interested in the subject; a couple...
on May 12
From frankel.ch
0 0
I try to constantly deepen my knowledge of HTTP and REST. Recently, I stumbled upon the list of all registered HTTP Headers. This post is dedicated to the Vary HTTP Header. The problem Two years ago, I wrote about web resource caching server-side. The idea is to set up a component between...
on May 5
From frankel.ch
Five ways to pass parameters to Apache APISIX
0 0
In this post, we list five alternatives to pass parameters server-side and explained how to access them on Apache APISIX.
on Apr 30
From frankel.ch
0 0
I wrote previously about libs for error management in Rust. This week, I want to write about the try block, an experimental feature. The limit of the ? operator Please check the above article for a complete refresher on error management in general and the ? operator in particular. In short,...
on Apr 21
From frankel.ch
Dissolving Design Patterns In Design Elements
0 0
The book Design Patterns: Elements of Reusable Object-Oriented Software was one of the texts that changed how we think about software design. This book came out in 1994 through the efforts of Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, later remembered as Gang Of Four (GoF) ...
on Apr 14
From frankel.ch
Implementing the Idempotency-Key specification on Apache APISIX
0 0
Last week, I wrote an analysis of the ITEF Idempotency-Key specification. The specification aims to avoid duplicated requests. In short, the idea is for the client to send a unique key along with the request: If the server doesn’t know the key, it proceeds as usual and then stores the responsif...
on Apr 7
From frankel.ch
0 0
The first rule of distributed systems is 'Don’t distribute your system'. Designing distributed systems right is infamously hard for multiple reasons. The idempotency concept For example, a call to a function can succeed or fail in non-distributed systems. Once you move the called function to...
on Mar 31
From frankel.ch
Apache APISIX North America Tour
0 0
Once in a while, I write non-technical blog posts when I’ve something worth sharing. Today, I’d like to write about my North America 'Tour' across several conferences and user groups. The first leg of my journey started in Oakland, California, with Developer Week. Developer Week is an...
on Mar 24
From frankel.ch
The pitfall of implicit returns
0 0
Implicit returns are a feature in some languages. They have recently bitten me, so here’s my opinion. Statements, expressions, and returns Before diving into implicit returns, we must explain two programming concepts influencing them. A lot of literature is available on the subject, so I’ll...
on Mar 17
From frankel.ch
Secure your API with these 16 Practices with Apache APISIX - part 1
0 0
See how to configure Apache APISIX to secure your APIs against 7 of the 16 rules in the "16 practices to secure your API" list.
on Mar 11
From frankel.ch
Secure your API with these 16 Practices with Apache APISIX – part 2
0 0
In this two-post series, I've addressed most of 16 different practices to secure APIs with Apache APISIX.
on Mar 11
From frankel.ch
Using my new Raspberry Pi to run an existing GitHub Action
0 0
Recently, I mentioned how I refactored the script that kept my GitHub profile up-to-date. Since Geecon Prague, I’m also a happy owner of a Raspberry Pi: Guess what I won @GeeCON Prague? 😎 pic.twitter.com/b9dARUhfMd— Nicolas Frankel 🇺🇦 (@nicolas_frankel) October 20, 2023 Though the current...
on Mar 10
From frankel.ch
From Kotlin Scripting to Python
0 0
GitHub offers a way to customize one’s profile by allowing one to create a README in a specific repository, named as your profile, e.g., nfrankel/nfrankel. A couple of years ago, I automated the update of my GitHub profile with up-to-date info: my latest blog posts, my upcoming talks, and the...
on Mar 3
From frankel.ch
Hardening Apache APISIX with the OWASP's Coraza and Core Ruleset
0 1
Most organizations don't incentivize for security. Hence, we need to be smart about it and use existing components as much as possible.
on Feb 29
From frankel.ch
Error management in Rust, and libs that support it
0 0
As part of learning the Rust ecosystem, I dedicated the last few days to error management. Here are my findings. Error management 101 The Rust book describes the basics of error management. The language separates between recoverable errors and unrecoverable ones. Unrecoverable errors...
on Feb 11
From frankel.ch
Kicking the Tires of Docker Scout
0 0
Let's try Docker Scout, the Docker image vulnerability detection tool.
on Feb 8
From frankel.ch
Improving upon my OpenTelemetry Tracing demo
0 0
Last year, I wrote a post on Open Telemetry Tracing to understand more about the subject. I also created a demo around it, which featured the following components: The Apache APISIX API GatewayA Kotlin/Spring Boot serviceA Python/Flask serviceAnd a Rust/Axum service I’ve recently improved the...
on Jan 28
From frankel.ch
0 0
In this short article, we detail the three options for versioning HTTP APIs: path-based, query-based, and header-based.
on Jan 24
From frankel.ch
Keeping your fonts in embedded SVG
0 0
Last year, I started to use Excalidraw as a diagram tool. However, the SVG images didn’t display the font correctly. In this post, I’d like to explain the problem and offer a solution. Let’s create a sample drawing with Excalidraw. If you open the link, it should look something like this: ...
on Jan 23