# H2

Published articles for H2.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## How JetBrains Built Cross-Database Queries into DataGrip with DuckDB

DevFeed: [How JetBrains Built Cross-Database Queries into DataGrip with DuckDB](<https://devfeed.tech/articles/how-jetbrains-built-cross-database-queries-into-datagrip-with-duckdb-119804.md>)

Original publisher: [Read original article](<https://duckdb.org/2026/11/05/jetbrains-datagrip.html>)

Author: Tim Cox

Published: 2026-11-05T00:00:00Z

Content type: article

Language: en

Sources: [DuckDB](<https://devfeed.tech/sources/duckdb.md>)

Topics: [DuckDB](<https://devfeed.tech/topics/duckdb.md>), [Database](<https://devfeed.tech/topics/database.md>), [jetbrains](<https://devfeed.tech/topics/jetbrains.md>)

Tags: [apache](<https://devfeed.tech/tags/apache.md>), [case-study](<https://devfeed.tech/tags/case-study.md>), [custom](<https://devfeed.tech/tags/custom.md>), [database](<https://devfeed.tech/tags/database.md>), [databases](<https://devfeed.tech/tags/databases.md>), [datagrip](<https://devfeed.tech/tags/datagrip.md>), [developer-tools](<https://devfeed.tech/tags/developer-tools.md>), [developers](<https://devfeed.tech/tags/developers.md>), [duckdb](<https://devfeed.tech/tags/duckdb.md>), [duckdb-2-0](<https://devfeed.tech/tags/duckdb-2-0.md>), [embedded](<https://devfeed.tech/tags/embedded.md>), [functions](<https://devfeed.tech/tags/functions.md>), [h2](<https://devfeed.tech/tags/h2.md>), [ide](<https://devfeed.tech/tags/ide.md>), [integration](<https://devfeed.tech/tags/integration.md>), [jetbrains](<https://devfeed.tech/tags/jetbrains.md>), [join](<https://devfeed.tech/tags/join.md>), [queries](<https://devfeed.tech/tags/queries.md>), [query](<https://devfeed.tech/tags/query.md>), [query-engine](<https://devfeed.tech/tags/query-engine.md>), [using-duckdb](<https://devfeed.tech/tags/using-duckdb.md>)

### AI overview

DataGrip embeds DuckDB to let users join data across database connections in one query, avoiding the need for JetBrains to build and maintain its own cross-database engine. DuckDB's custom table functions connect it to DataGrip's existing query execution; JetBrains says this was simpler than the alternatives it evaluated, while offering more capabilities than lighter options such as H2, including projection pushdown. Cross-source queries use DuckDB's SQL dialect, which DataGrip identifies for users and supports with syntax highlighting. The feature is an initial release: JetBrains plans to observe how users apply it before adding more query optimizations, and is considering using DuckDB to query file-based data sources. The excerpt says the approach works across supported databases without extra infrastructure.

### Source excerpt

JetBrains users had long asked to join data across different database connections in a single query. Rather than build its own cross-database query engine, JetBrains embedded DuckDB in DataGrip, using DuckDB's custom table functions to connect it to the IDE's existing query execution. This is why DuckDB won out over the alternatives, and where the integration goes next.

## Overriding Heading Levels With the headingoffset HTML Attribute

DevFeed: [Overriding Heading Levels With the headingoffset HTML Attribute](<https://devfeed.tech/articles/overriding-heading-levels-with-the-headingoffset-html-attribute-112565.md>)

Original publisher: [Read original article](<https://blog.master.dev/overriding-heading-levels-with-the-headingoffset-html-attribute/>)

Author: Daniel Schwarz

Published: 2026-11-02T13:27:01Z

Content type: article

Language: en

Sources: [Master.dev Blog RSS Feed](<https://devfeed.tech/sources/master-dev-blog-rss-feed.md>)

Topics: [HTML](<https://devfeed.tech/topics/html.md>), [Web Accessibility (a11y)](<https://devfeed.tech/topics/web-accessibility.md>), [selectors](<https://devfeed.tech/topics/selectors.md>), [Front end](<https://devfeed.tech/topics/frontend.md>)

Tags: [accessibility](<https://devfeed.tech/tags/accessibility.md>), [algorithm](<https://devfeed.tech/tags/algorithm.md>), [aria](<https://devfeed.tech/tags/aria.md>), [blog-post](<https://devfeed.tech/tags/blog-post.md>), [component](<https://devfeed.tech/tags/component.md>), [containers](<https://devfeed.tech/tags/containers.md>), [css](<https://devfeed.tech/tags/css.md>), [devtools](<https://devfeed.tech/tags/devtools.md>), [dialog](<https://devfeed.tech/tags/dialog.md>), [h2](<https://devfeed.tech/tags/h2.md>), [hierarchy](<https://devfeed.tech/tags/hierarchy.md>), [html](<https://devfeed.tech/tags/html.md>), [math](<https://devfeed.tech/tags/math.md>), [style](<https://devfeed.tech/tags/style.md>)

### AI overview

The `headingoffset` attribute adds its integer value (0-8) to a heading's level, accumulating across ancestor elements and the heading itself; computed levels are capped at 9. `headingreset` cuts off inherited offsets, while an offset on the same reset element still applies. `aria-level` instead sets a heading's level directly and can also make a non-heading element a heading. For CSS that follows computed levels, the article recommends `:heading()` rather than element selectors such as `h3`. It advises using offsets and resets sparingly because distant or numerous offsets make hierarchy harder to track. At the time described, Firefox Nightly 153 had the feature behind a flag, and broad browser support was still lacking.

### Source excerpt

The new headingoffset HTML attribute lets you bump a heading's level up by adding to it, which is handy when a component's h1 needs to be an h2 somewhere else. Here's how the math works, how to reset it, how to style the result with :heading(), and where aria-level fits in.

## A Unified Queueing-Based Framework for Comparative Evaluation of Serverless Autoscaling Strategies under Bursty Workloads

DevFeed: [A Unified Queueing-Based Framework for Comparative Evaluation of Serverless Autoscaling Strategies under Bursty Workloads](<https://devfeed.tech/articles/a-unified-queueing-based-framework-for-comparative-evaluation-of-serverless-autoscaling-strategies-under-bursty-workloads-101637.md>)

Original publisher: [Read original article](<https://arxiv.org/abs/2610.35564>)

Author: Zahra Zafarzade, Ehsan Ataie

Published: 2026-10-27T04:00:00Z

Content type: news

Language: en

Sources: [arXiv: Distributed Computing](<https://devfeed.tech/sources/arxiv-distributed-computing.md>)

Topics: [autoscaling](<https://devfeed.tech/topics/autoscaling.md>), [queueing theory](<https://devfeed.tech/topics/queueing-theory.md>), [function as a service](<https://devfeed.tech/topics/function-as-a-service.md>), [Simulation](<https://devfeed.tech/topics/simulation.md>), [Latency](<https://devfeed.tech/topics/latency.md>)

Tags: [activation](<https://devfeed.tech/tags/activation.md>), [automatic](<https://devfeed.tech/tags/automatic.md>), [autoscaling](<https://devfeed.tech/tags/autoscaling.md>), [behavior](<https://devfeed.tech/tags/behavior.md>), [capacity](<https://devfeed.tech/tags/capacity.md>), [concurrency](<https://devfeed.tech/tags/concurrency.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [critical](<https://devfeed.tech/tags/critical.md>), [cs-dc](<https://devfeed.tech/tags/cs-dc.md>), [delay](<https://devfeed.tech/tags/delay.md>), [evaluation](<https://devfeed.tech/tags/evaluation.md>), [faas](<https://devfeed.tech/tags/faas.md>), [framework](<https://devfeed.tech/tags/framework.md>), [h2](<https://devfeed.tech/tags/h2.md>), [java](<https://devfeed.tech/tags/java.md>), [load](<https://devfeed.tech/tags/load.md>), [metric](<https://devfeed.tech/tags/metric.md>), [metrics](<https://devfeed.tech/tags/metrics.md>), [modeling](<https://devfeed.tech/tags/modeling.md>), [serverless](<https://devfeed.tech/tags/serverless.md>), [strategies](<https://devfeed.tech/tags/strategies.md>)

### AI overview

The study compares scale-per-request (SPR), concurrency-level scaling (CLS), and metric-based scaling (MBS) using a unified queueing model: analytical queueing networks combined with queueing Petri nets in Java Modeling Tools, evaluated under two-phase hyper-exponential arrivals. It tracks throughput, mean response time, system population, and power while modeling function-instance activation, concurrency limits, and queue buildup at saturation. The abstract reports a performance-stability trade-off: SPR has the lowest delay at moderate load but is fragile near capacity; CLS depends on concurrency tokens and is highly configuration-sensitive under bursty conditions; MBS provides the steadiest QoS across the tested workload range by limiting utilization and queue growth under critical load.

### Source excerpt

arXiv:2610.35564v1 Announce Type: new Abstract: Serverless computing platforms must preserve quality of service (QoS) while adapting to highly bursty and unpredictable workloads. To cope with workload fluctuations while satisfying QoS requirements and service-level agreements (SLAs), these platforms rely on automatic resource scaling. Commercial function-as-a-service (FaaS) platforms employ different autoscaling strategies to dynamically adjust the number of active function instances and the available processing capacity. In this work, three representative autoscaling strategies are modeled and compared: scale-per-request (SPR), concurrencylevel scaling (CLS), and metric-based scaling (MBS). To enable systematic evaluation independent of proprietary platform-specific implementations, we develop a unified modeling framework that combines analytical queueing network (QN) modeling with queueing Petri nets (QPN) implemented in Java Modeling Tools (JMT) to evaluate autoscaling behavior under two-phase hyper-exponential (H2) arrivals. Evaluation is conducted using four system-level metrics: throughput, mean response time, system population, and system power. The framework captures dynamic function instance (FI) activation, concurrency constraints, and queue buildup under saturation. Comparative analysis reveals a clear trade-off between peak performance and stability: SPR provides the lowest delay under moderate load but becomes fragile near capacity limits; CLS is governed by concurrency tokens and is highly sensitive to configuration under bursty conditions; whereas MBS provides the most stable QoS across the workload range by keeping utilization below a critical region and preventing explosive queue growth under critical load.

## JEP targeted to JDK 28: 546: Adaptive Heap Sizing for ZGC

DevFeed: [JEP targeted to JDK 28: 546: Adaptive Heap Sizing for ZGC](<https://devfeed.tech/articles/jep-targeted-to-jdk-28-546-adaptive-heap-sizing-for-zgc-89906.md>)

Original publisher: [Read original article](<https://inside.java/2026/10/19/jep546-target-jdk28/>)

Author: Erik Österlund

Published: 2026-10-19T00:00:00Z

Content type: article

Language: en

Sources: [Inside Java](<https://devfeed.tech/sources/inside-java.md>)

Topics: [openjdk](<https://devfeed.tech/topics/openjdk.md>)

Tags: [adaptive](<https://devfeed.tech/tags/adaptive.md>), [case-study](<https://devfeed.tech/tags/case-study.md>), [container](<https://devfeed.tech/tags/container.md>), [cpu](<https://devfeed.tech/tags/cpu.md>), [garbage-collection](<https://devfeed.tech/tags/garbage-collection.md>), [garbage-collectors](<https://devfeed.tech/tags/garbage-collectors.md>), [gc](<https://devfeed.tech/tags/gc.md>), [h2](<https://devfeed.tech/tags/h2.md>), [heap](<https://devfeed.tech/tags/heap.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [jdk-28](<https://devfeed.tech/tags/jdk-28.md>), [jep](<https://devfeed.tech/tags/jep.md>)

### AI overview

JEP 546 proposes optional adaptive heap sizing for ZGC, enabled with `-XX:+ZAdaptiveHeapSizing`, to balance heap memory against garbage-collection CPU use and respond to resource contention on the host. ZGC expands the heap when GC CPU use exceeds a configurable target intensity and contracts it when use falls below target; it also adjusts heap size to accommodate neighboring processes, prioritizing that behavior over the target. Lower intensity favors less GC CPU use and more memory, while higher intensity favors less memory and more CPU. The proposal aims to remove the need to set `-Xmx` or `SoftMaxHeapSize`, while retaining existing sizing options. Its default maximum would rise from 25% to nearly all physical memory, which could leave other processes short of memory. The case study reports heap adjustments across four JVMs sharing a 16 GB container, with temporary latency and throughput degradation during memory contention.

### Source excerpt

The following JEP is targeted to JDK 28: 546: Adaptive Heap Sizing for ZGC

## Introduction to Solon

DevFeed: [Introduction to Solon](<https://devfeed.tech/articles/introduction-to-solon-55727.md>)

Original publisher: [Read original article](<https://www.baeldung.com/java-solon-quick-tutorial>)

Author: Francesco Galgani

Published: 2026-09-21T04:05:19Z

Content type: tutorial

Language: en

Sources: [Baeldung](<https://devfeed.tech/sources/baeldung.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [Framework](<https://devfeed.tech/topics/framework.md>), [REST API](<https://devfeed.tech/topics/rest-api.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [Database](<https://devfeed.tech/topics/database.md>), [Persistence](<https://devfeed.tech/topics/persistence.md>), [Maven](<https://devfeed.tech/topics/maven.md>), [Software Testing](<https://devfeed.tech/topics/software-testing.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [framework](<https://devfeed.tech/tags/framework.md>), [fundamentals](<https://devfeed.tech/tags/fundamentals.md>), [h2](<https://devfeed.tech/tags/h2.md>), [http](<https://devfeed.tech/tags/http.md>), [java-web](<https://devfeed.tech/tags/java-web.md>), [java-web-h2-mybatis-rest-basics](<https://devfeed.tech/tags/java-web-h2-mybatis-rest-basics.md>), [mybatis](<https://devfeed.tech/tags/mybatis.md>), [persistence](<https://devfeed.tech/tags/persistence.md>), [popular](<https://devfeed.tech/tags/popular.md>), [rest](<https://devfeed.tech/tags/rest.md>), [rest-basics](<https://devfeed.tech/tags/rest-basics.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

A practical introduction to Solon, an independent enterprise Java framework. The tutorial builds a REST API that persists tasks in H2, compares Solon with Spring Boot, and covers configuration, dependency injection, HTTP handling, and testing.

### Source excerpt

Learn the fundamentals of Solon, including its architecture, dependency injection, configuration, HTTP handling, persistence, and testing, and see them in practice by building a REST API with MyBatis-Flex and H2. The post Introduction to Solon first appeared on Baeldung.

## Running a Self-Hosted Tailscale Control Server Behind a Reverse Proxy

DevFeed: [Running a Self-Hosted Tailscale Control Server Behind a Reverse Proxy](<https://devfeed.tech/articles/running-a-self-hosted-tailscale-control-server-behind-a-reverse-proxy-34104.md>)

Original publisher: [Read original article](<https://philipptheserver.com/posts/headscale-behind-traefik-no-h2/>)

Author: Philipp Lehmann (philipp.lehmann@gruppe.ai)

Published: 2026-09-15T07:00:00Z

Content type: tutorial

Language: en

Sources: [Philipp Lehmann](<https://devfeed.tech/sources/philipp-lehmann.md>)

Topics: [tailscale](<https://devfeed.tech/topics/tailscale.md>), [proxy](<https://devfeed.tech/topics/proxy.md>), [traefik](<https://devfeed.tech/topics/traefik.md>), [TLS (Transport Layer Security)](<https://devfeed.tech/topics/tls.md>), [TLS handshake](<https://devfeed.tech/topics/tls-handshake.md>), [Self-hosted](<https://devfeed.tech/topics/self-hosted.md>), [Homelab](<https://devfeed.tech/topics/homelab.md>)

Tags: [dns](<https://devfeed.tech/tags/dns.md>), [docker](<https://devfeed.tech/tags/docker.md>), [h2](<https://devfeed.tech/tags/h2.md>), [homelab](<https://devfeed.tech/tags/homelab.md>), [networking](<https://devfeed.tech/tags/networking.md>), [proxy](<https://devfeed.tech/tags/proxy.md>), [reverse-proxy](<https://devfeed.tech/tags/reverse-proxy.md>), [security](<https://devfeed.tech/tags/security.md>), [self-hosted](<https://devfeed.tech/tags/self-hosted.md>), [tailscale](<https://devfeed.tech/tags/tailscale.md>), [tls](<https://devfeed.tech/tags/tls.md>), [tls-handshake](<https://devfeed.tech/tags/tls-handshake.md>), [traefik](<https://devfeed.tech/tags/traefik.md>)

### AI overview

This tutorial explains how to run a self-hosted Tailscale control server, Headscale, behind Traefik. It finds that the reverse proxy must use TLS with HTTP/1.1 only because Tailscale's noise handshake expects a full-duplex byte stream and can fail when ALPN negotiates HTTP/2.

### Source excerpt

Headscale behind Traefik: tls.options=no-h2@file with alpnProtocols http/1.1, because the Tailscale noise handshake breaks when ALPN negotiates h2.

## Day 63: explicit defaulting with inherit, initial, unset, and revert

DevFeed: [Day 63: explicit defaulting with inherit, initial, unset, and revert](<https://devfeed.tech/articles/day-63-explicit-defaulting-with-inherit-initial-unset-and-revert-52234.md>)

Original publisher: [Read original article](<https://www.matuzo.at/blog/2022/100daysof-day63>)

Author: Manuel Matuzović

Published: 2022-12-21T00:00:00Z

Content type: tutorial

Language: en

Sources: [Manuel Matuzović](<https://devfeed.tech/sources/manuel-matuzovic-blog.md>)

Topics: [CSS](<https://devfeed.tech/topics/css.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>)

Tags: [border](<https://devfeed.tech/tags/border.md>), [browser](<https://devfeed.tech/tags/browser.md>), [color](<https://devfeed.tech/tags/color.md>), [css](<https://devfeed.tech/tags/css.md>), [element](<https://devfeed.tech/tags/element.md>), [h2](<https://devfeed.tech/tags/h2.md>), [properties](<https://devfeed.tech/tags/properties.md>), [property](<https://devfeed.tech/tags/property.md>)

### AI overview

A tutorial explaining the CSS-wide keywords inherit, initial, unset, revert, and revert-layer. It uses a simple div and h2 example to show how these keywords affect inherited values, initial values, browser defaults, borders, colors, and margins.

### Source excerpt

There are several CSS-wide property values you can use to specify a particular defaulting behavior for a property explicitly. Okay, okay, I know, these keywords aren't new at all, except for revert maybe which is newish, but if I want to write about revert-layer, which is brand new, I need a basic understanding of all keywords. Also, I had the feeling that most of you, like me, don't know what all of these keywords do, and I was right. At least, if you want to trust this poll on Mastodon. Our baseline We'll work with the following example. We have a <div> with a 1px solid green border, a red text color, and a 10px margin. Nested in the div is a <h2> with a blue text color. <div> <h2>standard</h2> </div> div { color: red; border: 1px solid green; margin: 10px; } h2 { color: blue; } Feliz Navidad Now, let's apply keywords to the border, color, and margin property on the <h2> and see what happens. inherit h2 { border: inherit; color: inherit; margin: inherit; } inherit is pretty straight-forward. The <h2> inherits all defined properties from its parent element. Feliz Navidad h2 inherit keyword: property values property value origin border-color green parent border-style solid parent border-width 1px parent color red parent margin 10px parent initial h2 { border: initial; color: initial; margin: initial; } initial sets the value of the property to its initial value. Each property has an initial value, defined in the property's definition table. For example, if you look at the color property in the specification, you see that the defined initial value in the definition table is CanvasText. The initial value is not the default value of the property defined in the user agent (browser). For example, the default margin of the body in most (all?) browsers is 8px, but the initial value of the margin property is 0. Feliz Navidad h2 initial keyword: property values property value origin border-color currentColor initial value border-style none initial value border-width medium i

## Using H2 as a Test Database Product with jOOQ

DevFeed: [Using H2 as a Test Database Product with jOOQ](<https://devfeed.tech/articles/using-h2-as-a-test-database-product-with-jooq-28969.md>)

Original publisher: [Read original article](<https://blog.jooq.org/using-h2-as-a-test-database-product/>)

Author: lukaseder

Published: 2022-08-19T07:25:43Z

Content type: tutorial

Language: en

Sources: [jOOQ](<https://devfeed.tech/sources/jooq.md>)

Topics: [in-memory database](<https://devfeed.tech/topics/in-memory-database.md>), [Software Testing](<https://devfeed.tech/topics/software-testing.md>), [Java](<https://devfeed.tech/topics/java.md>), [SQL](<https://devfeed.tech/topics/sql.md>), [sql-server](<https://devfeed.tech/topics/sql-server.md>)

Tags: [compatibility-mode](<https://devfeed.tech/tags/compatibility-mode.md>), [database](<https://devfeed.tech/tags/database.md>), [h2](<https://devfeed.tech/tags/h2.md>), [in-memory-database](<https://devfeed.tech/tags/in-memory-database.md>), [integration-testing](<https://devfeed.tech/tags/integration-testing.md>), [java](<https://devfeed.tech/tags/java.md>), [jooq](<https://devfeed.tech/tags/jooq.md>), [jooq-in-use](<https://devfeed.tech/tags/jooq-in-use.md>), [sql](<https://devfeed.tech/tags/sql.md>), [sql-server](<https://devfeed.tech/tags/sql-server.md>), [testcontainers](<https://devfeed.tech/tags/testcontainers.md>), [testing](<https://devfeed.tech/tags/testing.md>), [vendor-agnosticity](<https://devfeed.tech/tags/vendor-agnosticity.md>)

### AI overview

This article explains the trade-offs of using H2 as a test database for Java applications with jOOQ. It shows why SQL that works on H2 may require syntax changes on SQL Server, describes H2 compatibility modes, and notes that jOOQ generates SQL for H2's native dialect rather than its compatibility modes.

### Source excerpt

The H2 database is an immensely popular in-memory database product mostly used by Java developers for testing. If you check out the DB-Engines ranking, it ranks 50th, which is quite impressive, as this rank outperforms products like: CockroachDB Ignite Single Store (previously MemSQL) Interbase (which was forked as Firebird) Ingres (which is a predecessor to ... Continue reading Using H2 as a Test Database Product with jOOQ ->

## Accessible heading structure

DevFeed: [Accessible heading structure](<https://devfeed.tech/articles/accessible-heading-structure-9392.md>)

Original publisher: [Read original article](<https://a11yproject.com/posts/how-to-accessible-heading-structure/>)

Author: Rian Rietveld

Published: 2022-01-03T00:00:00Z

Content type: article

Language: en

Sources: [The A11Y Project](<https://devfeed.tech/sources/the-a11y-project.md>)

Topics: [HTML](<https://devfeed.tech/topics/html.md>), [Web Accessibility (a11y)](<https://devfeed.tech/topics/web-accessibility.md>), [Web Content Accessibility Guidelines](<https://devfeed.tech/topics/web-content-accessibility-guidelines.md>), [aria](<https://devfeed.tech/topics/aria.md>), [Search engine optimization (SEO)](<https://devfeed.tech/topics/seo.md>), [markup](<https://devfeed.tech/topics/markup.md>)

Tags: [accessible](<https://devfeed.tech/tags/accessible.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [content](<https://devfeed.tech/tags/content.md>), [design](<https://devfeed.tech/tags/design.md>), [h2](<https://devfeed.tech/tags/h2.md>), [header](<https://devfeed.tech/tags/header.md>), [html](<https://devfeed.tech/tags/html.md>), [html-elements](<https://devfeed.tech/tags/html-elements.md>), [index](<https://devfeed.tech/tags/index.md>), [it](<https://devfeed.tech/tags/it.md>), [multiple](<https://devfeed.tech/tags/multiple.md>), [screen](<https://devfeed.tech/tags/screen.md>), [search](<https://devfeed.tech/tags/search.md>), [semantic](<https://devfeed.tech/tags/semantic.md>), [seo](<https://devfeed.tech/tags/seo.md>), [structure](<https://devfeed.tech/tags/structure.md>), [structured](<https://devfeed.tech/tags/structured.md>), [top](<https://devfeed.tech/tags/top.md>), [unique](<https://devfeed.tech/tags/unique.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

Use one descriptive `h1` for each page, then organize meaningful subheadings in a logical hierarchy without skipping levels. Headings should describe the content that follows, support scanning and screen-reader navigation, and not be chosen just for visual size; style them with CSS instead. The text says WCAG 2 AA requires headings and labels to describe topic or purpose and semantic relationships to be programmatically available, while explicit structured sections are required at AAA. It cautions that multiple `h1`s based on the HTML document outline are unsupported by browsers and assistive technology, and that `hgroup` lacks assistive technology support; it offers ARIA attributes and a paragraph subtitle as a proposed workaround. Reusable components should adapt heading levels to their page context, and logos generally should not be repeated as each page's `h1`. For checking structure, the text names Axe Devtools, HeadingsMap, WAVE, and WordPress's visual heading information.

### Source excerpt

Headings are the backbone of the content of a page. A visitor should be able to scan the webpage using headings to get a good impression of its content. Heading levels have meaning, especially for screen reader users and search engines. That means one unique first level heading per page, with the other headings representing the page content similar to the index of a book: easily scannable and semantic. Write well-structured headings, because what is good for your reader, is also good for your SEO. Headings in HTML Headings are HTML elements. The main heading, h1, is level 1. The other levels are h2 up to h6. The HTML Living Standard states on headings: A heading can be used where heading content is expected. Heading content defines the header of a section (whether explicitly marked up using sectioning content elements, or implied by the heading content itself). The HTML Living Standard, The h1, h2, h3, h4, h5, and h6 elements In short: use a heading when the content or the page structure requires it. Best practices summarized Use one unique h1 per page that describes what that page is about. That h1 preferably starts just above the main content. Use headings to describe the content below. Do not use an HTML heading just to make the text appear bigger or stand out. Use heading levels like the index of a book: hierarchical. Do not choose a heading by its size, but by its level in the context of the content. Do not skip a heading level from the top down. Common mistakes: Using a h2 heading for quotes because of its nice big font size. Using a h4 heading for the first paragraph of the text because it's just the size of bold text you need. Exclusively using h2 headings on a web page because all headings are the same size in the designs. Using multiple h1 headings on a web page. Omitting headings because the design clearly indicates the start of a new section. Leaving headings empty (usually a CMS glitch). What does hierarchical mean? Hierarchical means arranged in order

## How to use an in-memory database for testing on Ktor

DevFeed: [How to use an in-memory database for testing on Ktor](<https://devfeed.tech/articles/how-to-use-an-in-memory-database-for-testing-on-ktor-25560.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2021/ktor-in-memory-db-testing/>)

Author: Marco Gomiero

Published: 2021-10-04T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [in-memory database](<https://devfeed.tech/topics/in-memory-database.md>), [Software Testing](<https://devfeed.tech/topics/software-testing.md>), [Database](<https://devfeed.tech/topics/database.md>), [Ktor](<https://devfeed.tech/topics/ktor.md>), [Back end](<https://devfeed.tech/topics/backend.md>)

Tags: [database](<https://devfeed.tech/tags/database.md>), [exposed](<https://devfeed.tech/tags/exposed.md>), [h2](<https://devfeed.tech/tags/h2.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [in-memory-database](<https://devfeed.tech/tags/in-memory-database.md>), [ktor](<https://devfeed.tech/tags/ktor.md>), [mysql](<https://devfeed.tech/tags/mysql.md>), [orm](<https://devfeed.tech/tags/orm.md>), [postgresql](<https://devfeed.tech/tags/postgresql.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

Automated tests need a database they can reset or prepopulate to cover both empty and populated states. The article chooses an in-memory H2 database for tests in a Ktor project that uses MySQL in production; because its data is held in memory, closing the connection clears it. It contrasts this with starting a dedicated Docker database container for each run, which can more closely match production, and notes a critique of in-memory testing databases. The project uses JetBrains Exposed, which supports H2 and several other databases. The supplied excerpt does not include the concrete dependency or configuration steps.

### Source excerpt

SERIES: Building a backend with Ktor Part 1: Structuring a Ktor project Part 2: How to persist Ktor logs Part 3: How to use an in-memory database for testing on Ktor Part 4: How to handle database migrations with Liquibase on Ktor Part 5 Generate API documentation from Swagger on Ktor Part 6: How to schedule jobs with Quartz on Ktor Part 7: Moving from mobile to backend development with Ktor Usually, in a backend project, there are different instances of the same database: one for production (or more than one, it depends on the architecture), one for staging, and a local one that runs in the development machine.

## HOW TO SET LOCAL AOSP GERRIT SERVER - PART 2

DevFeed: [HOW TO SET LOCAL AOSP GERRIT SERVER - PART 2](<https://devfeed.tech/articles/how-to-set-local-aosp-gerrit-server-part-2-21700.md>)

Original publisher: [Read original article](<https://nativeguru.wordpress.com/2015/06/29/how-to-set-local-aosp-gerrit-server-part-2/>)

Author: Ramon

Published: 2015-06-29T18:42:37Z

Content type: tutorial

Language: en

Sources: [Ramon Fried](<https://devfeed.tech/sources/ramon-fried.md>)

Topics: [Gerrit](<https://devfeed.tech/topics/gerrit.md>), [aosp](<https://devfeed.tech/topics/aosp.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [aosp](<https://devfeed.tech/tags/aosp.md>), [authentication](<https://devfeed.tech/tags/authentication.md>), [bootstrap](<https://devfeed.tech/tags/bootstrap.md>), [bouncy-castle](<https://devfeed.tech/tags/bouncy-castle.md>), [code-review](<https://devfeed.tech/tags/code-review.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [database](<https://devfeed.tech/tags/database.md>), [dsa](<https://devfeed.tech/tags/dsa.md>), [email](<https://devfeed.tech/tags/email.md>), [email-delivery](<https://devfeed.tech/tags/email-delivery.md>), [encryption](<https://devfeed.tech/tags/encryption.md>), [gerrit](<https://devfeed.tech/tags/gerrit.md>), [git](<https://devfeed.tech/tags/git.md>), [h2](<https://devfeed.tech/tags/h2.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [http](<https://devfeed.tech/tags/http.md>), [index](<https://devfeed.tech/tags/index.md>), [local](<https://devfeed.tech/tags/local.md>), [repo-mirror](<https://devfeed.tech/tags/repo-mirror.md>), [server](<https://devfeed.tech/tags/server.md>), [user](<https://devfeed.tech/tags/user.md>)

### AI overview

The excerpt walks through bootstrapping Gerrit Code Review 2.11 after downloading its prerequisites. It calls for a dedicated Gerrit user and MySQL database with the required permissions, then runs the WAR installer as that user. The setup wizard requests the repository location and database details, downloads MySQL Connector/J 5.1.21 when needed, and configures authentication, email, Java, SSH and HTTP. Bouncy Castle is presented as optional: Gerrit can function without it. The excerpt ends during plugin installation prompts, so it does not show the remaining setup.

### Source excerpt

Hi. This is part 2 of the "How to set local AOSP Gerrit server", you might want to start with part 1 here. In part 1 we've downloaded all the necessary stuff and in this post we're going to set it all up. First thing, let's bootstrap Gerrit. Let's create a Gerrit user: $ sudo [...]