Skip to content

Instantly share code, notes, and snippets.

View jamonholmgren's full-sized avatar

Jamon Holmgren jamonholmgren

View GitHub Profile

Reactotron Tooling Goals

Not necessarily in strict order of preference; need to think about what's most important here

  1. Streamline the rollup setup, which is old and semi-inconsistent across packages
  2. Potentially move away from electron-builder (and webpack) and to something like electron-forge, perhaps vite as well https://www.electronforge.io/templates/vite-+-typescript
  3. Simplify the monorepo setup; currently using Nx, is there something better? Turborepo? We are using turbo on react-native-mlkit
  4. Potentially move away from semantic-release and toward changeset instead? We are using changesets for react-native-mlkit as well
  5. Simplifying all other configs, like tsconfig, eslint, prettier. There is a lot of copy and paste.
  6. Add a config (or .config?) directory and then put simpler common configuration packages in it so that most of the workspaces just have extends: "reactotron-tsconfig" or
@jamonholmgren
jamonholmgren / minecraft-child-account.md
Last active March 3, 2024 21:02
Minecraft, fixing the "Multiplayer is disabled. Please check your Microsoft account settings." frustrating issue

I have a Microsoft Family account and have my daughter as one of the family members.

Whenever she tries to play Minecraft (Java Edition) with us, it pops up something like the following:

"Multiplayer is disabled. Please check your Microsoft account settings."

I tried all kinds of things found online. They kept saying to go to the Xbox Privacy and online safety screen, but I couldn't find the "You can play with people outside of Xbox Live" and "You can join multiplayer games" settings. Well, that's because I needed to click on the "Xbox Series ... and Windows 10 devices Online Safety" tab.

Here's a direct link. You will need to replace the "GAMERTAGHERE" with your child's gamer tag. You need to be logged in under your (parental) account, not the child's.

@jamonholmgren
jamonholmgren / ChainReactPrivacyPolicy.md
Created May 1, 2023 20:09
Privacy Policy for the Chain React App by Infinite Red, Inc.

Privacy Policy for the Chain React App by Infinite Red, Inc.

Introduction

Infinite Red, Inc. ("we," "us," or "our") values your privacy, and this policy outlines the privacy practices for the Chain React App ("App"). By using the App, you agree to the terms of this Privacy Policy.

No Collection of Personally Identifying Information

We do not collect any personally identifying information from our users. The App is designed to function without requiring any personal data.

Q. Under what conditions is MobX-state-tree optimized to memoize/prevent accidental re-renders that Immutable libraries that create copies like Redux/RTK are more prone to?

MST (and really it’s MobX under the hood doing this) doesn’t even really diff at all; instead, it observes changes to objects via JS proxies. It also tracks what properties are accessed on observed objects via JS proxies.

So, let’s say you have an object like this, that is an observed MobX object (we’ll ignore MST, since it’s the same for both):

const user = makeAutoObservable({
  name: "Jamon",
  age: 41,

This was a late-night forey into trying to improve on MobX-State-Tree's ergonomics and implementation.

MST is pretty good.

type MSTActions = {
    [key: string]: Function
}

type MSTViews = {

Advice to freelance React Native developers from Jamon

On-stream, February 28, 2022 (https://youtube.infinite.red)

• Network

  • Get to know as many other React Native developers as you can
  • Other developers are a great source of recommendations to potential clients • Let them know that you are available for work, and how much time you have, and what time period
  • But don't be annoying
  • "Hey Bob, hope things are good! Just letting you know I have availability starting March for 32 hours a week if you hear of anyone looking for a React Native freelancer. Really appreciate any referrals."
import { Maze } from "./maze";
const state = {
x: 1,
y: 1,
destX: 1,
destY: 1,
path: []
};
import { Maze } from "./maze";
const state = {
x: 1,
y: 1,
destX: 1,
destY: 1,
path: [[1, 2], [2, 2], [3, 2], [3, 1], [4, 1], [5, 1], [5, 2]]
};
import { Maze } from "./maze";
const state = {
x: 1,
y: 1,
destX: 1,
destY: 1,
path: [[1, 2], [2, 2], [3, 2], [3, 1], [4, 1], [5, 1], [5, 2]]
};
// did we find the destination?
if (lowestCostNode.x === state.destX && lowestCostNode.y === state.destY) {
// retrace our steps back to the beginning!
function retrace(node, path) {
// did we find the origin? if so, we're done!
if (node.previous === undefined) return [node, ...path]
// not yet ... let's keep retracing our steps
return retrace(node.previous, [ node, ...path ])
}
// kick off the retracing!