- Web Wormhole https://webwormhole.io/ https://github.com/saljam/webwormhole
- Localsend https://web.localsend.org/
- FilePizza https://file.pizza/
ShareDrop sharedrop.io https://github.com/szimek/sharedrop(SOLD, not recommended, use one of the forks)A clone SnapDrop snapdrop.net https://github.com/RobinLinus/snapdrop(SOLD, not recommended, use one of the forks)- A fork PairDrop https://pairdrop.net/ https://github.com/schlagmichdoch/pairdrop
- ToffeeShare https://toffeeshare.com/
- Instant.io https://instant.io/
#!/bin/bash | |
# | |
# Script for installing x11vnc on Steam Deck. | |
# | |
# Install: | |
# | |
# sh -c "$(curl -fsSL https://gist.githubusercontent.com/x43x61x69/9a5a231a25426e8a2cc0f7c24cfdaed9/raw/vnc_install.sh?$RANDOM)" | |
# | |
# This will modify root filesystem so it will probably get | |
# overwrite on system updates but is totally ok executing |
Webpack 4 automatically polyfilled many Node APIs in the browser. This was not a great system, because it could lead to surprisingly giant libraries getting pulled into your app by accident, and it gave you no control over the exact versions of the polyfills you were using.
So Webpack 5 removed this functionality. That means you need to make changes if you were relying on those polyfills. This is a quick reference for how to replace the most common patterns.
For each automatically-polyfilled node package name on the left, this shows the name of the NPM package that was used to polyfill it on the right. Under webpack 5 you can manually install these packages and use them via resolve.fallback
.
- get python (lol). make sure you check the box that says "add python to PATH", this will be important later
- get a visual studio compiler. make sure to select either desktop development with C++ or, game dev with C++, or both~
https://visualstudio.microsoft.com/downloads/
- open a native tools command prompt: select
x64 native tools command prompt for VS2019
from the start menu
Readme: In the following pseudo code, [] indicates a subroutine. | |
Sometimes I choose to write the subroutine inline under the [] in order to maintain context. | |
One important fact about the way rollbacks are handled here is that we are storing state for every frame. | |
In any real implementation you only need to store one game state at a time. Storing a game | |
state for every frame allows us to only rollback to the first frame where the predicted inputs don't match the true ones. | |
==Constants== | |
MAX_ROLLBACK_FRAMES := Any Positive Integer # Specifies the maximum number of frames that can be resimulated | |
FRAME_ADVANTAGE_LIMIT := Any Positive Integer # Specifies the number of frames the local client can progress ahead of the remote client before time synchronizing. |
#!/bin/bash | |
set -o errexit | |
set -o nounset | |
set -o pipefail | |
target="${1:-/opt/sublime_merge/sublime_merge}" | |
check_sha() { | |
local sha_valid |
--[[ | |
moves rectangle A by (dx, dy) and checks for a collision | |
with rectangle B. | |
if no collision occurs, returns false. | |
if a collision does occur, returns: | |
- the time within the movement when the collision occurs (from 0-1) | |
- the x component of the normal vector | |
- the y component of the normal vector |
This is designed to be a quick primer on Continuous Integration and Continuous Delivery. We will also use the term "Continuous Deployment" to mean a subset of Continuous Delivery in which you are delivering with every commit.
For the sake of this discussion, we should have a term for "The opposite of CI/CD" and we'll call that "Intermittent Integration" and "Intermittent Delivery" so that we have a shared vocabulary.
eslint --rule 'no-extra-boolean-cast: 0' --rule 'no-extra-parens: 0' --rule 'no-extra-semi: 0' --rule 'no-regex-spaces: 0' --rule 'no-unsafe-negation: 0' --rule 'curly: 0' --rule 'dot-location: 0' --rule 'dot-notation: 0' --rule 'eqeqeq: 0' --rule 'no-else-return: 0' --rule 'no-extra-bind: 0' --rule 'no-extra-label: 0' --rule 'no-floating-decimal: 0' --rule 'no-implicit-coercion: 0' --rule 'no-multi-spaces: 0' --rule 'no-unused-labels: 0' --rule 'no-useless-return: 0' --rule 'wrap-iife: 0' --rule 'yoda: 0' --rule 'strict: 0' --rule 'no-undef-init: 0' --rule 'array-bracket-newline: 0' --rule 'array-bracket-spacing: 0' --rule 'array-element-newline: 0' --rule 'block-spacing: 0' --rule 'brace-style: 0' --rule 'capitalized-comments: 0' --rule 'comma-dangle: 0' --rule 'comma-spacing: 0' --rule 'comma-style: 0' --rule 'computed-property-spacing: 0' --rule 'eol-last: 0' --rule 'func-call-spacing: 0' --rule 'function-paren-newline: 0' --rule 'implicit-arrow-linebreak: 0' --rule 'indent: 0' --rule 'jsx-quotes: 0' --ru |
function ConvertGamesToITAD ($allGames) { | |
foreach ($group in $allGames | Group-Object -Property Name) { | |
$games = $group.Group | |
$playtime = ($games.Playtime | Sort-Object)[-1] | |
$status = ($games.CompletionStatus | Sort-Object)[-1] | |
@{ | |
title = $games[0].Name | |
status = ([string]$status).ToLower() | |
playtime = $playtime / 60 | |
copies = @(foreach ($game in $games) { |