Shell Tools

Timeline
Login

Timeline

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

50 most recent check-ins

2026-06-29
15:01
Removed per-page progress bars. Merged all processing progress into one bar, since total processing progress is the only interesting metric. leaf check-in: 64c7217184 user: thomas tags: scan_adf_asyncio
2026-06-28
19:26
Automatically determine if scans are complete. Improved output a bit. Should be usable now. check-in: 49f36679ec user: thomas tags: scan_adf_asyncio
18:38
Compute the total number of pages beforehand. Remove some debug output check-in: 2a9b779524 user: thomas tags: scan_adf_asyncio
17:38
Adjusted scanimage handling for non-interactive ADF use, avoiding exceptions and crashes check-in: aebddb2c30 user: thomas tags: scan_adf_asyncio
16:59
Rewritten scan_adf to use asyncio and ported to pure Python. Ported features from scan_flatbed: The fine-grained command pipeline and concurrent optipng execution. Not ported is the async file watching. Each user-accepted scan() result is pushed into the file processing queue. With this, in duplex mode, processing of odd pages can begin as soon as the user confirms success. The CPU can work on the odd pages while the scanner works on the even pages. check-in: aabd641bf6 user: thomas tags: scan_adf_asyncio
15:33
Begin porting scan_adf to pure Python + asyncio check-in: 5341080678 user: thomas tags: scan_adf_asyncio
14:19
scan_flatbed: Ported to pure Python. Reworked the script, maximizing concurrent CPU use, and adding progress reporting. leaf check-in: 1128b8ce4e user: thomas tags: trunk
14:17
Implement concurrent PNG optimization using optipng. closed check-in: f5e57af8f1 user: thomas tags: scan_flatbed_with_progress_report
14:13
Fully concurrent optipng optimization. Each try is scheduled individually, and a minimum search processes them as they complete. This maximizes concurrent CPU use and minimizes wall time use. closed check-in: b99d8a9c1d user: thomas tags: concurrent_optipng_optimization
13:04
Specify the parameter combinations for all optipng -o levels check-in: 83249b8fb5 user: thomas tags: concurrent_optipng_optimization
09:26
Add the imagemagick deskew filter and a command line switch to enable it check-in: 9734fe5447 user: thomas tags: scan_flatbed_with_progress_report
09:17
Port scan_flatbed to pure Python. Run scanimage through asyncio and parse its output to provide a nice progress bar check-in: 0a6167bc04 user: thomas tags: scan_flatbed_with_progress_report
09:15
Removed debug print statements closed check-in: 2935544a5e user: thomas tags: scan_flatbed_scanimage_through_asyncio
09:04
Ported scan_flatbed to pure Python. Something in the Python subprocess standard library triggers xonsh shell mode, crashing the process. check-in: e39a5b5ad0 user: thomas tags: scan_flatbed_scanimage_through_asyncio
08:43
Handle delay between Starting a scan and progress reports beginning to arrive. check-in: 538f2b1a0a user: thomas tags: scan_flatbed_scanimage_through_asyncio
2026-06-27
23:46
Improve a comment check-in: e9a2e8f4f0 user: thomas tags: scan_flatbed_scanimage_through_asyncio
23:43
Fix scanimage progress bars. Remove no longer required SCANNER_RUNNING global variable. Remove the obsolete print_() function, because printing through tqdm is now always possible. check-in: b0539e3059 user: thomas tags: scan_flatbed_scanimage_through_asyncio
2026-06-25
19:19
Run scanimage as an asyncio subprocess. Use stdin=sys.stdin to relay control to the process. Parse and print the output check-in: 953e40174b user: thomas tags: scan_flatbed_scanimage_through_asyncio
18:01
Fixed optipng progress reporting check-in: 4c1908e4a2 user: thomas tags: scan_flatbed_with_progress_report
2026-06-24
20:55
Fixed the deadlocks caused by the tqdm lock. Status reporting for optipng calls via asyncio is broken, but all the other weirdness is gone. check-in: e2c90fe8e0 user: thomas tags: scan_flatbed_with_progress_report
18:12
Use a syslog() call shim if it exists, to suppress excessive syslog abuse inside the hplip network code check-in: 14ba924926 user: thomas tags: scan_flatbed_with_progress_report
18:06
Additional debug print statements check-in: 3b572ec4e3 user: thomas tags: scan_flatbed_with_progress_report
2026-06-19
15:30
Port postprocessing code to coroutines check-in: 724ad9e0b6 user: thomas tags: scan_flatbed_with_progress_report
15:16
Minor refactorings check-in: 83df3e4ba6 user: thomas tags: scan_flatbed_with_progress_report
15:11
Split file creation detection into a dedicated task, and use a queue to move the file to main() for task creation check-in: 19c27bdfa7 user: thomas tags: scan_flatbed_with_progress_report
12:17
Handle optipng levels -o0 and -o1, which do not output \t characters, preventing busy-waiting deadlock check-in: fe7ef6149a user: thomas tags: scan_flatbed_with_progress_report
11:54
Move watcher closure to the end of main(). This allows using asyncio.gather() check-in: ef7ccc5282 user: thomas tags: scan_flatbed_with_progress_report
2026-06-15
14:27
Reorder file watcher closure and hide the progress bars while scanimage runs. Include the imagemagick runtime in the per-page progress bar as a single step. Use some asynchronous waiting to allow clean watcher tear-down. check-in: 7b7fbcd7db user: thomas tags: scan_flatbed_with_progress_report
10:16
Attempt at routing scanimage output through tqdm, so that scanimage output can be shown alongside the tqdm progress bars. This flickers a lot and hangs at exit check-in: abe5cb3701 user: thomas tags: scan_flatbed_with_progress_report
09:12
scan(), scan_simplex(): Remove output value, because it is unused and isn't accurate when scan runs a long time. The async background progressing removes the files scan() counts as it processes the raw input files. So it misses all those where processing finished while scanimage still runs. check-in: e23d45f506 user: thomas tags: scan_flatbed_with_progress_report
09:06
Moved the creation of the outmost progress bar into main() check-in: 1b2a8722d5 user: thomas tags: scan_flatbed_with_progress_report
08:43
WIP implementation using tqdm to report optimization progress. This currently collides with the scanimage output while it runs check-in: cf9af2976d user: thomas tags: scan_flatbed_with_progress_report
2026-06-14
18:50
scan_adf.xsh: Minor cleanups check-in: c0730dea70 user: thomas tags: trunk
2026-06-11
12:47
dyndns/read_external_ip.py: Support multiple interfaces by making the loaded configuration file section configurable via the new --section argument. check-in: 48da6e6581 user: thomas tags: trunk
12:31
Python 3.13 compatibility fix check-in: d661289b86 user: thomas tags: trunk
12:27
dyndns/read_external_ip.py: Refactored main() logic a bit. Also pass the SectionProxy to reader functions to only read the relevant config section once check-in: 2080fdce79 user: thomas tags: trunk
12:16
dyndns/update_dyndns.xsh: Handle remote errors and try again every 10s for up to 36000s (10h). check-in: 97a6cf9a34 user: thomas tags: trunk
2026-06-09
16:20
scan_adf.xsh: Set the outer progress bar unit to "page", from the default "it" check-in: 90853ca381 user: thomas tags: trunk
16:18
scan_adf.xsh: Implement per-file image compression progress reporting. check-in: 0d8a830132 user: thomas tags: trunk
2026-06-08
19:12
scan_adf.xsh: Use tqdm for progress bars, both for filtering using imagemagick and shrinking with optipng. check-in: b8d76ea972 user: thomas tags: trunk
19:07
scan_flatbed.xsh: Replace deprecated asyncio library calls with Python 3.16-compatible calls check-in: 1bc8ba68ca user: thomas tags: trunk
18:35
DynDNS updater: Fixed issues raised by the linter check-in: 3bb1429173 user: thomas tags: trunk
18:16
DynDNS updater: Fixed issues raised by the linter closed check-in: f06796258d user: thomas tags: bogus
2026-06-02
18:47
Add a Let's Encrypt certbot renewal systemd service and timer check-in: a0fca2c73d user: thomas tags: trunk
18:46
Reworked the network webcam script. check-in: fdce316767 user: thomas tags: trunk
18:45
dl-manhwaread.py: Remove explicit chapter numbers, as those are already part of each title closed check-in: b9c4957495 user: thomas tags: refactor_network_webcam
2026-05-24
15:13
DynDNS: Add script to read external IP addresses for OpenWRT hosts running behind a FritzBox gateway check-in: 6d8037b72c user: thomas tags: trunk
08:44
Fix dyndns script check-in: e2bb80dec9 user: thomas tags: trunk
2026-05-22
13:39
dyndns/update_dyndns.xsh: Made the network interface configurable via the config file check-in: 3693540853 user: thomas tags: trunk
2026-05-21
17:57
dyndns/update_dyndns.xsh: End the IP address cache file with a newline check-in: a7d4a875dc user: thomas tags: trunk