Skip to content

Instantly share code, notes, and snippets.

View ckhung's full-sized avatar

Chao-Kuei Hung ckhung

View GitHub Profile
@ckhung
ckhung / gen-theme-tiles.sh
Last active October 4, 2025 01:40
generate tiles needed for window border parts for a dark xfce4 theme so that one can have a dark desktop with bright window borders
# 2025/10/04 把原先的黃/綠色框改成紫色框,跟 Sweet-Dark-v40 原來的顏色比較搭
ACTIVE_BORDER_COLOR="#ce93ff"
INACTIVE_BORDER_COLOR="#7944aa"
TITLE_HEIGHT=18
for i in 1 2 3 4 5 ; do convert -size 24x$TITLE_HEIGHT xc:$ACTIVE_BORDER_COLOR title-$i-active.png ; done
convert -size 5x$TITLE_HEIGHT xc:$ACTIVE_BORDER_COLOR top-left-active.png
convert -size 5x$TITLE_HEIGHT xc:$ACTIVE_BORDER_COLOR top-right-active.png
convert -size 3x16 xc:$ACTIVE_BORDER_COLOR left-active.png
convert -size 3x16 xc:$ACTIVE_BORDER_COLOR right-active.png
@ckhung
ckhung / split-gmail.pl
Last active September 19, 2024 03:07
split-gmail.pl: extract bank statements: 把 zimbra mail server 下載回來的 *.eml 檔當中的銀行/信用卡/電費/電信費帳單抓出來、移除密碼,成為單純的 pdf 檔 + split-gmail.pl 把 gmail 的一個 *.mbox 拆成每封信一個檔案
#!/usr/bin/perl -w
# usage: split-gmail.pl test.mbox
# split test.mbox, a file exported from gmail, into one mail per file, named m0001.mbox, m0002.mbox, ...
$fn = sprintf("m%04d.mbox", 1);
open(FH, '>', $fn) or die $!;
$N = 0;
while (<>) {
# a sample string we are matching against:
@ckhung
ckhung / checkbox-hack.css
Last active October 8, 2023 05:17
checkbox hack: descendants of "table" sibling
body { color: #000; background: #ffd; }
.center { text-indent: 0; text-align: center; }
.right { text-indent: 0; text-align: right; }
/* https://www.geeksforgeeks.org/how-to-create-an-html-checkbox-with-a-clickable-label/ */
input[type=checkbox] { display: none }
.for-checkbox {
background-color: #eec;
<?php
# 範例參數:
# bus-pos.php?line=Taichung/151
# 其他城市名稱請見
$QS = array_key_exists('QUERY_STRING', $_SERVER) ? $_SERVER["QUERY_STRING"] : '';
parse_str($QS, $Q);
# $Q = array(
# 'line' => 'Taichung/151'
# );
@ckhung
ckhung / linespector.py
Last active June 24, 2023 09:05
line inspector w/ selenium
# Enter a python3 interpreter. Then do this:
# exec(open('linespector.py').read())
# And try, line by line, the commented out code at the end.
# Wonderful reference:
# https://cosmocode.io/how-to-connect-selenium-to-an-existing-browser-that-was-opened-manually/
# ( found from here: https://stackoverflow.com/a/70088095 )
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
@ckhung
ckhung / line-sel.py
Last active May 15, 2023 07:13
Use selenium to read messages from the "line" messaging app as an extension of chrome.
# This is an experimental piece of code for reading messages
# from the "line" messaging app as an extension of chrome.
# https://chrome.google.com/webstore/detail/line/ophjlpahpchlmihnnnihgmmeilfjmjjc?hl=zh-TW
# My linux is LMDE 5 (elsie), and my chromium is 113.0.5672.63,
# directly installed with apt install.
# I have also done:
# pip3 install selenium webdriver-manager beautifulsoup4
# To use this program:
# 0. Create a line account if you don't have one.
# Note: Line is control-hungry.
@ckhung
ckhung / knight.py
Last active April 4, 2023 05:19
knight's tour
#!/usr/bin/python3
import argparse, sys, os, atexit
from ansi import cursor
from ansi.color import fg, bg, fx
from time import sleep
# manual fix for ansi.cursor.erase
from ansi.sequence import sequence
cursor.erase = sequence('2J')
@ckhung
ckhung / ctimer.py
Last active March 24, 2023 03:05
a timer shown at the upper right corner of the terminal w/ chime
#!/usr/bin/python3
import argparse, sys
from time import sleep
from ansi.color import fg, bg, fx
import ansi.cursor as cr
# from playsound import playsound
def show_msg(msg):
seq = (
@ckhung
ckhung / db-iconv.py
Created August 30, 2022 03:28
find deal-breakers for 'iconv -f utf8 -t big5'
#!/usr/bin/python3
# find deal-breakers for 'iconv -f utf8 -t big5'
# 例: 清冠一號中醫診所清單裡面有一些簡體字「号」「络」和放大鏡符號等等,
# 會造成 iconv 從 utf8 轉 big5 時失敗。 這個程式可以列出有哪幾列有問題。
# https://docs.google.com/spreadsheets/d/e/2PACX-1vQjf_HNeEZKM-XJX-q5v4cfNrB3kcv4gOT8kFbV9rurfoX_H5Qv9112Pv0PgYNFSzbReyNlQkLrJib3/pubhtml#
# 使用方式: python3 db-iconv 某中文utf8編碼檔
# 每列呼叫一次 iconv, 有點慢
import argparse, re
@ckhung
ckhung / batting.csv
Created May 15, 2022 13:21
juxtaposed "binary" Marimekko charts, good for visualizing Simplson's paradox invloving some "hit" ratios
year Derek Derek_hit David David_hit
1995 48 12 411 104
1996 582 183 140 45