Skip to content

Instantly share code, notes, and snippets.

View Treeki's full-sized avatar

Ash Wolf Treeki

View GitHub Profile
# Usage:
# 1. Install twurl from RubyGems
# 2. Create a Twitter app at https://apps.twitter.com/ (if you don't have one)
# 3. twurl authorize --consumer-key ldny[...]ulfQ --consumer-secret MTXY[...]TRsI
# 4. bash tweet_deleter.sh 2010-05 tweets.csv
# Use at your own risk ;)
# Notes for using multiple accounts with twurl:
# A terrible script that really should be using the Twitter gem rather than
# calling into twurl.
#
# (This was originally a shell script, but my POSIX-fu wasn't good
# enough to figure out how to get it to work on Mac OS...)
#
# Usage:
# $ ruby twitter_unblocker.rb /path/to/twurl
# Example:
# $ ruby twitter_unblocker.rb `where twurl`
@Treeki
Treeki / eq_solver.c
Created September 16, 2015 01:38
a mediocre linear equation solver written in C
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
enum OpType { OpNull = 0, OpAdd, OpSubtract };
typedef int64_t eqVal;
#define eqPRI PRIi64
@Treeki
Treeki / kitterspeak.md
Last active January 31, 2018 16:48
Kitterspeak Reference

Kitterspeak Reference

This document is meant to be a reference for users and implementers of Kitterspeak, a scripting language for animating graphical shapes used by the MMOSG Furcadia.

Concept

Each Furcadia shape has four layers, at which it may draw its frames. These are, in order from bottom to top:

  • BG - background,
  • BEHIND - behind furre,
  • furre (not directly usable),
  • FRONT - in front of furre,
  • FG - foreground.
@Treeki
Treeki / gds_read.py
Created March 29, 2018 20:02
fucking around with Professor Layton and the Curious Village
import struct
import sys
# 1 is maybe s32?
# Commands:
# Room In --
# 18 -- (8?)
# 88 -- (1:a, 6:b)
# 236 -- (1:a, 1:b)
tilenum = 0x300
tileset = 3
framedelays = 4,4,4,4
texname = ww_300.bin
end tile
tilenum = 0x301
tileset = 3
@Treeki
Treeki / config.example.json
Last active August 1, 2019 17:13
FurAffinity -> Pushbullet Notifications
{
"username": "ninji-vahran",
"database": "notifier.db",
"cookies": {
"__cfduid": "REDACTED",
"a": "REDACTED",
"b": "REDACTED",
"folder": "inbox"
},
"pushbullet_key": "REDACTED",

Keybase proof

I hereby claim:

  • I am treeki on github.
  • I am ninji (https://keybase.io/ninji) on keybase.
  • I have a public key ASA14uVhXUBlklIXELI8OKbNzPAvJnyCI-mlCKTdBtHQbAo

To claim this, I am signing this object:

@Treeki
Treeki / ida_romfs.py
Created December 27, 2019 20:23
quick-and-dirty Psion firmware analysis scripts
import json
with open('/Users/ash/src/psion/all_exports.json', 'r') as f:
all_exports = json.load(f)
del all_exports['EKERN'] #not valid for Windermere
def get_pascal_string(addr):
count = Byte(addr)
return ''.join([chr(Byte(addr + 1 + x)) for x in range(count)])
def scan_file(path, safepath, addr, size):
@Treeki
Treeki / FetchCosmoUpdate.py
Created December 11, 2019 18:17
get the Cosmo Communicator's latest OTA update from the DigitimeTech server
import binascii, struct, zlib
key = b'Ti92T_77Zij_MiTik'
def decrypt_pkt(buf):
a = buf[:2]
b = buf[10:12]
if buf[8] == 1:
raise 'gzipped!!'