Skip to content

Instantly share code, notes, and snippets.

View EhsanKia's full-sized avatar

Ehsan Kia EhsanKia

View GitHub Profile
@EhsanKia
EhsanKia / unpack_savedata.py
Created March 21, 2022 08:46
Unpacks Game Pass SAVEDATA for Tunic into individual Steam format
import re
with open('5E113D5F383749AEB72703486DD8247B', 'rb') as fp:
data = fp.read()
filenames = re.findall(rb'\d+\.txt', data)
contents = re.findall(rb'(true\|1[^\0]+)', data, re.DOTALL)
for name, content in zip(filenames, contents):
with open(name.replace(b'.txt', b'.tunic'), 'wb') as fp:
@EhsanKia
EhsanKia / indigo_sieve.json
Created May 13, 2021 01:51
Imagus Sieve for Indigo Canada ingido.ca
{
"indigo": {
"img": "^(dynamic\\.indigoimages\\.ca/gifts/\\d+\\.jpg).+",
"to": "$1?maxwidth=1000"
}
}
@EhsanKia
EhsanKia / reaction_role_bot.py
Created February 22, 2021 02:53
Simple and minimal Discord bot made using discord.py for assigning a specific role when a user reacts to a given message.
import discord
BOT_TOKEN = '(bot token here)'
MESSAGE_ID = 1234
EMOJI_NAME = 'emojiName'
ROLE_ID = 4321
class ReactionRole(discord.Client):
@EhsanKia
EhsanKia / .tmux.conf
Last active May 26, 2020 04:25
UNIX configs
# Bind r to reload config
bind r source-file ~/.tmux.conf
# Remap prefix from 'C-b' to 'C-a'
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix
# split panes using | and -
bind | split-window -h
@EhsanKia
EhsanKia / resize_image.py
Last active October 13, 2018 21:48
Simple function to smartly resize an image with PIL.
# There are four ways a resize can go:
# 1. You only specify a width -> image is resized to have that width while conserving aspect ratio
# 2. You only specify a height -> image is resized to have that height while conserving aspect ratio
# 3. You specify width and height with crop off -> Image is resized to fit inside the dimensions while conserving aspect ratio
# 4. You specify width and height with crop on -> Image is cropped and resized to the new dimensions, centered.
#
# NOTE: This function can potentially scale up your image.
# You can avoid that if that's important for your use case by checking
# width and height against old values before resizing at the end.
@EhsanKia
EhsanKia / keybase.md
Created January 7, 2018 11:30
Keybase verification

Keybase proof

I hereby claim:

  • I am ehsankia on github.
  • I am ehsankia (https://keybase.io/ehsankia) on keybase.
  • I have a public key whose fingerprint is 4FCC DA95 C5D0 DF8F 5A10 619A 5D50 ED63 7B07 456F

To claim this, I am signing this object:

@EhsanKia
EhsanKia / pi.py
Created March 14, 2017 01:13
Generate Pi from checking if two random numbers are coprime. https://www.youtube.com/watch?v=RZBhSi_PwHU
from math import sqrt
from random import randint
try:
from math import gcd
except:
from fractions import gcd
ITERATIONS = 1000000
MAX_INT = 1000000000
@EhsanKia
EhsanKia / commerical_obs.html
Created February 14, 2017 01:47
Plays commercials and music in CLR browser
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Commercials</title>
<style type="text/css">
#commercial {
width: 100%;
height: 100%;
opacity: 0;
@EhsanKia
EhsanKia / launchy.ini
Created September 27, 2016 04:01
Keypirinha Plugin to replicate Launchy's database format
#
# Launchy Package configuration file
#
[main]
# Plugin's main configuration section.
# (Nothing here for now)
[directories]
@EhsanKia
EhsanKia / better_rabbit.js
Last active February 12, 2017 01:45
Rabb.it Twitch emotes
var twitchEmotes = {};
var bttvEmotes = {};
$.getJSON('https://twitchemotes.com/api_cache/v2/global.json', function(data) {
$.each(data.emotes, function(key, val) {
twitchEmotes[key] = val.image_id;
});
})
$.getJSON('https://twitchemotes.com/api_cache/v2/subscriber.json', function(data) {