In this blog post, we take a closer look at how to receive push notifications with Capacitor and how to send them from a Spring Boot application.| Ralph's Blog
In this blog post, we take a look at the YouTube Player and Google Maps component from the angular/component repository.| Ralph's Blog
In this blog post, we take a closer look at the webSocket function from the RxJS library, a wrapper around the native WebSocket object.| Ralph's Blog
In this blog post, I show you how to deploy an Angular application to Firebase Hosting and a Spring Boot application to Google Cloud Run.| golb.hplar.ch
Example of form validation in an Ionic application. How to create custom synchronous and asynchronous validators and how to validate data on the server with the Java Bean Validation framework.| Ralph's Blog
How to create RSS and Atom feeds with the Spring Framework and the ROME library| Ralph's Blog
Protocol Buffers with Spring Integration| Ralph's Blog
Storing data with localStorage and Lockr| Ralph's Blog
In this post, we look at a way to display charts from the ECharts library in an Ionic app| Ralph's Blog
How to implement a JWT authentication system with Ionic/Angular and Spring Boot.| Ralph's Blog
In this post, we create a Todo application with Ionic that stores the data encrypted in the client storage. asmcrypto.js is used as the cryptographic library and we have a look at the Web Crypto API| Ralph's Blog
This post describes how a Spring Boot can send messages over FCM to an Ionic / Cordova app| Ralph's Blog
In this article, we take a closer look at Minio, a self-hosted S3 compatible server, and how to connect a Java application to it.| Ralph's Blog
Creating a trivial password manager with the Web Cryptography API and the Ionic framework.| Ralph's Blog
How to create a simple MultiValue Map with Java 8| Ralph's Blog
How to use pluggable file systems in Java and a look at implementations outside the standard library| Ralph's Blog
In this blog, we create REST services in Spring Boot and consume them in an Ionic app. We use the OpenAPI specification for generating API documentation and the client TypeScript code.| Ralph's Blog
In this blog post we create an Ionic app that dynamically requests location data points from a Spring Boot server and displays them on an OpenStreetMap map. The data points are stored in a MongoDB database, and we take advantage of the geospatial query support to read the data points only for a certain area.| Ralph's Blog
A closer look at the date-fns date/time library. Compare it with Moment.js and look at a few examples.| Ralph's Blog
Explore the provided methods of the Cache API, which is primarily used in Service Workers to cache assets but can be used anywhere as a general-purpose cache.| Ralph's Blog
In this blog post, I show you how you can send push messages from a Spring Boot application over Firebase Cloud Messaging (FCM) to connected clients with the Web Push API. The Push API is part of the Service Worker specification and does not depend on any native plugins.| Ralph's Blog
How a Java server application can complete the server-to-server OAuth 2.0 flow and access a Google service| Ralph's Blog
In this tutorial, we look at SparkleShare, a self-hosted, instant, and secure file synchronization service.| Ralph's Blog
In this article, I show you how to self-host TileServerGL, an open-source tile server| Ralph's Blog
This blog post shows you a way to upload pictures from a web application to Google Cloud Storage and run them through Google Cloud Vision. The application uses Ionic for the front end and Spring Boot for the back end. It utilizes signed URLs for permitting the client to upload pictures directly from the web application to Google Cloud Storage| Ralph's Blog
In this blog post, I'm going to show you how to make services, installed on a server behind a NAT/Firewall, accessible from everywhere with the Tor network.| Ralph's Blog
How to expose build information, like version number, build timestamp, git commit information, of Spring Boot and Angular applications| Ralph's Blog
The following blog post builds a WebAuthn solution from scratch.| golb.hplar.ch
In the previous post, we created an example that sends Protocol Buffer messages from one Java application to another.| golb.hplar.ch
In this post, we have a closer look at Lovefield, a SQL database engine for the web. Written in JavaScript, the library works cross-browser and provides an easy to use SQL like API for web applications. Google develops Lovefield, and according to their documentation it is used in the products Inbox and Google Play Movies & TV. You find the source code of the library on GitHub: https://github.com/google/lovefield| golb.hplar.ch
In the previous post we played with Minio, an S3 compatible server, and wrote a Java application that uploads a file to the server.| golb.hplar.ch
In this post, we are going to build a file upload example with Ionic and Spring Boot. In the client app, the user takes a picture with the camera or selects a picture from the photo gallery, and the program sends the file to a Spring Boot application over HTTP.| golb.hplar.ch
A popular choice for sending real-time data from the server to a web application is WebSocket. WebSocket opens a bidirectional connection between client and server. Both parties can send and receive messages. In scenarios where the application only needs one-way communication from the server to the client, a simpler alternative exists Server-Sent Events (SSE). It's a HTML5 standard and utilizes HTTP as the transport protocol, the protocol only supports text messages, and it's unidirectional, ...| golb.hplar.ch
When you create a website or web application, and you need to store information on the client because of performance reason, or because the site should work offline, you can choose between two built-in options: Web Storage and IndexedDB.| golb.hplar.ch
After diving deep into IndexedDB land in the previous blog post, I wanted to create a complete app with IndexedDB.| golb.hplar.ch
When you have an application that uploads files with input file field elements, then this is by default an all or nothing operation. When the user's internet connection breaks midway, he has to start the upload process from the beginning.| golb.hplar.ch
In this blog post, I show you how to build your own self hosted location tracking solution with Ionic, Cordova, and Spring Boot.| golb.hplar.ch
In this blog post, I show you three different ways how you can incorporate speech recognition into a web app, in this case, an Ionic app.| golb.hplar.ch
Ionic developed the Ionicons library that contains many icons that you can use in your Ionic application. But no icon library contains icons for every use case, and sometimes you want to include SVG icons from other libraries.| golb.hplar.ch
AWS Lambda is a service of the AWS cloud that allows you to run applications without setting up any infrastructure.| golb.hplar.ch
The web is moving to HTTPS. More and more sites are only accessible with HTTP over TLS. Thanks to Let's Encrypt, you have access to free TLS certificates, and with the ACME protocol a way to automate certificate management.| golb.hplar.ch
In a previous blog post, I showed you how to build a simple JavaScript/Java chat application with Cettia.| golb.hplar.ch
In my previous blog post, I showed you how to build a simple chat application with Cettia.| golb.hplar.ch
In this blog post, I show you how to build a simple chat application with a JavaScript front-end and a Java backend.| golb.hplar.ch
In a previous blog post, I demonstrated an example| golb.hplar.ch
There are various ways to backup data on a computer, and there are various tools that help| golb.hplar.ch
A significant change in Java 15 is the removal of the Nashorn JavaScript Engine. This blog post shows you how to migrate to another engine.| golb.hplar.ch
In this blog post, we are going to install WireGuard server on Linux. I already showed you a WireGuard installation on Amazon Lightsail in| golb.hplar.ch
Java does not have a JSON library built into the core library. That's not a problem because you can choose from many different 3rd party JSON libraries. Commonly used libraries are| golb.hplar.ch
This blog post will show you how to send push notifications from a Java back end to a web browser.| golb.hplar.ch
In this article, we are going to take a closer look at ky, a JavaScript HTTP client library for the browser on top of the Fetch API. ky adds convenience functions and new features to the existing Fetch API feature set.| golb.hplar.ch
While writing applications that deliver emails is often easy, testing is sometimes challenging| golb.hplar.ch
Rate limiting is a technology used in networks to control traffic rates. We also see applications of this| golb.hplar.ch
A common requirement in a business application is to store versioning information when particular data changes; when something changed, who changed it and what changed.| golb.hplar.ch
JGit developed and maintained by the Eclipse Foundation is a pure Java implementation of Git| golb.hplar.ch
In this blog post, we are going to explore the Web Workers API. First, we take a look at the problem and why we need Web Workers.| golb.hplar.ch
Optical character recognition or optical character reader (OCR) is the process of converting images of text into machine-encoded text.| golb.hplar.ch
The Page Visibility API is a browser-based interface| golb.hplar.ch
A few months ago, I wrote a tutorial on installing WireGuard, a simple, fast, and modern VPN, on Linux and opening a VPN connection from an Android device. Because I work most time on Windows, I was also especially interested in connecting my computer| golb.hplar.ch
In this blog post, we are going to implement an authentication system with Spring Security that uses username and password and TOTP (Time-based One-Time Password) as the second factor.| golb.hplar.ch
Variable-length integers encoding is an algorithm to compress fixed-length integers into variable-length integers to save space when you want to store or transmit numbers.| golb.hplar.ch
The Credential Management API is a browser API that allows a JavaScript application to interact with| golb.hplar.ch
In an older blog post, I wrote about uploading pictures from a Cordova app to a Spring Boot server.| golb.hplar.ch
In an older blog post, I wrote about the unreliability of file uploads over HTTP.| golb.hplar.ch
Google Fonts is a popular collection of fonts you can use on your web page and web application. The fonts are free of charge and are very easy to integrate. In this tutorial, we are going to look at two ways to integrate Google Fonts into an Ionic application.| golb.hplar.ch
When you add Spring Security to a Spring Boot application, by default, you get a session-based authentication system. Spring Security handles login and logout requests and| golb.hplar.ch
When you bootstrap an Ionic application with the Ionic CLI, you automatically have access to the Ionicons library; a collection of SVG icons for web, iOS, and Android development. The library is not that big, and you usually add icons from other sources to your project. I showed you how to add individual SVG in my previous blog post, I showed you how to add individual SVG icons to an Ionic project.| golb.hplar.ch
Seafile is an open-source file sync and share software. You can upload files and sync them across different devices. Seafile provides a web interface| golb.hplar.ch
In this blog post, we are looking at an older feature of Java that has been introduced in Java 7 (2011): The ability to monitor directories for changes.| golb.hplar.ch
Flyway ¶| golb.hplar.ch
Cettia is a web framework, which consists of a JavaScript library that runs in the browser and on Node.js and a Java library for the back end.| golb.hplar.ch
In this blog post, we will look at the HTTP client library introduced in Java 11 (September 2018).| golb.hplar.ch
In this blog post, you find a collection of examples revolving around the JavaScript spread and rest syntax (...).| golb.hplar.ch
In this blog post, we will look at a way to expose services running on a computer that sits behind a NAT or firewall to the Internet. For example, you have a small server at home, and you would like to access this server or maybe the whole network from anywhere in the world.| golb.hplar.ch
The web is moving to HTTPS. More and more sites are only accessible with HTTP over TLS. Thanks to Let's Encrypt, you have access to free TLS certificates and with the ACME protocol a way to automate the certificates management.| golb.hplar.ch
In my previous blog post, I took a closer look at the new numeric type BigInt in JavaScript| golb.hplar.ch
In my previous blog post I showed you a simple neural network implementation in Java and JavaScript| golb.hplar.ch
A couple of days ago, I read the book "Make Your Own Neural Network" from Tariq Rashid.| golb.hplar.ch
When you follow standard password rules, you use reasonable lengthy passwords, don't use passwords that are exposed in data breaches, and use a different password for each service. | golb.hplar.ch
In a previous blog post, I created an example with the Background Sync API.| golb.hplar.ch
WireGuard is a VPN solution. It claims to be faster, simpler, and leaner than other solutions like IPSec and OpenVPN.| golb.hplar.ch
In a previous blog post I showed you how to install a global error handler in JavaScript with| golb.hplar.ch
When you need to convert a written text to speech in a web application, you can use the built-in Web Speech API. A look at the caniuse.com chart| golb.hplar.ch
The Beacon API is a browser API that maybe not many people heard of or us it in their| golb.hplar.ch
BigInt is a new JavaScript primitive that can represent integers with arbitrary precision, unlike the Number primitive that can only safely store integer values up to 2^53. BigInts allow an application to work with numbers that do not fit into the Number range. An application never has to worry about overflow errors when it performs integer arithmetic with BigInt.| golb.hplar.ch
Update December 2018: Visit this blog post https://golb.hplar.ch/2018/12/background-sync-ng.html if you are interested in the same example but with the Angular service worker.| golb.hplar.ch
Adding a service worker to an Angular app is quite easy. Issue the command ng add @angular/pwa, and it adds a| golb.hplar.ch
When you manage your server and self-host applications on it, you often need a way to send emails. In this tutorial, we're going to look at two ways how you can send emails from your server to the rest of the world.| golb.hplar.ch
There are many different ways how you can backup your data. My preferred solution is to store backups on Amazon S3.| golb.hplar.ch
This tutorial will show you how to install a Gitea Git server on a VPS (virtual private server).| golb.hplar.ch
This is a follow-up to my previous blog post about setting up a VPS server. In the article, I use the command line SSH client, which is pre-installed on macOS, Linux, and Windows 10 (April 2018 Update). But on older Windows versions, you have to download an SSH client.| golb.hplar.ch
I like to self-host my web applications and other applications like blog software and Git servers. This gives you a bit of independence from third-party services and the freedom to install any software with any configuration. | golb.hplar.ch
In 2017 the National Institute of Standards and Technology (NIST) released a new set of recommendations for handling passwords in software applications (SP 800-63 Digital Identity Guidelines).| golb.hplar.ch
haveibeenpwned.com is a service that hosts passwords from data breaches. Currently (March 2023), over 840 million passwords are stored in this database.| golb.hplar.ch
This blog post is based on a Traversy Media video.| golb.hplar.ch
Regular expressions are a powerful tool for input validation, text extraction, and find and replace operations.| golb.hplar.ch
In my previous blog posts (here, here and here) I showed you examples of server-sent events (SSE) applications that send messages from a server to a browser.| golb.hplar.ch
A common solution is adding the polyfills to the main application bundle. Another solution is to load polyfills from a service like Polyfill.io.| golb.hplar.ch
In the previous blog post, we have seen how to leverage the ability of MongoDB to delete documents based on the size with Capped Collections automatically.| golb.hplar.ch
In addition to regular collections, into which you can insert any number of documents, MongoDB also offers capped collections that are limited in size. When your application inserts a document into such a collection, and the collection is full, MongoDB automatically deletes the oldest document to make room for the new one. The insertion date specifies the age of a document.| golb.hplar.ch