Skip to content

Instantly share code, notes, and snippets.

@mwgamera
mwgamera / sort_uca.pm
Created July 27, 2025 03:46
๐‘–๐‘ฑ๐‘๐‘พ๐‘ฏ ๐‘•๐‘น๐‘‘๐‘ฆ๐‘™, ๐‘‘๐‘ฑ๐‘’ n+1. ยท๐‘๐‘ป๐‘คโ€™๐‘Ÿ UCA ๐‘ฅ๐‘ช๐‘ก๐‘ต๐‘ค ๐‘ฅ๐‘ฑ๐‘’๐‘• ๐‘ฆ๐‘‘ ๐‘ฅ๐‘น ๐‘ฉ๐‘ฏ๐‘ถ๐‘ฆ๐‘™ ๐‘ž๐‘จ๐‘ฏ ICU ๐‘น glibc ๐‘ค๐‘ด๐‘’๐‘ญ๐‘ค
#!/usr/bin/env perl
# ๐‘•๐‘น๐‘‘๐‘ฆ๐‘™ ๐‘–๐‘ฑ๐‘๐‘พ๐‘ฏ ๐‘•๐‘‘๐‘ฎ๐‘ฆ๐‘™๐‘Ÿ ๐‘ฟ๐‘Ÿ๐‘ฆ๐‘™ ๐‘ž ยท๐‘ฟ๐‘ฏ๐‘ฆ๐‘’๐‘ด๐‘› ๐‘’๐‘ฉ๐‘ค๐‘ฑ๐‘–๐‘ฉ๐‘ฏ ๐‘จ๐‘ค๐‘œ๐‘ผ๐‘ฆ๐‘ž๐‘ฉ๐‘ฅ ๐‘ฅ๐‘ช๐‘ก๐‘ต๐‘ค
# ๐‘•๐‘ด ๐‘ž๐‘‘ ๐‘ฆ๐‘‘ ๐‘’๐‘จ๐‘ฏ ๐‘๐‘ค๐‘ฑ ๐‘ฏ๐‘ฒ๐‘•๐‘ค๐‘ฆ ๐‘ข๐‘ฆ๐‘ž ๐‘ฅ๐‘ฆ๐‘’๐‘•๐‘‘ ๐‘•๐‘’๐‘ฎ๐‘ฆ๐‘๐‘‘๐‘• ๐‘ฏ ๐‘ณ๐‘ž๐‘ผ ๐‘‘๐‘ฑ๐‘ค๐‘ผ๐‘ฆ๐‘™
# klg, Jul 2025
package Unicode::Collate::Shavian;
use strict;
use base 'Unicode::Collate';
use Carp;
our $version = Unicode::Collate->new->version;
#!/usr/bin/env perl
# klg, Mar 2021
use strict;
use utf8;
use open qw/:std :utf8/;
use constant PATH => <'~/lib/dict/readlex/kingsleyreadlexicon.tsv'>;
unless (@ARGV) {
utf8::decode($0);
#!/usr/bin/env perl
# ๐‘‘๐‘ป๐‘ฏ ๐‘–๐‘ฑ๐‘๐‘พ๐‘ฏ ๐‘ข๐‘ป๐‘›๐‘Ÿ ๐‘ณ๐‘๐‘•๐‘ฒ๐‘› ๐‘›๐‘ฌ๐‘ฏ
# klg, ๐‘ช๐‘’๐‘‘ 2024
use strict;
use utf8;
use open qw/:std :utf8/;
use Carp;
use Getopt::Std;
# 43-๐‘ค๐‘ง๐‘‘๐‘ผ ๐‘–๐‘ฑ๐‘๐‘พ๐‘ฏ ๐‘จ๐‘ค๐‘“๐‘ฉ๐‘š๐‘ง๐‘‘:
comment_char %
escape_char /
LC_IDENTIFICATION
title "Shavian English locale"
source ""
address ""
contact ""
email "[email protected]"
tel ""
@mwgamera
mwgamera / test.py
Created February 4, 2022 17:44
ICU ๐‘‘๐‘ฑ๐‘ค๐‘ผ๐‘ฆ๐‘™ ๐‘ฎ๐‘ต๐‘ค๐‘Ÿ ๐‘‘ ๐‘“๐‘ฆ๐‘’๐‘• ๐‘ž ๐‘š๐‘ฎ๐‘ด๐‘’๐‘ฉ๐‘ฏ ยท๐‘ฟ๐‘ฏ๐‘ฆ๐‘’๐‘ด๐‘› ๐‘’๐‘ฉ๐‘ค๐‘ฑ๐‘–๐‘ฉ๐‘ฏ ๐‘จ๐‘ค๐‘œ๐‘ผ๐‘ฆ๐‘ž๐‘ฉ๐‘ฅ ๐‘“ ๐‘–๐‘ฑ๐‘๐‘พ๐‘ฏ
#!/usr/bin/env python
# ๐‘–๐‘ฑ๐‘๐‘พ๐‘ฏ ๐‘ฆ๐‘Ÿ ๐‘ท๐‘ฎ๐‘›๐‘ฉ๐‘ฎ๐‘› ๐‘ฎ๐‘ช๐‘™ ๐‘ฆ๐‘ฏ UCA, ๐‘ค๐‘ง๐‘‘๐‘• ๐‘“๐‘ฆ๐‘’๐‘• ๐‘ฆ๐‘‘
# klg, ๐‘ก๐‘จ๐‘ฏ 2022
"""
๐‘ž ๐‘•๐‘‘๐‘จ๐‘ฏ๐‘›๐‘ผ๐‘› ๐‘จ๐‘ค๐‘“๐‘ฉ๐‘š๐‘ง๐‘‘๐‘ฆ๐‘’ ๐‘น๐‘›๐‘ผ ๐‘ ๐‘–๐‘ฑ๐‘๐‘พ๐‘ฏ ๐‘จ๐‘Ÿ ๐‘œ๐‘ฆ๐‘๐‘ฉ๐‘ฏ
๐‘จ๐‘‘ ๐‘ž ๐‘ง๐‘ฏ๐‘› ๐‘ โ€น๐‘–๐‘ท-๐‘•๐‘’๐‘ฎ๐‘ฆ๐‘๐‘‘โ€บ ๐‘ฏ๐‘ณ๐‘ฅ๐‘š๐‘ผ 8 ๐‘ฆ๐‘Ÿ:
๐‘ ๐‘š ๐‘‘ ๐‘› ๐‘’ ๐‘œ ๐‘“ ๐‘ ๐‘” ๐‘ž ๐‘• ๐‘Ÿ ๐‘– ๐‘  ๐‘— ๐‘ก ๐‘˜ ๐‘ข ๐‘™ ๐‘ฃ
๐‘ค ๐‘ฎ ๐‘ฅ ๐‘ฏ ๐‘ฆ ๐‘ฐ ๐‘ง ๐‘ฑ ๐‘จ ๐‘ฒ ๐‘ฉ ๐‘ณ ๐‘ช ๐‘ด ๐‘ซ ๐‘ต ๐‘ฌ ๐‘ถ ๐‘ญ ๐‘ท
#!/usr/bin/env perl
# klg, Nov 2021
use strict;
# POSIX cksum(1) uses CRC with the same polynomial
# as Zlib but MSB-first while Zlib uses it reversed
# and starts from ~0 instead of appending the length.
# So one can be computed in terms of the other by
# reversing bits appropriately.
use Compress::Zlib 'crc32';
use constant BUF_SIZE => 4096;
@mwgamera
mwgamera / TC14-shavian.bdf
Last active November 25, 2021 10:36
8ร—14 ๐‘–๐‘ฑ๐‘๐‘พ๐‘ฏ ๐‘š๐‘ฆ๐‘‘๐‘ฅ๐‘จ๐‘ ๐‘“๐‘ช๐‘ฏ๐‘‘
STARTFONT 2.1
COMMENT Shavian alphabet, necessarily bad; klg, Nov 2020
FONT -klg-TC14-Medium-R-Normal-shavian-14-140-72-72-C-80-ISO10646-1
SIZE 14 72 72
FONTBOUNDINGBOX 8 14 0 -2
STARTPROPERTIES 19
FOUNDRY "klg"
FAMILY_NAME "TC14"
WEIGHT_NAME "Medium"
SLANT "R"
#!/usr/bin/env ruby
# klg, Sep 2020
# https://xmpp.org/extensions/inbox/omemo-media-sharing.html
# frozen_string_literal: true
require 'openssl'
require 'net/http'
ARGV.each do |arg|
uri = URI(arg)
@mwgamera
mwgamera / dotjs2grease.rb
Created August 14, 2020 14:21
I tried using qutebrowser lately
#!/usr/bin/env ruby
# klg, Aug 2020
# frozen_string_literal: true
files = {}
Dir[File.join(Dir.home, '.{js,css}/?*.{js,css}')].each do |ent|
sta = File.stat(ent) # not lstat
files[[sta.dev, sta.ino]] ||= []
files[[sta.dev, sta.ino]] << ent
end
#!/usr/bin/env perl
# Fix some JPG data in SWF file so that swfrender doesn't trip on it.
# klg, Apr 2020
use strict;
use warnings;
use IO::Compress::Deflate;
use IO::Uncompress::Inflate;
my $src = \*STDIN;
my $dst = \*STDOUT;