[{"content":"This setup is useful for language learning: keep the video clean while listening, then pause to quickly check the current subtitle or the recent context.\nmpv can do the simple version with a conditional profile. For the better version, where pausing shows the last few subtitle lines, use a small Lua script.\n1. Open the mpv.net Config Folder In mpv.net, use Context Menu \u0026gt; Config \u0026gt; Open Config Folder.\nmpv.net searches config folders in this order:\nMPVNET_HOME, if that environment variable is set. startup\\portable_config, where startup is the folder containing mpvnet.exe. %APPDATA%\\mpv.net, usually C:\\Users\\\u0026lt;Username\u0026gt;\\AppData\\Roaming\\mpv.net. The important files are:\nmpv.conf for mpv options. scripts\\ for Lua scripts. 2. Simple Mode: Show Only the Current Subtitle on Pause If current-line subtitles are enough, add this to mpv.conf:\n# Blind listening mode: hide subtitles while playing, reveal them on pause. sub-visibility=no [pause-mode] profile-cond=pause profile-restore=copy sub-visibility=yes Behavior:\nPlaying: subtitles are hidden. Paused: the current subtitle appears. Resume: subtitles hide again. This is clean and native, but it only shows the current subtitle line.\n3. Better Mode: Show the Last 3 Subtitle Lines on Pause Create this folder if it does not exist:\nscripts Then create:\nscripts\\blind-listening.lua Paste this script:\n-- Blind listening review mode for mpv / mpv.net. -- Hides native subtitles while playing, then shows recent subtitle lines when paused. local settings = { lines_to_show = 3, osd_duration = 9999, } local history = {} local function clean_text(text) if not text then return \u0026#34;\u0026#34; end text = text:gsub(\u0026#34;{\\\\[^}]-}\u0026#34;, \u0026#34;\u0026#34;) text = text:gsub(\u0026#34;\\\\N\u0026#34;, \u0026#34;\\n\u0026#34;) text = text:gsub(\u0026#34;^%s+\u0026#34;, \u0026#34;\u0026#34;):gsub(\u0026#34;%s+$\u0026#34;, \u0026#34;\u0026#34;) return text end local function record_subtitle(_, text) text = clean_text(text) if text == \u0026#34;\u0026#34; then return end if history[#history] ~= text then table.insert(history, text) end while #history \u0026gt; settings.lines_to_show do table.remove(history, 1) end end local function on_pause_change(_, paused) if paused then local content = table.concat(history, \u0026#34;\\n\u0026#34;) if content == \u0026#34;\u0026#34; then content = \u0026#34;(No subtitle history yet)\u0026#34; end mp.osd_message(content, settings.osd_duration) else mp.osd_message(\u0026#34;\u0026#34;, 0) end end mp.set_property(\u0026#34;sub-visibility\u0026#34;, \u0026#34;no\u0026#34;) mp.observe_property(\u0026#34;sub-text\u0026#34;, \u0026#34;string\u0026#34;, record_subtitle) mp.observe_property(\u0026#34;pause\u0026#34;, \u0026#34;bool\u0026#34;, on_pause_change) Behavior:\nOpen a video with subtitles loaded. During playback, subtitles stay hidden. Press Space to pause. mpv.net shows the latest 3 subtitle lines as an OSD message. Press Space again to continue playback; the OSD disappears. 4. Usage Flow A good listening loop:\nPlay with subtitles hidden. If a sentence is unclear, press Space. Read the recent subtitle context. Press Shift + Left to jump back a little. Press Space to continue listening without subtitles. Notes The video still needs a loaded subtitle track. Hidden subtitles are still readable by the script, but missing subtitles cannot be recovered. The script records subtitles as playback reaches them. If you jump directly into the middle of a file, history may only contain the current line until playback continues. If you use plain mpv instead of mpv.net, the Windows config folder is usually %APPDATA%\\mpv. ","permalink":"https://chyok.github.io/archive/mpvnet-pause-subtitles/","summary":"Configure mpv.net on Windows for blind listening: hide subtitles during playback and show recent lines when paused.","title":"Pause to Reveal Recent Subtitles in mpv.net"},{"content":"macOS can treat Caps Lock as both an input-source switch and an actual caps-lock key. That behavior may introduce a small delay when typing quickly. If you switch input sources with another shortcut, mapping Caps Lock through Karabiner-Elements can make the key respond immediately.\n1. Disable the Native Caps Lock Input Switch Open System Settings \u0026gt; Keyboard \u0026gt; Text Input \u0026gt; Edit, then disable the option that uses Caps Lock to switch input sources.\n2. Map Caps Lock to F19 Open Karabiner-Elements and add a Simple Modifications rule:\nFrom key: caps_lock To key: f19 3. Use F19 as the Input Source Shortcut Open System Settings \u0026gt; Keyboard \u0026gt; Keyboard Shortcuts \u0026gt; Input Sources. Set the previous input-source action to F19 by pressing Caps Lock in the shortcut field.\n4. Keep Caps Lock Available with Command + Caps Lock Add this rule to Karabiner-Elements, usually inside the complex_modifications.rules section of ~/.config/karabiner/karabiner.json:\n{ \u0026#34;description\u0026#34;: \u0026#34;Press Command+F19 to trigger Caps Lock\u0026#34;, \u0026#34;manipulators\u0026#34;: [ { \u0026#34;from\u0026#34;: { \u0026#34;key_code\u0026#34;: \u0026#34;f19\u0026#34;, \u0026#34;modifiers\u0026#34;: { \u0026#34;mandatory\u0026#34;: [\u0026#34;command\u0026#34;], \u0026#34;optional\u0026#34;: [\u0026#34;any\u0026#34;] } }, \u0026#34;to\u0026#34;: [{ \u0026#34;key_code\u0026#34;: \u0026#34;caps_lock\u0026#34; }], \u0026#34;type\u0026#34;: \u0026#34;basic\u0026#34; } ] } Final behavior:\nPress Caps Lock to switch input sources immediately. Press Command + Caps Lock to trigger the original Caps Lock behavior. ","permalink":"https://chyok.github.io/archive/caps-lock-delay/","summary":"Use Karabiner-Elements to make Caps Lock switch input sources immediately while keeping the original Caps Lock behavior available.","title":"Remove the Caps Lock Delay on Mac"},{"content":"This is a personal record of software and tools I use, revisit, or keep around for future setup.\nApps All ecosystems Software Platform Use Why I Keep It Bitwarden Browser, macOS, Windows, Linux, iOS, Android, CLI Password manager Open-source password manager with apps and browser extensions everywhere, so vaults, passkeys, and autofill stay portable across devices. Eudic macOS, Windows, Linux, iOS, Android, Web Dictionary and language learning Cross-device dictionary with offline word banks, notes, vocabulary sync, and reading/translation helpers. Ollama macOS, Windows, Linux Local LLM runtime Simple local runtime for downloading and running open models, with offline use, CLI workflows, and integrations for tools like OpenClaw and Claude Code. PixPin macOS, Windows Screenshot and pinning Combines screenshots, screen recording, OCR, long captures, and pinned references in one tool. Zed macOS, Linux, Windows Code editor Fast Rust-based editor with built-in collaboration and AI workflows. A good lightweight alternative to heavier IDEs. macOS and Apple ecosystem Software Platform Use Why I Keep It Caffeinated macOS Keep Mac awake Menu bar toggle for preventing sleep, display dimming, and screensaver during calls, downloads, or presentations. IINA macOS Media player Modern open-source macOS media player powered by mpv, with Picture-in-Picture, subtitles, and online stream support. Karabiner-Elements macOS Keyboard remapping Powerful key remapping for macOS, especially useful for input-source switching and custom shortcuts. oMLX Apple Silicon, macOS 15+ Local LLM server macOS-native MLX inference server with menu bar controls, OpenAI/Anthropic-compatible APIs, and SSD KV caching for faster local coding-agent workflows. PasteNow macOS, iOS, iPadOS Clipboard manager Native clipboard history with iCloud sync, smart lists, exclusion rules, and keyboard-friendly paste workflows. rcmd macOS App switching Uses the right Command key plus an app\u0026rsquo;s first letter to switch or launch apps quickly, which feels faster than cycling through Command-Tab. Windows Software Platform Use Why I Keep It BCUninstaller Windows Bulk uninstaller Finds normal, hidden, broken, portable, Store, Steam, and other installed apps, then removes batches and leftover files with less manual cleanup. ImageGlass Windows Image viewer Lightweight open-source image viewer with a modern UI and broad format support, useful as a faster Windows Photos replacement. LosslessCut Windows, macOS, Linux Lossless media cutting FFmpeg-based editor for trimming and merging video or audio without re-encoding, so exports are fast and quality stays intact. mpv.net Windows Media player Windows media player based on mpv/libmpv, with a modern GUI, mpv-style config, scripting, and high-quality video output. Sandboxie-Plus Windows App sandboxing Runs apps in an isolated environment so tests, browsing, and unknown software do not permanently modify the main system. ScreenToGif Windows GIF and screen recording Records screen, webcam, or sketchboard, then edits and exports as GIF, APNG, video, PSD, or image frames. ShanaEncoder Windows Video encoding FFmpeg-based audio/video encoder with presets and practical features like subtitles, crop, segments, and logo overlay. CLI macOS and Apple ecosystem Tool Platform Use Why I Keep It Homebrew macOS Package manager The default way to install and update developer tools on Mac, and an easy base layer for repeatable setup. Cross-platform Tool Platform Use Why I Keep It uv macOS, Linux, Windows Python tooling Fast Rust-based Python package and project manager that can replace many separate tools like pip, pipx, virtualenv, poetry, and pyenv. ","permalink":"https://chyok.github.io/archive/software-recommendations/","summary":"A personal list of software and tools I use or keep around.","title":"Software and Tools"},{"content":"Here are some of my open source projects.\nollama-gui A single-file tkinter-based Ollama GUI project with no external dependencies.\nStack: Python, Tkinter Stars: ...+ Features: Lightweight, Model Management, Chat Interface. ten-drops A ten drops game written in pygame-ce, sourced from the Flask game \u0026ldquo;Splash Back\u0026rdquo;.\nStack: Python, Pygame-CE Stars: ...+ Genre: Puzzle Game st Simple LAN file transfer command line tool.\nStack: Go Stars: ...+ Features: LAN discovery, fast transfer. m3u8-downloader-minify Lightweight m3u8 video downloading tool, integrating all features into a single standalone HTML file.\nStack: HTML, JS Stars: ...+ ","permalink":"https://chyok.github.io/projects/","summary":"A collection of my open source projects.","title":"Projects"},{"content":"From a young age, I was deeply fascinated by computers. When I first used one in elementary school, I immediately wanted to create something of my own. Using VB, I built a simple Windows GUI program—rudimentary, but incredibly exciting to me.\nIn middle school, I became obsessed with \u0026ldquo;creating while playing.\u0026rdquo; When I played Red Alert 2, I wasn\u0026rsquo;t satisfied with the standard experience, so I explored how to modify units, adjust attributes, and create my own models. When playing the NES version of Super Mario, I designed levels and changed the game rules. Influenced by hacker scenes in movies at the time, I even tried packet capturing and basic vulnerability exploration.\nIn college, I finally studied computer science systematically—microcomputer principles, operating systems, and networking. Since graduation, I have accumulated years of industry experience, turning my passion into a professional career. I specialize in Python and am also comfortable using Go, JavaScript, and C++. I enjoy digging into problems and love building things. I deeply resonate with the line from The Mythical Man-Month: programming is like writing poetry—this sense of creation has always driven me forward.\n","permalink":"https://chyok.github.io/about/","summary":"about","title":"About"}]