lade...

Sgryphon.gamertheory.net

Sgryphon.gamertheory.net

an avatar

Software / Wetware – Random thoughts on software engineering, tabletop gaming, IoT, politics, blockchain, and other topics.

an icon 🌐 Visit Sgryphon.gamertheory.net 🌐 Sgryphon.gamertheory.net besuchen

✍️Write rieview ✍️Rezension schreiben 🏷️Get Badge! 🏷️Abzeichen holen! ⚙️Edit entry ⚙️Eintrag bearbeiten 📰News 📰Neuigkeiten

Webfan Website Badge

Tags:

Rieviews

Bewertungen

not yet rated noch nicht bewertet 0%

Be the first one
and write a rieview
about sgryphon.gamertheory.net.
Sein Sie der erste
und schreiben Sie eine Rezension
über sgryphon.gamertheory.net.

Sgryphon.gamertheory.net News

D&D 2024 – New spellcasting rules(5 min read)

https://sgryphon.gamertheory.net...

The rules for how you can cast multiple spells in a turn have slightly changed in the new 2024 rules. In some areas they are more permissive, and in others they are less. The main rule is: “On a turn, you can expend only one spell slot to cast a spell.” The other rule, relevant … Continue reading D&D 2024 – New spellcasting rules(5 min read)

29.9.2024 02:30D&D 2024 – New spellcasting rules(5 min read)
https://sgryphon.gamertheory.net...

Mainline branching strategy using GitVersion(5 min read)

https://sgryphon.gamertheory.net...

Many versioning and branching strategies are available. I prefer a simple approach: mainline development using GitVersion for automatic Semantic Versioning. Branching strategy Different development scenarios require different branching and versioning strategies. For instance: Packaged apps with multiple concurrent versions. In-house web applications with distinct integration, test, and production environments. Open-source libraries with community development contributions. … Continue reading Mainline branching strategy using GitVersion(5 min read)

6.7.2024 02:02Mainline branching strategy using GitVersion(5 min read)
https://sgryphon.gamertheory.net...

Setting up iZone climate control with Home Assistant(11 min read)

https://sgryphon.gamertheory.net...

The iZone Climate Control system is an effective way to manage ducted air conditioning in your home allowing multiple zones with separate target temperatures and controlling the central unit and airflow to each area. Through the bridge component you can integrate it locally with Home Assistant, as well as other smart home platforms (Google etc, … Continue reading Setting up iZone climate control with Home Assistant(11 min read)

29.6.2024 07:04Setting up iZone climate control with Home Assistant(11 min read)
https://sgryphon.gamertheory.net...

Hands on with Matter and Thread(11 min read)

https://sgryphon.gamertheory.net...

Matter and Thread offer many benefits, with standardised interoperability, local-only control, built-in security, multi-admin, and IPv6 support — helping drive IPv6 adoption and development skills. Several devices have now launched, and I have tried out a few of the available devices with Google Home and Home Assistant, however these are early days, and feature implementation … Continue reading Hands on with Matter and Thread(11 min read)

26.1.2024 13:19Hands on with Matter and Thread(11 min read)
https://sgryphon.gamertheory.net...

Deploying a secure LwM2M IPv6 test server on AWS(15 min read)

https://sgryphon.gamertheory.net...

Lightweight Machine-to-Machine (LwM2M) is a compact protocol design for Internet-of-Things (IoT) scenarios, that provides end-to-end services including efficient transport, encryption, device lifecycle, and messaging semantics. Devices deployed to the field will connect to full LwM2M endpoints, however you may also want to deploy your own LwM2M demo server for testing purposes. This article shows you … Continue reading Deploying a secure LwM2M IPv6 test server on AWS(15 min read)

14.11.2023 23:59Deploying a secure LwM2M IPv6 test server on AWS(15 min read)
https://sgryphon.gamertheory.net...

AI and copyright: Addressing an incongruity(4 min read)

https://sgryphon.gamertheory.net...

In our rapidly evolving digital age, traditional concepts such as copyright are being rigorously tested. The advent of Artificial Intelligence (AI), in particular, has initiated a crucial debate on the validity and efficacy of existing copyright laws. This debate becomes particularly intense when we consider the striking difference in the treatment of photographs and AI-generated … Continue reading AI and copyright: Addressing an incongruity(4 min read)

20.5.2023 02:07AI and copyright: Addressing an incongruity(4 min read)
https://sgryphon.gamertheory.net...

AI is taking our jobs: Yes, that is the objective(6 min read)

https://sgryphon.gamertheory.net...

The rise of AI and automation is disrupting industries and transforming the way we work. But instead of mourning the loss of jobs, we should embrace the opportunity to reshape our lives and focus on what we genuinely value. Embracing automation and increased productivity AI and automation are fundamentally designed to increase productivity, allowing us … Continue reading AI is taking our jobs: Yes, that is the objective(6 min read)

14.4.2023 01:03AI is taking our jobs: Yes, that is the objective(6 min read)
https://sgryphon.gamertheory.net...

Device Authentication with Nordic Thingy:91 and Azure IoT Hub(22 min read)

https://sgryphon.gamertheory.net...

Security is an important topic for the Internet of Things, and there are several considerations to secure device identity. A good practice is to use secure protocols (such as TLS or DTLS) for transmitting any sensitive information over the network and to ensure that passwords and other sensitive information are securely stored. This article will … Continue reading Device Authentication with Nordic Thingy:91 and Azure IoT Hub(22 min read)

27.3.2023 07:23Device Authentication with Nordic Thingy:91 and Azure IoT Hub(22 min read)
https://sgryphon.gamertheory.net...

Comment on 3d6 is not less swingy than d20 by Sly Gryphon

https://sgryphon.gamertheory.net...

In reply to <a href="https://sgryphon.gamertheory.net/2020/10/3d6-is-not-less-swingy-than-d20/#comment-911">Dominique</a>. No problem. Thanks for commenting. 1) Yes, a success probability of 75% (e.g. DC16 in a d20 based system, after all adjustments have been added), means that for a large number of attempts 3/4 of them will succeed and 1/4 will fail. While not directly relevant for a single test (at least no more than claiming something is "swingy"), over a course of a game that same DC16 test will come up a lot, e.g. hitting AC 16, a DC 16 test to jump, etc. It is relevant mostly to TTRPG game design, such that it sets the tone of the system -- if an averge character suceeds a lot it has more of a "heroes win" tone, but all the time might be boring. The failure chance is how often bad things will happen / characters fail / unexpected plot twists. During a game it also informs characters whether the activity they are going to take is risky (hopefully high risk/high reward) or a safe bet. Yes, you might suceed at a high risk task (or fail at a low one), but if you want the character to be cautious you may chose the lower risk/reward activites (their wins won't be as high, but they will fail/twist less). The main point of the article was however, a counter to the common adage that a d20 system is too 'swingy' compared to a 3d6 system... which is not true is the statistical sense. There are differeneces, e.g. they may be affected differently by modifiers (a static +1 has a bigger effect in the middle range of a 3d6, but less at the ends), but 'swingy' isn't relevant. 2) They are the same; the system used to generate the binomial result make no difference. A binomial system 'stabilises' (usually measured by standard deviation / variance; or expressed as a confidence interval) at the same rate, irrespective of the underlying mechanism of generating the result. Effectively, whether you are rolling 3d6, 1d20, a pool of dice, drawing cards, or picking out of a hat, if you have a 75% chance to succeed (after all modifiers) you could replace the source of randomness with a computer generated if random() < 0.75 (where random() generates a random number between >= 0.0 and < 1.0). Then, 100 trials has 75 expected success with a standard deviation of 4.33; a 95% confidence interval for 100 trials with 75 success is 0.75 +/- 0.745 (i.e. 0.657 - 0.8245) 1000 trials has 750 expected with a standard deviation of 13.69 (10 times the size, but standard deviation only increased 3x); a 95% confidence interval for 1,000 trials with 750 successes would be 0.75 +/- 0.0258 (i.e. 0.7222 - 0.7758), much narrower. But, like the probability for a single throw, these are all in advance. It is possible to generate 100 (or 1,000) failures in a row -- just very unlikely.

27.3.2023 06:33Comment on 3d6 is not less swingy than d20 by Sly Gryphon
https://sgryphon.gamertheory.net...

Comment on 3d6 is not less swingy than d20 by Dominique

https://sgryphon.gamertheory.net...

Thank you for your article. Two questions from a math-challenged reader : 1)To say that a character has a 75% chance of succeeding in a certain action (regardless of the dice system) means that if that character attempted that action a very large number of times, we would find that he or she would statistically succeed in about 75% of the observed cases (law of large numbers), but how is this relevant to a TTRPG game ? A character only attempts the same action a very limited number of times during the game, the number of throws is very low, besides if the character's survival depends on whether or not she succeeds on the very next throw, how is it relevant to know that she has 75% cases in her favor on a very large number of attempts of this type of action ? Since probability calculations never tell me anything about the very next throw, but rather about a large set of throws (a set that is never actually considered in the course of a game and is somehow "contradictory" to the sequence narrative flow of a TTRPG ). 2) Is there no difference between 3d6 and 1d20 in the rate at which the probabilities approximate the observed statistics, again for a large number of throws? For an action with a 75% success rate, is the very large number of throws required to observe that statistically about 75% of the cases obtained were indeed favorable (modulo a margin of error to be defined around those 75%) the same with 3d6 or 1d20? Do the statistics stabilize at the same speed around the probabilistic projections? Thank you for your clarifications.

14.3.2023 16:35Comment on 3d6 is not less swingy than d20 by Dominique
https://sgryphon.gamertheory.net...

Dogs in the Vineyard – Conflict Process(2 min read)

https://sgryphon.gamertheory.net...

I've been playing a few short sessions of Dogs in the Vineyard, so put together a one page step-by-step summary of the conflict process. DitV Conflict Process (PDF, 82 kB) Note that the process does not include the detailed tables for fallout. You will need to refer to the main rules for that, or the … Continue reading Dogs in the Vineyard – Conflict Process(2 min read)

24.1.2023 23:24Dogs in the Vineyard – Conflict Process(2 min read)
https://sgryphon.gamertheory.net...

RPG Mechanics: Success at a cost(18 min read)

https://sgryphon.gamertheory.net...

Tabletop roleplaying games are generally about shared storytelling, and stories are generally pretty boring if the story ends because the protagonists don't find the clue, don't get past the locked door, or don't survive a battle. Failure needs to continue the story by leading to something else interesting, being only a partial failure, or being … Continue reading RPG Mechanics: Success at a cost(18 min read)

30.12.2022 00:02RPG Mechanics: Success at a cost(18 min read)
https://sgryphon.gamertheory.net...

Comment on Mouse Guard RPG rules summary and character sheets by Joshua Randall

https://sgryphon.gamertheory.net...

This is incredibly helpful and addresses a major problem in almost all RPGs: terrible character sheets. Thank you so much!

18.5.2022 17:46Comment on Mouse Guard RPG rules summary and character sheets by Joshua Randall
https://sgryphon.gamertheory.net...

Comment on IPv6 only hosting by Sly Gryphon

https://sgryphon.gamertheory.net...

I have previously blogged about why you should consider <a href="https://sgryphon.gamertheory.net/2021/01/02/ipv6-only-hosting/">IPv6 only hosting</a> and setting up <a href="https://sgryphon.gamertheory.net/2021/01/15/apps-on-kubernetes-ipv6-kubeapps-wordpress/">Apps on Kubernetes IPv6</a> to run my WordPress blog. Kubernetes is not really designed for a single server (but is great for scaling and enterprise system), and although it was good experience learning how to set it up on IPv6, the overhead was too much and I eventually ended up with a <a href="https://sgryphon.gamertheory.net/2021/09/21/crashed-blog-now-restored/">crashed blog</a>. I’m still running IPv6 only, but with a much simpler set up. This consists of docker, configured to run with IPv6, with docker-compose to run the different components and systems. There are 3 instances of <a href="https://github.com/WordPress/wordpress-develop">WordPress</a> for different websites, and 3 corresponding databases, as well as a <a href="https://matrix.org/">Matrix Synapse</a> server and plugins. Read on for my notes on initial setup of the server with IPv6 and connectivity testing, including addressing schemes, docker configuration, IPv6 network address translation, and the Network Discovery Protocol Proxy Daemon. The cost of IP addresses With the cost of IPv4 addresses (at March 2022) currently USD 40.00, a few colleagues at <a href="https://purple.telstra.com/">Telstra Purple</a>, where I work in IoT consulting, have asked me what is the cost of an IPv6 address. (It has also been pointed out that a Raspberry Pi Zero, or other IoT device, is cheaper to purchase than the IPv4 address you might use to run it.) Well, IPv4 has around 4 billion addresses, and a single IPv4 address is a /32 (32-bit length), and costs USD 40.00, so a C-class <code>/24</code> subnet has 256 addresses and costs USD 10,000. Going the other way, the IPv6 subnets have a fixed size of <code>/64</code>, which is 4 billion × 4 billion addresses, or about 16 quadrillion addresses. An ISP will typically allocate a <code>/56</code> or sometimes a <code>/48</code>, although my hosted solution is only allocated a single <code>/64</code> subnet. If a <code>/32</code> is USD 40.00, then a <code>/40</code> will be about USD 0.16, and a <code>/48</code> (which some ISPs allocate, enough for 65,000 subnets) would be about 1/16th of 1 US cent. My home ISP (<a href="https://www.internode.on.net/">Internode</a>, Australia) only gives me a <code>/56</code>, which is only enough for 256 subnets, and would only cost 1/4,000th of 1 US cent. That is the cost for 256 subnets, each with 16 quadrillion addresses. Suffice to say, the current cost of an IPv6 address is effectively zero. Addressing scheme The first thing to think about for setting up docker with IPv6 only is a basic addressing scheme. My hosting company, <a href="https://www.mythic-beasts.com/">Mythic Beasts</a>, allocates a <code>/64</code> subnet for each machine, which effectively costs them zero, but provides more than enough addresses to use. For outgoing addresses, there are various privacy extensions that use random outbound addresses, but for a server you also need static addresses for inbound connections. With a whole <code>/64</code>, it is relatively easy to use an address for the node itself, and then allocate a subrange of <code>/112</code> for docker services to publish on. For internal communications within docker, you can pick a <a href="https://en.wikipedia.org/wiki/Unique_local_address">Unique Local Range (ULA)</a> e.g. by using a generator such as <a href="https://dnschecker.org/ipv6-address-generator.php">https://dnschecker.org/ipv6-address-generator.php</a> This range will be unique but, without anything special set up, not routeable over the Internet, so will by default be private. Within your ULA network, you can allocate a subnet for docker on the machine, perhaps the same subnet as the public address, or something similar. Then within the subnet you will want to allocate a range of addresses, e.g. <code>/80</code> to the default bridge network, and then additional ranges for other internal networks, e.g. a <code>/112</code>. Note that a <code>/112</code> still allows 65,000 addresses to be allocated, e.g. for services and other containers. IP address plan example Plan RangeDescription<code>2001:db8:1234:a1::1</code>Main public address of the host.<code>2001:db8:1234:a1:1::/112</code>Public CIDR for <code>demo_public</code>. Additional address to publish ports on.<code>fd12:3456:789a::/56</code>ULA network.<code>fd12:3456:789a:8101::/64</code>ULA subnet allocated for this docker.<code>fd12:3456:789a:8101::/80</code>Default bridge network address range. Use ULA to avoid exposing. Uses NAT66 for external connections.<code>fd12:3456:789a:8101:1::/112</code>Internal network <code>demo_internal</code>. Used to allocate internal container addresses. Does not need routing. Uses NAT66 for external connections.Docker configuration <strong>Install Docker CE:</strong> You can use specific version, for consistency, or latest if you want. On Ubuntu, <a href="https://docs.docker.com/engine/install/ubuntu/">https://docs.docker.com/engine/install/ubuntu/</a>: # Prerequisite packages sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release # Add Docker's official GPG key: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # Add the Docker apt repository: echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Install Docker CE sudo apt-get update sudo apt-get install -y containerd.io=1.4.9-1 docker-ce=5:20.10.8~3-0~ubuntu-$(lsb_release -cs) docker-ce-cli=5:20.10.8~3-0~ubuntu-$(lsb_release -cs) <strong>Install docker compose v2:</strong> See <a href="https://docs.docker.com/compose/cli-command/">https://docs.docker.com/compose/cli-command/</a>: DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} mkdir -p $DOCKER_CONFIG/cli-plugins curl -SL https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose Enable IPv6 for OS and Docker First of all you need to ensure IPv6 forwarding is enabled in your OS and the docker daemon is configured to use IPv6. <strong>Enable IPv6 forwarding:</strong> # Setup required sysctl IPv6 params, these persist across reboots. cat <<EOF | sudo tee /etc/sysctl.d/90-ipv6.conf net.ipv6.conf.all.forwarding = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF # Apply sysctl params without reboot sudo sysctl --system <strong>Enable docker IPv6:</strong> You also need to configure the default IPv6 network range (see IP address plan above). You can use the private range, which ensures no routing is possible. A ULA range is always available, even if you have only a single IPv6 address. Also, disable <code>userland-proxy</code>, and use NAT66 instead for external access from the ULA range access (see below). # Set up the Docker daemon cat <<EOF | sudo tee /etc/docker/daemon.json { "ipv6": true, "fixed-cidr-v6": "fd12:3456:789a:8101::/80", "userland-proxy": false } EOF systemctl restart docker For more details see: <a href="https://medium.com/@skleeschulte/how-to-enable-ipv6-for-docker-containers-on-ubuntu-18-04-c68394a219a2">https://medium.com/@skleeschulte/how-to-enable-ipv6-for-docker-containers-on-ubuntu-18-04-c68394a219a2</a> Docker compose configuration Docker networks Create a <code>docker-compose.yml</code> file for your machine (you may want to store it in source control), and set up the networks based on your plan: version: '3.7' networks: internal: enable_ipv6: true ipam: config: - subnet: "fd12:3456:789a:8101:1::/112" public: enable_ipv6: true ipam: config: - subnet: "2001:db8:1234:a1:1::/112" By default the public range, like any other public address range, is open to all traffic. Ideally it can be protected with a firewall that only allows through the traffic you want. If you don’t have access to an external firewall, you could also add <code>ip6tables</code> rules to control this. They need to be added to the <code>DOCKER_USER</code> chain, so that they are run before the <code>docker</code> routing. External access for ULA networks using NAT66 For external access, when using ULA, some form of proxying is required; rather than <code>userland-proxy</code> (which has issues), I recommend using IPv6 network address translation (NAT66) instead. While you could argue that in this case NAT is not required — you could just use addresses from the public subnet, and block them from unwanted external connection via a firewall — there are situations, such as running a docker machine on a laptop, where the external range may change as the machine moves around, where having a stable internal range and using NAT66 can be useful. There is a existing IPV6 nat container that you can easily run for this service, provided by Robbert Klarenbeek, details at <a href="https://github.com/robbertkl/docker-ipv6nat">https://github.com/robbertkl/docker-ipv6nat</a> Add the IPv6 NAT service to your <code>docker-compose.yml</code> file as a service: services: ipv6nat: cap_add: - NET_ADMIN - NET_RAW - SYS_MODULE cap_drop: - ALL image: robbertkl/ipv6nat network_mode: "host" restart: always volumes: - '/var/run/docker.sock:/var/run/docker.sock:ro' This container doesn’t do much itself, but use the permissions to set up the host <code>ip6tables</code> networking. Note that you could also set up rules manually in <code>ip6tables</code>, but using the container is easier. Address translation is particularly useful if you only have a single IPv6 address, as it allows you to run containers on an internal network where outgoing calls are proxied to the Internet (although the economics of why you would only be given a single address seems strange). For incoming requests in this setup you need to use published ports on the main IPv6 address. If you have a larger public range, then you can use public ranges (with appropriate firewall rules). Neighbor Discovery Protocol Proxy Daemon You will also need to advertise the public range you are using, so network discovery will know to route the addresses to the host machine. You can do this manually for each individual address, but it is easier to install the Neighbour Discover Protocol Proxy Daemon by Daniel Adolfsson, <a href="https://github.com/DanielAdolfsson/ndppd/tree/1.0-devel">https://github.com/DanielAdolfsson/ndppd/tree/1.0-devel</a>, and have it advertise the entire range automatically. # Install sudo apt update sudo apt install -y ndppd # Create config cat <<EOF | sudo tee /etc/ndppd.conf proxy eth0 { rule 2001:db8:1234:a1:1::/112 { auto } } EOF # Restart sudo systemctl daemon-reload sudo systemctl restart ndppd # Set to run on boot sudo systemctl enable ndppd Side note on outbound access to IPv4 The above configuration is for enabling access to the rest of the IPv6 Internet, outbound through NAT66 or inbound through NDPPD. Your services running in docker may also need access to IPv4 resources. This is no different from the IPv6 only host needing access to IPv4 and requires a solution such as a combination of DNS64 and NAT64, offered by your hosting company. The containers will then use IPv6 to connect to the DNS64 and NAT64 services, which will then connect to IPv4. Initial testing With IPv6 configured, your networks set up, and both NAT66 and NDPPD running, you can add a simple testing instance like <a href="https://busybox.net/">busybox</a> to your <code>docker-compose.yml</code> file to check things are working. Pick a random address (4 hex characters) for the container, and for simplicity use the same value in both ranges, configuring the container on both the internal and public networks. You can configure busybox to run a simple <code>httpd</code> daemon, and also publish to a port on the host machine. You may also need to set extra_hosts with the address for <code>host.docker.internal</code> — as you are using IPv6 you know the unique value you are using is not going to conflict with any other addresses. In your <code>docker-compose.yml</code> file this will look like: busybox: command: sh -c 'echo "Hello world!" > index.html && httpd -f -v' extra_hosts: - 'host.docker.internal:fd12:3456:789a:8101:1::1' image: busybox networks: internal: ipv6_address: 'fd12:3456:789a:8101:1::ab53' public: ipv6_address: '2001:db8:1234:a1:1::ab53' ports: - '8081:80' <strong>Start the containers:</strong> User <code>docker compose</code> to start the two containers in daemon mode, so that you can test connections. docker compose -p demo up -d ipv6nat busybox Testing connections Test outbound connections: docker exec demo-busybox-1 ping6 -c 4 google.com User a browser on another machine to test inbound connections to the published port on the host <code>http://[2001:db8:1234:a1::1]:8081</code>, and direct to the container <code>http://[2001:db8:1234:a1:1::ab53]</code> Note that you will need an IPv6 connection (dual stack is okay) to test these. Test connection between containers on the internal ULA network by creating another temporary container: docker run --rm -it --network demo_internal busybox wget -O - http://[fd12:3456:789a:8101:1::ab53] For all of the above you can check the requests against the container logs: docker logs demo-busybox-1 <strong>Troubleshooting</strong> If <code>ipv6nat</code> is failing, check the logs: docker logs demo-ipv6nat-1 It may show the error: <code>exit status 3: modprobe: can't change directory to '/lib/modules': No such file or directory ip6tables v1.8.7 (legacy): can't initialize ip6tables table 'filter': Table does not exist (do you need to insmod?)</code> If so, try loading the module on the host via <code>modprobe ip6table_filter</code>, and if that works check <code>cat /etc/modules</code> and if it is not present, add it to load on reboot: echo ip6table_filter | sudo tee -a /etc/modules Next steps One you have docker running services on your IPv6-only machine, with connections to and from the Internet, you can add the application services you want to run on the server, e.g. WordPress, and any back end supporting components, e.g. databases. For web-based services, you may want to add a proxy service, such as Caddy, that will automatically take care of TLS certificate registration. To allow access to your IPv6 only machine from IPv4 only clients, my hosting company <a href="https://www.mythic-beasts.com/">Mythic Beasts</a> offers an incoming reverse proxy service, or you can use a content distribution network like <a href="https://www.cloudflare.com/">Cloudflare</a> that includes reverse proxy services (I use this for <a href="https://www.gryphontechnology.com">https://www.gryphontechnology.com</a>, hosted on the same box as my blog). (Cloudflare can also be used to provide IPv6 access to your existing IPv4 only servers.) Note that some containers may not be set up to work out of the box with IPv6, they may be set up for IPv4 only by default, or be expecting dual-stack, even if the underlying software does support IPv6. This means you may often need to modify configuration files and troubleshoot to get services working.

27.3.2022 09:57Comment on IPv6 only hosting by Sly Gryphon
https://sgryphon.gamertheory.net...

Comment on 3d6 is not less swingy than d20 by Sly Gryphon

https://sgryphon.gamertheory.net...

In reply to <a href="https://sgryphon.gamertheory.net/2020/10/3d6-is-not-less-swingy-than-d20/#comment-269">Dominic Amann</a>. Different distributions do have different probabilities of success. e.g. Rolling 15 or higher on 1d20 has an 30% chance of success vs Rolling 5 or higher on 3d6 has a 9.26% chance of success vs Rolling 5 or higher on 1d100 has a 86% chance of success. But these aren't comparing the same thing. A task that is "difficult to complete" in a 3d6 system, requiring 15 or higher, is equivalent to 92 or higher in a d100 system (or a 19 or higher in a d20 system). Yes, a task that is "average to complete", e.g. 51 or higher on d100, will have a higher variance than "difficult to complete", e.g. 92 or higher on d100. output d100 >= 51 named "51/d100 success distribution" \ p=0.50, sd=0.50 \ output d100 >= 92 named "92/d100 success distribution" \ p=0.09, sd=0.29 \ But that has nothing to do with the dice rolled, but with it being closer to a 50/50 chance. Whether a neophyte has a 50% chance of failure vs a trained character having 25% chance of failure is entirely based on how the system defines neophyte vs trained, and nothing to do with the dice used.

14.1.2022 22:19Comment on 3d6 is not less swingy than d20 by Sly Gryphon
https://sgryphon.gamertheory.net...

Comment on 3d6 is not less swingy than d20 by Dominic Amann

https://sgryphon.gamertheory.net...

In reply to <a href="https://sgryphon.gamertheory.net/2020/10/3d6-is-not-less-swingy-than-d20/#comment-250">Mike</a>. It is only not less swingy for tasks that succeed or fail around the median. For tasks that one has a good chance pf success at (say need a 5 or higher), 3d6 gives a far greater chance of success than a d20, and for difficult tasks (require a 15 or higher), have a far less chance of success. It is these outliers that have designers cry "too swingy" for d20s. Why would your character who has trained for years, have a 25% chance of failure at getting a 6, and a neophyte still has only a 50% of failure at the same task?

14.1.2022 21:00Comment on 3d6 is not less swingy than d20 by Dominic Amann
https://sgryphon.gamertheory.net...

Comment on 3d6 is not less swingy than d20 by Sly Gryphon

https://sgryphon.gamertheory.net...

In reply to <a href="https://sgryphon.gamertheory.net/2020/10/3d6-is-not-less-swingy-than-d20/#comment-250">Mike</a>. The multiple size d6 pool roll under mechanic seems a little complicated, with varying dice pool sizes, roll under, compare highest, plus special rules for 1's & 6's (in most cases irrelevant), but an interesting way to preserve 50/50 chance between two arbitrarily high similar scores, while preserving differences at lower scores. Most systems have trouble comparing both 8 vs 9 and 80 vs 90; using a different dice range would be one approach. Ignoring details (like all 1's, ties, what if you both fail, etc), the probabilities can be calculated by breaking the rolls at the shared (lower) range where the probabilities are 50/50. e.g. For Str 25 vs Str 30 with 6d6. <ul> <li>A < 25, B < 25 is a 50/50 chance of who wins.</li> <li>A < 25, 25 <= B < 30, B wins because they are higher than A can possibly get.</li> <li>A < 25, B >= 30, A wins.</li> <li>A >= 25, B < 30, B wins.</li> <li>A >= 25, B >= 30, both fail</li> </ul> You can get the probabilties from AnyDice `output 6d6` This is easiest layed out in a table: <table> <tr> <td>A \ B</td> <td>< 25 (79%)</td> <td>< 30 (19%)</td> <td>>= 30 (2%)</td> </tr> <tr> <td>&lt 25 (79%)</td> <td>2x 31% each</td> <td>15% B</td> <td>1.5% A</td> </tr> <tr> <td>>= 25 (21%)</td> <td>17% B</td> <td>4% B</td> <td>0.5% neither</td> </tr> </table> A (Str 30) has a 67% chance to win, B (Str 25) has a 32.5% chance, so about 2/3 vs 1/3 chance. In contrast with a Str 8 hobbit, the chance of rolling less than 8 on 6d6 is 0.02%, so their chance of winning is almost zero. The upper end is always small (as the dice changes to be just higher than the maximum), so the key is the lower scored participant gets 50% of the shared chance (which is the lower chance vs the entire dice range). <strong>Example 1:</strong> Str 15 vs Str 20, with 4d6, the shared (< 15) is 66% chance, of 0.56 * 0.56 * 0.5 ~ 16% chance for Str 15 to win. <strong>Example 2:</strong> Compared to Str 55 vs Str 60, with 11d6, where the chance is 0.998 * 0.998 * 0.5 ~ 50%; the chance of both rolling under 45 on 9d6 is almost certain, so it is a straight 50/50 contest. So, if the lower score is about half the maximum dice range, the shared chance will be about 50%, giving the lower score a 25% chance to win. Lower scores will be less than 25%, and higher scores up to 50% (both non-linear changes). A lot depends on what the system is trying to achieve, e.g. in D&D, a game of heroic fantasy where individual heroes can defeat mighty monsters, they use bounded accuracy with a linear systems: the halfling hero could very well have Strength 20, and the cloud giant only Strength 27, so comparable, especially if the halfling has proficiency in athletics. This is the kind of movie / heroic action scene, and as everything is kept within a small range, comparing two giants is also easy. The other end is having a scale system, e.g. Savage Worlds heavy armor and heavy damage, where normal weapons simply can't hurt tanks (at all) and two tanks just compare normal weapon ratings. Cortex Prime has something similar with Scale Die, but also allows heroics (as characters can spend plot points to include extra dice).

30.12.2021 00:27Comment on 3d6 is not less swingy than d20 by Sly Gryphon
https://sgryphon.gamertheory.net...

Comment on 3d6 is not less swingy than d20 by Mike

https://sgryphon.gamertheory.net...

In reply to <a href="https://sgryphon.gamertheory.net/2020/10/3d6-is-not-less-swingy-than-d20/#comment-248">Michael W Tan</a>. Michael, Whoa there cowboy! First off lets go easy on the mathematically challenged. I think the reason most people don’t get the underlying math is that in the real world, (home, jobs, daily life), the vast majority of people don’t even use it. Thank the education system, calculators and the industrialization for that. Henry Ford doesn’t need mathematicians to tighten down the seat, Amazon isn’t hiring statisticians to deliver packages. Common Core is designed to provide workers, not thinkers. On the other hand, do you know how to make lavened bread from soil and seed? Properly temper a knife you hammered yourself in a homemade coal forge? Unlikely because they sell Wonder Bread and knives so inexpensively. : ) Nuff said. On to the real discussion. You stated: ‘The only way to attain believable results is to use decimal multipliers, like x0.8’ Hum..???… I think your right. If I remember correctly CoC 7ed and Mythras attempts to address the -20% ‘high meaningless, low skill massive’ by tests which are a fraction or multiple of your base skill. Like hard being 1/2 skill so a 50% skill becomes 25% and a 20% skill becomes 10%. What I don’t like how it penalizes high skill characters much more than low skill characters. A master with 100% who would normally succeed 9.5 out of 10, (96-00 always fails) now fails 5 out of 10 times while a stooge, (20%), who normally fails 8 out of 10 times now fails 9 out of 10 times. Your x0.8 solves this but becomes math intensive at the table. “You have 77% skill with a x0.8 mod for range, x0.5 mod for cover and x1.5 mod for the ‘seeker’ spell on the arrow. I am not good enough at math to think of an easy way to overcome these multiple mods in play. Any ideas? So the bell curve of 3d6 does seem to work better for mods than a % system. What you lose is granularity and steady skill progression. Each point of skill gained is now referenced to your current skill. 1 point will have a value 0.46 to 12.5. A single ‘bit’ of information learned by someone in the middle, (such as the names of a couple demons for a sorcery skill), might increase his skill chance by 0.46%, (2 skill becoming 3 skill using 3d6), or 12.5%, (10 skill becoming 11 skill using 3d6). It is also far less obvious that if I have a 12 skill on 3d6 that it equals a 74% chance than 74 Skill equaling 74% using a percentile roll. I believe we tend to think in ‘slices of pie’ more than bell curves. Perhaps skills increasing as percentages yet rolled on 3d6 to the nearest percentage would work better when modifiers are applied? Either that or still rolled on percentile dies but your fractional modifiers would be charted out for ease of use. That’s gonna be a big chart to cover all the 100 skill levels and multiple mods. I have also though about things like Stat Tests being based upon the highest Stat in the contest rather than a static 3d6 under roll or a Resistance Table, (Basic Roleplaying), where each point of difference equals a 5% modifier. 1-5 = 1d6, 6-11 = 2d6, 12-17 = 3d6, 18-23 = 4d6, etc; Where the the highest Str is always at least 1 point above the maximum die roll. All 1’s is always a success and all 6’s always a failure. Thus when when a giant with Str 30 is arm wrestling a Hobbit with Str 8 they both roll 6d6. Winner is the one who rolls highest but also under their Str. Its not so much for the contests of 8 vs 30 as it is for 25 vs 30. A mechanism where each point is a 5% modifier means a 6 vs 12 is the same as a 12 vs 18, 20 vs 26 or a 100 vs 106. This is fine IF each point is significantly higher than the previous in terms of its value where a 106 Str carries twice as much weight as a 100 Str, (being equivalent to 6 vs 12 or 12 vs 18), but fails if the points are of equal value. Also, the mechanism of dding the result to a die roll such as 1d20 + Str where the highest result wins is fine when a 6 vs 12 but not when a 20 vs 39 or 100 vs 106. This came up when I was designing a d100 campaign which revolved around warring giants of various clans and types and realized the mechanism for resolving Stat vs Stat battles was not very good. Any thoughts on this? Thanks for your insights and input! Mike

29.12.2021 18:04Comment on 3d6 is not less swingy than d20 by Mike
https://sgryphon.gamertheory.net...
Subscribe

🔝

Datenschutzerklärung    Impressum