# map

Published articles for map.

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

## Sol Protocol Early Access Impressions: A Co-op Action Roguelike with a Promising Foundation

DevFeed: [Sol Protocol Early Access Impressions: A Co-op Action Roguelike with a Promising Foundation](<https://devfeed.tech/articles/sol-protocol-early-access-impressions-a-sol-id-foundation-41429.md>)

Original publisher: [Read original article](<https://www.uploadvr.com/sol-protocol-impressions/>)

Author: James Galizio

Published: 2026-09-17T20:28:19Z

Content type: article

Language: en

Sources: [UploadVR](<https://devfeed.tech/sources/uploadvr.md>)

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

Tags: [map](<https://devfeed.tech/tags/map.md>), [multiplayer](<https://devfeed.tech/tags/multiplayer.md>), [space](<https://devfeed.tech/tags/space.md>), [teamwork](<https://devfeed.tech/tags/teamwork.md>), [vr-gaming](<https://devfeed.tech/tags/vr-gaming.md>), [warp](<https://devfeed.tech/tags/warp.md>)

### AI overview

Sol Protocol is a co-op action roguelike set in space. Players work together aboard a ship and during zero-gravity exploration to gather resources, upgrade systems, and fight enemies. The game has a promising co-op foundation, though its current gameplay loop is simple and limited in scope.

### Source excerpt

Sol Protocol in Early Access on Quest has a good foundation of co-op teamwork and exploration, but the limited scope has a lot of room for growth.

## Let's Reduce! A Gentle Introduction to Javascript's Reduce Method

DevFeed: [Let's Reduce! A Gentle Introduction to Javascript's Reduce Method](<https://devfeed.tech/articles/let-s-reduce-a-gentle-introduction-to-javascript-s-reduce-method-27391.md>)

Original publisher: [Read original article](<http://engineering.khanacademy.org/posts/lets-reduce.htm>)

Author: Khan Academy

Published: 2017-07-10T22:00:00Z

Content type: tutorial

Language: en

Sources: [Khan Academy](<https://devfeed.tech/sources/khan-academy.md>)

Topics: [JavaScript](<https://devfeed.tech/topics/javascript.md>), [coding](<https://devfeed.tech/topics/coding.md>), [Redux](<https://devfeed.tech/topics/redux.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>)

Tags: [array](<https://devfeed.tech/tags/array.md>), [arrow](<https://devfeed.tech/tags/arrow.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [filter](<https://devfeed.tech/tags/filter.md>), [introduction](<https://devfeed.tech/tags/introduction.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [map](<https://devfeed.tech/tags/map.md>), [news](<https://devfeed.tech/tags/news.md>), [react](<https://devfeed.tech/tags/react.md>), [reduce](<https://devfeed.tech/tags/reduce.md>), [web-frontend](<https://devfeed.tech/tags/web-frontend.md>)

### AI overview

A tutorial explaining JavaScript's reduce method as a foundation for understanding Redux. It describes how reduce processes array items, how each iteration depends on the previous return value, and why the method can be difficult to learn.

### Source excerpt

By Josh Comeau Every summer, Khan Academy recruits a few software engineer interns. As part of their onboarding, ... Read more

## Generating running routes with GPT-6 Astra and ChatGPT Work

DevFeed: [Generating running routes with GPT-6 Astra and ChatGPT Work](<https://devfeed.tech/articles/generating-running-routes-with-gpt-6-astra-and-chatgpt-work-30507.md>)

Original publisher: [Read original article](<https://simonwillison.net/2026/Sep/12/astra-running-routes/>)

Author: Simon Willison

Published: 2026-09-12T23:56:42Z

Content type: opinion

Language: en

Sources: [Simon Willison](<https://devfeed.tech/sources/simon-willison.md>), [Simon Willison's Weblog](<https://devfeed.tech/sources/simon-willison-s-weblog.md>)

Topics: [ChatGPT](<https://devfeed.tech/topics/chatgpt.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [GeoJSON](<https://devfeed.tech/topics/geojson.md>), [Code](<https://devfeed.tech/topics/code.md>), [d3](<https://devfeed.tech/topics/d3.md>)

Tags: [agent](<https://devfeed.tech/tags/agent.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-2-235](<https://devfeed.tech/tags/ai-2-235.md>), [chatgpt](<https://devfeed.tech/tags/chatgpt.md>), [chatgpt-204](<https://devfeed.tech/tags/chatgpt-204.md>), [code](<https://devfeed.tech/tags/code.md>), [d3](<https://devfeed.tech/tags/d3.md>), [d3-15](<https://devfeed.tech/tags/d3-15.md>), [generative-ai](<https://devfeed.tech/tags/generative-ai.md>), [generative-ai-1-981](<https://devfeed.tech/tags/generative-ai-1-981.md>), [geospatial](<https://devfeed.tech/tags/geospatial.md>), [geospatial-85](<https://devfeed.tech/tags/geospatial-85.md>), [gpt](<https://devfeed.tech/tags/gpt.md>), [gpt-6-astra](<https://devfeed.tech/tags/gpt-6-astra.md>), [gpt-6-astra-9](<https://devfeed.tech/tags/gpt-6-astra-9.md>), [llms](<https://devfeed.tech/tags/llms.md>), [llms-1-947](<https://devfeed.tech/tags/llms-1-947.md>), [map](<https://devfeed.tech/tags/map.md>), [openai](<https://devfeed.tech/tags/openai.md>), [openai-463](<https://devfeed.tech/tags/openai-463.md>), [python](<https://devfeed.tech/tags/python.md>), [skills](<https://devfeed.tech/tags/skills.md>), [skills-15](<https://devfeed.tech/tags/skills-15.md>), [work](<https://devfeed.tech/tags/work.md>)

### AI overview

The article describes using ChatGPT Work with GPT-6 Astra to generate 5K and 10K running routes from OpenStreetMap data, producing an embedded visualization and downloadable GPX and GeoJSON files. It also criticizes the lack of visibility into the generated Python code and the loss of that code after thread compaction.

### Source excerpt

Here's a neat thing I had ChatGPT Work with GPT-6 Astra (Max) do this morning: I live at <my address>. Figure out 5K and 10K running routes from me that loop from my house. Use OSM data. It worked for 27 minutes and produced exactly what I'd asked for, as both an embedded visualization and downloadable GPX file and GeoJSON files. Here's that 5K route: When I asked it how it had created the route, it replied: I used Nominatim to locate the address and Overpass to download local OpenStreetMap roads and trails, then calculated the loops locally. Frustratingly, the actual code it ran and exact details of what it did weren't visible to me in the ChatGPT UI. I see this lack of transparency is an anti-feature. By the time I thought to ask for a copy of the Python code it had used, ChatGPT was unable to provide it. This appears to be because the thread had been compacted. I think any LLM system that uses compaction needs to both preserve the pre-compacted text and make that text available via agent tool calls, to protect against this kind of problem. As for displaying the map to me, that used the visualize skill. It created a file called /workspace/el-granada-5k-share.html to embed directly into the ChatGPT UI. Here's a copy of that HTML, which starts like this: <div id="eg-share-loop"> <div class="viz-row"><h3>El Granada harbor loop</h3><span class="text-small">5.1 km</span></div> <div id="eg-share-stage"></div> <div class="text-small text-muted">Map data © <a href="https://www.openstreetmap.org/copyright" target="_blank" rel="noopener">OpenStreetMap contributors</a></div> <style> #eg-share-loop { width:100%; } #eg-share-loop #eg-share-stage { width:100%; margin:8px 0; } #eg-share-loop .eg-share-map { display:block; width:100%; touch-action:none; } #eg-share-loop .eg-share-map text { fill:var(--foreground); font-size:12px; font-weight:400; } #eg-share-loop .eg-share-label { paint-order:stroke; stroke:var(--background); stroke-width:3px; stroke-linejoin:round; } </style> <s

## New site for my John Snow Cholera Map data

DevFeed: [New site for my John Snow Cholera Map data](<https://devfeed.tech/articles/new-site-for-my-john-snow-cholera-map-data-35595.md>)

Original publisher: [Read original article](<https://blog.rtwilson.com/new-site-for-my-john-snow-cholera-map-data/>)

Author: Robin Wilson

Published: 2026-09-10T12:13:16Z

Content type: release

Language: en

Sources: [Robin Wilson](<https://devfeed.tech/sources/robin-wilson.md>)

Topics: [data](<https://devfeed.tech/topics/data.md>), [GeoJSON](<https://devfeed.tech/topics/geojson.md>), [CSV](<https://devfeed.tech/topics/csv.md>), [Website](<https://devfeed.tech/topics/website.md>)

Tags: [academic](<https://devfeed.tech/tags/academic.md>), [blog](<https://devfeed.tech/tags/blog.md>), [csv](<https://devfeed.tech/tags/csv.md>), [data](<https://devfeed.tech/tags/data.md>), [formats](<https://devfeed.tech/tags/formats.md>), [gis](<https://devfeed.tech/tags/gis.md>), [map](<https://devfeed.tech/tags/map.md>), [website](<https://devfeed.tech/tags/website.md>)

### AI overview

The author announces a new website hosting digitized data from John Snow's cholera map. The site provides downloads in GeoPackage, GeoJSON, Shapefile, and CSV formats, and older blog posts now redirect to it.

### Source excerpt

I've finally crossed something off my todo list, after putting it off for years. I've created a new site to host the data from John Snow's cholera map that I digitised back in 2012. Previously the data was only available from posts on this blog (specifically this original post and a follow-up), and it wasn't [...]

## Game Builder Tutorial 3: Build a First-Person 3D Dungeon

DevFeed: [Game Builder Tutorial 3: Build a First-Person 3D Dungeon](<https://devfeed.tech/articles/game-builder-tutorial-3-build-a-first-person-3d-dungeon-19310.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/game-builder-3d-dungeon/>)

Author: Shai Almog

Published: 2026-07-09T00:00:00Z

Content type: tutorial

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [Tutorial](<https://devfeed.tech/topics/tutorial.md>), [3D](<https://devfeed.tech/topics/3d.md>), [Code](<https://devfeed.tech/topics/code.md>), [GPU](<https://devfeed.tech/topics/gpu.md>)

Tags: [3d](<https://devfeed.tech/tags/3d.md>), [blender](<https://devfeed.tech/tags/blender.md>), [build](<https://devfeed.tech/tags/build.md>), [camera](<https://devfeed.tech/tags/camera.md>), [code](<https://devfeed.tech/tags/code.md>), [games](<https://devfeed.tech/tags/games.md>), [gltf](<https://devfeed.tech/tags/gltf.md>), [gpu](<https://devfeed.tech/tags/gpu.md>), [lighting](<https://devfeed.tech/tags/lighting.md>), [map](<https://devfeed.tech/tags/map.md>), [mesh](<https://devfeed.tech/tags/mesh.md>), [model](<https://devfeed.tech/tags/model.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>)

### AI overview

A tutorial for building a first-person 3D dungeon with Codename One Game Builder. It covers 3D scene setup, genre-specific play styles, mesh-based assets, lighting, collision, and importing glTF models.

### Source excerpt

A code-included walkthrough that builds a first-person 3D dungeon with the Codename One Game Builder -- terrain, walls, a spawn, the companion code, and streaming large worlds.

## MIT researchers develop a real-time spatiotemporal memory framework for robots

DevFeed: [MIT researchers develop a real-time spatiotemporal memory framework for robots](<https://devfeed.tech/articles/could-ai-tell-you-where-you-left-your-keys-37947.md>)

Original publisher: [Read original article](<https://news.mit.edu/2026/could-ai-tell-you-where-you-left-your-keys-0617>)

Author: Adam Zewe | MIT News

Published: 2026-06-17T04:00:00Z

Content type: news

Language: en

Sources: [MIT AI News](<https://devfeed.tech/sources/mit-ai-news.md>)

Topics: [Robotics](<https://devfeed.tech/topics/robotics.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Computer vision](<https://devfeed.tech/topics/computer-vision.md>)

Tags: [3d-scene-graphs](<https://devfeed.tech/tags/3d-scene-graphs.md>), [aeronautical-and-astronautical-engineering](<https://devfeed.tech/tags/aeronautical-and-astronautical-engineering.md>), [ai](<https://devfeed.tech/tags/ai.md>), [algorithms](<https://devfeed.tech/tags/algorithms.md>), [artificial-intelligence](<https://devfeed.tech/tags/artificial-intelligence.md>), [autonomous-vehicles](<https://devfeed.tech/tags/autonomous-vehicles.md>), [computer-science-and-technology](<https://devfeed.tech/tags/computer-science-and-technology.md>), [computer-vision](<https://devfeed.tech/tags/computer-vision.md>), [daaam](<https://devfeed.tech/tags/daaam.md>), [describe-anything-anywhere-at-any-moment](<https://devfeed.tech/tags/describe-anything-anywhere-at-any-moment.md>), [electrical-engineering-and-computer-science-eecs](<https://devfeed.tech/tags/electrical-engineering-and-computer-science-eecs.md>), [laboratory-for-information-and-decision-systems-lids](<https://devfeed.tech/tags/laboratory-for-information-and-decision-systems-lids.md>), [luca-carlone](<https://devfeed.tech/tags/luca-carlone.md>), [machine-learning](<https://devfeed.tech/tags/machine-learning.md>), [map](<https://devfeed.tech/tags/map.md>), [memory](<https://devfeed.tech/tags/memory.md>), [mit-schwarzman-college-of-computing](<https://devfeed.tech/tags/mit-schwarzman-college-of-computing.md>), [nicolas-gorlo](<https://devfeed.tech/tags/nicolas-gorlo.md>), [paper](<https://devfeed.tech/tags/paper.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [research](<https://devfeed.tech/tags/research.md>), [robot-memory](<https://devfeed.tech/tags/robot-memory.md>), [robotic-perception](<https://devfeed.tech/tags/robotic-perception.md>), [robotics](<https://devfeed.tech/tags/robotics.md>), [robots](<https://devfeed.tech/tags/robots.md>), [school-of-engineering](<https://devfeed.tech/tags/school-of-engineering.md>), [spatial](<https://devfeed.tech/tags/spatial.md>), [spatiotemporal-mapping](<https://devfeed.tech/tags/spatiotemporal-mapping.md>)

### AI overview

MIT researchers developed a long-term spatiotemporal memory framework that helps robots form and recall detailed models of large environments. The system combines map representations with language-based descriptions, answers environmental questions in plain language, and runs fast enough for real-time mobile-robot use.

### Source excerpt

A new spatial memory system for robots efficiently captures details about the objects they see while exploring their environment.

## Project Kijiji: building a GNN-based routing intelligence platform for fragile networks

DevFeed: [Project Kijiji: building a GNN-based routing intelligence platform for fragile networks](<https://devfeed.tech/articles/project-kijiji-building-a-gnn-based-routing-intelligence-platform-for-fragile-networks-18603.md>)

Original publisher: [Read original article](<https://www.tinybird.co/blog/project-kijiji-gnn-routing-intelligence>)

Author: Elvis Muchiri

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

Content type: article

Language: en

Sources: [Tinybird](<https://devfeed.tech/sources/tinybird.md>)

Topics: [Routing (disambiguation)](<https://devfeed.tech/topics/routing.md>), [networking](<https://devfeed.tech/topics/networking.md>), [Networks](<https://devfeed.tech/topics/networks.md>), [Internet](<https://devfeed.tech/topics/internet.md>)

Tags: [building](<https://devfeed.tech/tags/building.md>), [engineering-excellence](<https://devfeed.tech/tags/engineering-excellence.md>), [internet](<https://devfeed.tech/tags/internet.md>), [map](<https://devfeed.tech/tags/map.md>), [networks](<https://devfeed.tech/tags/networks.md>), [peering](<https://devfeed.tech/tags/peering.md>), [platform](<https://devfeed.tech/tags/platform.md>), [routing](<https://devfeed.tech/tags/routing.md>)

### AI overview

This article describes Project Kijiji, a GNN-based platform that uses Tinybird to map inefficiencies in African internet routing and predict where new IXP peering agreements could have the greatest regional impact.

### Source excerpt

How a GNN-based platform uses Tinybird to map African internet routing inefficiencies and predict where new IXP peering agreements would have the highest regional impact.

## A Fast Immutable Map in Go

DevFeed: [A Fast Immutable Map in Go](<https://devfeed.tech/articles/a-fast-immutable-map-in-go-29398.md>)

Original publisher: [Read original article](<https://lemire.me/blog/2026/03/29/a-fast-immutable-map-in-go/>)

Author: Daniel Lemire

Published: 2026-03-29T18:18:01Z

Content type: article

Language: en

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

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [Data structures](<https://devfeed.tech/topics/data-structures.md>)

Tags: [benchmarks](<https://devfeed.tech/tags/benchmarks.md>), [go](<https://devfeed.tech/tags/go.md>), [map](<https://devfeed.tech/tags/map.md>), [memory](<https://devfeed.tech/tags/memory.md>)

### AI overview

The article presents constmap, a Go library for immutable string-to-value maps built with binary fuse filters. For fixed key sets, it aims to reduce memory use and provide fast lookups; benchmarks on one million keys reported nearly three times faster lookups and sixfold lower memory use than Go's standard map on the author's test system.

### Source excerpt

Consider the following problem. You have a large set of strings, maybe millions. You need to map these strings to 8-byte integers (uint64). These integers are given to you. If you are working in Go, the standard solution is to create a map. The construction is trivial, something like the following loop. m := make(map[string]uint64, ... Continue reading A Fast Immutable Map in Go

## Press start: How controllers shaped video game design--and where interfaces may go next

DevFeed: [Press start: How controllers shaped video game design--and where interfaces may go next](<https://devfeed.tech/articles/press-start-how-controllers-shaped-video-game-design-and-where-interfaces-may-go-next-10013.md>)

Original publisher: [Read original article](<https://www.figma.com/blog/press-start-video-game-navigation/>)

Author: Aashrey Sharma

Published: 2026-01-05T10:00:00Z

Content type: article

Language: en

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

Topics: [User experience (UX)](<https://devfeed.tech/topics/ux.md>), [User interface design](<https://devfeed.tech/topics/ui-design.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Hardware](<https://devfeed.tech/topics/hardware.md>)

Tags: [games](<https://devfeed.tech/tags/games.md>), [gaming](<https://devfeed.tech/tags/gaming.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>), [map](<https://devfeed.tech/tags/map.md>), [music](<https://devfeed.tech/tags/music.md>), [twitch](<https://devfeed.tech/tags/twitch.md>), [ux](<https://devfeed.tech/tags/ux.md>), [youtube](<https://devfeed.tech/tags/youtube.md>)

### AI overview

A UX designer at Epic Games examines how video game controllers shaped navigation principles and interface design. The article traces the evolution from simple game screens to complex systems of menus, tabs, maps, inventories, and other features, and considers what game navigation may teach the next generation of interfaces.

### Source excerpt

Aashrey Sharma, a UX designer at Epic Games, shares what video game navigation can teach us about building the next generation of interfaces.

## Testing Loading Skeletons

DevFeed: [Testing Loading Skeletons](<https://devfeed.tech/articles/testing-loading-skeletons-28899.md>)

Original publisher: [Read original article](<https://glebbahmutov.com/blog/testing-loading-skeletons/>)

Author: Gleb Bahmutov

Published: 2025-12-26T05:00:00Z

Content type: tutorial

Language: en

Sources: [Gleb Bahmutov](<https://devfeed.tech/sources/gleb-bahmutov.md>)

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

Tags: [component](<https://devfeed.tech/tags/component.md>), [css](<https://devfeed.tech/tags/css.md>), [cypress](<https://devfeed.tech/tags/cypress.md>), [map](<https://devfeed.tech/tags/map.md>), [products](<https://devfeed.tech/tags/products.md>), [property](<https://devfeed.tech/tags/property.md>), [test](<https://devfeed.tech/tags/test.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

A tutorial on testing loading skeletons with Cypress. It covers verifying that a skeleton appears while data loads, checking its position against the loaded content, and fixing CSS that causes layout shifts.

### Source excerpt

Loading skeletons are displayed while the real data is loading. For example, the login passwords are displayed after 1 second in the GIF

## Simplify Your Code: Functional Core, Imperative Shell

DevFeed: [Simplify Your Code: Functional Core, Imperative Shell](<https://devfeed.tech/articles/simplify-your-code-functional-core-imperative-shell-23865.md>)

Original publisher: [Read original article](<http://testing.googleblog.com/2025/10/simplify-your-code-functional-core.html>)

Author: Google Testing Bloggers (noreply@blogger.com)

Published: 2025-10-20T13:53:00Z

Content type: tutorial

Language: en

Sources: [Google Testing Blog](<https://devfeed.tech/sources/google-testing-blog.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [IO](<https://devfeed.tech/topics/io.md>)

Tags: [arham-jain](<https://devfeed.tech/tags/arham-jain.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [code](<https://devfeed.tech/tags/code.md>), [database](<https://devfeed.tech/tags/database.md>), [email](<https://devfeed.tech/tags/email.md>), [function](<https://devfeed.tech/tags/function.md>), [functional](<https://devfeed.tech/tags/functional.md>), [map](<https://devfeed.tech/tags/map.md>), [mutation](<https://devfeed.tech/tags/mutation.md>), [network](<https://devfeed.tech/tags/network.md>), [state](<https://devfeed.tech/tags/state.md>), [test](<https://devfeed.tech/tags/test.md>), [tott](<https://devfeed.tech/tags/tott.md>)

### AI overview

This tutorial explains the functional core, imperative shell pattern: keep pure, testable business logic separate from side effects such as database calls, network requests, email delivery, and external state mutation. It demonstrates the pattern by refactoring expiration-notification code.

### Source excerpt

This article was adapted from a Google Tech on the Toilet (TotT) episode. You can download a printer-friendly version of this TotT episode and post it in your office. By Arham Jain Is your code a tangled mess of business logic and side effects? Mixing database calls, network requests, and other external interactions directly with your core logic can lead to code that's difficult to test, reuse, and understand. Instead, consider writing a functional core that's called from an imperative shell. Separating your code into functional cores and imperative shells makes it more testable, maintainable, and adaptable. The core logic can be tested in isolation, and the imperative shell can be swapped out or modified as needed. Here's some messy example code that mixes logic and side effects to send expiration notification emails to users: // Bad: Logic and side effects are mixed function sendUserExpiryEmail(): void { for (const user of db.getUsers()) { if (user.subscriptionEndDate > Date.now()) continue; if (user.isFreeTrial) continue; email.send(user.email, "Your account has expired " + user.name + "."); } } A functional core should contain pure, testable business logic, which is free of side effects (such as I/O or external state mutation). It operates only on the data it is given. An imperative shell is responsible for side effects, like database calls and sending emails. It uses the functions in your functional core to perform the business logic. Rewriting the above code to follow the functional core / imperative shell pattern might look like: Functional core function getExpiredUsers(users: User[], cutoff: Date): User[] { return users.filter(user => user.subscriptionEndDate <= cutoff && !user.isFreeTrial); } function generateExpiryEmails(users: User[]): Array<[string, string]> { return users.map(user => ([user.email, "Your account has expired " + user.name + "."]) ); } Imperative shell email.bulkSend(generateExpiryEmails(getExpiredUsers(db.getUsers(), Date.now()))); No

## 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

## The British Airways position on various border disputes

DevFeed: [The British Airways position on various border disputes](<https://devfeed.tech/articles/the-british-airways-position-on-various-border-disputes-20790.md>)

Original publisher: [Read original article](<https://drewdevault.com/blog/BA-on-border-disputes/>)

Author: May 5

Published: 2025-05-05T00:00:00Z

Content type: opinion

Language: en

Sources: [Drew DeVault](<https://devfeed.tech/sources/drew-devault.md>)

Topics: [Flight](<https://devfeed.tech/topics/flight.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [Software](<https://devfeed.tech/topics/software.md>), [ui](<https://devfeed.tech/topics/ui.md>), [real-time](<https://devfeed.tech/topics/real-time.md>), [webcam](<https://devfeed.tech/topics/webcam.md>)

Tags: [3d](<https://devfeed.tech/tags/3d.md>), [camera](<https://devfeed.tech/tags/camera.md>), [developer](<https://devfeed.tech/tags/developer.md>), [devices](<https://devfeed.tech/tags/devices.md>), [display](<https://devfeed.tech/tags/display.md>), [interface](<https://devfeed.tech/tags/interface.md>), [japan](<https://devfeed.tech/tags/japan.md>), [london](<https://devfeed.tech/tags/london.md>), [map](<https://devfeed.tech/tags/map.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [photography](<https://devfeed.tech/tags/photography.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [screen](<https://devfeed.tech/tags/screen.md>), [smartphone](<https://devfeed.tech/tags/smartphone.md>), [software](<https://devfeed.tech/tags/software.md>), [united-kingdom](<https://devfeed.tech/tags/united-kingdom.md>), [zoom](<https://devfeed.tech/tags/zoom.md>)

### AI overview

The article examines the interactive flight map in a British Airways in-seat entertainment system, focusing on its map views, interface, OpenStreetMap attribution, and the absence of visible open-source license information. It humorously speculates that the map's border depictions may reflect British Airways' positions on international disputes.

### Source excerpt

My spouse and I are on vacation in Japan, spending half our time seeing the sights and the other half working remotely and enjoying the experience of living in a different place for a while. To get here, we flew on British Airways from London to Tokyo, and I entertained myself on the long flight by browsing the interactive flight map on the back of my neighbor's seat and trying to figure out how the poor developer who implemented this map solved the thorny problems that displaying a world map implies. I began my survey by poking through the whole interface of this little in-seat entertainment system1 to see if I can find out anything about who made it or how it works - I was particularly curious to find a screen listing open source licenses that such such devices often disclose. To my dismay I found nothing at all - no information about who made it or what's inside. I imagine that there must be some open source software in that thing, but I didn't find any licenses or copyright statements. When I turned my attention to the map itself, I did find one copyright statement, the only one I could find in the whole UI. If you zoom in enough, it switches from a satellite view to a street view showing the OpenStreetMap copyright line: Note that all of the pictures in this article were taken by pointing my smartphone camera at the screen from an awkward angle and fine-tune your expectations accordingly. I don't have pictures to support every border claim documented in this article, but I did take notes during the flight. Given that British Airways is the proud flag carrier of the United Kingdom I assume that this is indeed the only off-the-shelf copyrighted material included in this display, and everything else was developed in-house without relying on any open source software that might require a disclosure of license and copyright details. For similar reasons I am going to assume that all of the borders shown in this map are reflective of the official opinion of British Air

## Ethereum University Tour

DevFeed: [Ethereum University Tour](<https://devfeed.tech/articles/ethereum-university-tour-17156.md>)

Original publisher: [Read original article](<https://blog.ethereum.org/en/2025/04/30/uni-tour>)

Author: Austin Griffith; Shyam Sridhar

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

Content type: release

Language: en

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

Topics: [Ethereum](<https://devfeed.tech/topics/ethereum.md>), [Blockchain](<https://devfeed.tech/topics/blockchain.md>), [Learning](<https://devfeed.tech/topics/learning.md>)

Tags: [2025](<https://devfeed.tech/tags/2025.md>), [blockchain](<https://devfeed.tech/tags/blockchain.md>), [community](<https://devfeed.tech/tags/community.md>), [competition](<https://devfeed.tech/tags/competition.md>), [devconnect](<https://devfeed.tech/tags/devconnect.md>), [developers](<https://devfeed.tech/tags/developers.md>), [ecosystem](<https://devfeed.tech/tags/ecosystem.md>), [ecosystem-support-program](<https://devfeed.tech/tags/ecosystem-support-program.md>), [ethereum](<https://devfeed.tech/tags/ethereum.md>), [global](<https://devfeed.tech/tags/global.md>), [learn](<https://devfeed.tech/tags/learn.md>), [map](<https://devfeed.tech/tags/map.md>), [partnership](<https://devfeed.tech/tags/partnership.md>), [prototypes](<https://devfeed.tech/tags/prototypes.md>), [research](<https://devfeed.tech/tags/research.md>), [skills](<https://devfeed.tech/tags/skills.md>), [university](<https://devfeed.tech/tags/university.md>), [workshops](<https://devfeed.tech/tags/workshops.md>)

### AI overview

The Ethereum Foundation is sponsoring a global University Tour with BuidlGuidl to support university blockchain clubs and develop the next generation of Ethereum builders. The program includes virtual sessions, campus workshops, and a cross-university club competition ending at Devconnect 2025.

### Source excerpt

Are you part of a university blockchain club eager to dive deeper into the world of Ethereum? We want to connect with you! The Ethereum Foundation is sponsoring a global University Tour in partnership with BuidlGuidl, designed to activate student communities and grow the next generation of Ethereum builders....

## JSON - The Fine Print: Part 2 - Emitting JSON

DevFeed: [JSON - The Fine Print: Part 2 - Emitting JSON](<https://devfeed.tech/articles/json-the-fine-print-part-2-emitting-json-22267.md>)

Original publisher: [Read original article](<https://www.ardanlabs.com/blog/2024/10/json-the-fine-print-part-2.html>)

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

Content type: tutorial

Language: en

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

Topics: [JSON](<https://devfeed.tech/topics/json.md>), [API](<https://devfeed.tech/topics/api.md>), [Code](<https://devfeed.tech/topics/code.md>), [Structured-data](<https://devfeed.tech/topics/structured-data.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [api-layers](<https://devfeed.tech/tags/api-layers.md>), [code](<https://devfeed.tech/tags/code.md>), [common-serialization-errors](<https://devfeed.tech/tags/common-serialization-errors.md>), [data](<https://devfeed.tech/tags/data.md>), [data-serialization](<https://devfeed.tech/tags/data-serialization.md>), [data-structure-separation](<https://devfeed.tech/tags/data-structure-separation.md>), [data-transmission](<https://devfeed.tech/tags/data-transmission.md>), [data-validation](<https://devfeed.tech/tags/data-validation.md>), [encoding](<https://devfeed.tech/tags/encoding.md>), [encoding-json](<https://devfeed.tech/tags/encoding-json.md>), [function](<https://devfeed.tech/tags/function.md>), [go-json-types](<https://devfeed.tech/tags/go-json-types.md>), [go-language-serialization](<https://devfeed.tech/tags/go-language-serialization.md>), [go-language-validation](<https://devfeed.tech/tags/go-language-validation.md>), [go-type-mapping](<https://devfeed.tech/tags/go-type-mapping.md>), [http](<https://devfeed.tech/tags/http.md>), [io](<https://devfeed.tech/tags/io.md>), [io-writer](<https://devfeed.tech/tags/io-writer.md>), [json](<https://devfeed.tech/tags/json.md>), [json-best-practices](<https://devfeed.tech/tags/json-best-practices.md>), [json-go-mapping](<https://devfeed.tech/tags/json-go-mapping.md>), [json-marshaling](<https://devfeed.tech/tags/json-marshaling.md>), [json-unmarshaling](<https://devfeed.tech/tags/json-unmarshaling.md>), [json-validation](<https://devfeed.tech/tags/json-validation.md>), [map](<https://devfeed.tech/tags/map.md>), [passing-serialized-data](<https://devfeed.tech/tags/passing-serialized-data.md>), [properties](<https://devfeed.tech/tags/properties.md>), [rest-apis](<https://devfeed.tech/tags/rest-apis.md>), [schema](<https://devfeed.tech/tags/schema.md>), [schema-less-data-format](<https://devfeed.tech/tags/schema-less-data-format.md>), [serialization](<https://devfeed.tech/tags/serialization.md>), [serialization-mistakes](<https://devfeed.tech/tags/serialization-mistakes.md>), [serialization-protocols](<https://devfeed.tech/tags/serialization-protocols.md>), [standard](<https://devfeed.tech/tags/standard.md>), [structure](<https://devfeed.tech/tags/structure.md>), [writing](<https://devfeed.tech/tags/writing.md>)

### AI overview

This tutorial explains how to emit JSON in Go using the encoding/json package. It compares json.Marshal, which returns bytes, with json.Encoder, which writes to an io.Writer, and discusses error handling in HTTP handlers. It also demonstrates marshaling maps and structs and using field tags to control JSON property names.

### Source excerpt

Introduction In part 1 we took a high-level view on serialization and JSON. In this part, we'll roll our sleeves and start working with JSON, focused on emitting JSON. You might think this is a basic topic, but there is much more to it than just calling json.Marshal. json.Marshal vs json.Encoder The encoding/json package has two main APIs: Marshal and NewEncoder. The Marshal function returns a []byte while the NewEncoder function will write to an io.Writer. The question is: When should you use one API over the other?

## Postgres Realtime location sharing with MapLibre

DevFeed: [Postgres Realtime location sharing with MapLibre](<https://devfeed.tech/articles/postgres-realtime-location-sharing-with-maplibre-510.md>)

Original publisher: [Read original article](<https://supabase.com/blog/postgres-realtime-location-sharing-with-maplibre>)

Author: Thor Schaeff

Published: 2024-07-04T07:00:00Z

Content type: tutorial

Language: en

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

Topics: [Supabase](<https://devfeed.tech/topics/supabase.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [React](<https://devfeed.tech/topics/react.md>), [Remote Procedure Call (RPC)](<https://devfeed.tech/topics/rpc.md>), [API](<https://devfeed.tech/topics/api.md>), [data](<https://devfeed.tech/topics/data.md>), [Database](<https://devfeed.tech/topics/database.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [build](<https://devfeed.tech/tags/build.md>), [capture](<https://devfeed.tech/tags/capture.md>), [code](<https://devfeed.tech/tags/code.md>), [function](<https://devfeed.tech/tags/function.md>), [getting-started](<https://devfeed.tech/tags/getting-started.md>), [guide](<https://devfeed.tech/tags/guide.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [js](<https://devfeed.tech/tags/js.md>), [map](<https://devfeed.tech/tags/map.md>), [migrations](<https://devfeed.tech/tags/migrations.md>), [postgres](<https://devfeed.tech/tags/postgres.md>), [react](<https://devfeed.tech/tags/react.md>), [realtime](<https://devfeed.tech/tags/realtime.md>), [remote](<https://devfeed.tech/tags/remote.md>), [rpc](<https://devfeed.tech/tags/rpc.md>), [state](<https://devfeed.tech/tags/state.md>), [subscription](<https://devfeed.tech/tags/subscription.md>), [telegram](<https://devfeed.tech/tags/telegram.md>)

### AI overview

This tutorial shows how to build live location sharing with Supabase, Postgres, Supabase Realtime, a Telegram Bot, and MapLibre GL JS in React. It covers capturing location data in a Supabase Edge Function, inserting it through an RPC, subscribing to database changes, and displaying updated markers on a map.

### Source excerpt

Use Supabase Realtime to draw live location data onto the map with MapLibre GL JS.

## Generics

DevFeed: [Generics](<https://devfeed.tech/articles/generics-25057.md>)

Original publisher: [Read original article](<https://typealias.com/start/kotlin-generics/>)

Author: author@typealias.com (Dave Leeds)

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

Content type: tutorial

Language: en

Sources: [Dave Leeds on Kotlin - typealias.com](<https://devfeed.tech/sources/dave-leeds-on-kotlin-typealias-com.md>)

Topics: [generics](<https://devfeed.tech/topics/generics.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>)

Tags: [classes](<https://devfeed.tech/tags/classes.md>), [collections](<https://devfeed.tech/tags/collections.md>), [enum-class](<https://devfeed.tech/tags/enum-class.md>), [function](<https://devfeed.tech/tags/function.md>), [generics](<https://devfeed.tech/tags/generics.md>), [introduction](<https://devfeed.tech/tags/introduction.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-generic-function](<https://devfeed.tech/tags/kotlin-generic-function.md>), [kotlin-generics](<https://devfeed.tech/tags/kotlin-generics.md>), [kotlin-parameterized-types](<https://devfeed.tech/tags/kotlin-parameterized-types.md>), [kotlin-type-argument](<https://devfeed.tech/tags/kotlin-type-argument.md>), [kotlin-type-erasure](<https://devfeed.tech/tags/kotlin-type-erasure.md>), [kotlin-type-parameter](<https://devfeed.tech/tags/kotlin-type-parameter.md>), [kotlin-type-parameter-constraint](<https://devfeed.tech/tags/kotlin-type-parameter-constraint.md>), [kotlin-type-safety](<https://devfeed.tech/tags/kotlin-type-safety.md>), [learn-to-program](<https://devfeed.tech/tags/learn-to-program.md>), [list](<https://devfeed.tech/tags/list.md>), [map](<https://devfeed.tech/tags/map.md>), [pair](<https://devfeed.tech/tags/pair.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

A tutorial introducing Kotlin generics through collection types such as List, Pair, and Map, using a beverage-menu example with classes and an enum class.

### Source excerpt

All the way back in Chapter 8, when we introduced collections, we saw our first generic type: List<String> ... then we saw more generics in Chapter 9 when we looked at the Pair and Map classes. In order to stay focused on learning about collection types, we glossed over the details about these classes. Well, we've put off learning about them for long enough! It's finally time for us to gain a full understanding of generics, so buckle up!

## Important Change! Switching map and construction syntax.

DevFeed: [Important Change! Switching map and construction syntax.](<https://devfeed.tech/articles/important-change-switching-map-and-construction-syntax-22387.md>)

Original publisher: [Read original article](<https://www.red-lang.org/2024/02/important-change-switching-map-and.html>)

Author: Unknown (noreply@blogger.com)

Published: 2024-02-11T14:37:00Z

Content type: opinion

Language: en

Sources: [Red](<https://devfeed.tech/sources/red.md>)

Topics: [Red](<https://devfeed.tech/topics/red.md>), [Code](<https://devfeed.tech/topics/code.md>), [Script](<https://devfeed.tech/topics/script.md>), [Instrumentation](<https://devfeed.tech/topics/instrumentation.md>), [data](<https://devfeed.tech/topics/data.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [instrumentation](<https://devfeed.tech/tags/instrumentation.md>), [language](<https://devfeed.tech/tags/language.md>), [lexer](<https://devfeed.tech/tags/lexer.md>), [map](<https://devfeed.tech/tags/map.md>), [maps](<https://devfeed.tech/tags/maps.md>), [migration](<https://devfeed.tech/tags/migration.md>), [safety](<https://devfeed.tech/tags/safety.md>), [switching](<https://devfeed.tech/tags/switching.md>), [syntax](<https://devfeed.tech/tags/syntax.md>)

### AI overview

The article announces that Red and Rebol3 will swap the syntactic forms used for map! values and construction syntax. It explains the evaluation behavior motivating the change, notes the resulting incompatibility with Rebol2 construction syntax, and describes tools for automatically converting scripts.

### Source excerpt

Sometimes deep changes take a huge amount of code. Sometimes they take a lot of detailed explanation and consideration, leading to long discussions and people taking sides. Rarely does an important syntactic change to a language happen quickly, with universal agreement, simple implementation, and tools to help update scripts in the wild. Today is one of those rare days. Admittedly, this idea has been discussed for a long time. It would surface, people nodded their virtual heads, and it would submerge again. Today it's ready to deploy. Not only that, but Rebol3 is making the same change, so the two languages will still be compatible in this regard. What is the change? It's easy to describe. Today, map! values use this syntax: #(...) and construction syntax (sometimes called serialized form or loadable form) looks like this: #[...]. Going forward, those syntactic forms will be swapped. Why? The answer is easy. In Redbol langs, blocks do not evaluate by default, you have to do or reduce them. Parens, on the other hand, do evaluate by default. Today, maps use paren-like syntax, but they do not evaluate, while construction syntax uses block-like syntax, but does evaluate. This is a carryover from Rebol, so the major concession here is that Red and Rebol3 will no longer be compatible with Rebol2's construction syntax. If you've never heard of construction syntax, there's a nice explanation of it here. Red only supports a few values via construction syntax today, all datatype literals, true, false, none, and unset; but eventually it will support much more. If you look at the help for mold, you'll see that /all is TBD (very partially implemented for now), and that's how you create loadable, serialized, data that can safely and easily contain any value (like redbin but readable by humans). It helps avoid cases where none or true/false may load as words. This is also why construct evaluates those specific words (including also on/off/yes/no), but not others. When loading untr

## Imperfect #14: How to map dependencies

DevFeed: [Imperfect #14: How to map dependencies](<https://devfeed.tech/articles/imperfect-14-how-to-map-dependencies-39452.md>)

Original publisher: [Read original article](<https://imperfect.substack.com/p/imperfect-14-how-to-map-dependencies>)

Author: Pedro Gil Carvalho

Published: 2023-07-07T13:33:59Z

Content type: tutorial

Language: en

Sources: [Pedro Gil Carvalho](<https://devfeed.tech/sources/pedro-gil-carvalho.md>)

Topics: [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [microservices architecture](<https://devfeed.tech/topics/microservices-architecture.md>), [Microservice](<https://devfeed.tech/topics/microservice.md>), [interfaces](<https://devfeed.tech/topics/interfaces.md>), [API](<https://devfeed.tech/topics/api.md>), [Database](<https://devfeed.tech/topics/database.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [awareness](<https://devfeed.tech/tags/awareness.md>), [changes](<https://devfeed.tech/tags/changes.md>), [database](<https://devfeed.tech/tags/database.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [issue-tracker](<https://devfeed.tech/tags/issue-tracker.md>), [map](<https://devfeed.tech/tags/map.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [microservices-architecture](<https://devfeed.tech/tags/microservices-architecture.md>), [monitor](<https://devfeed.tech/tags/monitor.md>), [monolith](<https://devfeed.tech/tags/monolith.md>), [pair-programming](<https://devfeed.tech/tags/pair-programming.md>)

### AI overview

The article explains how to map service dependencies to help identify and avoid distributed monoliths. It recommends team-by-team architecture reviews, collaboratively maintained diagrams, monitoring connected interfaces, and tracking dependencies in a simple spreadsheet.

### Source excerpt

Avoiding the distributed monolith antipattern requires great situational awareness. Today we go over what that means, how architecture reviews can help, and one simple way to anticipate dependencies.

## Personal Heatmaps

DevFeed: [Personal Heatmaps](<https://devfeed.tech/articles/personal-heatmaps-26574.md>)

Original publisher: [Read original article](<https://medium.com/strava-engineering/personal-heatmaps-f51d15a0db2b?source=rss----89d4108ce2a3---4>)

Author: J Evans

Published: 2022-10-28T21:15:46Z

Content type: tutorial

Language: en

Sources: [Strava Engineering](<https://devfeed.tech/sources/strava-engineering.md>)

Topics: [data](<https://devfeed.tech/topics/data.md>), [Algorithm](<https://devfeed.tech/topics/algorithm.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [pixel](<https://devfeed.tech/topics/pixel.md>), [real-time](<https://devfeed.tech/topics/real-time.md>), [Google Maps](<https://devfeed.tech/topics/google-maps.md>), [Website](<https://devfeed.tech/topics/website.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [cycling](<https://devfeed.tech/tags/cycling.md>), [data](<https://devfeed.tech/tags/data.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [gis](<https://devfeed.tech/tags/gis.md>), [google-maps](<https://devfeed.tech/tags/google-maps.md>), [gps](<https://devfeed.tech/tags/gps.md>), [heat](<https://devfeed.tech/tags/heat.md>), [map](<https://devfeed.tech/tags/map.md>), [mapping](<https://devfeed.tech/tags/mapping.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [pixel](<https://devfeed.tech/tags/pixel.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [recursion](<https://devfeed.tech/tags/recursion.md>), [running](<https://devfeed.tech/tags/running.md>), [strava](<https://devfeed.tech/tags/strava.md>), [zoom](<https://devfeed.tech/tags/zoom.md>)

### AI overview

This article explains the algorithm behind Strava's Personal Heatmap, which renders an athlete's GPS activity as a frequency-based heatmap on an interactive world map. It focuses on Mercator projection and recursive map tiling, where 256x256 pixel tiles are served at different zoom levels for real-time navigation.

### Source excerpt

This post discusses the algorithm behind Personal Heatmap, one of Strava's most acclaimed subscriber features. Product Overview The Personal Heatmap feature has been around in some form since 2015, but we gave it a major overhaul in 2020. For those unfamiliar, the heatmap is an aggregated view of an athlete's GPS-enabled activities on Strava. Activity data is rendered onto a map according to path traversal frequency; the more an athlete runs on a road, the brighter -- i.e. "hotter" -- that road shows up on the map. The result is a beautiful color gradient displaying the intricate web of past activities, unique to each athlete. The Personal Heatmap is displayed on an interactive world map, also known as a slippy map. Athletes can seamlessly zoom in and out or pan around to arbitrary views of the map, and their activity heat stays displayed the entire time. To enable this, we must provide a scheme for rendering and serving subsections of the world map on the fly. Enter map tiling. Mercator Projection & Map Tiling Map tiling is the practice of subdividing a map into many discrete images that can be stitched together and rendered as a single image in real-time during map navigation. The first step in choosing a tiling scheme is picking what world map to use. Enter, the Mercator Projection, the most commonly used projection of Earth as a flat, rectangular surface. We use this projection in all of our mapping products, including heatmaps. https://medium.com/media/d9e120d13950dd0f1bb4ee14108aa9a9/href Now, imagine a grid overlaying the Mercator projection. Each grid section is known as a tile, a pixel image with resolution 256x256. Every tile has an associated zoom level, and tiles are defined recursively according to this zoom level. A tile at a given zoom level can be subdivided into four equal sized tiles at a next zoom level. For example, Zoom level 0 displays the entire planet in a single 256x256 pixel image. Zoom level 1 displays the world in four 256x256 pixel images.

## How to Typesafely Map a Nested SQL Collection into a Nested Java Map with jOOQ

DevFeed: [How to Typesafely Map a Nested SQL Collection into a Nested Java Map with jOOQ](<https://devfeed.tech/articles/how-to-typesafely-map-a-nested-sql-collection-into-a-nested-java-map-with-jooq-28946.md>)

Original publisher: [Read original article](<https://blog.jooq.org/how-to-typesafely-map-a-nested-sql-collection-into-a-nested-java-map-with-jooq/>)

Author: lukaseder

Published: 2022-05-09T10:06:51Z

Content type: tutorial

Language: en

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

Topics: [Java](<https://devfeed.tech/topics/java.md>), [SQL](<https://devfeed.tech/topics/sql.md>), [Databases](<https://devfeed.tech/topics/databases.md>), [data](<https://devfeed.tech/topics/data.md>), [Structured-data](<https://devfeed.tech/topics/structured-data.md>)

Tags: [collections](<https://devfeed.tech/tags/collections.md>), [data](<https://devfeed.tech/tags/data.md>), [data-structures](<https://devfeed.tech/tags/data-structures.md>), [how-to](<https://devfeed.tech/tags/how-to.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>), [map](<https://devfeed.tech/tags/map.md>), [mapping](<https://devfeed.tech/tags/mapping.md>), [multiset](<https://devfeed.tech/tags/multiset.md>), [nested-collections](<https://devfeed.tech/tags/nested-collections.md>), [nested-maps](<https://devfeed.tech/tags/nested-maps.md>), [nested-records](<https://devfeed.tech/tags/nested-records.md>), [sql](<https://devfeed.tech/tags/sql.md>), [stack-overflow](<https://devfeed.tech/tags/stack-overflow.md>), [typesafety](<https://devfeed.tech/tags/typesafety.md>)

### AI overview

This tutorial shows how to use jOOQ 3.15's ad-hoc conversion API and nested collection features to map a nested SQL collection into a type-safe nested Java Map. It uses the Sakila database example and explains how collectors preserve insertion order.

### Source excerpt

A really cool, recent question on Stack Overflow was about how to map a nested collection into a Java Map with jOOQ. In the past, I've blogged about the powerful MULTISET operator many times, which allows for nesting collections in jOOQ. This time, instead of nesting data into a List<UserType>, why not nest it in ... Continue reading How to Typesafely Map a Nested SQL Collection into a Nested Java Map with jOOQ ->

## Collections: Maps

DevFeed: [Collections: Maps](<https://devfeed.tech/articles/collections-maps-25060.md>)

Original publisher: [Read original article](<https://typealias.com/start/kotlin-maps/>)

Author: author@typealias.com (Dave Leeds)

Published: 2022-05-04T00:00:00Z

Content type: tutorial

Language: en

Sources: [Dave Leeds on Kotlin - typealias.com](<https://devfeed.tech/sources/dave-leeds-on-kotlin-typealias-com.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [data](<https://devfeed.tech/topics/data.md>)

Tags: [associate](<https://devfeed.tech/tags/associate.md>), [association](<https://devfeed.tech/tags/association.md>), [build](<https://devfeed.tech/tags/build.md>), [collections](<https://devfeed.tech/tags/collections.md>), [groupby](<https://devfeed.tech/tags/groupby.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [introduction](<https://devfeed.tech/tags/introduction.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [learn-to-program](<https://devfeed.tech/tags/learn-to-program.md>), [map](<https://devfeed.tech/tags/map.md>), [maps](<https://devfeed.tech/tags/maps.md>), [pair](<https://devfeed.tech/tags/pair.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

A tutorial chapter introduces maps as a Kotlin collection for storing associations between values. It explains the concept using a hardware-and-tools example and begins showing how to create associations with a class constructor.

### Source excerpt

In the last chapter, we saw how collections, such as lists and sets, can be used to do things that couldn't be done easily with separate, individual variables. In this chapter, we're going to look at another kind of collection--a map, which can hold many associations between values. Let's check it out! The Right Tool for the Job "You gotta use the right tool for the job." That's what Mr. Patchwell taught his young son, Jack, who was just starting to learn how to become a handyman like his old man.

## Collections: Lists and Sets

DevFeed: [Collections: Lists and Sets](<https://devfeed.tech/articles/collections-lists-and-sets-25049.md>)

Original publisher: [Read original article](<https://typealias.com/start/kotlin-collections/>)

Author: author@typealias.com (Dave Leeds)

Published: 2022-04-18T00:00:00Z

Content type: tutorial

Language: en

Sources: [Dave Leeds on Kotlin - typealias.com](<https://devfeed.tech/sources/dave-leeds-on-kotlin-typealias-com.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Code](<https://devfeed.tech/topics/code.md>), [Learning](<https://devfeed.tech/topics/learning.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [collection-operations](<https://devfeed.tech/tags/collection-operations.md>), [collections](<https://devfeed.tech/tags/collections.md>), [filter](<https://devfeed.tech/tags/filter.md>), [foreach](<https://devfeed.tech/tags/foreach.md>), [introduction](<https://devfeed.tech/tags/introduction.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [learn-to-program](<https://devfeed.tech/tags/learn-to-program.md>), [learning](<https://devfeed.tech/tags/learning.md>), [list](<https://devfeed.tech/tags/list.md>), [map](<https://devfeed.tech/tags/map.md>), [programming](<https://devfeed.tech/tags/programming.md>), [set](<https://devfeed.tech/tags/set.md>)

### AI overview

A Kotlin tutorial introduces collections by explaining how to group values and begins demonstrating lists and sets through a book-list example.

### Source excerpt

So far, we've only worked with variables as individual values. Writing Kotlin becomes so much more interesting once we start putting values together in such a way that we can work with them as a collection. To learn about collections, let's visit Libby, a bright young lady who's always got a book nearby! Let's put things together! Libby is a voracious reader. She's always on the lookout for a great novel, so whenever someone tells her about a good book, she jots down the title on a list that she keeps on a sheet of paper.

## Ideas and Solutions for Advent of Code 2021 in Kotlin -- Part 1/4

DevFeed: [Ideas and Solutions for Advent of Code 2021 in Kotlin -- Part 1/4](<https://devfeed.tech/articles/ideas-and-solutions-for-advent-of-code-2021-in-kotlin-part-1-4-24733.md>)

Original publisher: [Read original article](<https://medium.com/xorum-io/ideas-and-solutions-for-advent-of-code-2021-in-kotlin-part-1-4-9a16d9e3bd57?source=rss----92bb7980cc9f---4>)

Author: Yev Kanivets

Published: 2021-12-13T15:31:55Z

Content type: tutorial

Language: en

Sources: [xorum.io - Medium](<https://devfeed.tech/sources/xorum-io-medium.md>)

Topics: [Advent of Code](<https://devfeed.tech/topics/advent-of-code.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [advent-of-code](<https://devfeed.tech/tags/advent-of-code.md>), [algorithms](<https://devfeed.tech/tags/algorithms.md>), [array](<https://devfeed.tech/tags/array.md>), [commands](<https://devfeed.tech/tags/commands.md>), [competitive-programming](<https://devfeed.tech/tags/competitive-programming.md>), [data-structures](<https://devfeed.tech/tags/data-structures.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [map](<https://devfeed.tech/tags/map.md>), [programming](<https://devfeed.tech/tags/programming.md>), [solutions](<https://devfeed.tech/tags/solutions.md>)

### AI overview

A Kotlin-focused walkthrough of the first six Advent of Code 2021 puzzles. It explains the key solution ideas for the early tasks, including array comparisons, submarine movement modeling, and binary-number calculations, while linking to source code for further guidance.

### Source excerpt

Ideas and Solutions for Advent of Code 2021 in Kotlin -- Part 1/4 There are so many things to do before Christmas, so I was always wondering how people find extra time to solve a daily programming puzzle of Advent of Code. Well, this year I'm one of those lucky folks with a bunch of spare time. Advent of Code is an annual event of Christmas-oriented programming challenges started December 2015. Every year since then, on the first day of December, a programming puzzle is published every day for twenty-four days. You can solve the puzzle and provide an answer using the language of your choice. Extra reason by JetBrains in the form of the giveaway of some Kotlin care packages has certainly contributed to my motivation. But what's the point of solving tasks without sharing your ideas and solutions with the community ;) So here we are, the first six tasks. What's special about this article? I won't be sharing the complete editorial, but the key idea only, so you can still solve the task by yourself. And if you need more guidance, there is a source code linked. Day 1: Sonar Sweep We are given an array of heights of a seafloor. We need to calculate the number of times heights (sub-task one) and sliding triples of heights (sub-task two) are increasing. Complete task is here. To solve both tasks we need to go from left to right and compare the previous element (or sliding triple) to the current one. That's pretty simple, but challenge yourself to craft the beautiful code. In Kotlin we may consider using drop and foldIndexed functions for this. Here is my solution. Day 2: Dive! The submarine can move in 2D space (horizontal position and depth) controlled by the set of commands. Moves mechanics are slightly different between subtasks, but the overall approach and goal are the same -- model moves and find the resulting position. Complete task is here. The first sub-task can be solved by folding horizontal position and depth changes, but the second sub-task should be modeled exact

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