Here’s the incomplete documentation for most apps on this site. None of the apps use cookies or so-called “local storage” functionality: thus the only way to remember your data is via permalinks you can bookmark.
app | description | syntax | links | extras |
---|---|---|---|---|
Visual SQL | use SQLite 3.32 on the go, showing query results using graphics and colors | SQL | ✓ | |
Table Formulas | transform/explore/view tabular data | JS | ✓ | |
Data Tiles | summarize TSV files with colored tiles | ✗ | ||
Data Inspector | inspect TSV files at a glance with stats and visual/table summaries | ✗ | ||
Integer Calculator | generate columns of values using increasing number values | JS | ✓ | |
Query SQL | drag/drop TSV files, then query imported tables with SQLite 3.32 into copy/pasteable TSV output | SQL | ✓ | |
Quick Adder | quickly add numbers: numbers can either be explicit or the result of some formula given | JS | ✗ | |
Quick Calculator | quickly calculate with the last 2 numbers given: numbers can either be explicit or the result of some formula given | JS | ✗ | |
Unit Converter | all-in-one unit-converter and calculator | JS | ✗ | |
Canadian Exchange | show recent exchange rates from/to Canadian and US Dollars | ✗ | ||
Currency Inflator | find the value of money by year for Canadian and US Dollars | ✗ | ||
Function Heatmapper | view a 2-input math function at a glance | JS | ✓ | |
Function Viewer | view 1 or more 1-input (x) math functions | JS | ✓ | |
3D Grapher | view/rotate 1 or more 2-input (x, y) math functions as 3D wireframes | JS | ✓ | |
World Mapper | show colored bubbles from a table with latitude-longitude columns on a map of the world | ✓ | ||
Minesweeper | play Minesweeper with no flags | ✗ | ||
Memory | match pairs of animated characters | ✗ | ||
Bubbles | pop all the bubbles you can by clicking/tapping them | ✗ | ||
Emojis and Emoticons | a document to copy common emojis from | ✗ | ||
Align 4 | 2-player game where the first who puts 4 adjacent circles together wins: these 4-streaks can be horizontal, vertical, or diagonal | ✗ | ||
Multipage Viewer | view multiple webpages side-by-side from anywhere | ✓ | ||
Shady | run WebGL fragment shaders on your GPU | GLSL | ✗ | |
Data Tiles | view values from a data table as color-coded tiles | ✗ | ||
Timezoner | view the current time for all the cities you pick/click | ✓ | ||
Compare Images | drop 2 image files onto the page to see them side by side: move the mouse to interactively change how much each image is shown | ✗ | ||
Song Shuffler | play your favorite songs in shuffle mode | ✓ | ||
Tone Mixer | mix multiple sine waves and play them as sounds | ✗ | ||
Audio Synth | hand-code sounds/tunes | JS | ✗ | |
Read Aloud | reads text to you using a speech synthesizer | ✓ | ||
Document Scratchpad | type/paste text and pictures as throwaway notes | ✗ | ||
Doodle | draw with your mouse: right-click for a save-image menu option | ✗ | ||
Dictionary |
|
✗ | ||
Randomizer | pick various kinds of random values at once | ✗ | ||
Table Converter | clean/convert data from/to common tabular-data formats | ✗ | ||
JSON Inspector | view the structure of JSON data, no matter their “shape” | ✗ | ||
Fake CLI | run Linux shell-like commands, including command pipes | Shell | ✓ | |
Text Editor | use a text editor similar to Visual Studio Code | ✗ | ||
Talk Is Cheap | show a random quote | ✗ | ||
Meme Machine | make your own impact-font meme: right-click on the pic when done for a save-image menu option | ✗ | ||
Calendar Maker | choose a year and make a printable 13-page calendar, where the first page is the cover | ✗ | ||
Compact Calendar | see all days in a year: Page Down and Page Up change the year shown; add, say, #2005 (or any other valid year) to end of URL to change default year shown | ✗ | ||
Canadian Exchage Rates Tracker | a multi-year timeline of currency exchange rates relative to the Canadian Dollar | ✗ |
Run SQL queries using a modern version of SQLite3. While the results view is similar to Table Formulas’s, this app has no sort-by-column control, since SQL lets you sort right from the query.
On the other hand, this app has a split-by-column control, which Table Formulas doesn’t: after the full resulting tables, multiple tables split according to distinct values from the column selected will follow it.
The only tabular data format supported is TSV/TXT.
Similar to Visual SQL, this app differs in 1 significant way: its query language is a line of semicolon-separated JavaScript expressions, instead of SQL.
Assignment-like statements let you rename each column: to allow nice names, the text before the = assignment-operator can have spaces and punctuation, if you want to.
The only tabular data format supported is TSV/TXT.
Like the Table Formulas app, the input formulas consists of semicolon-separated JavaScript expressions. In this case, though, the starting values for each row are the variables
n
: the number for the current rowb
: the BigInt-type version of variable n
i
: the 0-based index for the current row$
: record with all the current row’s values so farAs with Table Formulas, assignment-like statements let you rename each column: to allow nice names, the text before the = assignment-operator can have spaces and punctuation, if you want to.
Some examples are
A numberpad-friendly app which shows you a running sum:
Similar to the Quick Adder app, it uses the last 2 numbers (x, y) you’ve given it to show
x + y
x − y
x × y
x ÷ y
and y ÷ x
xy
and yx
(x - y) ÷ y
and (y - x) ÷ x
It also shows overall stats
Like the Quick Adder app
Input numbers directly to see many common SI-to-Imperial-type conversions happen at once. The input box also accepts direct JavaScript calculations if you need them.
View a 2-input (x, y) math function at a glance using the now-popular Viridis quantitative
color scale. Black-colored pixels indicate errors/NaN
values, making regions
outside the formula’s domain easy to see.
As with most of the JavaScript-formula tools on this site, remember that many members
of Math
are also available directly, which means less typing for you. Also,
don’t forget math.js is available too.
Some examples are
Like other apps multiple semicolon-separated JavaScript expressions are allowed, including naming assignments, which can include spaces and punctuation.
As with most of the JavaScript-formula tools on this site, remember that many members
of Math
are also available directly, which means less typing for you. Also,
don’t forget math.js is available too.
View/rotate f(x, y) functions as 3D wireframes. Multiple semicolon-separated JavaScript expressions are allowed to let you show multiple such functions at once, even though here the name part in assignment-like expressions is ignored.
As with most of the JavaScript-formula tools on this site, remember that many members
of Math
are also available directly, which means less typing for you. Also,
don’t forget math.js is available too.
Show colored bubbles from a table with latitude-longitude columns on a map of the world. Only TSV/TXT files with a header line are supported.
Latitude and Longitude columns are autodetected by trying to match any of the following potential column names case-insensitively
If a value column is chosen from the control at the top, bubble areas will show with the correct proportions relative to each other.
This app lets you view multiple webpages side-by-side, using any URL you want. You can choose how many rows and columns to use per screenful, then paste your URLs one per line in the textarea. You can then bookmark your permalinks for later viewing. That’s it.
Run WebGL fragment shaders live: press Ctrl+Enter to update the display. There’s a status bar at the top of the page above the code input box, with success/failure-type feedback showing any syntax errors you may have.
View all your cells from TSV files as color-coded mini-tiles. Hovering over the values/tiles for each row will show the text-line it’s from, along with its line number.
A basic high-definition screen (1920×1080) gives you enough pixels to see between 645,000 and 1.25 million values at once, depending on how many values per row your table has. A color-coded legend is at the top of the app for reference.
Play your favorite songs in shuffle mode
The unusual requirement for full paths in playlists is because browsers don’t share the fullpath from where drag-dropped files come from.
The reason for this app not working directly from any website, is browsers not liking requests to play files from sources with a different protocol than page’s own (i.e. https:// and file:///, which is where your audio files presumably are). I guess a local http(s) webserver serving your audio files should work, but that’s overkill just to play songs.
If you try to use this app directly from the site, you’ll see an error mentioning that security restriction on the browser’s console. Once again, save it as a complete webpage locally, and use that instead.
Mix multiple sine waves and play them as sounds: up to a dozen tones are available, each of which is controlled by its own panel, which includes
If you have a multimedia keyboard, you can use the play/pause key instead of the big play button. Last but not least, watch your ears: some sounds may be too loud and/or high-pitched for comfort.
Play hand-coded sounds/tunes using JavaScript. Your code must export a callback function so the audio system can use it, like so
export function dsp(t, i) { return Math.sin(2 * Math.PI * 600) }
The callback has to return/generate a mono sample each time it’s called
t
is the time in seconds as a float, and starts at 0i
is the (optional) 0-based integer sample numberRemember, you need to export the callback and nothing else for things to work.
Reads text to you using a speech-synthesizer
Pick multiple random values/numbers at once, which includes items from a list: you can drag/drop a text file to have the lines/items typed out for you on the big textarea to the side.
Clean/convert data from/to common tabular-data formats, as shown below
format | description | convert from |
convert to |
more info |
---|---|---|---|---|
CSV | Comma-Separated Values | ✓ | ✓ |
|
TSV | Tab-Separated Values | ✓ | ✓ | the most space-efficient among the formats supported |
JSON | JavaScript Object Notation | ✓ | ✓ | only arrays of flat records/objects are valid input |
JSONL | JSON Lines | ✓ | ✓ | only flat records/objects are valid input |
SQL | Structured Query Language | ✗ | ✓ |
|
HTML | HyperText Markup Language | ✗ | ✓ |
|
View the structure of JSON data, no matter their “shape”. Any nesting in the data will show as nested boxes. Note: array indices are shown starting from 0, as expected when dealing with JSON/JavaScript.
Run Linux shell-like commands, incuding command pipes. Since this is a fake environment, there are no real files nor folders, except for the simulated “bin” folder and its contents: this is mostly to expose the source code for the commands.
On that note, a good example for a piped command is
ls bin | sed '1d; s/(.+)/\/bin\/$1/' | xargs -- cat
which concatenates the sources for all commands available to run.
feature | notes | |
---|---|---|
✓ | pipes | |
✓ | literal quoting with 's | |
✓ | escapable-quoting with "s | |
✓ | backslash escaping | only inside double-quoted arguments |
✓ | comments | useful for memos in the command history, to remind you why you ran some specific command |
~ | standard error | shows only first unrecoverable error |
✗ | aliases | |
✗ | semicolon-separated sequencing | |
✗ | files and folders | only a fake read-only /bin/ folder, so you can see which commands are available using “ls -A bin” |
✗ | filepath expansion of *s (globs) | there are no files/folders to use anyway |
✗ | stream redirections | |
✗ | here-doc standard input | |
✗ | variables |
Commands available, most of them missing minor functionality, include
A multi-year timeline of currency exchange rates relative to the Canadian Dollar. By default 4 currencies are shown: US Dollar, Mexican Peso, Euro, and UK Pound.
To show other currencies instead, hand-edit the URL adding a # (hash), followed by
comma-separated 3-letter currency codes. For example, a URL ending as #usd,try,aud
will show the US Dollar, the Turkish Lira, and the Australian Dollar. Currency codes can
also be in capital letters if you want.
Data are official from the Bank of Canada with daily updates, except weekends. Below are the currencies its JSON data-feed includes, along with their codes
Australian Dollar | AUD | Russian Ruble | RUB |
Brazilian Real | BRL | Saudi Riyal | SAR |
Chinese Renminbi | CNY | Singapore Dollar | SGD |
European Euro | EUR | South African Rand | ZAR |
Hong Kong Dollar | HKD | South Korean Won | KRW |
Indian Rupee | INR | Swedish Krona | SEK |
Indonesian Rupiah | IDR | Swiss Franc | CHF |
Japanese Yen | JPY | Taiwanese Dollar | TWD |
Mexican Peso | MXN | Turkish Lira | TRY |
New Zealand Dollar | NZD | UK Pound Sterling | GBP |
Norwegian Krone | NOK | US Dollar | USD |
Peruvian New Sol | PEN |
Script module which defines a few handy Math-related JavaScript constants/functions which several apps on this site can then use directly
Math | most fields of Math object are made available directly; function log is ln |
eu: number | Euler’s number (e) |
pi: number | ratio of circumference over diameter |
tau: number | double of pi |
floor(x: number, dec: number): number | floor a number to the number of decimal digits given |
floorby(x: number, by: number): number | quantized floor function, using the grid-size given |
round(x: number, dec: number): number | round a number to the number of decimal digits given |
sinc(x: number): number | the sinc function |
reldiff(x: number, y: number): number | calculate the relative difference between 2 numbers |
scale(x: number, dmin: number, dmax: number, rmin: number, rmax: number ): number |
linearly-translate a number from its continous domain the to the continuous range given |
mix(x, y, k: number): number | mix 2 numbers using the mixing factor given |
length(x: number[]): number | the Euclidean length of a numeric array |
dot(x: number[], y: number[]): number | calculate the dot-product of 2 numeric arrays |
degrees(rad: number): number | turn angular radians into angular degrees |
radians(deg: number): number | turn angular degrees into radians |
lcm(x: number, y: number): number | the least common-multiple of 2 numbers |
gcd(x: number, y: number): number | the greatest common-divisor of 2 numbers |
logistic(x: number): number | the standard logistic function |
lgamma(x: number): number | the natural-logarithm of the gamma function |
lbeta(x: number): number | the natural-logarithm of the beta function |
gamma(x: number): number | the gamma function |
beta(x: number): number | the beta function |
factorial(x: number): number | calculate the factorial; actually rounds Γ(x + 1) |
dbinom(x, n, p: number): number | calculates P(X = x) for binomial distributions |
pbinom(x, n, p: number): number | calculates P(X ≤ x) for binomial distributions |
sum(x: number[]): number | add all the items in an array |
mul(x: number[]): number | multiply all the items in an array |
summation(a: number, b: number, f: (x: number) => number ): number |
sum of function results using all integers in [a...b] |
product(a: number, b: number, f: (x: number) => number ): number |
product of function results using all integers in [a...b] |
median(x: number[]): number | find the median of a numeric array already sorted in increasing order and without nan values |
quartiles(x: number[]): number[] |
get the 5-number summary of a numeric array already sorted in increasing
order and without nan values; the returned array items are the
|
summarize(x: number[], bias: number): { min: number, max: number, n: number, sum: number, mean: number, geomean: number, sd: number, invalid: number, } |
get various numeric summaries of a numeric array already sorted in increasing
order and without nan values; the other input is the bias-correction
parameter, where commonly-used values are
|
iota(n: number): number[] | make an array of numbers from 1 to the integer number given |
sort(x: number[]): number[] | sort a numeric array in increasing order |
revsort(x: number[]): number[] | sort a numeric array in decreasing order |
kernels.epa(x: number): number | the Epanechnikov kernel function |
kernels.tricube(x: number): number | the tricube kernel function |
kernels.gaussian(x: number): number | the gaussian kernel function |
pick(x: number[]): number | pick a random item from a non-empty array |
fix(x: any, decimals: number): string | more-permissive alternative to Number.toFixed, since both numbers and strings are allowed |
format(x: number, dec: number): string | convenient way to format numbers into strings with comma separators and the number of decimals given |
parseNumber(s: string): number | more-permissive alternative to Number.parseFloat, since it allows a Dollar-sign at the start or after +/-, as well as digit-grouping commas |
Script module which defines a few handy JavaScript functions which some apps on this site can then use directly
extname(s: string): string | get a filepath’s extension without the leading dot |
dirname(s: string): string | get a filepath’s directory/folder part |
basename(s: string): string | get a filepath’s filename part, without any folder names |
hms2s(time: string): number | turn hours:minutes:seconds-type strings (hh:mm:ss) into seconds |
s2hms(sec: number): string | turn seconds into hours:minutes:seconds-type strings (hh:mm:ss) |
mdy2ymd(date: string): string | turn month-day-year (mm-dd-yyyy) strings into year-month-day (yyyy-mm-dd) ones |
dmy2ymd(date: string): string | turn day-month-year (dd-mm-yyyy) strings into year-month-day (yyyy-mm-dd) ones |
ymd2n(date: string): number | turn year-month-day strings into floating-point years |
cycle(row, col: number, ...v: any[][]): any | index a fake table using 0-based row/column indices, where each row repeats each of its items enough times to match all variations of later columns: the last argument isn’t an array of arrays, but a succession of variable-length flat arrays each describing the items for each column |
Script module which defines a few handy country/geography-related JavaScript functions which some apps on this site can then use directly
iso2(place: string): string | turn country names (or common synonym) into its official 2-letter ISO country code; ISO2 codes are returned as themselves |
iso3(place: string): string | turn country names (or common synonym) into its official 3-letter ISO country code; ISO3 codes are returned as themselves |
country(place: string): string | turn a country’s synonyms into the official name; official names are returned as given |
continent(place: string): string | get a country’s continent; common country-name synonyms are handled automatically |
flag(place: string): string | get a country’s flag as the URL source for a png picture (example: United States => US.png); common country-name synonyms are handled automatically; when used in Visual SQL and Table Formulas, actual flag pictures (hosted from this site) will show up in cells |