Privacy Policy
What Programming Utils does with your data: as little as possible. No account, no cookies, no tracking, and what you type is never stored.
Last updated: 13 November 2026
Who runs this site
Programming Utils is run by a private individual, who is the data controller for this site. For any question about your data, or to exercise your rights, write to x.com/hieinji.
What you type in the tools
Most tools send your input to our server to compute the result. It is processed in memory for that request only and then discarded: it is never saved, logged or shared. Even so, avoid pasting passwords, keys or other secrets into any website.
Your IP address
To protect the service from abuse, the server counts requests per IP address. The address is kept in memory only and forgotten within two minutes: it is never written to disk or used to identify you. Legal basis: our legitimate interest in keeping the service secure and available (Art. 6(1)(f) GDPR).
Hosting
Like every website, this one runs on a hosting provider that handles the network connection, and so your IP address, to deliver the pages. The provider acts on our behalf under a data processing agreement.
Cookies and browser storage
We use no cookies, analytics services or tracking. The server only counts how many times each page and tool is used, as daily totals: nothing about who used them is recorded. Your browser's local storage remembers only the language and the light or dark theme you chose: this stays on your device and is never sent to us. You can clear it at any time in your browser settings.
Your rights
Under the GDPR you have the right to access, rectify and erase your data, to restrict or object to its processing, and to data portability. As we keep no personal data beyond the two minutes above, there is usually nothing to hand over, but write to us and we will answer within one month. You can also lodge a complaint with your data protection authority.
Changes
If this site starts processing data in new ways, for example to show ads, this page will be updated first.
Hash
Compute a cryptographic hash (digest) of text, for checksums, cache keys or comparing values. The text is hashed as UTF-8.
Base64
Encode text as Base64, or decode Base64 back to text. Used in data URLs, HTTP Basic authentication, JWTs and email attachments.
URL encode / decode
Percent-encode text so it can go safely in a URL query string, or decode an encoded string back to readable text.
Form encoding (application/x-www-form-urlencoded): spaces become +.
Hex
Convert text to its UTF-8 bytes in hexadecimal, or hex bytes back to text. Handy for inspecting encodings and binary data.
XML escape / unescape
Replace the characters that have a special meaning in XML and HTML with entities, or turn entities back into characters.
Escapes & < > " '. Unescape also handles numeric references like A and A.
Case converter
Convert identifiers between naming conventions: camelCase, snake_case, kebab-case, CONSTANT_CASE and more.
Converts as you type. Each line is converted separately, so you can paste a list of names.
Lines → List
Turn a column of values (one per line) into a single delimited list, for example for an SQL IN clause or an array literal.
Split
Split text into parts on a delimiter or a regular expression and see every part with its index.
Substring
Extract part of a text by character position, counting from 0.
Negative indexes count from the end: start -3 gives the last 3 characters.
Transform
Apply a quick clean-up to text: sort or deduplicate lines, trim or remove whitespace, or reverse it.
Stats
Count characters, Unicode code points, UTF-8 bytes, words and lines. Useful to check length limits of fields and messages.
JSON validator
Check that text is valid JSON, see exactly where it breaks, and get it formatted or minified. Duplicate keys are reported as errors.
Regex tester
Test a Java regular expression against your text as you type: matches are highlighted, with their position and capture groups. Optionally try a replacement.
Java syntax (java.util.regex), as used by String.matches, Pattern and Spring. In the replacement, $1 or ${name} insert a group.
Result of the replacement
UUID generator
Generate universally unique identifiers (UUIDs), one or up to 100 at a time.
v7 UUIDs start with a timestamp, so they sort by creation time: a good choice for database keys.
Password generator
Generate a strong random password with a cryptographically secure generator. It is never cached.
The password contains at least one character of each selected type.
Random string
Generate a random string of the chosen length and characters, for tokens, test data or identifiers.
Java POJO from CSV
Paste a CSV header and get a Java field for every column, with a guessed type. Add a few data rows under the header and the types are taken from the values.
Values: true/false/yes/no → Boolean, whole numbers → BigInteger, decimals → BigDecimal, 2026-01-01 → LocalDate, 2026-01-01 09:30 → LocalDateTime, anything else → String. Wrapper types are used because an empty cell means null; choose primitive types when every row has a value.
Timestamp converter
Convert a Unix timestamp (epoch) to a readable date and back. Paste seconds, milliseconds or a date like 2026-01-01T09:00:00Z: the unit is recognised automatically.
Now, Unix milliseconds
How it works
What is a Unix timestamp? It counts the seconds since 1 January 1970 at 00:00 UTC (the "epoch"), the same number everywhere in the world. Time zones only matter when you turn it into a date.
Seconds or milliseconds? Linux (date +%s), PHP and most databases use seconds (10 digits today). Java (System.currentTimeMillis()) and JavaScript (Date.now()) use milliseconds (13 digits). Microseconds have 16 digits, nanoseconds 19.
Good to know: Unix time ignores leap seconds, and 32-bit systems that store it as a signed int overflow on 19 January 2038 at 03:14:07 UTC (the "year 2038 problem"). Use 64-bit values (long in Java).
Cron expression
Build a schedule and get the cron expression for Linux crontab, Spring (Java @Scheduled) and Quartz, with the next run times.
The end hour is not included: from 9 to 17 means the last run is before 17:00, so nothing runs in the evening or at night.
Linux has 5 fields and no seconds. Spring puts seconds in front (6 fields). Quartz also starts with seconds, accepts an optional year and needs ? in day of month or day of week. Spring and Quartz days are written as names (MON-SUN) because the two number them differently (in Quartz 1 = Sunday).
Check an expression
Shows the next 5 runs, or what is wrong with the expression. Linux expressions follow cron's rule: when both day of month and day of week are set, either one matching is enough.