Skip to content

Instantly share code, notes, and snippets.

@jaseg
jaseg / mpv_render_context_gtk_example.py
Last active September 9, 2022 07:37
Basic test of python-mpv mpv render context mapping used with GTK
#!/usr/bin/env python3
import ctypes
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GLib
gi.require_version('GL', '1.0')
from OpenGL import GL, GLX
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import re
pinyinToneMarks = {
u'a': u'āáǎà', u'e': u'ēéěè', u'i': u'īíǐì',
u'o': u'ōóǒò', u'u': u'ūúǔù', u'ü': u'ǖǘǚǜ',
u'A': u'ĀÁǍÀ', u'E': u'ĒÉĚÈ', u'I': u'ĪÍǏÌ',
u'O': u'ŌÓǑÒ', u'U': u'ŪÚǓÙ', u'Ü': u'ǕǗǙǛ'
}
@jaseg
jaseg / mailboxorg_to_fritzbox.py
Last active December 25, 2016 16:06
Convert mailbox.org/openXchange contact exports to Fritzbox Phonebook backup files
#!/usr/bin/env python3
# coding: utf-8
import csv
import argparse
avm_xml_template = '''<?xml version="1.0" encoding="utf-8"?>
<phonebooks>
<phonebook>
{entries}
# Modified cd that also displays the directory's contents if the listing is less than 5 lines long
function cd
if test -n "$argv"
if test -e $argv -a ! -d (realpath $argv)
set argv (dirname $argv)
end
end
builtin cd $argv
and test (ls -C -w $COLUMNS |wc -l) -le 5; and ls
end
import struct
def deltaify(list_of_tuples):
return list_of_tuples[0], [ tuple( b-a for a,b in zip(tup1, tup2) ) for tup1, tup2 in zip(list_of_tuples[:-1], list_of_tuples[1:]) ]
smallest_format = lambda num: 'b' if num < 2**7 else 'h' if num < 2**15 else 'i' if num < 2**31 else 'q'
make_format = lambda es: ''.join(smallest_format(e) for e in es)
def pack(list_of_tuples):
offx, deltas = deltaify(list_of_tuples)
import sqlite3
import itertools
import lzma
import threading
import functools
class Stringstore:
def __init__(self, dbfile, max_block_size=262144):
self.db = sqlite3.connect(dbfile)
@jaseg
jaseg / blobstore.py
Last active January 9, 2016 23:32
little python experiment
import pathlib
import itertools
import lzma
import threading
import functools
class Blobstore:
def __init__(self, path, create_if_missing=False, validate=True, blobid_len=4):
p = self._path_obj = pathlib.Path(path)
self._blobid_len, self._fmt_blobid = blobid_len, lambda blobid: ('{:0'+str(self._blobid_len)+'x}').format(blobid)
@jaseg
jaseg / ruby-test.py
Created January 5, 2016 11:44
Fooling around with furigana on a terminal.
#!/usr/bin/env python3
import unicodedata, textwrap
print('\033[38;5;250m ニホンゴ\n\033[0m日本語', end='\n\n')
# I could not find any terminal actually rendering this. urxvt just ignores the escapes, which is kind of sane. gnome terminal et al. print it literally, replacing the \e with a replacement character which looks garbage.
print('foo\033[1\\bar\033[2\\baz\033[0\\fnord', end='\n\n')
FW_TO_HW_MAP = {
@jaseg
jaseg / article-style.css
Last active November 20, 2015 00:30
Goldendict style sheet for use with JMdict/EPWing dictionaries
body
{
/* font-family: Sazanami Mincho; */
font-family: Source Han Sans JP;
font-weight: 100;
font-size: 16px;
}
h3
{
# Modified cd that also displays the directory's contents if the listing is less than 5 lines long
function cd
if test -n "$argv"
if test -e $argv -a ! -d (realpath $argv)
set argv (dirname $argv)
end
end
builtin cd $argv
and test (ls -C -w $COLUMNS |wc -l) -le 5; and ls
end