30Impact30: Leading 30 Pitches To Revolutionize Access To Adaptive Sports

30Impact30: Revolutionizing Adaptive Recreation

Today, January 24th, is my 30th birthday, and I'm launching an ambitious philanthropic project. My goal is to have thirty times the impact of any other year of my life while I'm thirty. As a result, I am starting a project I am calling 30impact30. I am planning to raise $30,000 by leading 30 pitches of 5.7 or greater between January 24, 2025, and January 24, 2026, with sponsors pledging money for each successful pitch. In addition, I am planning to publish 30 you tube videos to teach blind people with tips and tricks for enjoying the outdoors, and to act as a video hub for blind people or parents of blind children to learn about what is possible with an active lifestyle.

The Challenge: Breaking Barriers of Isolation

An estimated 1.1 million blind Americans can't drive, facing significant mobility challenges that often lead to isolation. In addition, many other people with disabilities cannot drive, or are unable to drive some amount of the time. These people are often left out of recreational activities, simply because logistically, getting to events is too challenging. Many individuals with disabilities believe they can't participate in physical activities, leaving them disconnected from networking and community based opportunities for personal growth.

The Vision: Community, Transportation, and Empowerment

Adaptive sports organizations do more than teach skills—they provide mentorship, role models, and crucial life lessons in motivation and goal-setting. However, for many people with transportation barriers, adaptive sports are currently a dream they cannot realize. My project aims to kickstart a revolution in adaptive recreation by focusing on building supportive communities and solving transportation barriers.

Adaptive Rec Connect: Empowering athletic opportunity for all, any time, any day

As part of this initiative, I'm co-developing a web platform to address challenges in finding community members for guides for informal adaptive sports, such as regular training runs, hikes, etc. People who do not need guides can go on a run, hike, or walk whenever they wish, but for many people with disabilities, finding a guide can be half the battle. Outside of official weekly training runs, hikes, etc. such as those Achilles international offer, many people with disabilities want less formal one-on-one or small group opportunities to grow organically. MANY PLATFORMS SUCH AS FACEBOOK ARE CLUTTERED and lack an adaptive sports focus, MAKING THEM LESS IDEAL FOR ORGANIZING ADAPTIVE EVENTS. This is why, I am planning to start a platform called Adaptive Rec Connec. Adaptive Rec Connect will:

  • Connect adaptive athletes with experienced guides for recreation on their own time.
  • Potentially offer accessible Managed guide matching for local adaptive clubs.
  • Potentially develop certification processes for guide competency, so that people can be confident when a guide offers to participate with them.
  • Foster a virtual adaptive community that allows people to stay connected outside official adaptive events.
  • Act as a virtual board for organizing unofficial events, like adaptive dance parties, or adaptive hiking days, really whatever community members wish to organize.

Making an Impact, One Connection at a Time

In addition to Adaptive Rec Connect, I will raise funds for 2-3 carefully selected adaptive organizations who excel at ensuring individuals who are currently unable to participate in life-changing experiences get into the outdoors. These organizations go beyond traditional programming by providing critical transportation support and community connections. Whereas many adaptive sports organizations refuse to help people carpool to events, and sometimes do not have the resources to do so, the organizations I will be raising money for are at the forefront of adaptive sports by ensuring that the people who need the numerous life lessons provided through adaptive sports receive transportation to these events, so they can begin their journey of becoming active both in sport, and other aspects of life.

I aim to support groups that:

  • Create carpooling and transportation networks to bring isolated people who lack the ability to drive into the adaptive community.
  • Offer programming that encourages community-building
  • Encourage adaptive athletes to mentor newcomers, rather than simply offering transactional programming.

Through strategic funding, I can help individuals:

  • Build meaningful friendships with peers who understand their experiences
  • Develop personal confidence by accessing activities previously thought impossible
  • Improve overall quality of life through consistent community engagement
  • Challenge limiting beliefs about their capabilities and potential
  • Break cycles of isolation by providing reliable transportation to regularly scheduled transformative events

These organizations don't just offer a ride to some location, or a chance to try out climbing, skiing, kayaking, etc. —they offer a pathway to personal growth, skill development, and community connection. By addressing the fundamental barrier of transportation, I can help people with disabilities, who otherwise may remain isolated, discover new opportunities, build support networks, and realize their full potential.

Join the Movement

This isn't just about sports—it's about breaking down barriers, creating opportunities, and proving that with the right support, everyone can pursue their passions.

Please subscribe for updates on the 30Impact30 project and how you can be part of this transformative journey. I will be updating this blog as more details about the project are solidified, including when and where you can watch me climb. To follow this project, subscribe to the project mailing list. If you have trouble subscribing, reach out to me, this google group is still not cooperating with my domains email setup. Reach out to derek@derekriemer.com if you have any suggestions, comments, or wish to sponsor the project. Thanks, and don't forget to send it!

Songs of Serenity

Melodies, drift like snow in the wind,
sooth the mind; bring joy to thee.
In song, we rest, peacefully listening;
Drifting like wind across the landscapes of life.
Rest, weary soul, let music relax your troubles,
Listen; Feel; be the music!

accessibility in the web ecosystem

Introduction

Websites exist thanks to multiple layers of technologies where every layer is dependent on all layers below. This stack of technologies make it possible to send a website from a remote server to a users computer, and display the information in that webpage. Each layer of this stack has a highly specialized role, and attempts to misuse a layer of the stack will result in a poor user experience, heightened security risks, and poor performance. In order to show a person with disabilities a webpage and make the experience as useful as possible, it is necessary to use each layer of the technology stack for the purpose it was built.

Read accessibility in the web ecosystem… (7 paragraphs remaining).

running and debugging rust code from the windows operating system

For a hobby project, I will likely need to build a COM interface, for a screen reader integration, and doing so in python would be annoying to say the least. I therefore decided I might take a stab at implementingn it in rust for personal development, and rust seems more interesting than c++. I recently ran into an annoying issue trying to configure vscode debugging and running on windows. Here is how to get up and running and avoid a major pitfall.

Read running and debugging rust code from the windows operating system… (5 paragraphs remaining).

Challenges of ski guiding

I have been skiing since I was 3, so for 26 or so years. I have skied trees, couloirs, bowls, moguls, and pretty much anything you can find in-bounds. This blog post came about after I started outlining how I may teach aspiring ski guides to guide blind people. I realized there isn't much free information available not related to a purpose built adaptive program on how to guide a blind skier. This manual consists of some techniques my guide (my dad) and I have come up with, and in a later blog post, I will do deep dives into some of the unique challenges of skiing certain types of terrain blind.

Read Challenges of ski guiding… (17 paragraphs remaining).

Focus Ancestry

Background

Screen readers announce focus changes using a fairly simple algorithm. When focus changes, only announce the things that are necessary to announce, given the change between where the current user is now, and where the user was before the change occurred. If focus moved from a item within a combo box, and another item within that combo box, the combo box didn't gain or lose focus, but the option in focus changed. However, if the user gets moved from one labeled region of the page, to another labeled region of the page, announcing the new region is necessary. Further focus movements within that region are not necessary to announce. This article explains how a screen reader like NVDA represents the objects on screen, and decides what to announce. It explains a useful heuristic that developers can use to understand why and how to understand focus changes and designing useful focus interactions.

Object hierarchy

Web development is hierarchical. A tree of objects are created, with the objects generally representing rectangles on screen, and or logical containers that make working with those rectangles easier. However, most of these objects are not interactive, and thus it does not make sense to convey each of these objects at all times when they are focused.

Container nodes

Some objects are called container objects. All focusable containers contain at least 1 interactive object. These are things like a region of the page, a toolbar, the tree of a tree view, a combo box (<select>), or a list. Containers can contain other containers, and leaf nodes as well. Some containers, like a generic div, are not meaningful to the end-user, and thus are simply ignored by the parts of screen readers that present the website to a user. Others are very important, and must be conveyed to the user when they are entered or exited.

leaf nodes

In web development, I use the term leaf node generally to refer to html elements with no children. These are generally text nodes, or some other nodes that don't have children. However, in this blog, I am using the term leaf nodes to express a specific subset of leaf nodes we use in the field of web development: An interactive and focusable element with no children interactive elements. This means that a button that has an icon child, and a label child, nevertheless is a leaf node for the purposes of focus calculations. Its children cannot gain focus, thus for focus announcement calculation, it is the leaf-most node possible.

Try to avoid focusing most non-clickable containers

Container elements are only supposed to be focusable if they are managing focus within their contained elements. These are specific subsets of containers, like combo boxes, list boxes, or some trees. Regions, logical groupings, etc. shouldn't keep focus. Some developers may choose to focus them to then have the container forward focus to a child, but storing focus on one of these non-interactive containers generally leads to a poor user experience, and is not necessary for screen readers, as outlined below. This, at the minimum, makes it necessary for the user to tab through more elements on the page than is necessary.

Concepts for algorithmically determining when to speak focus changes

When focus shifts from one item on the page to another, a screen reader can algorithmically determine what to present to the user to express what has changed. In order to explain this algorithm, I need to present a few concepts.

Focus ancestry

Like all tree nodes, The focus, being an element on the page, has a path to get from itself to the parent

element of the page. This path is simply created by walking the parents of the focus, all the way to the body (technically screen readers go to the root of the OS in some cases). This ancestry is maintained along with the focus in some cases, to enhance performance.

Greatest common ancestor

When focus shifts from one element to another, we can get a sense for how much changed by taking the focus ancestry of both the previous focus and the current focus. Walking the ancestors of both the current and previous element from focus upward, a common ancestor will be found where both the previous focus and current focus share all parents to the body. In the below image, I present a toolbar, and a checkbox and button. The button previously had focus, but focus has moved to the checkbox, and I present the ancestry chains with dotted paths. A page with a main landmark, inside the main landmark there is a toolbar with multiple items. The button and checkbox inside this toolbar have dotted paths highlighted. The dotted paths join at the toolbar and the main -> toolbar linkage is highlighted.

here is a more complicated example. The previous focus is on the button again. a dotted line is seen going from the button to the toolbar, then from the toolbar up to main. The current focus is on the first search result, which is a link. The link has a dotted line going up to a list, then up to a 'results' region, and finally going all the way to the top level, the main, where it joins a common ancestor

The focus instead moves from the button in the toolbar to the first search result. Since the focus moves into a labeled result region and out of the toolbar, the screen reader has to explain to the user that they are no longer in the toolbar, and instead they are inside the list. This is usually done by saying something like "out of toolbar, results region, list with 2 items, birthday cards link." To speed things up, only sometimes is the fact that focus left an item actually announced. finally, this example highlights a situation where there are several items that are above the lowest common ancestor in the focus ancestry.

Graphviz dot representation available for screen reader users.

Both the currant and previous focus in this case are within the filters region. Thus as focus moves from one filter to the other, it is not necessary for the screen reader to announce the filters region again. The focus remained within the region and thus it is simply not announced.

Recap

When parents gain focus or lose focus, the screen reader may choose to announce them, if this fact is important. For example, not being in a combo box is very important to indicate, whereas leaving a heading that had a link, not so much. The rules that govern this behavior are ridiculously complicated, and you as a developer don't need to be bothered figuring them out. Different screen readers have solved this with different heuristics, as screen readers don't all present the same exact UX, and you should not rely on any given implementation for deciding how to set things up. However, simply understanding that things generally only announce when they have changed will get you 95% of the way to understanding how focus announcement works. The screen readers will announce focus changes reliably because figuring out which things changed is dead simple to calculate algorithmically.

In short, items are only conveyed by the screen reader when focus moves into them or out of them, which can be determined by comparing the parent items of the previous focus with the parents of the current focus. Items that are in the current focus ancestry, and not the previous focus ancestry are now focused parents, and items that are in the previous ancestry chain that are not in the current one no longer are focused parents. Since containers contain focus, they may get announced, and as containers lose focus, they may have that fact announced. It is not necessary to explicitly focus the containers to make sure the user sees them, because focus announcement heuristics algorithmically will ensure the user knows of important changes to focused containers. Thus, when it really is necessary, newly focused parents are automatically conveyed by screen readers, and no longer focused parents are also automatically conveyed by screen readers. Developers simply don't have to do anything special to make this work. It really is that simple. Hopefully this makes it clearer to understand how screen reader users know when they enter some region of the page, or a toolbar, etc.

goodbye twitter

The following thread marks the end of my time on twitter. Multiple issues, such as data failing to update, data being cached in some instances but not others and thus causing weird behavior, etc made me decide I will trust this app no longer. It could lead to life threatening issues. These are the final meaningful Tweets for @derekriemer from Thursday, February 02 2023, 19:26 MST explaining my reasoning.

bye y'all. I'll likely delete this app soon. The idiots in charge don't leave me feeling confident that it's going to remain a useful place to receive emergency info like it once did, and the community that was here is practically dead. I'll likely go onto masto at some point.

As it stands, I regularly see tweets on mobile where the tweet contents change when I click the tweet in my timeline to view it. Thus, the people who remain are incapable of keeping caches from being poisoned. I can't trust the data I'm seeing to be current any longer.

There are other ways to receive necessary emergency information I need. Although, having a masto instance for emergency services, and community updates for things like wildfires would be amazing. That's one thing Twitter did well, but can't be trusted with if caches are poisoned.

Now, if @NWSBoulder and @NWS could get on the mastodon bandwaggon life would get better. Guess where I found about the Marshall fire, before anything really? It was here. It won't be any longer when I can't even trust that the data I see is accurate.

Blind twitter, and tech twitter have either mostly died, or devolved into something useless, and will completely die in the upcoming days as apis blink out of existance. Bots I followed both for productive and interesting means will die once the api changes are made.

[readers note: Twitter has announced they are about to make their api pay for use, and it's clear that most services that once paid for it will not pay, because the cost won't necessitate the benefit. Some of the people who were using these apis were delivering emergency info, etc. This info will stop working at some ndetermined date.]

You can find me for professional means on linked in, and you can find me on derekriemer.com to get in touch or follow my blog. I'll mastodon when I get around to it, and maybe I'll use facebook for some emergency info, but likely will use radios and other things.

If you remain, you need to be very aware that things aren't what they seem. This site is huge. Notifications can fail to be received from sources where you once received them, and data is often being cached, and not updated, or updated in spotty ways.

I've seen situations here where I clicked a tweet and got shown a completely different tweet. I've seen tweets fail to load, and I've seen my own tweet contents cached where clicking it revealed someone else's tweet. This cache poisoning is extremely dangerous. Cache poisoning in the software industry can regularly be cause for p0 the world's on fire level bugs. It means you might one day retweet a tweet, only to retweet natzi propaganda or similar. Cache poisoning means you get an alert about a wild fire, and the data you see is 3 hours old, or contains data that has been deleted already. It means you cannot trust absolutely anything here, at least on mobile.

[readers note: you also might be seeing the data of one user attributed to the wrong user entirely.]

When Elon took over he claimed to be shutting down Thousands of unnecessary microservices. I guarantee that some of these were doing things like updating caches, detecting user intent to optimistically load data, scrubbing blocked tweets, syncing servers, etc.

These sites are huge, and it's clear that what I'm seeing is a crumbling mess caused by a cooperating network of computers that's now starting to fail to communicate. Goodbye. You won't see many more tweets here.

I've been immersed in the world of storage systems for the last 5 years or so. When I see data being mislabeled as other data, that makes me recoil in disgust.

Dissecting an Interesting Failure and complete multiday outage of derekriemer.com, a postmortem investigation

What happened?

On January 3rd, 2023, I made a routine change to derekriemer.com, changing some draft changes to a new article I had written. The changes were then attempted to deploy to staging.derekriemer.com, but unknown to me, several days earlier I accidentally destroyed the entire site with a big oopsie. A combination of code as config, shell variable expansion acting in strange ways, and python F-strings ended up being the cause of the outage. The outage would have been isolated to my staging environment, but a push process that does not properly isolate the staging environment of derekriemer.com from the production environment caused the blast radius to include the entire site, including my production domain, instead of just my staging subdomain. The outage was not detected for days because I left a migration intending to provide separate draft deployment configs for staging and production in an borked state, not realizing what I had done. The fact that derekriemer.com is not particularly important meant I had left myself with no monitoring of the sites actual status, and nobody emailed me wondering where my site went, so in effect, I let my site cease to exist for over a week (I don't have records of exactly the date of the failure, because I'm lazy with my VCS for derekriemer.com, because its simply not that important).

Read Dissecting an Interesting Failure and complete multiday outage of derekriemer.com, a postmortem investigation… (11 paragraphs remaining).

Some (more) thoughts on smart canes

Why more?

In early 2021, I wrote a blog post about smart canes, why they usually are hipe, and why canes have design elements that make them so versatile. This blog post got a couple orders of magnitude more traffic than I expected, and based on the feedback I have received, it was educational for many people. It has been posted on many peoples blogs, and even Hacker News. I want to make sure the positive reception of my article is used to guide the industry in an appropriate direction, and generate new useful technologies, instead of being synical and bashing anyone who may have the thought to attach something to a cane.

Read Some (more) thoughts on smart canes… (6 paragraphs remaining).