Skip to content

Instantly share code, notes, and snippets.

View ianliu's full-sized avatar

Ian Liu Rodrigues ianliu

  • moray.ai
  • Campinas, Brazil
  • 04:30 (UTC -03:00)
  • LinkedIn in/ianliu88
View GitHub Profile
@ianliu
ianliu / fluent_pandas.py
Last active January 17, 2022 17:57
Trickery to operate on dataframe's columns without lambdas
import pandas as pd
import operator as op
from functools import partial
from datetime import datetime
def eval(node, df):
if not isinstance(node, tuple | str):
return node
if isinstance(node, str):
import re
import json
import contextlib
from itertools import chain
from urllib.request import urlopen
from urllib.parse import urlparse
from datetime import datetime
import pandas
import matplotlib.pyplot as plt
from __future__ import annotations
from dataclasses import dataclass, replace
from typing import Callable, Generic, Literal, Optional, TypeVar, Union, cast
Player = Union[Literal['X'], Literal['O']]
Piece = Union[Player, Literal[' ']]
@dataclass
@ianliu
ianliu / xinput-list-all-matches.patch
Created February 3, 2021 16:38
A simple patch that lists all matches when querying devices with xorg-xinput.
diff -u --recursive --text xinput-1.6.3.orig/src/list.c xinput-1.6.3/src/list.c
--- xinput-1.6.3.orig/src/list.c 2021-02-03 11:40:47.405550058 -0300
+++ xinput-1.6.3/src/list.c 2021-02-03 13:05:48.896505807 -0300
@@ -374,13 +374,16 @@
#if HAVE_XI2
if (xinput_version(display) == XI_2_Major)
{
- XIDeviceInfo *info = xi2_find_device_info(display, argv[arg_dev]);
+ int ndevs;
+ XIDeviceInfo **infos = xi2_find_all_devices_info(display, argv[arg_dev], &ndevs);
@ianliu
ianliu / kb_layout
Created December 14, 2020 19:44
Undiscipline
["~\n`","!\n1","@\n2","#\n3","$\n4","%\n5","^\n6","&\n7","*\n8","(\n9",")\n0","_\n-","+\n=",{w:2},"Backspace",{x:0.25},"Home","End"],
[{w:1.5},"Tab","Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{w:1.5},"|\n\\",{x:0.25},"Insert","PgUp"],
[{w:1.75},"Esc/Ctrl","A","S","D","F","G","H","J","K","L",":\n;","\"\n'",{w:2.25},"Enter",{x:0.25},"Delete","PgDn"],
[{w:2.25},"Shift","Z","X","C","V","B","N","M","<\n,",">\n.","?\n/",{w:2.75},"Shift"],
[{y:-0.75,x:15.25},"↑"],
[{y:-0.25,w:1.25},"Fn1",{w:1.25},"Fn2",{w:1.25},"Alt",{w:1.25},"Super",{a:7,w:6.25},"",{a:4,w:1.25},"Win",{w:1.25},"Menu"],
[{y:-0.75,x:14.25},"←","↓","→"]
@ianliu
ianliu / dict.js
Created November 17, 2020 16:57
Simple dictionary with value equality for keys
/**
* Recursive object key sort for predictable JSON serialization
*/
function sortObject(obj) {
if (!obj || typeof obj !== "object") return obj;
if (Array.isArray(obj)) return obj.map(item => sortObject(item));
return Object.keys(obj).sort().reduce((o, x) => (o[x] = sortObject(obj[x]), o), {});
}
/**
@ianliu
ianliu / codigos.csv
Last active March 12, 2024 23:28
Script to fetch some Brazilian stock metadata
codigo codcvm cnpj site instituicao
PATI3 94 92.693.019/0001-89 www.panatlantica.com.br ITAU CORRETORA ACOES
PATI4 94 92.693.019/0001-89 www.panatlantica.com.br ITAU CORRETORA ACOES
BAHI3 701 45.987.245/0001-92 www.bahema.com.br ITAUBANCO - ACOES
BBDC3 906 60.746.948/0001-12 www.bradesco.com.br BRADESCO
BBDC4 906 60.746.948/0001-12 www.bradesco.com.br BRADESCO
BAZA3 922 04.902.979/0001-44 www.bancoamazonia.com.br BRADESCO
BBAS11 1023 00.000.000/0001-91 www.bb.com.br BRASIL
BBAS12 1023 00.000.000/0001-91 www.bb.com.br BRASIL
BBAS3 1023 00.000.000/0001-91 www.bb.com.br BRASIL
@ianliu
ianliu / test
Created May 14, 2020 02:46
Testing a binary file in Gist...
Oh, Hi! :D
@ianliu
ianliu / qt_ex.py
Created January 30, 2020 16:36
Anti-aliasing issues with Python VTK and Qt
import vtk
import vtkmodules.qt
vtkmodules.qt.PyQtImpl = 'PySide2'
from vtkmodules.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
from PySide2.QtWidgets import QApplication
app = QApplication([])
renderer = vtk.vtkRenderer()
axes = vtk.vtkCubeAxesActor()
@ianliu
ianliu / runp
Created April 9, 2019 17:36
Yarn parallel runner
#!/bin/bash
color=31
for name in "$@"; do
yarn run "$name" | while IFS= read -r line; do
printf "\033[%dm$name:\033[0m %s\n" $color "$line"
done &
(( color++ ))
done
wait