# hash

Published articles for hash.

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

## Using Exact-Match Response Caching to Reduce LLM Costs

DevFeed: [Using Exact-Match Response Caching to Reduce LLM Costs](<https://devfeed.tech/articles/why-an-old-caching-trick-is-your-secret-to-lower-llm-costs-17399.md>)

Original publisher: [Read original article](<https://thenewstack.io/llm-response-caching-costs/>)

Author: Abhilash Rao Mesala

Published: 2026-09-14T11:00:00Z

Content type: article

Language: en

Sources: [The New Stack](<https://devfeed.tech/sources/the-new-stack.md>)

Topics: [Caching](<https://devfeed.tech/topics/caching.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>)

Tags: [ai-engineering](<https://devfeed.tech/tags/ai-engineering.md>), [ai-infrastructure](<https://devfeed.tech/tags/ai-infrastructure.md>), [caching](<https://devfeed.tech/tags/caching.md>), [contributed](<https://devfeed.tech/tags/contributed.md>), [cost](<https://devfeed.tech/tags/cost.md>), [finops](<https://devfeed.tech/tags/finops.md>), [generation](<https://devfeed.tech/tags/generation.md>), [hash](<https://devfeed.tech/tags/hash.md>), [llm](<https://devfeed.tech/tags/llm.md>), [token](<https://devfeed.tech/tags/token.md>)

### AI overview

The article explains how to reduce LLM costs by fingerprinting requests, context, model settings, and underlying data to create exact-match cache keys. Valid cached responses can be reused without calling the model. It distinguishes response caching from provider prompt caching, where only eligible prompt computation is reused.

### Source excerpt

An LLM can answer the same question a thousand times and charge you each time. Before paying for another answer, The post Why an old caching trick is your secret to lower LLM costs appeared first on The New Stack.

## Python sets and dictionaries can have quadratic-time performance

DevFeed: [Python sets and dictionaries can have quadratic-time performance](<https://devfeed.tech/articles/python-sets-and-dictionaries-can-have-quadratic-time-performance-29426.md>)

Original publisher: [Read original article](<https://lemire.me/blog/2026/09/03/python-sets-and-dictionaries-can-have-quadratic-time-performance/>)

Author: Daniel Lemire

Published: 2026-09-03T14:01:45Z

Content type: article

Language: en

Sources: [Daniel Lemire](<https://devfeed.tech/sources/daniel-lemire.md>)

Topics: [Python](<https://devfeed.tech/topics/python.md>), [Data structures](<https://devfeed.tech/topics/data-structures.md>), [hash](<https://devfeed.tech/topics/hash.md>), [CPU Cache](<https://devfeed.tech/topics/cpu-cache.md>)

Tags: [array](<https://devfeed.tech/tags/array.md>), [cpu-cache](<https://devfeed.tech/tags/cpu-cache.md>), [data-structure](<https://devfeed.tech/tags/data-structure.md>), [hash](<https://devfeed.tech/tags/hash.md>), [performance](<https://devfeed.tech/tags/performance.md>), [python](<https://devfeed.tech/tags/python.md>)

### AI overview

The article explains why Python sets and dictionaries are not formally constant-time in all cases. Hash collisions can make insertions and membership checks take quadratic time, while growing data structures can also incur reallocation and slower memory access as they exceed CPU cache capacity.

### Source excerpt

In Python, the dict data structure is the conventional key-value structure. E.g., you might store a list of names as keys and have their phone numbers as values. Valentin Ignatev wrote this amusing post on X: It is indeed widely believed that, in the strict sense, the dict data structure and its companion, the set ... Continue reading Python sets and dictionaries can have quadratic-time performance

## 【eBPF 内核实现深度拆解】从验证器到 JIT，从 BTF 到调度器

DevFeed: [【eBPF 内核实现深度拆解】从验证器到 JIT，从 BTF 到调度器](<https://devfeed.tech/articles/ebpf-jit-btf-33982.md>)

Original publisher: [Read original article](<https://quant67.com/post/ebpf/index.html>)

Author: Liao Tonglang

Published: 2026-06-12T00:00:00Z

Content type: article

Language: zh

Sources: [土法炼钢 - 系统与基础设施](<https://devfeed.tech/sources/source-4.md>)

Topics: [eBPF](<https://devfeed.tech/topics/ebpf.md>), [Linux](<https://devfeed.tech/topics/linux.md>), [JIT](<https://devfeed.tech/topics/jit.md>), [Benchmark](<https://devfeed.tech/topics/benchmark.md>), [clang](<https://devfeed.tech/topics/clang.md>), [hash](<https://devfeed.tech/topics/hash.md>), [benchmarking](<https://devfeed.tech/topics/benchmarking.md>), [RISC-V](<https://devfeed.tech/topics/riscv.md>), [ast-matchers](<https://devfeed.tech/topics/ast-matchers.md>)

Tags: [arm](<https://devfeed.tech/tags/arm.md>), [array](<https://devfeed.tech/tags/array.md>), [benchmark](<https://devfeed.tech/tags/benchmark.md>), [bpf-jit](<https://devfeed.tech/tags/bpf-jit.md>), [bpf-maps](<https://devfeed.tech/tags/bpf-maps.md>), [bpf-verifier](<https://devfeed.tech/tags/bpf-verifier.md>), [btf](<https://devfeed.tech/tags/btf.md>), [clang](<https://devfeed.tech/tags/clang.md>), [co-re](<https://devfeed.tech/tags/co-re.md>), [cpu](<https://devfeed.tech/tags/cpu.md>), [ebpf](<https://devfeed.tech/tags/ebpf.md>), [fentry](<https://devfeed.tech/tags/fentry.md>), [hash](<https://devfeed.tech/tags/hash.md>), [jit](<https://devfeed.tech/tags/jit.md>), [kernel](<https://devfeed.tech/tags/kernel.md>), [libbpf](<https://devfeed.tech/tags/libbpf.md>), [linux](<https://devfeed.tech/tags/linux.md>), [linux-kernel](<https://devfeed.tech/tags/linux-kernel.md>), [precision](<https://devfeed.tech/tags/precision.md>), [risc-v](<https://devfeed.tech/tags/risc-v.md>), [sched-ext](<https://devfeed.tech/tags/sched-ext.md>), [trampoline](<https://devfeed.tech/tags/trampoline.md>), [x86](<https://devfeed.tech/tags/x86.md>), [xdp](<https://devfeed.tech/tags/xdp.md>)

### AI overview

This Chinese-language series systematically explains eBPF's Linux kernel implementation, covering the BPF instruction set and registers, verifier algorithms, JIT compilation, map data structures and concurrency, helper type checking, BTF and CO-RE relocation, libbpf loading, trampolines, and sched_ext interfaces. It is aimed at engineers who want to understand eBPF kernel source code and build production BPF programs.

### Source excerpt

eBPF 内核虚拟机内部实现系统讲解：BPF 指令集与寄存器机器、验证器的抽象解释与状态裁剪、JIT 编译器后端、Map 各类型的并发与内存模型、helper 函数注册与类型检查、BTF 格式规范与 CO-RE 重定位引擎、libbpf 加载器工程、fentry/fexit 蹦床机制、sched_ext 调度器内核接口。面向想读懂 eBPF 内核源码、写生产级 BPF 程序的系统工程师。

## Recent LLVM hash table improvements

DevFeed: [Recent LLVM hash table improvements](<https://devfeed.tech/articles/recent-llvm-hash-table-improvements-31122.md>)

Original publisher: [Read original article](<https://maskray.me/blog/2026-06-07-recent-llvm-hash-table-improvements>)

Published: 2026-06-07T07:00:00Z

Content type: article

Language: en

Sources: [MaskRay](<https://devfeed.tech/sources/maskray.md>)

Topics: [LLVM](<https://devfeed.tech/topics/llvm.md>), [hash](<https://devfeed.tech/topics/hash.md>), [Algorithms](<https://devfeed.tech/topics/algorithms.md>), [benchmarking](<https://devfeed.tech/topics/benchmarking.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [data-structures](<https://devfeed.tech/tags/data-structures.md>), [hash](<https://devfeed.tech/tags/hash.md>), [improvements](<https://devfeed.tech/tags/improvements.md>), [llvm](<https://devfeed.tech/tags/llvm.md>), [performance](<https://devfeed.tech/tags/performance.md>)

### AI overview

The article reviews recent improvements to LLVM hash tables, including replacing quadratic probing and tombstone or empty-key sentinels with linear probing, Algorithm R deletion, and bit-array occupancy. It also discusses pointer and iterator invalidation behavior and reports performance improvements in DenseMap.

### Source excerpt

LLVM has several hash tables. They used quadratic probing with in-band sentinel keys (empty, tombstone); recent work has been replacing that with linear probing with tombstone key removed. DenseMap (replacement for std::unordered_map): DenseMapInfo::getEmptyKey() / getTombstoneKey(). DenseSet: implemented using DenseMap compiler-rt/lib/sanitizer_common/sanitizer_dense_map.h ports the implementation for sanitizers. SmallPtrSet (replacement for std::unordered_set<T *>): hard-coded -1 (empty) and -2 (tombstone). StringMap (replacement for std::unordered_map<std::string, V>) StringSet: implemented using StringMap FoldingSet (uniquing/hash-consing container, not a general map) For the open-addressed DenseMap and SmallPtrSet, pointers, references, and iterators are invalidated by insert. StringMap is different: each entry lives in a heap-allocated StringMapEntry<V> node, so entry pointers survive grow. std::unordered_map, being node-based, keeps surviving-element pointers valid across both insert and erase and only invalidates the erased element's own iterator. LLVM code rarely needs that stronger contract -- callers do not hold long-lived references into the container across mutation -- and that gap is what gives pass to relocating erase and bit-array occupancy. Recently, Tombstones have been removed from DenseMap and SmallPtrSet. erase() also invalidates pointers. DenseMap has also retired its empty-key sentinel, leading to significant performance improvements. DenseMap with integer keys (int/unsigned/size_t) had -1/-2 reserved -- a footgun, now fixed. StringMap got Algorithm R deletion too. Its entries are separately heap-allocated, so erase keeps entry pointers valid but invalidates iterators; erase-while-iterating moved to remove_if. FoldingSet dropped chaining for linear probing plus Algorithm R; the intrusive next-in-bucket pointer became a cached 32-bit hash.

## Only 17% of all 64-bit Integers are products of two 32-bit integers

DevFeed: [Only 17% of all 64-bit Integers are products of two 32-bit integers](<https://devfeed.tech/articles/only-17-of-all-64-bit-integers-are-products-of-two-32-bit-integers-29407.md>)

Original publisher: [Read original article](<https://lemire.me/blog/2026/05/22/only-17-of-all-64-bit-integers-are-products-of-two-32-bit-integers/>)

Author: Daniel Lemire

Published: 2026-05-22T01:16:35Z

Content type: article

Language: en

Sources: [Daniel Lemire](<https://devfeed.tech/sources/daniel-lemire.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [hash](<https://devfeed.tech/topics/hash.md>)

Tags: [cryptographic](<https://devfeed.tech/tags/cryptographic.md>), [hash](<https://devfeed.tech/tags/hash.md>), [numbers](<https://devfeed.tech/tags/numbers.md>), [precision](<https://devfeed.tech/tags/precision.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

The article examines what fraction of 64-bit integers can be represented as the full product of two 32-bit integers. It presents the result that only 17% can be produced this way and relates the question to hash-function design and multiplication behavior.

### Source excerpt

In software programming, the product between two integers is often computed to a fixed number of bits with overflow. Consider 8-bit integers. If you multiply 127 by 127, you get back the number 1 as an 8-bit unsigned integer, with an overflow. The actual full product is 16129. To represent 16129, you typically use 16 ... Continue reading Only 17% of all 64-bit Integers are products of two 32-bit integers

## Fighting Hyrum's Law in LLVM

DevFeed: [Fighting Hyrum's Law in LLVM](<https://devfeed.tech/articles/fighting-hyrum-s-law-in-llvm-31128.md>)

Original publisher: [Read original article](<https://maskray.me/blog/fighting-hyrums-law-in-llvm>)

Published: 2026-05-10T07:00:00Z

Content type: article

Language: en

Sources: [MaskRay](<https://devfeed.tech/sources/maskray.md>)

Topics: [LLVM](<https://devfeed.tech/topics/llvm.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [reproducible builds](<https://devfeed.tech/topics/reproducible-builds.md>), [hash](<https://devfeed.tech/topics/hash.md>)

Tags: [clang](<https://devfeed.tech/tags/clang.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [hash](<https://devfeed.tech/tags/hash.md>), [lld](<https://devfeed.tech/tags/lld.md>), [llvm](<https://devfeed.tech/tags/llvm.md>), [reproducible-builds](<https://devfeed.tech/tags/reproducible-builds.md>), [test](<https://devfeed.tech/tags/test.md>)

### AI overview

This article examines how LLVM can develop dependencies on unspecified or incidental behavior under Hyrum's Law, causing output variation that harms reproducible builds, bisection, and bug reports. It describes hash-seed perturbation, reverse container iteration, and iterator invalidation checks as mechanisms for exposing such dependencies.

### Source excerpt

With a sufficient number of users of an API, it does not matter what you promise in the contract: all observable behaviors of your system will be depended on by somebody. -- Hyrum's Law In a compiler, the most common form of Hyrum's Law is dependence on unspecified behavior -- hash bucket order, the order of equal elements after std::sort, padding offsets. The same framing covers a few cases that are technically undefined behavior (use of an invalidated iterator) or plain incidental properties (ABI struct layout, ELF section offsets). When the compiler itself harbors such a dependency, the symptom is usually output that varies build-to-build: an unstable sort that lands differently after the standard library changes, a hash map whose iteration order shifts when the hash function does. Occasionally the variation is run-to-run within a single build -- DenseMap<void *, X> keys with an ASLR-derived seed reorder buckets each invocation. Either way, reproducible builds, bisection, and bug reports all assume same input -> same output, and a stealth Hyrum dependency breaks that. This post surveys some mechanisms that perturb the contract's blind spots so dependencies cannot quietly form.

## Cuckoo Filters: Cache-Friendly Membership Checks With Deletions

DevFeed: [Cuckoo Filters: Cache-Friendly Membership Checks With Deletions](<https://devfeed.tech/articles/cuckoo-filters-cache-friendly-membership-checks-with-deletions-39568.md>)

Original publisher: [Read original article](<https://ankit-rana.com/logs/16-cuckoo-filters-architecture/>)

Author: hello@ankit-rana.com

Published: 2026-03-17T00:00:00Z

Content type: tutorial

Language: en

Sources: [Ankit Rana | Mechanical Sympathy](<https://devfeed.tech/sources/ankit-rana-mechanical-sympathy.md>)

Topics: [CPU Cache](<https://devfeed.tech/topics/cpu-cache.md>), [Caching](<https://devfeed.tech/topics/caching.md>), [hash](<https://devfeed.tech/topics/hash.md>)

Tags: [cache](<https://devfeed.tech/tags/cache.md>), [capacity](<https://devfeed.tech/tags/capacity.md>), [cpu-cache](<https://devfeed.tech/tags/cpu-cache.md>), [cuckoo-filter](<https://devfeed.tech/tags/cuckoo-filter.md>), [data-structures](<https://devfeed.tech/tags/data-structures.md>), [false-positive](<https://devfeed.tech/tags/false-positive.md>), [hash](<https://devfeed.tech/tags/hash.md>), [insert](<https://devfeed.tech/tags/insert.md>), [performance](<https://devfeed.tech/tags/performance.md>), [probabilistic](<https://devfeed.tech/tags/probabilistic.md>), [spatial-locality](<https://devfeed.tech/tags/spatial-locality.md>), [systems](<https://devfeed.tech/tags/systems.md>)

### AI overview

This article explains how Cuckoo filters support deletions while improving CPU cache behavior compared with counting Bloom filters. They check two specific buckets using compact fingerprints, but insertions can fail when kick-out chains exceed their limit, requiring capacity planning or overflow handling.

### Source excerpt

A Cuckoo filter stores a one-to-two byte fingerprint in a hash table and finds it by checking exactly two buckets, the primary index and its XOR-derived alternate, instead of k random bit positions scattered across a large array. That spatial locality is the whole win on real CPUs. The trade-off is a hard edge: when the kick-out chain exceeds its limit, the insert fails outright.

## Shazam finds songs by voting on time offsets, not by comparing audio

DevFeed: [Shazam finds songs by voting on time offsets, not by comparing audio](<https://devfeed.tech/articles/shazam-finds-songs-by-voting-on-time-offsets-not-by-comparing-audio-39556.md>)

Original publisher: [Read original article](<https://ankit-rana.com/logs/04-shazam-music-recognition/>)

Author: hello@ankit-rana.com

Published: 2026-03-16T00:00:00Z

Content type: tutorial

Language: en

Sources: [Ankit Rana | Mechanical Sympathy](<https://devfeed.tech/sources/ankit-rana-mechanical-sympathy.md>)

Topics: [Algorithm](<https://devfeed.tech/topics/algorithm.md>), [hash](<https://devfeed.tech/topics/hash.md>), [Databases](<https://devfeed.tech/topics/databases.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [algorithms](<https://devfeed.tech/tags/algorithms.md>), [audio-fingerprinting](<https://devfeed.tech/tags/audio-fingerprinting.md>), [databases](<https://devfeed.tech/tags/databases.md>), [hash](<https://devfeed.tech/tags/hash.md>), [indexing](<https://devfeed.tech/tags/indexing.md>), [lookup](<https://devfeed.tech/tags/lookup.md>), [music-recognition](<https://devfeed.tech/tags/music-recognition.md>), [query](<https://devfeed.tech/tags/query.md>), [system-design](<https://devfeed.tech/tags/system-design.md>)

### AI overview

The article explains how Shazam recognizes songs from short, noisy recordings. Instead of comparing audio similarity, it extracts spectrogram peaks, combines nearby peaks into hashes, and uses an inverted index to find tracks whose hash matches share a common time offset. The production system beyond the public 2003 paper is noted as unavailable.

### Source excerpt

Shazam does not compare audio. It reduces each track to spectrogram peaks, pairs nearby peaks into ~32-bit hashes, and looks those up in an inverted index. A match is declared when many hashes from the sample agree on a single time offset into one track. The offset histogram is the whole trick: noise scatters offsets randomly, a real match stacks them into a spike.

## Hardening básico de servidores Linux

DevFeed: [Hardening básico de servidores Linux](<https://devfeed.tech/articles/hardening-basico-de-servidores-linux-34061.md>)

Original publisher: [Read original article](<https://tengoping.com/blog/hardening-basico-servidores-linux/>)

Author: Antonio Pérez

Published: 2026-01-22T00:00:00Z

Content type: tutorial

Language: es

Sources: [tengoping.com](<https://devfeed.tech/sources/tengoping-com.md>)

Topics: [Linux](<https://devfeed.tech/topics/linux.md>), [Firewall](<https://devfeed.tech/topics/firewall.md>), [ssh](<https://devfeed.tech/topics/ssh.md>), [Fail2ban](<https://devfeed.tech/topics/fail2ban.md>), [OpenSSH](<https://devfeed.tech/topics/openssh.md>), [Kernel](<https://devfeed.tech/topics/kernel.md>)

Tags: [fail2ban](<https://devfeed.tech/tags/fail2ban.md>), [firewall](<https://devfeed.tech/tags/firewall.md>), [hardening](<https://devfeed.tech/tags/hardening.md>), [hash](<https://devfeed.tech/tags/hash.md>), [kernel](<https://devfeed.tech/tags/kernel.md>), [linux](<https://devfeed.tech/tags/linux.md>), [ssh](<https://devfeed.tech/tags/ssh.md>)

### AI overview

This Spanish tutorial presents a basic hardening checklist for Linux servers and explains why the measures should be applied in a specific order. It covers system updates, SSH, firewall configuration, user policies, sudo restrictions, kernel parameters, unnecessary services, Fail2ban, auditing, and final verification.

### Source excerpt

Checklist de hardening en el orden correcto: SSH, firewall, usuarios, kernel, AIDE, chrony y verificación final con Lynis.

## Analysis of Dahua CCTV Camera Authentication

DevFeed: [Analysis of Dahua CCTV Camera Authentication](<https://devfeed.tech/articles/pentesting-dahua-cctv-cameras-auth-20557.md>)

Original publisher: [Read original article](<https://yurichev.com/blog/dahua/>)

Published: 2025-12-01T23:00:00Z

Content type: tutorial

Language: en

Sources: [Dennis Yurichev](<https://devfeed.tech/sources/dennis-yurichev.md>)

Topics: [webcam](<https://devfeed.tech/topics/webcam.md>), [hash](<https://devfeed.tech/topics/hash.md>), [Python](<https://devfeed.tech/topics/python.md>)

Tags: [auth](<https://devfeed.tech/tags/auth.md>), [camera](<https://devfeed.tech/tags/camera.md>), [hash](<https://devfeed.tech/tags/hash.md>), [python](<https://devfeed.tech/tags/python.md>), [tcp](<https://devfeed.tech/tags/tcp.md>)

### AI overview

A pentesting-oriented analysis of Dahua CCTV camera authentication over its proprietary TCP protocol. It describes a fake Python server used to observe a camera login and presents the known portion of the hash calculation, while noting that the remaining 16 bytes are not understood and no Hashcat workflow was found.

### Source excerpt

[Pentesting] Dahua (CCTV cameras) auth

## \[Pentesting\] RTSP (CCTV cameras) auth

DevFeed: [\[Pentesting\] RTSP (CCTV cameras) auth](<https://devfeed.tech/articles/pentesting-rtsp-cctv-cameras-auth-20546.md>)

Original publisher: [Read original article](<https://yurichev.com/blog/RTSP_auth/>)

Published: 2025-11-23T23:00:00Z

Content type: tutorial

Language: en

Sources: [Dennis Yurichev](<https://devfeed.tech/sources/dennis-yurichev.md>)

Topics: [passwords](<https://devfeed.tech/topics/passwords.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [TLS (Transport Layer Security)](<https://devfeed.tech/topics/tls.md>), [SSL](<https://devfeed.tech/topics/ssl.md>), [Python](<https://devfeed.tech/topics/python.md>)

Tags: [auth](<https://devfeed.tech/tags/auth.md>), [hash](<https://devfeed.tech/tags/hash.md>), [http](<https://devfeed.tech/tags/http.md>), [passwords](<https://devfeed.tech/tags/passwords.md>), [python](<https://devfeed.tech/tags/python.md>), [ssl](<https://devfeed.tech/tags/ssl.md>), [tls](<https://devfeed.tech/tags/tls.md>)

### AI overview

A pentesting article examines authentication in RTSP CCTV camera streams, comparing basic and digest authentication. It demonstrates how ARP spoofing and captured exchanges can enable password enumeration or cracking, and recommends firmware updates, strong passwords, and SSL/TLS.

### Source excerpt

[Pentesting] RTSP (CCTV cameras) auth

## A simplified p-fast trie for prefix and predecessor searches

DevFeed: [A simplified p-fast trie for prefix and predecessor searches](<https://devfeed.tech/articles/p-fast-trie-but-smaller-36220.md>)

Original publisher: [Read original article](<https://dotat.at/@/2025-08-06-p-fast-trie.html>)

Published: 2025-08-06T17:19:09Z

Content type: article

Language: en

Sources: [Tony Finch's blog](<https://devfeed.tech/sources/tony-finch-s-blog.md>)

Topics: [Algorithm](<https://devfeed.tech/topics/algorithm.md>), [hash](<https://devfeed.tech/topics/hash.md>), [Cache](<https://devfeed.tech/topics/cache.md>), [Query (disambiguation)](<https://devfeed.tech/topics/query.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [cache](<https://devfeed.tech/tags/cache.md>), [hash](<https://devfeed.tech/tags/hash.md>), [query](<https://devfeed.tech/tags/query.md>)

### AI overview

The article presents a simplified revision of a p-fast trie, a wide fan-out variant of an x-fast trie. It describes a hash-table layout for storing unique prefixes and outlines longest-prefix, predecessor, and successor searches.

### Source excerpt

Previously, I wrote some sketchy ideas for what I call a p-fast trie, which is basically a wide fan-out variant of an x-fast trie. It allows you to find the longest matching prefix or nearest predecessor or successor of a query string in a set of names in O(log k) cache misses, where k is the key length. My initial sketch was more complicated and greedy for space than necessary, so here's a simplified revision. ("p" now stands for prefix.) layout A p-fast trie stores a lexicographically ordered set of names. A name is a sequence of characters from some small-ish character set. For example, DNS names can be represented as a set of about 50 letters, digits, punctuation and escape characters, usually one per byte of name. Names that are arbitrary bit strings can be split into chunks of 6 bits to make a set of 64 characters. Every unique prefix of every name is added to a hash table. An entry in the hash table contains: A shared reference to the closest name lexicographically greater than or equal to the prefix. Multiple hash table entries will refer to the same name. A reference to a name might instead be a reference to a leaf object containing the name. The length of the prefix. To save space, each prefix is not stored separately, but implied by the combination of the closest name and prefix length. A bitmap with one bit per possible character, corresponding to the next character after this prefix. For every other prefix that matches this prefix and is one character longer than this prefix, a bit is set in the bitmap corresponding to the last character of the longer prefix. search The basic algorithm is a longest-prefix match. Look up the query string in the hash table. If there's a match, great, done. Otherwise proceed by binary chop on the length of the query string. If the prefix isn't in the hash table, reduce the prefix length and search again. (If the empty prefix isn't in the hash table then there are no names to find.) If the prefix is in the hash table, check

## p-fast trie: lexically ordered hash map

DevFeed: [p-fast trie: lexically ordered hash map](<https://devfeed.tech/articles/p-fast-trie-lexically-ordered-hash-map-36219.md>)

Original publisher: [Read original article](<https://dotat.at/@/2025-08-04-p-fast-trie.html>)

Published: 2025-08-04T20:52:21Z

Content type: article

Language: en

Sources: [Tony Finch's blog](<https://devfeed.tech/sources/tony-finch-s-blog.md>)

Topics: [hash](<https://devfeed.tech/topics/hash.md>), [Query (disambiguation)](<https://devfeed.tech/topics/query.md>), [Rust](<https://devfeed.tech/topics/rust.md>)

Tags: [array](<https://devfeed.tech/tags/array.md>), [bits](<https://devfeed.tech/tags/bits.md>), [hash](<https://devfeed.tech/tags/hash.md>), [map](<https://devfeed.tech/tags/map.md>), [maps](<https://devfeed.tech/tags/maps.md>), [query](<https://devfeed.tech/tags/query.md>)

### AI overview

This article sketches the p-fast trie, a proposed lexically ordered hash map that replaces a qp-trie's tree and interior pointers with stratified hash-map levels keyed by prefixes. It describes O(1) exact-match lookups and O(log k) predecessor and successor searches, while noting that the practical benefit is uncertain.

### Source excerpt

Here's a sketch of an idea that might or might not be a good idea. Dunno if it's similar to something already described in the literature - if you know of something, please let me know via the links in the footer! The gist is to throw away the tree and interior pointers from a qp-trie. Instead, the p-fast trie is stored using a hash map organized into stratified levels, where each level corresponds to a prefix of the key. Exact-match lookups are normal O(1) hash map lookups. Predecessor / successor searches use binary chop on the length of the key. Where a qp-trie search is O(k), where k is the length of the key, a p-fast trie search is O(log k). This smaller O(log k) bound is why I call it a "p-fast trie" by analogy with the x-fast trie, which has O(log log N) query time. (The "p" is for popcount.) I'm not sure if this asymptotic improvement is likely to be effective in practice; see my thoughts towards the end of this note. layout A p-fast trie consists of: Leaf objects, each of which has a name. Each leaf object refers to its successor forming a circular linked list. (The last leaf refers to the first.) Multiple interior nodes refer to each leaf object. A hash map containing every (strict) prefix of every name in the trie. Each prefix maps to a unique interior node. Names are treated as bit strings split into chunks of (say) 6 bits, and prefixes are whole numbers of chunks. An interior node contains a (1<<6) == 64 wide bitmap with a bit set for each chunk where prefix+chunk matches a key. Following the bitmap is a popcount-compressed array of references to the leaf objects that are the closest predecessor of the corresponding prefix+chunk key. Prefixes are strictly shorter than names so that we can avoid having to represent non-values after the end of a name, and so that it's OK if one name is a prefix of another. The size of chunks and bitmaps might change; 6 is a guess that I expect will work OK. For restricted alphabets you can use something like my DNS trie n

## How Cursor Indexes Codebases Fast

DevFeed: [How Cursor Indexes Codebases Fast](<https://devfeed.tech/articles/how-cursor-indexes-codebases-fast-39088.md>)

Original publisher: [Read original article](<https://read.engineerscodex.com/p/how-cursor-indexes-codebases-fast>)

Author: Engineer's Codex

Published: 2025-05-10T16:28:09Z

Content type: article

Language: en

Sources: [Engineer's Codex](<https://devfeed.tech/sources/engineer-s-codex.md>)

Topics: [cursor](<https://devfeed.tech/topics/cursor.md>), [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>), [Code](<https://devfeed.tech/topics/code.md>), [hash](<https://devfeed.tech/topics/hash.md>), [Embeddings](<https://devfeed.tech/topics/embeddings.md>), [structure](<https://devfeed.tech/topics/structure.md>), [file](<https://devfeed.tech/topics/file.md>), [implementation](<https://devfeed.tech/topics/implementation.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [cursor](<https://devfeed.tech/tags/cursor.md>), [embeddings](<https://devfeed.tech/tags/embeddings.md>), [hash](<https://devfeed.tech/tags/hash.md>), [index](<https://devfeed.tech/tags/index.md>), [indexing](<https://devfeed.tech/tags/indexing.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>)

### AI overview

This article explains how Cursor indexes codebases using Merkle trees. It describes local code chunking, hash-tree construction and synchronization with Cursor's server, followed by embedding generation through OpenAI's embedding API or a custom embedding model.

### Source excerpt

Merkle Trees in the real world

## Rust HashMap notes

DevFeed: [Rust HashMap notes](<https://devfeed.tech/articles/rust-hashmap-notes-35458.md>)

Original publisher: [Read original article](<https://darkcoding.net/software/rust-hashmap-notes/>)

Author: Graham King

Published: 2025-03-30T14:50:00Z

Content type: article

Language: en

Sources: [Graham King](<https://devfeed.tech/sources/graham-king.md>)

Topics: [Rust](<https://devfeed.tech/topics/rust.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [Data structures](<https://devfeed.tech/topics/data-structures.md>)

Tags: [array](<https://devfeed.tech/tags/array.md>), [bits](<https://devfeed.tech/tags/bits.md>), [cache](<https://devfeed.tech/tags/cache.md>), [code](<https://devfeed.tech/tags/code.md>), [datastructures](<https://devfeed.tech/tags/datastructures.md>), [hash](<https://devfeed.tech/tags/hash.md>), [hashmap](<https://devfeed.tech/tags/hashmap.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [rust](<https://devfeed.tech/tags/rust.md>), [software](<https://devfeed.tech/tags/software.md>)

### AI overview

Raw research notes explaining the design and implementation of Rust's HashMap. The article describes its SwissTable-based probing layout, contiguous storage, control bytes, SIMD comparisons, hash decomposition, lookup process, and growth behavior.

### Source excerpt

Raw notes on Rust's HashMap design and implementation

## Inserting One New Element into Hashes of Varying Sizes

DevFeed: [Inserting One New Element into Hashes of Varying Sizes](<https://devfeed.tech/articles/inserting-one-new-element-into-hashes-of-varying-sizes-31812.md>)

Original publisher: [Read original article](<https://patshaughnessy.net/2025/2/4/inserting-one-new-element-into-hashes-of-varying-sizes>)

Author: Pat Shaughnessy

Published: 2025-02-04T00:00:00Z

Content type: tutorial

Language: en

Sources: [Pat Shaughnessy](<https://devfeed.tech/sources/pat-shaughnessy.md>)

Topics: [Ruby](<https://devfeed.tech/topics/ruby.md>), [hash](<https://devfeed.tech/topics/hash.md>), [Benchmark](<https://devfeed.tech/topics/benchmark.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [benchmark](<https://devfeed.tech/tags/benchmark.md>), [hash](<https://devfeed.tech/tags/hash.md>), [internals](<https://devfeed.tech/tags/internals.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [table](<https://devfeed.tech/tags/table.md>), [updating-ruby-under-a-microscope](<https://devfeed.tech/tags/updating-ruby-under-a-microscope.md>)

### AI overview

This article presents a Ruby experiment measuring the time required to insert one new element into hashes of different sizes. Using Ruby 3.4.1, it observes timing spikes when the hash grows to certain sizes, consistent with rehashing or redistribution.

### Source excerpt

I've started working on a new edition of Ruby Under a Microscope that covers Ruby 3.x. I'm working on this in my spare time, so it will take a while. Leave a comment or drop me a line and I'll email you when it's finished. RUM includes a serie

## Updating Ruby Under a Microscope

DevFeed: [Updating Ruby Under a Microscope](<https://devfeed.tech/articles/updating-ruby-under-a-microscope-31805.md>)

Original publisher: [Read original article](<https://patshaughnessy.net/2025/1/28/updating-ruby-under-a-microscope>)

Author: Pat Shaughnessy

Published: 2025-01-28T00:00:00Z

Content type: article

Language: en

Sources: [Pat Shaughnessy](<https://devfeed.tech/sources/pat-shaughnessy.md>)

Topics: [Ruby](<https://devfeed.tech/topics/ruby.md>), [hash](<https://devfeed.tech/topics/hash.md>), [Computer science](<https://devfeed.tech/topics/computer-science.md>), [C](<https://devfeed.tech/topics/c.md>)

Tags: [hash](<https://devfeed.tech/tags/hash.md>), [internals](<https://devfeed.tech/tags/internals.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [updating](<https://devfeed.tech/tags/updating.md>), [updating-ruby-under-a-microscope](<https://devfeed.tech/tags/updating-ruby-under-a-microscope.md>)

### AI overview

An excerpt from a planned new edition of Ruby Under a Microscope explains how Ruby uses hash tables internally. It introduces hash-table organization and describes how Ruby stores keys, values, entries, bins, and related C structures.

### Source excerpt

Ruby stores much of its own internal data in hash tables. I've started working on a new edition of

## Comparison between Redis and DragonflyDB's data stores

DevFeed: [Comparison between Redis and DragonflyDB's data stores](<https://devfeed.tech/articles/comparison-between-redis-and-dragonflydb-s-data-stores-39629.md>)

Original publisher: [Read original article](<https://www.gauravsarma.com/posts/2024-08-27_Comparison-between-Redis-and-DragonflyDB-s-data-stores-e9ecba1ef84c>)

Published: 2024-08-27T00:00:00Z

Content type: article

Language: en

Sources: [Gaurav Sarma's Blog](<https://devfeed.tech/sources/gaurav-sarma-s-blog.md>)

Topics: [Redis](<https://devfeed.tech/topics/redis.md>), [data](<https://devfeed.tech/topics/data.md>), [hashing](<https://devfeed.tech/topics/hashing.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [clustering](<https://devfeed.tech/tags/clustering.md>), [comparison](<https://devfeed.tech/tags/comparison.md>), [hash](<https://devfeed.tech/tags/hash.md>), [memory](<https://devfeed.tech/tags/memory.md>), [redis](<https://devfeed.tech/tags/redis.md>), [single-threaded](<https://devfeed.tech/tags/single-threaded.md>), [vs](<https://devfeed.tech/tags/vs.md>)

### AI overview

This article compares how Redis and DragonflyDB store data in memory. It explains Redis's single-threaded architecture and DragonflyDB's multithreaded, shared-nothing design, then introduces separate chaining, open addressing, and extendible hashing.

### Source excerpt

. [Redis vs DragonflyDB Data Store Comparison](redis-vs-dragonflydbs-data-stores-cover...

## Immutable URLs can simplify deployments

DevFeed: [Immutable URLs can simplify deployments](<https://devfeed.tech/articles/call-by-hash-32401.md>)

Original publisher: [Read original article](<https://garnix.io/blog/call-by-hash>)

Published: 2024-03-14T00:00:00Z

Content type: article

Language: en

Sources: [Garnix Blog](<https://devfeed.tech/sources/garnix-blog.md>)

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

Tags: [deployments](<https://devfeed.tech/tags/deployments.md>), [hash](<https://devfeed.tech/tags/hash.md>), [idea](<https://devfeed.tech/tags/idea.md>), [simplify](<https://devfeed.tech/tags/simplify.md>)

### AI overview

The article explores making URLs immutable and suggests that this approach could improve and simplify deployments.

### Source excerpt

What happens if we make URLs immutable? A somewhat unusual idea that can substantially improve and simplify deployments.

## Wrapping up the KZG Ceremony

DevFeed: [Wrapping up the KZG Ceremony](<https://devfeed.tech/articles/wrapping-up-the-kzg-ceremony-17088.md>)

Original publisher: [Read original article](<https://blog.ethereum.org/en/2024/01/23/kzg-wrap>)

Author: EF Protocol Support

Published: 2024-01-23T00:00:00Z

Content type: article

Language: en

Sources: [Ethereum Foundation Blog](<https://devfeed.tech/sources/ethereum-foundation-blog.md>)

Topics: [Ethereum](<https://devfeed.tech/topics/ethereum.md>), [Transactions](<https://devfeed.tech/topics/transactions.md>), [Bot](<https://devfeed.tech/topics/bot.md>), [GitHub](<https://devfeed.tech/topics/github.md>)

Tags: [bots](<https://devfeed.tech/tags/bots.md>), [contribution](<https://devfeed.tech/tags/contribution.md>), [contributors](<https://devfeed.tech/tags/contributors.md>), [cryptographic](<https://devfeed.tech/tags/cryptographic.md>), [devcon](<https://devfeed.tech/tags/devcon.md>), [ethereum](<https://devfeed.tech/tags/ethereum.md>), [github](<https://devfeed.tech/tags/github.md>), [hash](<https://devfeed.tech/tags/hash.md>), [open](<https://devfeed.tech/tags/open.md>), [research-development](<https://devfeed.tech/tags/research-development.md>), [transactions](<https://devfeed.tech/tags/transactions.md>)

### AI overview

The article documents the 2023 KZG Ceremony, a 208-day multi-party computation that produced the cryptographic foundation for Ethereum's EIP-4844. It reports 141,416 contributions, explains participation and spam-prevention requirements, and provides the final transcript hash and availability information.

### Source excerpt

The KZG Ceremony was the largest multi-party computation of its kind (by number of participants). Through an open, accessible process, it produced a secure cryptographic foundation for EIP-4844. Learn more about how the Ceremony worked in Carl Beekhuizen's Devcon talk: "Summoning the spirit of the Dankshard" As the...

## Chainguard contributes Rekor Search project to Sigstore

DevFeed: [Chainguard contributes Rekor Search project to Sigstore](<https://devfeed.tech/articles/chainguard-contributes-rekor-search-project-to-sigstore-12936.md>)

Original publisher: [Read original article](<https://www.chainguard.dev/unchained/chainguard-contributes-rekor-search-project-to-sigstore>)

Published: 2023-03-24T00:00:00Z

Content type: article

Language: en

Sources: [Chainguard: Unchained](<https://devfeed.tech/sources/chainguard-unchained.md>)

Topics: [chainguard](<https://devfeed.tech/topics/chainguard.md>), [browser](<https://devfeed.tech/topics/browser.md>), [Code](<https://devfeed.tech/topics/code.md>), [Git](<https://devfeed.tech/topics/git.md>)

Tags: [browser](<https://devfeed.tech/tags/browser.md>), [chainguard](<https://devfeed.tech/tags/chainguard.md>), [git](<https://devfeed.tech/tags/git.md>), [gitsign](<https://devfeed.tech/tags/gitsign.md>), [hash](<https://devfeed.tech/tags/hash.md>), [index](<https://devfeed.tech/tags/index.md>), [open-source-software](<https://devfeed.tech/tags/open-source-software.md>), [rekor](<https://devfeed.tech/tags/rekor.md>), [search](<https://devfeed.tech/tags/search.md>), [sigstore](<https://devfeed.tech/tags/sigstore.md>), [transparency-log](<https://devfeed.tech/tags/transparency-log.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

Chainguard is donating its open-source Rekor Search UI project to Sigstore. The browser-based search engine lets users search and sort entries in the public Rekor transparency log by email, hash, entry UUID, or log index, with support for Gitsign signatures and Git commit associations.

### Source excerpt

Chainguard announces its donating the Rekor Search UI project to Sigstore, allowing users to conveniently search entries in the public Rekor transparency log.

## Calculating Download MD5 Hash

DevFeed: [Calculating Download MD5 Hash](<https://devfeed.tech/articles/calculating-download-md5-hash-22216.md>)

Original publisher: [Read original article](<https://www.ardanlabs.com/blog/2023/03/calculating-download-md5-in-go.html>)

Published: 2023-03-09T00:00:00Z

Content type: tutorial

Language: en

Sources: [William Kennedy](<https://devfeed.tech/sources/william-kennedy.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [cURL](<https://devfeed.tech/topics/curl.md>), [Google Cloud Platform (GCP)](<https://devfeed.tech/topics/google-cloud.md>), [dataset](<https://devfeed.tech/topics/dataset.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [ardan-labs](<https://devfeed.tech/tags/ardan-labs.md>), [blog](<https://devfeed.tech/tags/blog.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [code](<https://devfeed.tech/tags/code.md>), [curl](<https://devfeed.tech/tags/curl.md>), [dataset](<https://devfeed.tech/tags/dataset.md>), [go](<https://devfeed.tech/tags/go.md>), [go-programming](<https://devfeed.tech/tags/go-programming.md>), [golang](<https://devfeed.tech/tags/golang.md>), [google-cloud](<https://devfeed.tech/tags/google-cloud.md>), [hash](<https://devfeed.tech/tags/hash.md>), [http](<https://devfeed.tech/tags/http.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

This tutorial explains how to validate a downloaded file's MD5 signature using HTTP headers and Go. It demonstrates obtaining file metadata with an HTTP HEAD request, reading the MD5 value reported by Google Cloud Storage, and implementing the request and header parsing in Go.

### Source excerpt

Introduction One of the exercises I give to students is to download a single big file over HTTP concurrently using several goroutines using HTTP Range requests. An extra part of the exercise is to validate the downloaded file from a known MD5 signature. This extra part turns out to be interesting, let's have a look. Getting Download Information Let's make an HTTP HEAD request to get information about a file located in a public dataset stored on Google Cloud Storage (GCS).

## Ultimate Go: Advanced Engineering Episode 13

DevFeed: [Ultimate Go: Advanced Engineering Episode 13](<https://devfeed.tech/articles/ultimate-go-advanced-engineering-episode-13-22202.md>)

Original publisher: [Read original article](<https://www.ardanlabs.com/blog/2023/01/ultimate-go-advanced-engineering-episode-13.html>)

Published: 2023-01-11T00:00:00Z

Content type: tutorial

Language: en

Sources: [William Kennedy](<https://devfeed.tech/sources/william-kennedy.md>)

Topics: [Blockchain](<https://devfeed.tech/topics/blockchain.md>), [Go Language](<https://devfeed.tech/topics/go-language.md>), [Algorithm](<https://devfeed.tech/topics/algorithm.md>), [Security](<https://devfeed.tech/topics/security.md>), [Ethereum](<https://devfeed.tech/topics/ethereum.md>), [API](<https://devfeed.tech/topics/api.md>), [Transactions](<https://devfeed.tech/topics/transactions.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [bitcoin](<https://devfeed.tech/tags/bitcoin.md>), [blockchain](<https://devfeed.tech/tags/blockchain.md>), [data-stamping](<https://devfeed.tech/tags/data-stamping.md>), [digital-signature](<https://devfeed.tech/tags/digital-signature.md>), [digital-signatures](<https://devfeed.tech/tags/digital-signatures.md>), [ethereum](<https://devfeed.tech/tags/ethereum.md>), [go](<https://devfeed.tech/tags/go.md>), [go-blockchain](<https://devfeed.tech/tags/go-blockchain.md>), [hash](<https://devfeed.tech/tags/hash.md>), [hexademical](<https://devfeed.tech/tags/hexademical.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [keccak256](<https://devfeed.tech/tags/keccak256.md>), [salt](<https://devfeed.tech/tags/salt.md>), [security](<https://devfeed.tech/tags/security.md>), [video](<https://devfeed.tech/tags/video.md>)

### AI overview

This video tutorial explains how to add a salt value to transaction hashes, implement the keccak256 algorithm in Go, and use transaction stamping in a blockchain. It also discusses digital signatures and related security issues.

### Source excerpt

Introduction In episode 12, Bill laid out his strategy to handle data hashing on his blockchain. The first step he took was to create a package to handle the cryptographical aspects of his blockchain. After that, he wrote a hash function that met the requirements outlined in his strategy. This function took transaction data as a parameter and returned a hexadecimal representation of the hash. To implement this function, Bill imported packages from the Go standard library and Ethereum API.

## Ultimate Go: Advanced Engineering Episode 12

DevFeed: [Ultimate Go: Advanced Engineering Episode 12](<https://devfeed.tech/articles/ultimate-go-advanced-engineering-episode-12-22201.md>)

Original publisher: [Read original article](<https://www.ardanlabs.com/blog/2023/01/ultimate-go-advanced-engineering-episode-12.html>)

Published: 2023-01-04T00:00:00Z

Content type: tutorial

Language: en

Sources: [William Kennedy](<https://devfeed.tech/sources/william-kennedy.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [data](<https://devfeed.tech/topics/data.md>), [Blockchain](<https://devfeed.tech/topics/blockchain.md>), [Algorithm](<https://devfeed.tech/topics/algorithm.md>), [Ethereum](<https://devfeed.tech/topics/ethereum.md>), [Library](<https://devfeed.tech/topics/library.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [bitcoin](<https://devfeed.tech/tags/bitcoin.md>), [blockchain](<https://devfeed.tech/tags/blockchain.md>), [code](<https://devfeed.tech/tags/code.md>), [ethereum](<https://devfeed.tech/tags/ethereum.md>), [go](<https://devfeed.tech/tags/go.md>), [go-blockchain](<https://devfeed.tech/tags/go-blockchain.md>), [hash](<https://devfeed.tech/tags/hash.md>), [hashing](<https://devfeed.tech/tags/hashing.md>), [hex-value](<https://devfeed.tech/tags/hex-value.md>), [hexademical](<https://devfeed.tech/tags/hexademical.md>), [standard-library](<https://devfeed.tech/tags/standard-library.md>), [video](<https://devfeed.tech/tags/video.md>)

### AI overview

This video tutorial explains how to hash a transaction in Go using packages from the standard library and the Ethereum Go library. It also discusses the desired properties of a hashing function and the role of cryptographic signatures and public-key recovery in a decentralized blockchain.

### Source excerpt

Introduction In episode 11, Bill highlighted the issue of identity verification and provided a solution to this problem. The solution proposed was to cryptographically sign a transaction to verify its authenticity. Bill chose to implement a solution making use of the Elliptic Curve Digital Signature Algorithm (ECDSA) as the public key can be extracted from a signature. Although a small distinction, the ability to re-compute a public key is essential in a decentralized and distributed environment.

[Next page](<https://devfeed.tech/tags/hash.md?cursor=WyIyMDIzLTAxLTA0VDAwOjAwOjAwKzAwOjAwIiwgImVhODU3YjZjLTMyZjYtNDU0ZS1hNmQ4LTUzZjJjZmNiN2ZlZSJd>)