RSSAmplifier

Blog

Dirk Holtwick

Software developer for web, mobile and other platforms. Strong focus on privacy enhancement.

holtwick.deRSS feed ↗40 posts

Latest posts

Receipts Space 3.6

An update with improvements to everyday workflows. Here’s a quick overview of the key changes.

Voilà PDFify 5.0 — sharper OCR, smarter compression, bonjour French

PDFify 5.0 brings Tesseract 5 OCR optimized for Apple Silicon, automatic language detection via Apple Vision, four new compression modes, and full French localization.

Me, the AI, and Our Sandbox

A hands-on report about using the bx sandbox for macOS, with a special focus on AI and VSCode.

AI Coding Tools in a Sandbox: Why Your File System Needs Protection

AI coding tools like Claude Code or Copilot have full access to your file system. bx protects everything except the current project directory with a single command.

EU funding for open source software through a performance-based platform

Proposal for an EU platform that funds open-source projects using measurable criteria, benefiting developers, the EU, and society.

Receipts Space 3.0

Receipts Space 3.0 brings audit compliance, end-to-end encryption, a new dashboard and many workflow improvements.

UnplugTrump

UnplugTrump: How can you make yourself independent of US services, especially in the age of Donald Trump? The key points are self-hosting, decentralization and open source.

E-Invoice Space

Transform your invoicing process with E-Invoice Space. Create, convert and manage EN 16931 compliant e-invoices with our powerful web application. Free PDF to XML conversion.

Write your first e-invoice...

Convert PDF invoices to e-invoices instantly. Create EN 16931, XRechnung, and ZUGFeRD compliant electronic invoices online. Free tool for small businesses and freelancers.

XML2Invoice

E-invoices:Easily convert and pay. Basic PDF becomes machine readable, XML invoice becomes human-readable

PDFify 4.0

Upgrade to PDFify 4.0 for PDF/A support, batch conversions, faster web display, and standardized page sizes. Try it now!

Resilient Sync for Local First

Resilient sync for local-first apps by using existing technologies such as file systems

Preventing fake news

How to prevent fake news by signing messages.

Website SSG

After a few years, it was time to update the website. For the last version, I had even developed my own static website generator called Hostic and everything went wonderfully. But even though I love reinventing the wheel, I only did it halfway for this new attempt. Basically, this website consists of Vue and Markdown . A static version of this is created so that the corresponding page with content…

Video Chat Briefing - More features

News feature in Briefing video chat app

LanguageTool

Install LanguageTool yourself for better privacy protection

Why I developed a static Website Builder 🤦🏻‍♂️

I developed the static website generator Hostic. Here I explain why and how I did it.

An IT strategy for Europe 🇪🇺

Europe needs a strategy and political will to change this trend. But the potential and the resources are there to make Europe more independent.

How to transpile at the speed of light 💫

For every developer there comes the moment where speed matters. It saves you a relevant amount of time and keeps the flow going.

CSS - Single Page App Stack Layout

CSS Frameworks for a single page web app have different requirements than regular content based websites.

Hybrid Apps - No Marzipan

Hybrid Apps - No Marzipan

Crash reporting: Sentry as HockeyApp alternative

A crash and error reporting alternative to HockeyApp is Sentry; examples for macOS, iOS and Javascript

Tiny UUID

About UUIDs in Objective-C and Javascript

The most obvious Electron alternative on macOS/iOS

An alternative way to do web based apps on macOS and iOS without Electron

Website Performance

After putting some energy into optimizing my websites receipts-app.com , pdfify.app and holtwick.de I’d like to share my experiences/. Defer Scripts Putting defer into script loading tags will load the scripts when the DOM is ready and in the order they appeared in your HTML. Put them in the head so the browser gets to know about them early and can already start loading while the rest of the page…

Lovely Frameworks

Certainly any macOS or iOS developers have used a framework in their project and Cocoapods makes it even easier to use 3rd party ones. But did you create one yourself? You really should, because it has some great advantages: Structure Reusability Stability Structure The benefit I like the most is that creating frameworks of certain areas of your code base forces you to precisely separate it from…

CSS from Mojave Colors

Since macOS 10.14 Mojave different visual modes like dark and light are available for the desktop. Native app developers can use named system colors to get the best fit for both semantic colors (like “window background”, “secondary label”) or plain colors (like “red”, “green”). To adopt these colors for web development it is useful to get access to their color values for use in CSS . That’s what…

UI States in Cocoa

A super simple approach In the web world, especially in React projects, the state of the app is an essential ingredient. The idea is that all visual representation originates from the current state i.e. if the state is changed the UI is likely to do as well. In the Cocoa world this pattern is usually does not matter if you start a new project. There is some API like UIStateRestoring , but it will…

Receipts Blog

Just a short note, that I started a separate blog for news related to my product Receipts . I hope you’ll subscribe there as well and learn more about the future of this product. I had fun making the new website by using my Open Source project SeaSite about which I already wrote earlier in this blog: “Static websites the jQuery way” . Even though the whole project is made of static pages, it was…

PhotoFolder

The holiday is over and the camera full of photos and with this there comes the question of where to store the images? Existing Solutions You’d say, in iCloud or Photos app and that’s indeed a good place. I personally do not like to place my private photos on servers out of my full control, and I was afraid of using Photos app due to the closed box library iPhotos used to create. The later seems…

KeyPath Trick

I’m still on Objective-C but I like the idea of swift having the #keyPath(property name) String-Expression . Less can go wrong and autocompletion and refactoring also works. In good old Objective-C we only have @selector doing similar things, but nothing that works with key paths. So here is a little trick that I use to fix this problem in my code. First I define this macro: #define keyPath ( k )…

Cosy NSObject

Often I’m finding myself in a situation, where a lot of nonsense repeating code needs to be written, like for example when implementing NSCoder for an object or when the syntax does not appeal me like keyed subscription for a dictionary like object. Since I’m still coding in Objective-C, I tried to find an easy solution for these requirements: An object with simple properties like NSString and…

Typora, perfect Markdown

I love Typora for editing Markdown. It really unites everything I ever expected from an editor of that type. Of course, I’m writing this article with Typora as well and process it with my static website builder SeaSite . Adding a Custom Theme Although it already comes with great themes for different editor requirements, I’d still love to get a preview of the content that is as close as possible to…

Smart Reordering for UITableView

For my current project zutun.io I’m implementing the reordering of entries as described in the Apple Documentation . Algorithm Idea The goal is to perform as few operations on the database as possible, therefore I use a floating point number as the sort property . The basic idea is simple: To put an entry between ordering numbers A and B choose a number that is greater than A and smaller than B.…

Implementing Crypto

I’d like to share some interesting findings I made while implementing a cross platform crypto format. Basics Usually you will need these features from a crypto implementation: Random data generation Checksum and HMAC calculations, like using SHA2 Key derivation from a password, like using PBKDF2 Encryption and decryption, like using AES This is a pretty basic set of requirements and most crypto…

Serialization on macOS and iOS - Speed and Size

I am currently working on a new storage for my Objective-C apps and I wondered if there is significant difference in speed and size of various serialization methods popular on macOS and iOS. The Contestants On board with Foundation we already got some great ones: NSJSONSerialization NSKeyedArchiver NSPropertyListSerialization in the two flavors XML and Binary As the newcomer I chose:…

Code Quality - Logging

In complex projects, the time usually comes when it becomes indispensable for quality assurance to take further measures. I would like to discuss some of these aspects in a loose series: Logging Crash Reporting Support and Feedback In this article I’ll take a look at Logging . Level The simplest form of a log entry is a message . But it soon becomes clear that this alone will not be enough and a…

Support, but efficiently

Along with selling a product there comes support. Customers have questions and demands about the software and those are often repeating. This is where replies.io comes in, a service provided by my friends Stefan Fürst and Lars Steiger , originally initiated by Ruben Bakker . Support eats up your time Support can be time-consuming and easily eat up some hours of your work day. But at the same time…

Static websites the jQuery way

This blog and website consists of static pages created using a practical technique that I would like to introduce in this article. Update 2018-02-15 The project described here can be downloaded from GitHub now. The special thing about this is that a large part of this website generator consists of programming patterns, which are also used in dynamic websites via jQuery. A simple example says more…

Using JSX in Typescript without React

JSX became a defacto standard for mixing in XML markup in JS or TypeScript source files. With a little trick it can be used for quickly creating DOM elements or for templating. The following snippet can be dropped into a JSX file and will then make a HTMLElement of the XML markup: var React = { createElement : function ( tag , attrs , children ) { var e = document. createElement (tag); // Add…