Skip to content

Instantly share code, notes, and snippets.

View ckhung's full-sized avatar

Chao-Kuei Hung ckhung

View GitHub Profile
@ckhung
ckhung / csv2vcf.py
Created January 10, 2025 07:16
convert csv files to a vcf (vcard) file
#!/usr/bin/python3
import argparse, re, csv
parser = argparse.ArgumentParser(
description='read csv files and print to stdout in vcf format',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('-d', '--delimiter', type=str, default=',',
help='field delimiter character')
parser.add_argument('mapping',
@ckhung
ckhung / .mbsyncrc
Last active December 17, 2024 07:40
mbsync 與 msmtp 的設定檔 + mutt/ 目錄底下的四個設定檔
# ~/.mbsyncrc
# modified from https://www.cosroe.com/2024/05/neomutt-isync.html
# Global defaults that apply to all channels / accounts / stores
# Create in both places
Create Both
# Do not remove if missing in one place
Remove None
# Permanently delete those messages marked for deletion
@ckhung
ckhung / imap7to8.py
Created November 23, 2024 13:26
mutt_oauth2.py and scripts to convert imap encoded foldernames or subject names
#!/usr/bin/env python3
# https://stackoverflow.com/a/12803967
# IMAP folder path encoding (IMAP UTF-7) for Python
import sys, re
from imapclient import imap_utf7
for line in sys.stdin:
line = line.strip().encode('ascii')
@ckhung
ckhung / lagrange.gpt
Last active October 19, 2024 07:31
lagrange points as seen using effective potential plot
# lagrange points as seen using effective potential plot
len(x,y) = sqrt(x*x+y*y)
# mass of planet relative to that of star
alpha = 0.01 # "mu" in wikipedia
# mass of star and mass of planet
Ms = 1000
Mp = Ms * alpha
@ckhung
ckhung / gen-theme-tiles.sh
Created September 25, 2024 04: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
ACTIVE_BORDER_COLOR="#ffff80"
INACTIVE_BORDER_COLOR="#80c080"
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 2x$TITLE_HEIGHT xc:$ACTIVE_BORDER_COLOR top-left-active.png
convert -size 2x$TITLE_HEIGHT xc:$ACTIVE_BORDER_COLOR top-right-active.png
convert -size 2x16 xc:$ACTIVE_BORDER_COLOR left-active.png
convert -size 2x16 xc:$ACTIVE_BORDER_COLOR right-active.png
convert -size 16x2 xc:$ACTIVE_BORDER_COLOR bottom-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.