Skip to content

Instantly share code, notes, and snippets.

@victor141516
victor141516 / styles.css
Last active May 11, 2023 10:40
VSCode custom css
/* the buttons on the right of the file tabs */
[id="workbench.parts.editor"] .title-actions ul > li:has(:not(.codicon-close-dirty)) {
display: none !important;
}
/* the buttons on the right of the window title */
.titlebar-right .monaco-toolbar {
display: none !important;
}
@victor141516
victor141516 / forward.sh
Created April 20, 2023 11:14
Traffic forwarding Docker
#!/bin/sh
function forward_container() {
docker run -it --rm \
-p $OUTSIDE_PORT:$INSIDE_PORT \
--network $NETWORK_NAME \
alpine/socat \
tcp-listen:$INSIDE_PORT,fork,reuseaddr tcp-connect:$CONTAINER_NAME:$INSIDE_PORT
}
@victor141516
victor141516 / book-copy.js
Created November 17, 2022 14:42
Copy text from Google Play Books
// Select the proper frame in devtools and run this script
const nextPageButton = Array.from(document.querySelectorAll('mat-icon')).find((e) => e.innerHTML === 'chevron_right');
const getCurrentPageText = () => Array.from(document.querySelectorAll('reader-page'))
.filter(e => e.checkVisibility())
.map((e) => e.textContent)
.join('');
const isLastPage = () => nextPageButton.classList.contains('mat-button-disabled');
@victor141516
victor141516 / recursive-proxy.js
Created October 11, 2022 11:28
Recursive proxy for debugging purposes
(() => {
const a = (prefix = '') =>
new Proxy(
{},
{
get(_, p) {
const newPrefix = [prefix.toString(), p.toString()].join('.');
console.log('get: ', newPrefix);
return a(newPrefix);
},
@victor141516
victor141516 / carrefour-purchases.js
Created May 2, 2022 12:52
get purchases items from carrefour spanish web
import fetch from "node-fetch";
import { writeFileSync } from "fs";
const HEADERS = {/* copy from chrome */};
const getPurchaseItems = async (id) => {
console.log("getting purchase:", id);
const prom = fetch(
`https://api.carrefour.es/marketing-digital/prod/tickets/${id}`,
{
@victor141516
victor141516 / pathize.js
Created January 17, 2022 19:34
Returns an object with the same structure as obj but each value is the path to the key
/**
*
* @param {any} obj The input object
* @param {string[]} exceptions List of keys not to convert
* @param {string} basePath Base string to use for the path
* @returns {any} Returns an object with the same structure as obj but each value is the path to the key
* @example pathize({a: {b: {c: 2}}, d: 3, e: 4}, ['e'], 'base') ==> {a: {b: {c: 'base.a.b.c'}}, d: 'base.a.d', e: 4}
*/
function pathize(obj, exceptions = [], basePath = '') {
const clone = JSON.parse(JSON.stringify(obj))
@victor141516
victor141516 / a.sh
Created October 3, 2021 00:22
Hack simplify for gmail
#!/bin/sh
# JUST FOR EDUCATIONAL PURPOSES
sed -i -E 's/async check\([^\)]*\) \{/async check\(\) \{ \n return true;/g' js/simplifyGmail.js | grep -C 10 'async check'
@victor141516
victor141516 / pipenvlocker
Last active September 27, 2021 11:30
Pipenv lock using Docker - Pipenv breaks easilt so let's use it through Docker
#!/bin/bash
# Usage: ./pipenvlocker [dev | all]
pipenv_lock_cmd='pipenv lock'
no_dev='--requirements > requirements.txt'
dev='--requirements --dev-only > requirements-dev.txt'
chosen="$pipenv_lock_cmd $no_dev"
if [ "$1" = 'dev' ]; then chosen="$pipenv_lock_cmd $dev"; fi
@victor141516
victor141516 / FuncSwarm.js
Last active February 17, 2020 17:32
Function wrapper with a delayed helper that allows you to wait for any promise to end before the main async function endsany promise to
class FuncSwarm {
constructor(f) {
this._promises = []
this._res = f(p => this._promises.push(p))
}
_waitPromises() {
return Promise.all([this._res.catch(() => {}), ...this._promises])
}
alias grgl='git remote -v get-url origin | sed -e "s/^git@/https#\/\//g" -e "s/:\//\//g" -e "s/https#\/\//https:\/\//g" -e "s/\.git$//g"'
alias gro='open $(grgl)'
alias grop='open $(grgl)/pipelines'