Releases: vxfemboy/wipedicks
Releases · vxfemboy/wipedicks
v1.0.0
wipedicks v1.0.0 — first release 8====D~
Two years ago we posted to r/programming, the redditors had notes, and someone opened an issue asking for a live ASCII penis progress bar.
TL;DR
- Won't trash your SSD anymore. Refuses to multi-pass overwrite flash by default and points you at the right native secure-erase command instead.
--secure-erasewill run it for you. - Live
[8========D~~~~]progress bar that resolves #1. - Configurable shaft length, jizz volume, balls chance, plus 23 randomized completion verbs (fucked / creamed / 🥛 milked / 💀 destroyed / ☢ nuked / ...). The cum father asked.
Reddit FAQ
"Doesn't support configuring lengths or jizz amounts 😞" 
It does now. Five new knobs:
wipedicks \
--shaft-min 20 --shaft-max 40 \ # how long the =====
--jizz-min 5 --jizz-max 10 \ # how much ~~~
--balls-chance 1.0 \ # 0.0..1.0 probability of #
./your_file--dry-run previews the generator output without destroying anything, so you can tune the dick dimensions to taste.
The code review
(Same comment also surfaced as issue #2 fixed verbatim.)
- Error Handling — failed wipes now always run the
fs::remove_filecleanup pass. No more half-pumped corpses lying around in your directory. - Code Organization —
main.rsis gutted from 175 lines to ~120. Logic split into seven modules:cli,dicks,wipe,drive,safety,cleanup,progress. - Performance — buffered 1 MiB SIMD-batched writes. The original was ~5000× more syscalls than necessary.
DickBuf::fill()runs once per round and the same dicks are rewritten for every chunk in that round. - Randomness — the dead-on-arrival
fast_rand_dickcache is gone. Per-threadSmallRnginstead, so threads can't step on each other's seeds. - Command Line Arguments —
clapderive macros, full--helpwith per-flag long descriptions, cross-flag validation inArgs::validate(). - Thread Safety —
thread::scopefor join-before-return; bounded worker pool sized toavailable_parallelism()instead of spawning one OS thread per file. - File Existence —
parse_filelistruns single-threaded before any worker fires. - Code Style — was already snake_case (the reviewer was hallucinating about camelCase), but everything passes
cargo fmt --checkandcargo clippy -- -D warningson Linux, macOS, and Windows now.
Closes #1 — Endless Dick Scroll
#1: "Dynamic ASCII penis generation. Real-time updates to reflect the progress of the treatment."
[8=D~~~~~~~~~~~~~~] 1.00 MiB/64.00 MiB 2% /tmp/victim
[8=========D~~~~~~] 32.00 MiB/64.00 MiB 50% /tmp/victim
[8==============D] 64.00 MiB/64.00 MiB 100% /tmp/victim 💦 creamed
Bytes shift yellow→green as you approach 100%. Total bytes stay cyan. Path is bright red. Add --gay and the shaft cycles ROYGBIV.
What's in the box
Safety
- SSD/NVMe refusal with per-platform classification. Linux:
/proc/self/mountinfo+queue/rotational. macOS:diskutil info -plist. Windows: stub (DriveKind::Unknownfor now — issue filed for nativeGet-PhysicalDiskimpl). --secure-erasedelegates to the right native tool:nvme format -s 1for NVMe,hdparm --security-erasefor SATA. Actually effective, doesn't burn PE cycles.- Path-safety guards refuse
/,/boot,/etc,/usr,/var, swap files (/proc/swaps), and mounted block devices (/proc/self/mountinfo).--rapeoverrides. (Yes, the flag is called--rape. Match the project tone or use a different tool.) - Ctrl-C cleanup registry — interrupted wipes still unlink their temp files. Idempotent with the normal exit path.
--verifyreads each round back and confirms every byte is in the canonical penis alphabet{8, =, #, D, ~, ' '}. Catches bad sectors and FS-level corruption.
Performance
- Buffered writes at 1 MiB chunks (
--buffer-sizeconfigurable). Onewrite(2)per chunk vs. one per penis. - Per-round buffer reuse — within a single overwrite pass we write the same buffer for every chunk. Across passes, fresh randomness. ~100× less RNG work on multi-pass runs.
- SIMD-batched shaft fill via the
widecrate (u8x32::splat). Stable Rust, no nightly. - Bounded thread pool via
std::thread::scope+Mutex<Vec<PathBuf>>work queue. Sized toavailable_parallelism().
UX
- Live progress bar matching the issue spec, rendered via a custom
indicatif::with_keycallback so theDstays in frame at 100%. - 23 random completion verbs, each with its own color and bold/underline/italic mix. Some get emoji prefixes (🥛 milked, 💦 creamed, ☢ nuked, 💀 destroyed, 🍆 pounded, 🍑 creampied). Picked once per file, never shuffles mid-render.
--gayrainbow mode, jizz always bright white, file path always red.--dry-runto preview the generator without destroying anything.
Infra
- GitHub Actions CI on
ubuntu-latest,macos-latest,windows-latest. Every push runscargo fmt --check,cargo clippy --all-targets -- -D warnings,cargo build --release,cargo test --release. - Release workflow on
v*tags builds prebuilt binaries forx86_64-unknown-linux-gnu,aarch64-unknown-linux-gnu,x86_64-apple-darwin,aarch64-apple-darwin,x86_64-pc-windows-msvcand attaches them to the GitHub release. - Zero
unsafe. Seven unit tests. Cross-target check viacargo check --target x86_64-pc-windows-gnuclean.
Demo
Six 12 TB drives on an R710, wiped in parallel via SSH, with live colorized hexyl panes watching the first 256 bytes of each drive. Before:
00000000: 5a 46 53 ... (zfs labels, partition tables, your data)
After:
❤ xxd /dev/sdm
00000000: 383d 447e 7e20 383d 3d3d 3d3d 3d3d 447e 8=D~~ 8=======D~
00000010: 2038 233d 3d3d 3d3d 3d3d 3d44 7e7e 2038 8#========D~~ 8
00000020: 233d 3d44 7e7e 2038 3d3d 3d3d 3d3d 3d3d #==D~~ 8========
Quality bar
| Check | Status |
|---|---|
cargo fmt --check |
clean |
cargo clippy --release --all-targets -- -D warnings (linux/macos/windows) |
clean |
cargo build --release (linux/macos/windows) |
clean |
cargo test --release |
7/7 pass |
unsafe blocks |
0 |
| MSRV | stable (any 1.85+, for ErrorKind::StorageFull) |
Credits
- Drewsif/wipedicks the original idea.
- The r/programming thread. code review and feature requests in the only style this project deserves.
- #1 Endless Dick Scroll, finally delivered.
8====D~~~
