Skip to content

Instantly share code, notes, and snippets.

@menduz
menduz / db.ts
Last active April 14, 2021 13:25
database ts
// USAGE:
async function getUser(userId: string): Promise<User> {
return getSqlClient(async (SQL, poolClient) => {
// await poolClient.query()
const result = await SQL`SELECT * FROM users WHERE user_id = ${userId}`
return result.rows[0]
})
}
@menduz
menduz / dcl.md
Created November 24, 2020 00:55
How to implement your own Decentraland, quick and dirty

Runtime

Decentraland run scenes inside a WebWorker, in an ES5 context including Fetch + WebSockets + dcl object.

Every generated scene should run by itself. That is, a piece of code that can be evaluated by an eval in a proper context. You can compile scenes using Webpack, esbuild, or the Decentraland CLI.

The scenes will interact with the renderer using the dcl object.

dcl object

@menduz
menduz / index.sh
Created October 6, 2020 12:37
Lock pan mac
# install dependencies
brew install pam_yubico
if sc_auth identities | grep PIV --quiet
then
# run lock with sudo
sudo bash ./lockpan-1.sh
else
@menduz
menduz / dataview-polyfill.js
Created October 6, 2020 01:46 — forked from tjmehta/dataview-polyfill.js
DataView (and ArrayBuffer) polyfill that works in any engine (including old IE).
void function(global){
if ('DataView' in global && 'ArrayBuffer' in global) {
return;
}
var hide = (function(){
// check if we're in ES5
if (typeof Object.getOwnPropertyNames === 'function' && !('prototype' in Object.getOwnPropertyNames)) {
var hidden = { enumerable: false };
#include <eternity.hpp>
ScriptSystem::ScriptSystem() {
m_platform = 0;
m_isolate = 0;
m_scriptableCount = 0;
m_scriptablePoolSize = 0;
m_scriptables = 0;
}
Script::Script() {
}
Script::~Script() {
}
void Script::Initialize(char* src) {
v8::Isolate* isolate = v8::Isolate::GetCurrent();
@menduz
menduz / mental-models.md
Created August 18, 2020 14:35
Mental models
  • Confirmation bias: a pattern that causes one to notice or look for things that confirm one's beliefs rather that counter-evidence.

  • Loss aversion: Loss aversion refers to people's tendency to prefer avoiding losses to acquiring equivalent gains: it is better to not lose $5 than to find $5. The principle is very prominent in the domain of economics. What distinguishes loss aversion from risk aversion is that the utility of a monetary payoff depends on what was previously experienced or was expected to happen. Some studies have suggested that losses are twice as powerful, psychologically, as gains.

  • Intuition:  Personal experience coded into your personal neural network, which means your

@menduz
menduz / attenuation.glsl
Created May 31, 2020 01:19
Cheap attenuation
float dist = length(lightVector);
float lightR = (lightPosRadius.w / uViewSize.y);
if(dist < lightR){
float attenuation = dist/(1.0 - (dist/lightR) * (dist/lightR));
attenuation = attenuation / lightR + 1.0;
attenuation = 1.0 / (attenuation * attenuation);
if (attenuation > 0.0) {
@menduz
menduz / sphere-normals.hlsl
Created May 30, 2020 13:15
Spherical normal encoding
// Encoding:
normalOut=normalize(normalIn.xy)*sqrt(normalIn.z*0.5+0.5);
// Decoding:
normal.z=length2(normalOut.xy)*2- 1;
normal.xy=normalize(normalOut.xy)*sqrt(1- normal.z*normal.z);
@menduz
menduz / normals.hlsl
Last active May 30, 2020 13:14
Normal encoding/decoding in float2
//Encoding:
float2 atanYX = atan2(normalIn.y,normalIn.x);
float2 normalOut = float2(atanYX/PI,normalIn.z);
normalOut = (normalOut+1.0)+0.5;
//Decoding:
float2 angles = normalOut*2.0- 1.0;
float2 theta = sincos(angles.x*PI,theta.x,theta.y);
float2 phi = float2(sqrt(1.0- angles.y*angles.y),angles.y);
float3 normal = float3(theta.y*phi.x,theta.x*phi.x,phi.y);