ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
A libre progressive web app offline dictionary platform from scratch in under 128kb.
EducationC · C++GitHub @tnelsondOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Defeating AI by making knowledge accessible to Humans.
See it live.
A project to make offline (PWA) dictionary webapps and tools for building those for obscure languages.
Current languages:
For the fullest example, try PeakSlab.org/khmer and enter something in the search bar. It'll search as you type pulling in definitions from all the dictionaries that you had enabled on the page. If you want to change the dictionaries loaded, simply clear the search bar and the Dictionary list will appear and you can enable and disable them individually.
When you're searching something, e.g. Gen 7 and you want to look up a word without losing your spot, select the word and push the popup button.
If your system supports text to speech you'll also see options for that. The funnest thing you can do is select English text and have the Khmer TTS read it in a Khmer accent.
The Khmer dictionary page is really the prototype and the reason for every other dictionary page.
The files will be cached to your device, automatically, but since they're compressed it's not too bad. The 20 or so dictionaries included in the Khmer page are about 53mb all together. (26mb of that is the Kora Praise one because that has 1500 sheet music scans in it. I did not compress that file because it's negligible savings and the file is so big any way)
People go through great effort to gather proper data for AI to learn, so my question is, why don't we make knowledge and data accessible to humans instead so that we can learn? I'm sick of people using AI as a dictionary, it's slow, internet dependent, prone to hallucinations, and untrustworthy. The only advantage AI has versus us is more data and better ways to access it, so let's remedy that.
For these tests I ran my laptop connected to my Phone's hotspot to serve the page. Files are cached to my Moto G Power 2024 running Brave and the page is refreshed at > 5 second intervals to measure load time from cache.
| Format | Loadtime | Speed | Filesize |
|---|---|---|---|
| SQLite3 | 789ms | 1.0x | 84mb |
| .peak | 434ms | 1.81x | 49mb |
| .peak split | 385ms | 2.05x | 58mb |
| .peak split (dual worker) | 379ms | 2.08x | 58mb |
| .peak.zst | 473ms | 1.67x | 9.3mb |
| .peak.zst split | 537ms | 1.47x | 11mb |
| .peak.zst split (dual worker) | 418ms | 1.89x | 11mb |
| Format | File size | Percentage |
|---|---|---|
| .tsv (src file) | 52mb | 100% |
| SQLite3 | 84mb | 162% |
| .peak | 49mb | 94% |
| .tsv (split) | 60mb | 115% |
| .peak (split) | 58mb | 112% |
| Format | File size | Percentage |
|---|---|---|
| .tsv.zst | 7.9mb | 15% |
| SQLite3.zst | 14mb | 27% |
| .peak.zst | 9.3mb | 18% |
| .tsv.zst (split) | 9.1mb | 17% |
| .peak.zst (split) | 11mb | 21% |
| Program | Core | Glue | .html .js .css | Total |
|---|---|---|---|---|
| PeakSlab SQLite3 | 851kb | 391kb | 45kb | 1287kb |
| PeakSlab PeakSlab | 38kb (4%) | 0kb (0%) | 55kb (122%) | 93kb (7%) |
The SQLite3 version is the old version of PeakSlab before I wrote the custom file format. The advantages of the custom format are smaller file sizes, instant loading (cast to a struct), and versatile indexes. The reason that .peak slabs are smaller than .tsv files is because peak removes all capitalization and HTML tags and puts them in a tags (or dictionary) section to be reinserted on render.
As you can see the runtime is drastically smaller, the files are smaller, and the load speed is faster even with decompressing the files on every load. Loading uncompressed files is 1.81x faster or 2.08x faster if the files are split (even though the split files take up more space than the one). Even if we're loading compressed files, it's still 1.89x faster than SQLite3 loading uncompressed files.
The size of all the files is much smaller once minified and compressed.
| Program | Core | .html .js .css | Total |
|---|---|---|---|
| PeakSlab Compressed | 16kb | 13kb (0%)** | 29kb |
This project is under the GPL3 license. This project uses the following libraries:
This is a custom format built to be very fast to load (cast to a c-struct and done) and very fast to search with 3 binary search indexes built in. It's very similar to a TSV file and is generated from them.
A Peak file is not a database, there's no transactions or inserts or writes, just reads, as it should be for ultimate speed and simplicity.
These peak files can then be compressed using zstdandard compression which is very quick for decompressing and has a good compression ratio.
There's an online version of the PeakSlab Generator because I hate when a dictionary converter stops working or has 100 dependencies and you can't compile it any more without rewriting it. (Only works for Peak files at the moment).
You want to quickly set up a new language? Add a language
A Slab file is like a peak file except instead of the data being text it's binaries. That allows for storing lots of little files with searchable headers that can seamlessly be integrated into the results of a search.