Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
159065 stories
·
33 followers

Taxi Drivers Rarely Die of Alzheimer's

1 Share
An anonymous reader shares a report from The Conversation, written by Hatim Sharif, a civil and environmental engineer who has "spent more than two decades staring at maps" and spatial data. Sharif finds one connection especially fascinating: the link between spatial reasoning and why taxi drivers seem to have lower rates of Alzheimer's. From the report: Taxi and ambulance drivers are less likely than workers in almost any other job to die of Alzheimer's disease. That was the surprising result of a 2024 study examining the death certificates of nearly 9 million people in the U.S. [...] Of the 9 million death certificates from January 2020 to December 2022 that researchers examined, taxi and ambulance drivers had the lowest risk of dying from Alzheimer's disease out of 443 occupations. After adjusting for age, sex, race, ethnicity and education, roughly 1 in 100 taxi and ambulance drivers died of Alzheimer's, compared with 1 in 60 people overall. This pattern did not extend to other driving jobs. The researchers concluded that the key to reducing the risk of Alzheimer's was not driving itself but continuous real-time navigation: the constant work of locating yourself in space, tracking a destination and updating a mental map as conditions change. Drivers whose jobs relied on fixed or predetermined routes, like bus drivers and aircraft pilots, didn't seem to experience a similar advantage. Researchers believe the association between navigation-heavy work and lower Alzheimer's risk centers on the hippocampus, a part of the brain that governs memory and spatial navigation. It's one of the first brain regions that Alzheimer's damages: Problems with spatial navigation and orientation are among the earliest signs of the disease, sometimes surfacing before obvious memory loss. In one landmark 2000 study, neuroscientists compared the brains of licensed London taxi drivers with those of people who did not drive cabs. Their findings provided the first evidence via structural imaging that regions of the adult brain can measurably change under sustained navigational demand. To earn a license, London cabbies must memorize more than 25,000 streets within a 6-mile radius of Charing Cross, a challenge known as "The Knowledge" that takes three to four years. The researchers found that London taxi drivers had measurably more gray matter in the posterior hippocampus, a brain area tied to storing large-scale spatial maps. That volume tracked with experience: The longer someone had driven, the larger that part of the brain. The change was built through practice, not inherited. While people who are good at navigation might gravitate to this kind of job, the job itself does have an impact on the brain. Together, these two studies make a coherent case: Work that intensively exercises the hippocampus may reshape it, and that reshaping may protect against one of the most feared diseases of aging.

Read more of this story at Slashdot.

Read the whole story
alvinashcraft
25 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Building Bookmark Studio: bookmarks that belong to the codebase

1 Share

Visual Studio bookmarks are useful for marking a line and returning to it later. The problem is that a line number alone does not say why the location matters, how it relates to other locations, or whether the rest of the team should know about it.

Bookmark Studio treats a bookmark as a small piece of project knowledge. A bookmark can have a name, note, color, folder, and one of nine direct-navigation shortcuts. It can stay private in the .vs folder, live at the workspace level in source control, or be global across solutions.

That sounds like a straightforward feature, but it touches several distinct parts of Visual Studio extensibility: editor tags and glyphs, text-buffer tracking, commands, a searchable tool window, options, solution lifecycle events, and persistent storage. The interesting part is making those pieces behave like one feature rather than a collection of extension points.

Bookmark Manager tool window showing color-coded bookmarks organized in folders.

Keep the editor layer fast

The visible bookmark in the editor margin starts with a MEF-exported IViewTaggerProvider. It creates an ITagger<BookmarkGlyphTag> for primary text document views, while an IGlyphFactory turns each tag into the colored square shown in the glyph margin. If a bookmark has a shortcut from 1 through 9, the number is drawn inside the glyph.

The tag also carries the bookmark label, note, color, and shortcut number. That gives the glyph factory enough information to build a useful tooltip and context menu without reading the bookmark file. A second tagger produces OverviewMarkTag instances so the same bookmarks appear as colored markers in the editor scrollbar.

A useful rule for editor extensions is to keep GetTags cheap. Visual Studio can ask for tags often, including while scrolling and editing. Bookmark Studio does not load JSON or filter the complete bookmark collection on every request. The shared session owns the current bookmark state, and each tagger caches only the bookmarks for its document. When the session reports a change, the tagger replaces that small cache and raises TagsChanged.

That separation is broadly useful: do I/O and normalization in a service, then give the editor a read-optimized snapshot.

A persisted line number is not an editor position

A bookmark must be serializable, so its stored location includes a document path and line number. An open text buffer is more dynamic. Insert three lines above a bookmark and the persisted number is immediately stale.

Bookmark Studio handles that mismatch with ITrackingPoint. While a document is open, each bookmark gets a tracking point anchored inside the line content. The editor moves that point as the buffer changes, which keeps the glyph attached to the intended code instead of the original numeric line. The tagger can still fall back to the stored line number when no tracking point exists.

There is an additional wrinkle: users can explicitly drag a glyph to another line. The tagger therefore distinguishes an editor-tracked move from an explicit bookmark move before deciding whether to preserve or rebuild the tracking point. The custom MouseProcessorBase implementation calculates the target editor line, displays a drop indicator, updates the bookmark, and refreshes the manager if it is open.

Dragging a numbered bookmark glyph to a different line in the Visual Studio editor.

The lesson is that storage coordinates and live editor coordinates are different concepts. Persist a stable representation, but use the text model's tracking primitives while a buffer is active.

Reuse Visual Studio instead of recreating it

The Bookmark Manager is a WPF control hosted in a BaseToolWindow. Its surrounding experience comes from Visual Studio rather than custom imitations.

The package registers the window with ProvideToolWindow, docks it alongside Solution Explorer, and assigns a toolbar declared through VSCT to ToolWindowPane.ToolBar. Search uses the tool window's native search box by enabling SearchEnabled and implementing IVsSearchTask. Commands and keyboard bindings are also declared through VSCT, including direct navigation with Alt+Shift+1 through Alt+Shift+9.

This approach matters for more than appearance. Native command placement participates in Visual Studio's command routing, toolbar customization, keyboard system, and accessibility behavior. The same principle applies to the search box: using the host's search contract gives the tool window familiar behavior without building another search control.

Bookmark Studio also offers an opt-in bridge from Visual Studio's built-in bookmark gestures. VS.Commands.InterceptAsync handles commands such as toggle, next, previous, and clear-in-document. The first toggle can prompt the user, and the setting determines whether later commands stop in Bookmark Studio or continue to Visual Studio's native implementation. The extension adds its own direct gestures as well, so interception is a choice rather than a requirement.

Visual Studio toolbar menu listing numbered bookmarks for quick navigation.

Make sharing explicit in the storage model

Bookmarks are stored with System.Text.Json in .bookmarks.json. The file is a folder tree containing bookmark IDs, relative document paths, line numbers, labels, notes, colors, shortcut slots, and manual sort indexes.

There are three storage scopes:

  • Personal bookmarks live under the solution's .vs folder.
  • Workspace bookmarks live beside the solution or at the Git repository root and can be committed.
  • Global bookmarks live in %USERPROFILE%\.bookmarks.json and use absolute paths because they are machine-specific.

Workspace discovery walks upward from the solution directory and reuses the first bookmarks file it finds. This is important for repositories where the solution sits below the root. New workspace files record "documentPathRoot": "bookmarksFile", which tells the loader to resolve relative document paths from the bookmarks file itself. Existing files without that marker retain the older solution-relative behavior.

That small format marker avoids a common portability bug. A relative path is only meaningful when both writer and reader agree on its base directory. If a team-shared file may move higher in a repository, the base must travel with the format or be defined by it.

Naming can use the editor's understanding of code

When name prompting is enabled, Bookmark Studio does not have to settle for the current line as the label. A MEF service queries Visual Studio's classification system and ranks identifiers such as methods, properties, fields, and types. It supports view classifiers first, then projection buffers and tag aggregators as fallbacks.

The complete fallback order is pragmatic: selected text, classified identifier, word under the caret, file name, trimmed line text, and finally Bookmark. Duplicate labels receive a numeric suffix.

This is a good middle ground for editor tooling. The extension gets language-aware suggestions from classifications that Visual Studio already produces, without taking a dependency on a specific language compiler or syntax tree.

The extension points form one state machine

The package loads in the background for solutions, Open Folder workspaces, and the no-solution context because global bookmarks remain useful without a solution. Solution and folder events invalidate the cached path and refresh the shared session. Editor taggers, commands, and the tool window all observe or update that same session.

That shared state is the architectural center of Bookmark Studio. The editor should not own persistence, the tool window should not be the only source of truth, and commands should not need to know where JSON lives. Each surface delegates bookmark operations to services, then reacts to the resulting state change.

For extension authors, the reusable ideas are straightforward:

  1. Keep taggers read-only and inexpensive.
  2. Use tracking points for live buffers instead of treating line numbers as stable positions.
  3. Prefer native tool window search, VSCT commands, and host chrome over look-alike WPF controls.
  4. Define the base of relative paths as part of a shareable file format.
  5. Put cross-surface state behind a service so commands, editors, and tool windows stay synchronized.

Bookmark Studio is available on the Visual Studio Marketplace. The complete source, including the editor providers, tool window, command table, storage format, and tests, is on GitHub.

Read the whole story
alvinashcraft
25 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Paint.NET 5.2 Alpha (build 9719)

1 Share

This new alpha build introduces 8 new effects, fixes some crashes and other glitches, fixes compatibility with some old plugins, and adds some debugging options to assist with the WINE effort.

You can read more about 5.2 and what it includes by reading the release notes for the first alpha.

The new effects will be discussed more in the final release notes for 5.2, when the time comes, but here are some previews for now. Each new effect is also available for plugins to use in their Direct2D effect graphs.

Original Image

image.png

Linocut

image.png

Mosaic

image.png image.png

Pointillism

image.png

Stained Glass

image.png

Ordered Dither

image.png

Spherize
(This isn’t actually a very good image to use for showcasing this effect. I’ll have a better example for the final release notes.)

image.png

Waves

Here are several examples for this one, which has many different modes you can experiment with:

image.png image.png image.png image.png

Halftone

image.png

Change Log

Changes since 5.2 Alpha (build 9688):

  • New effect: Artistic -> Linocut
  • New effect: Artistic -> Mosaic
  • New effect: Artistic -> Pointillism
  • New effect: Artistic -> Stained Glass
  • New effect: Color -> Ordered Dither
  • New effect: Distort -> Spherize
  • New effect: Distort -> Waves
  • New effect: Stylize -> Halftone
  • Fixed a crash when trying to use horizontal scrolling in the Unsaved Changes dialog
  • Fixed image tabs rendering with a black background
  • Fixed compatibility with the legacy plugins “ImPDF Open/Save”, “Chop Up And Save,” and “TR’s Paste Frame”
  • Fixed the UI setting “Auto-select nearest visible layer after hiding a layer” (it was doing nothing)
  • Optimized performance of render target buffer clearing when Advanced Color is not enabled
  • Fixed some RNG in the Frosted Glass effect
  • Added extension methods on IFileTypesServiceFactory for plugin developers: LoadFileAsDocument, TryLoadFileAsDocument, LoadFileAsBitmap, and TryLoadFileAsBitmap.
  • Fixed the input assignments of the Direct2D DisplacementMapEffect wrapper (it was assigning “input” to “displacement”)
  • Removed the /disableCompositionSwapChain command-line parameter
  • Added the following command-line parameters to assist with the WINE effort: /disableUIAnimation, /disableComposition, /disableWin11DisplayInformation, and /wine (which is equivalent to the previous 3 together)
  • Added ControlInfoPropertyNames.AutoPopulateFileTypes, which when set to true on a FileChooser-typed property will cause it to be auto-populated with all FileTypes (built-ins and plugins) (thanks @toe_head2001!)

Download and Install

This build is available via the built-in updater as long as you have opted-in to pre-release updates. From within Settings -> Updates, enable “Also check for pre-release (beta) versions of paint.net” and then click on the Check Now button. You can also use the links below to download an offline installer or portable ZIP.

image.png

You can also ⬇ download the installer here (for any supported CPU and OS), which is also where you can find downloads for offline installers, portable ZIPs, and deployable MSIs.



Read the whole story
alvinashcraft
26 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Your tokenmaxxing is not valuemaxxing​​​​‌‍​‍​‍‌‍‌​‍‌‍‍‌‌‍‌‌‍‍‌‌‍‍​‍​‍​‍‍​‍​‍‌​‌‍​‌‌‍‍‌‍‍‌‌‌​‌‍‌​‍‍‌‍‍‌‌‍​‍​‍​‍​​‍​‍‌‍‍​‌​‍‌‍‌‌‌‍‌‍​‍​‍​‍‍​‍​‍‌‍‍​‌‌​‌‌​‌​​‌​​‍‍​‍​‍‌‍​‌‍‌‌​​‍‍‌​‌‌​‌‍​‌‌‍​‌‍‍‌‍‌‌‍‌‍‌‌‌​‍‌‍‌‍‌‍​‌‍‌‌​‍‍‌‍​‌‍​‍‌‍‍‌‌‍‍‌‌​‌‍‌‌‌‍‍‌‌​​‍‌‍‌‌‌‍‌​‌‍‍‌‌‌​​‍‌‍‌‌‍‌‍‌​‌‍‌‌​‌‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‌​​‌​‍‌‌‍‌​‌‍‌‍​​​​‌​​​‌​‍​​‍‌​​​​‌‌‌‍‌‌​‍​​‍‌​‌​‌‍‌‍​​‍​‍​​‍‌​‍‌​​‌‌‍‌‌​​‌​‍‌‌‍​​‌​​‌​​‍​‌‍​​​‌​​‍​​‌​​​​‌‌​‌​​‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌‍​‍‌‍​‌‍‌‍‌‌‌​​‌‍‌​‌‌​​‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‌​‌‍‍‌‌‌​‌‍​‌‍‌‌​‌‍​‍‌‍​‌‌​‌‍‌‌‌‌‌‌‌​‍‌‍​​‌‌‍‍​‌‌​‌‌​‌​​‌​​‍‌‌​​‌​​‌​‍‌‌​​‍‌​‌‍​‍‌‌​​‍‌​‌‍‌‍​‌‍‌‌​​‍‍‌​‌‌​‌‍​‌‌‍​‌‍‍‌‍‌‌‍‌‍‌‌‌​‍‌‍‌‍‌‍​‌‍‌‌​‍‍‌‍​‌‍​‍‌‍‌‍‍‌‌‍‌​​‌​‍‌‌‍‌​‌‍‌‍​​​​‌​​​‌​‍​​‍‌​​​​‌‌‌‍‌‌​‍​​‍‌​‌​‌‍‌‍​​‍​‍​​‍‌​‍‌​​‌‌‍‌‌​​‌​‍‌‌‍​​‌​​‌​​‍​‌‍​​​‌​​‍​​‌​​​​‌‌​‌​​‍‌‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌‍​‍‌‍​‌‍‌‍‌

1 Share
Ryan is joined by Coder’s Rob Whiteley to chat about why tokenmaxxing isn’t proving real value and just triggering Goodhart’s Law, how release speed and PR merges can help you measure agentic outcomes with or without a human-in-the-loop, and what the democratization of skills means for junior developers and the talent pipeline. ​​​​‌‍​‍​‍‌‍‌​‍‌‍‍‌‌‍‌‌‍‍‌‌‍‍​‍​‍​‍‍​‍​‍‌​‌‍​‌‌‍‍‌‍‍‌‌‌​‌‍‌​‍‍‌‍‍‌‌‍​‍​‍​‍​​‍​‍‌‍‍​‌​‍‌‍‌‌‌‍‌‍​‍​‍​‍‍​‍​‍‌‍‍​‌‌​‌‌​‌​​‌​​‍‍​‍​‍‌‍​‌‍‌‌​​‍‍‌​‌‌​‌‍​‌‌‍​‌‍‍‌‍‌‌‍‌‍‌‌‌​‍‌‍‌‍‌‍​‌‍‌‌​‍‍‌‍​‌‍​‍‌‍‍‌‌‍‍‌‌​‌‍‌‌‌‍‍‌‌​​‍‌‍‌‌‌‍‌​‌‍‍‌‌‌​​‍‌‍‌‌‍‌‍‌​‌‍‌‌​‌‌​​‌​‍‌‍‌‌‌​‌‍‌‌‌‍‍‌‌​‌‍​‌‌‌​‌‍‍‌‌‍‌‍‍​‍‌‍‍‌‌‍‌​​‌​‍‌‌‍‌​‌‍‌‍​​​​‌​​​‌​‍​​‍‌​​​​‌‌‌‍‌‌​‍​​‍‌​‌​‌‍‌‍​​‍​‍​​‍‌​‍‌​​‌‌‍‌‌​​‌​‍‌‌‍​​‌​​‌​​‍​‌‍​​​‌​​‍​​‌​​​​‌‌​‌​​‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌‍​‍‌‍​‌‍‌‍‌‌‌​​‌‍‌​‌‌​​‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍‌‌‌‍​‌‍​‌‍‌‌‌​‍‌​​‌‌​​‌‍​‍‌‍​‌‌​‌‍‌‌‌‌‌‌‌​‍‌‍​​‌‌‍‍​‌‌​‌‌​‌​​‌​​‍‌‌​​‌​​‌​‍‌‌​​‍‌​‌‍​‍‌‌​​‍‌​‌‍‌‍​‌‍‌‌​​‍‍‌​‌‌​‌‍​‌‌‍​‌‍‍‌‍‌‌‍‌‍‌‌‌​‍‌‍‌‍‌‍​‌‍‌‌​‍‍‌‍​‌‍​‍‌‍‌‍‍‌‌‍‌​​‌​‍‌‌‍‌​‌‍‌‍​​​​‌​​​‌​‍​​‍‌​​​​‌‌‌‍‌‌​‍​​‍‌​‌​‌‍‌‍​​‍​‍​​‍‌​‍‌​​‌‌‍‌‌​​‌​‍‌‌‍​​‌​​‌​​‍​‌‍​​​‌​​‍​​‌​​​​‌‌​‌​​‍‌‍‌‌​‌‍‌‌​​‌‍‌‌​‌‌‍​‍‌‍​‌‍‌‍‌‌‌​​‌‍‌​‌‌​​‍‌‍‌​​‌‍​‌‌‌​‌‍‍​​‌‌‍‌‌‌‍​‌‍​‌‍‌‌‌​‍‌​​‌‌​​‍‌‍‌​​‌‍‌‌‌​‍‌​‌​​‌‍‌‌‌‍​‌‌​‌‍‍‌‌‌‍‌‍‌‌​‌‌​​‌‌‌‌‍​‍‌‍​‌‍‍‌‌​‌‍‍​‌‍‌‌‌‍‌​​‍​‍‌‌
Read the whole story
alvinashcraft
26 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

The Design Systems Graveyard - Kristoffer Nordström - NDC Copenhagen 2026

1 Share
From: NDC
Duration: 11:34
Views: 7

This talk was recorded at NDC Copenhagen in Copenhagen, Denmark. #ndccopenhagen #ndcconferences #developer #softwaredeveloper

Attend the next NDC conference near you:
https://ndcconferences.com
https://ndccopenhagen.com/

Subscribe to our YouTube channel and learn every day:
/ @NDC

Follow our Social Media!

https://www.facebook.com/ndcconferences
https://twitter.com/NDC_Conferences
https://www.instagram.com/ndc_conferences/

It is said you can't succeed in building a Design System without having done so before. But building a Design System is easy - maintaining and making it grow is much more difficult. During the years many Design Systems have failed and ended up on the Design Systems Graveyard. I will share some trips and tricks that will make it less likely that you fail in your attempt of succeeding with one. Join me on a story about planning, categorising and sorting and about handling human beings and collaboration. This also have something in common with The Gentle Art of Swedish Death Cleaning. If you fail maybe your Design System will end up on The Design Systems Graveyard.

Read the whole story
alvinashcraft
26 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

How Anthropic uses Claude Code: Agentic Software Engineering at Scale - Daisy Hollman

1 Share
From: NDC
Duration: 1:00:25
Views: 124

This talk was recorded at NDC Copenhagen in Copenhagen, Denmark. #ndccopenhagen #ndcconferences #developer #softwaredeveloper

Attend the next NDC conference near you:
https://ndcconferences.com
https://ndccopenhagen.com/

Subscribe to our YouTube channel and learn every day:
/ @NDC

Follow our Social Media!

https://www.facebook.com/ndcconferences
https://twitter.com/NDC_Conferences
https://www.instagram.com/ndc_conferences/

#ai #claudecode

Over the past year, the capabilities of coding agents have expanded massively, and software engineers are demanding more of them than ever. But context window sizes have pretty much stagnated—one million tokens was roughly the state of the art a year ago, and it remains so today. As we move towards a world where agents regularly tackle monorepo-scale tasks, the demand to squeeze more and more information into those fixed limits of model context has grown into a real, full-time engineering task.

In this talk, I'll walk through the design of Claude Code plugins and their constituent context engineering primitives. For each one, we'll ask the crucial question for software engineering in 2026: does it scale? We'll talk about how we're answering this question for our own code at Anthropic—both in terms of what's working and what isn't.

Read the whole story
alvinashcraft
26 minutes ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories