Skip to content

Instantly share code, notes, and snippets.

@sychou
sychou / SKILL.md
Created January 27, 2026 01:30
Claude skill for a poor man semantic search built for Obsidian vaults
name description user_invocable
semantic-search
Search the vault using semantic query expansion and intelligent result ranking. Use when the user asks questions about vault contents, searches for topics, or needs to find related notes.
true

Semantic Search Skill

Search using LLM-powered query expansion and intelligent result synthesis. No vector database required.

@sychou
sychou / bip39_lookup.py
Created November 24, 2025 21:25
BIP39 Word Lookup
"""bip39 lookup
This small script maps 4-letter BIP-39 prefixes to their full BIP-39 English
words. The canonical BIP-39 English word list is embedded so the utility is
self-contained and doesn't rely on an external `bip39.txt` file.
Usage:
python3 bip39_lookup.py <prefix1> <prefix2> ...
Example:
@sychou
sychou / bip39.txt
Created November 24, 2025 21:16
BIP39 Words
abandon
ability
able
about
above
absent
absorb
abstract
absurd
abuse
@sychou
sychou / keccak_hex.py
Created July 23, 2024 16:12
Keccak encode hex value
# Example of how to keccak encode a hex value. Used for converting Snapshot proposal ID to Votium Initiate Deposit _proposal parameter.
#
# Given the Snapshot proposal ID:
# https://snapshot.org/#/cvx.eth/proposal/0xd2f6785ba7e199e3a0169c9bfd561ae6d7c81baa54de4291eef0c355251eb94c
# 0xd2f6785ba7e199e3a0169c9bfd561ae6d7c81baa54de4291eef0c355251eb94c
#
# Should match the following Votium initiation proposal ID:
# https://etherscan.io/tx/0xcb95fedbcbd8889a741e0a12a61536e0bcc46b13b59c997abda8f1e214ede253
# 0xab60d2a73796b1c01607b025b4fa6b83332b0adee021020a42ce56c88d9eebe2
@sychou
sychou / find_block_by_ts.py
Created July 23, 2024 16:06
Find Block Number by Timestamp
from datetime import datetime
from web3 import Web3
# Connect to a local Ethereum node
HTTP_PROVIDER='http://localhost:8545'
w3 = Web3(Web3.HTTPProvider(HTTP_PROVIDER))
def find_block_number_by_timestamp(target_timestamp, tolerance=60):
"""
@sychou
sychou / export_people.scpt
Last active May 27, 2024 22:10
Export Obsidian People to Contacts
--SCRIPT--
-- IMPORTANT SETTINGS
set peopleFolder to "/Users/sean/Vaults/Main/People/"
-- Create contacts from files
set fileNames to list folder (POSIX file peopleFolder) without invisibles
repeat with i from 1 to count of fileNames
set aFileName to item i of fileNames
set filePath to (peopleFolder & aFileName) as POSIX file
@sychou
sychou / Export Contacts to Obsidian Markdown.scpt
Created May 25, 2024 03:30
Export Contacts to Obsidian Markdown
-- Set the folder path for the Obsidian notes
set folderPath to "/Users/sean/Vaults/Test/People"
-- Function to convert special labels to human-readable form and title case them
on getReadableLabel(originalLabel)
if originalLabel is "_$!<Home>!$_" then
return "Home"
else if originalLabel is "_$!<Work>!$_" then
return "Work"
else if originalLabel is "_$!<Mobile>!$_" then
@sychou
sychou / main.js
Last active March 20, 2024 20:14
Task Processor Obsidian Plugin
/*
Task Processor Plugin for Obsidian
To use this plugin:
1. Create a directory named "task-proc" under your vault plugin directory
(e.g. .obsidian/plugins/task-proc)
2. Copy this file (main.js) and manifest.json to the "task-proc" directory
*/
@sychou
sychou / ask.py
Last active February 21, 2024 03:41
ChatGPT cli quickie
#!/usr/bin/env python
# Place this file in your path
# Mark it executable (chmod +x ask)
# You will need openai lib installed (pip install openai)
# You will also need to set the OPENAI_API_KEY environment variable
import os
import sys
from openai import OpenAI
@sychou
sychou / codegpt.py
Created February 20, 2024 18:47
Format Code with GPT
from openai import OpenAI
import os
import sys
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
raise ValueError("OPENAI_API_KEY environment variable not set")
exit()