Dublin Library

The Publishing project

HTML range inputs

A lot of times we think of HTML as a static, inflexible, language. But there are many things you can do with HTML that are not obvious unless you look for them. This post will look at two specific things you can do with HTML range inputs: adding tickmarks and a live value display. Range inputs with ticks datalist When using a range input on its own, you specify a minimum and maximum value, and the user can select any value in between. html As you can see below, on its own, the range input is not very informative. It...

WebGPU

This post will cover my research on the WebGPU API. WebGPU is a lower level API that will work with underlying native GPU APIs like Vulkan Khronos Group, Metal Apple, and Direct3D 12 Microsoft, providing a unified and efficient way for web developers to utilize GPU capabilities. There is no relationship between WebGPU and the previous WebGL APIs, which targeted different OpenGL specifications. WebGPU provides access to non-graphical computation tasks through compute shaders, which can be used for general-purpose computing tasks that can benefit from parallel processing. Differences with WebGL The following sections will compare WebGL and WebGPU in terms...

Why I prefer JSON5 over JSON

JSON5 is a superset of JSON that allows for more flexible syntax and features. This post will disccus reasons why I prefer JSON5 over JSON. What is JSON5 The JSON5 Data Interchange Format is a superset of JSON so valid JSON files will always be valid JSON5 files that expands its syntax to include some productions from ECMAScript 5.1 ES5. It's also a subset of ES5, so valid JSON5 files will always be valid ES5 and fully compaible with ES2019 and later. The following ECMAScript 5.1 features, which are not supported in JSON, have been in JSON5. Objects Object keys...

Keeping hidden text findable

Text that is visually hidden cannot be found by the browser's find-in-page feature and may not be visible to accessible technology like screen readers. This is a problem for screen reader users, who rely on this feature to navigate content. This post explains how to make hidden text findable for everyone. The problem hidden text in a web page is not searchable when you use the browser's built-in find-in-page feature. This is a problem for screen reader users, who rely on this feature to navigate content. For example, if a user is looking for a specific word or phrase in...

Using CSS Wisely

CSS has progressed enormously in the last few years. This is both good and bad. The good : CSS has become very powerful and it has gained many new features that make design and development work easier. : You can now use CSS to achieve tasks that previously required JavaScript or were impossible to do on the web. The bad : It has become hard to keep all of CSS in your head and, even to know what you're looking for in references like MDNhttps://developer.mozilla.org/, web.devhttps://web.dev/ or your favorite resource : CSS has also evolved in both the length of...

Comparing compression methods

Compression has been around for a long time, and it's a key part of web performance. In this post, we'll compare three popular compression methods: GZip, Brotli, and Zstd. We will first look at each compression standard, compare them when compressing a file and then look at how they can be used in the web, on their own and with compression dictionaries. The compression methods We will work with three compression: GZip, Brotli, and Zstd. GZip : GZip is a file format and a software application used for file compression and decompression. The program was created as a free software...

Balancing text in CSS

The different values for text-wrap provide reading experience enhancements for headings and long-form text. This post will look at two values for the text-wrap property: balance and pretty. text-wrap: balance text-wrap: balance wraps text in a way that best balances the number of characters on each line, enhancing layout quality and legibility. Because counting characters and balancing them across multiple lines is computationally expensive, text-warp: balance only works for small blocks of text: six lines or less in Chromium browsers and ten lines or less in Firefox. text-wrap: pretty When using text-wrap: pretty, text is wrapped across lines at appropriate...

Design for bad performance

A somewhat contrarian view on designing websites is to design for bad performance. This post will explore the idea of how designing for bad performance can lead to better user experiences. Credit where credit is due: The ideas from this post are taken from Designing websites for bad performancehttps://calendar.perfplanet.com/2024/designing-websites-for-bad-performance/ Bad performance, what? Bad performance is a reality for many users around the world. It's easy to forget that not everyone has access to high-speed internet connections or the latest devices. This is not a problem exclusive to developing countries. Even in developed countries, there are areas with poor internet connectivity...

Using int.relativeTimeFormat for localized relative dates

One of the things that has always bugged me is how to display relative dates on a web page in the Eleventy template that I chose to use for this blog. This post will explore the issue, how the template currently displays dates and how to use intl.RelativeTimeFormathttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/GlobalObjects/RelativeTimeFormat to display relative dates without using third-party libraries. Displaying dates in human readable formats As currently implemented, The Eleventy template uses the following filter to display dates in a human-readable format. This code uses the Luxonhttps://moment.github.io/luxon/ library to format dates. This is a lighter alternative to Moment.jshttps://momentjs.com/ and other heavy duty date...

Evaluating browser support

Talking about web browser support for a given CSS or Javascript is deceptively simple. This post will explore a definition of browser support, different strategies to support a feature accross browsers, the concepts of graceful degradation and progressive enhancement, and how to handle features that can't be polyfilled. How to evaluate browser support When talking about browser support, we are actually asking three related questions: 1. How essential is the feature to the application? 2. Is the feature supported in all browsers? 3. Is there a way to polyfill or provide an alternative for the feature? For most CSS and...