Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

A realistic cat and fish playing mahjong beneath the title Hugo's Daily Tools

Hugo's Daily Tools

Small tools. Real problems. A slightly questionable mahjong team.

A growing collection of practical utilities by Hugo Syarof. Developer helpers, text and data converters, and file utilities — each focused on doing one useful thing well.

Browse the tools

Tool What it does Runtime
JSON Diff Compare API responses or JSON files with precise field-level changes Python 3.9+, no dependencies
JSON Merge Patch Apply object updates, removals, and replacements from a merge-patch document Python 3.9+, no dependencies
JSON Redact Replace explicitly selected JSON Pointer values with a fixed string Python 3.9+, no dependencies
JSON Flatten Convert nested JSON leaves into JSON Pointer and value records Python 3.9+, no dependencies
JSON Stats Count JSON structure, depth, members, items, and value types without printing values Python 3.9+, no dependencies
JSON Canonicalize Sort JSON object keys recursively and emit compact or indented deterministic text Python 3.9+, no dependencies
XML Stats Count XML structure, depth, namespaces, tags, attributes, and text characters without printing values Python 3.9+, no dependencies
Env Audit Check dotenv files for missing, undocumented, duplicate, empty, or malformed keys without exposing values Python 3.9+, no dependencies
INI Inspect Inventory INI sections and explicit key names without printing values Python 3.9+, no dependencies
TOML Inspect Inventory TOML table paths, key names, value types, and array lengths without printing values Python 3.11+, no dependencies
EML Inspect Inventory email header names, MIME parts, attachments, decoded sizes, and payload digests Python 3.9+, no dependencies
Duplicate Finder Find byte-identical files safely and estimate reclaimable space without deleting anything Python 3.9+, no dependencies
JSONL Check Validate JSON Lines with line-level errors, duplicate-key checks, and bounded error details Python 3.9+, no dependencies
JSONL Dedupe Remove semantic JSONL duplicates using complete values or JSON Pointer keys Python 3.9+, no dependencies
JSONL to JSON Convert JSON Lines records into one JSON array with line-level validation Python 3.9+, no dependencies
CSV Audit Check CSV headers, quoting, encoding, and row widths without exposing field contents Python 3.9+, no dependencies
CSV Diff Compare CSV rows by key and report added, removed, and changed values Python 3.9+, no dependencies
CSV Frequency Count and rank string values in selected CSV columns Python 3.9+, no dependencies
CSV Sort Sort CSV rows by named text or finite-decimal columns Python 3.9+, no dependencies
CSV Select Select and reorder CSV columns with header and row-width validation Python 3.9+, no dependencies
CSV Join Join two CSV files by named key columns with inner, left, or full semantics Python 3.9+, no dependencies
SQLite Inspect Inventory SQLite tables, views, columns, indexes, foreign keys, and triggers read-only Python 3.9+, no dependencies
CSV to JSONL Convert header-based CSV rows into JSON objects while retaining string values Python 3.9+, no dependencies
JSON to CSV Convert arrays of flat JSON objects into CSV with inferred or selected columns Python 3.9+, no dependencies
Cron Next Validate five-field cron expressions and preview timezone-aware run times Python 3.9+, no dependencies
Hash Manifest Create and verify deterministic SHA-256 inventories without following symlinks Python 3.9+, no dependencies
Markdown Link Check Check whether relative file targets in common Markdown link forms exist Python 3.9+, no dependencies
Markdown TOC Generate a deterministic table of contents from selected ATX heading levels Python 3.9+, no dependencies
HTML Links Extract and optionally resolve common link attributes from local HTML Python 3.9+, no dependencies
Port Wait Wait for a TCP endpoint with retries, timeout, stability checks, and JSON output Python 3.9+, no dependencies
Line Unique Remove duplicate text lines while retaining first-seen order Python 3.9+, no dependencies
Line Sample Select deterministic reservoir samples while preserving line bytes and source order Python 3.9+, no dependencies
Subnet Inspect Inspect IPv4/IPv6 CIDRs and check address membership Python 3.9+, no dependencies
Query Decode Decode form query strings into ordered name/value pairs Python 3.10+, no dependencies
URL Inspect Inspect URL structure, IDNA hosts, ports, and metadata without network access Python 3.9+, no dependencies
EOL Inspect Count LF, CRLF and CR endings and check final newlines Python 3.9+, no dependencies
Epoch Convert Convert Unix timestamps and offset-aware ISO datetimes Python 3.9+, no dependencies
Path Collisions Find Unicode-normalized and case-insensitive path collisions Python 3.9+, no dependencies
JSON Select Extract JSON values using explicit keys and array indexes Python 3.9+, no dependencies
Tree Usage Summarize file counts and logical bytes by final extension Python 3.9+, no dependencies
File Compare Compare files and report the first differing byte offset Python 3.9+, no dependencies
Hex View Display binary input as byte offsets, hexadecimal values, and printable ASCII Python 3.9+, no dependencies
Duration Sum Add signed durations with integer microsecond precision Python 3.9+, no dependencies
Base64 Codec Encode bytes or validate and decode padded Base64 Python 3.9+, no dependencies
ZIP Inventory Summarize ZIP entry sizes, duplicate names and largest files without extraction Python 3.9+, no dependencies
TAR Inventory Summarize TAR entry types, sizes, duplicate names, and suspicious paths without extraction Python 3.9+, no dependencies
Gzip Check Validate gzip data and report sizes plus the uncompressed SHA-256 digest Python 3.9+, no dependencies
Retry Command Retry local commands after nonzero exits or per-attempt timeouts Python 3.9+, no dependencies
Text Transcode Convert explicit text encodings with strict errors and binary stdout Python 3.9+, no dependencies
Byte Size Parse exact byte quantities and display decimal and binary sizes Python 3.9+, no dependencies
List Compare Compare UTF-8 line-list membership in first-seen order Python 3.9+, no dependencies
Unicode Inspect Locate selected Unicode control, format and separator characters Python 3.9+, no dependencies
Unicode Normalize Normalize UTF-8 text as NFC, NFD, NFKC, or NFKD, or check whether changes are needed Python 3.9+, no dependencies
JWT Inspect Decode compact token JSON without verifying its signature Python 3.9+, no dependencies
UUID Inspect Normalize UUID text and report its encoded version, variant, and forms Python 3.9+, no dependencies
SemVer Compare Compare Semantic Versions with prerelease precedence and ignored build metadata Python 3.9+, no dependencies
PEM Inspect Inventory strict base64 PEM blocks by label, size, digest, and duplicate payload Python 3.9+, no dependencies
Unix Mode Convert Unix permission bits between octal and symbolic forms Python 3.9+, no dependencies

Getting started

Clone the repository:

git clone https://github.com/HugoIrfenz/DailyTools.git
cd DailyTools

Pick a tool from the catalog and follow its README. There is no global installation step: each utility documents its own runtime, dependencies, commands, examples, and limitations.

Structure

DailyTools/
├── README.md
├── assets/
│   └── dailytools-thumbnail.jpg
└── tools/
    ├── jsonl-dedupe/
    │   ├── jsonl_dedupe.py
    │   ├── test_jsonl_dedupe.py
    │   └── README.md
    ├── csv-diff/
    │   ├── csv_diff.py
    │   ├── test_csv_diff.py
    │   └── README.md
    ├── markdown-toc/
    │   ├── markdown_toc.py
    │   ├── test_markdown_toc.py
    │   └── README.md
    ├── toml-inspect/
    │   ├── README.md
    │   ├── toml_inspect.py
    │   └── test_toml_inspect.py
    ├── url-inspect/
    │   ├── README.md
    │   ├── url_inspect.py
    │   └── test_url_inspect.py
    ├── jsonl-to-json/
    │   ├── README.md
    │   ├── jsonl_to_json.py
    │   └── test_jsonl_to_json.py
    ├── eml-inspect/
    │   ├── README.md
    │   ├── eml_inspect.py
    │   └── test_eml_inspect.py
    ├── csv-sort/
    │   ├── README.md
    │   ├── csv_sort.py
    │   └── test_csv_sort.py
    ├── ini-inspect/
    │   ├── README.md
    │   ├── ini_inspect.py
    │   └── test_ini_inspect.py
    ├── html-links/
    │   ├── README.md
    │   ├── html_links.py
    │   └── test_html_links.py
    ├── csv-frequency/
    │   ├── README.md
    │   ├── csv_frequency.py
    │   └── test_csv_frequency.py
    ├── json-canonicalize/
    │   ├── README.md
    │   ├── json_canonicalize.py
    │   └── test_json_canonicalize.py
    ├── xml-stats/
    │   ├── README.md
    │   ├── xml_stats.py
    │   └── test_xml_stats.py
    ├── json-to-csv/
    │   ├── README.md
    │   ├── json_to_csv.py
    │   └── test_json_to_csv.py
    ├── sqlite-inspect/
    │   ├── README.md
    │   ├── sqlite_inspect.py
    │   └── test_sqlite_inspect.py
    ├── json-redact/
    │   ├── README.md
    │   ├── json_redact.py
    │   └── test_json_redact.py
    ├── csv-join/
    │   ├── README.md
    │   ├── csv_join.py
    │   └── test_csv_join.py
    ├── markdown-link-check/
    │   ├── README.md
    │   ├── markdown_link_check.py
    │   └── test_markdown_link_check.py
    ├── tar-inventory/
    │   ├── README.md
    │   ├── tar_inventory.py
    │   └── test_tar_inventory.py
    ├── hex-view/
    │   ├── README.md
    │   ├── hex_view.py
    │   └── test_hex_view.py
    ├── unicode-normalize/
    │   ├── README.md
    │   ├── unicode_normalize.py
    │   └── test_unicode_normalize.py
    ├── line-sample/
    │   ├── README.md
    │   ├── line_sample.py
    │   └── test_line_sample.py
    ├── gzip-check/
    │   ├── README.md
    │   ├── gzip_check.py
    │   └── test_gzip_check.py
    ├── json-stats/
    │   ├── README.md
    │   ├── json_stats.py
    │   └── test_json_stats.py
    ├── unix-mode/
    │   ├── README.md
    │   ├── unix_mode.py
    │   └── test_unix_mode.py
    ├── csv-to-jsonl/
    │   ├── README.md
    │   ├── csv_to_jsonl.py
    │   └── test_csv_to_jsonl.py
    ├── json-flatten/
    │   ├── README.md
    │   ├── json_flatten.py
    │   └── test_json_flatten.py
    ├── pem-inspect/
    │   ├── README.md
    │   ├── pem_inspect.py
    │   └── test_pem_inspect.py
    ├── semver-compare/
    │   ├── README.md
    │   ├── semver_compare.py
    │   └── test_semver_compare.py
    ├── json-merge-patch/
    │   ├── README.md
    │   ├── json_merge_patch.py
    │   └── test_json_merge_patch.py
    ├── uuid-inspect/
    │   ├── README.md
    │   ├── uuid_inspect.py
    │   └── test_uuid_inspect.py
    ├── csv-select/
    │   ├── README.md
    │   ├── csv_select.py
    │   └── test_csv_select.py
    ├── jwt-inspect/
    │   ├── README.md
    │   ├── jwt_inspect.py
    │   └── test_jwt_inspect.py
    ├── unicode-inspect/
    │   ├── README.md
    │   ├── unicode_inspect.py
    │   └── test_unicode_inspect.py
    ├── list-compare/
    │   ├── README.md
    │   ├── list_compare.py
    │   └── test_list_compare.py
    ├── byte-size/
    │   ├── README.md
    │   ├── byte_size.py
    │   └── test_byte_size.py
    ├── text-transcode/
    │   ├── README.md
    │   ├── text_transcode.py
    │   └── test_text_transcode.py
    ├── retry-command/
    │   ├── README.md
    │   ├── retry_command.py
    │   └── test_retry_command.py
    ├── zip-inventory/
    │   ├── README.md
    │   ├── zip_inventory.py
    │   └── test_zip_inventory.py
    ├── base64-codec/
    │   ├── README.md
    │   ├── base64_codec.py
    │   └── test_base64_codec.py
    ├── duration-sum/
    │   ├── README.md
    │   ├── duration_sum.py
    │   └── test_duration_sum.py
    ├── file-compare/
    │   ├── README.md
    │   ├── file_compare.py
    │   └── test_file_compare.py
    ├── tree-usage/
    │   ├── README.md
    │   └── ...source files
    ├── json-select/
    │   ├── README.md
    │   └── ...source files
    ├── path-collisions/
    │   ├── README.md
    │   └── ...source files
    ├── epoch-convert/
    │   ├── README.md
    │   └── ...source files
    ├── eol-inspect/
    │   ├── README.md
    │   └── ...source files
    ├── query-decode/
    │   ├── README.md
    │   └── ...source files
    ├── cron-next/
    │   ├── README.md
    │   └── ...source files
    ├── csv-audit/
    │   ├── README.md
    │   └── ...source files
    ├── duplicate-finder/
    │   ├── README.md
    │   └── ...source files
    ├── env-audit/
    │   ├── README.md
    │   └── ...source files
    ├── hash-manifest/
    │   ├── README.md
    │   └── ...source files
    ├── json-diff/
    │   ├── README.md
    │   └── ...source files
    ├── jsonl-check/
    │   ├── README.md
    │   └── ...source files
    ├── line-unique/
    │   ├── README.md
    │   └── ...source files
    ├── port-wait/
    │   ├── README.md
    │   └── ...source files
    └── subnet-inspect/
        ├── README.md
        └── ...source files

How this collection grows

New utilities are selected and built through a daily automation scheduled for 12:00 WIB (Asia/Jakarta). Each run is tasked with inspecting the existing collection, choosing a useful idea, checking its behavior, and publishing the code together with documentation. Failed runs are reported rather than treated as successful releases.

Quality bar

  • Useful: solve a concrete problem; no empty activity commits.
  • Simple: keep setup understandable and dependencies minimal.
  • Verified: check normal usage and relevant edge cases before release.
  • Documented: include copyable commands, examples, and honest limitations.
  • Local when practical: explain any network access or external service requirements.
  • Careful with files: document side effects and preserve unrelated work.

Ideas and contributions

Open an issue with the problem you want to solve, an example input, and the desired output. Improvements to existing tools are welcome through pull requests.

Cover

The AI-generated cover features a realistic cat and fish playing mahjong. Created for this repository; the artwork is stored in assets/dailytools-thumbnail.jpg.


Built by Hugo Syarof, with Angela helping turn little ideas into working tools.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages