8 ms·
Tofu – The opposite of a font
- mintplant 9y agore: license, the SIL Open Font License is common and well-accepted. http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=...
- userbinator 9y agoWARNING: PLEASE DO NOT RUN THIS CODE ON A HARD DRIVE, I'M NOT SURE HOW LONG IT WOULD TAKE. I USED A RAM DISK I haven't looked at the implementation, but this seems to imply it is very I/O intensive and already takes a very long time in RAM. Yet, nothing about the problem statement suggests it would be such a task --- it sounds like something that could be very straightforwardly done completely in memory.
- juanpotato 9y agoYou're right and I should have added more details. fontforge only accepts file paths and not strings sadly
- deleted 9y ago[deleted]
- monsieurbanana 9y agoLibraries to treat strings as files are pretty common, in python they have one in the std: https://docs.python.org/2/library/stringio.html https://docs.python.org/2/library/stringio.html
- juanpotato 9y agoBut that's a file, it accepts a file path. I already looked into this
- CJefferson 9y agoIt's just that the python library used won't read SVG from a string, online from a file given a filename, so each character must be written to disk, then read back in.
- userbinator 9y agoWow. To me that's definitely in the realm of "fix this if you need to run this program more than once" inefficiency. After looking at the implementation, it doesn't seem like it takes advantage of TTF's "composite glyphs" feature either, which would be the most straightforward way of generating a font like this --- once you define the box and the digit glyphs, each character is then composed entirely of references to the box and the appropriate digit glyphs.
- juanpotato 9y agoYeah I tried looking to see how much I would need to change to fix it, but I'm not too great in C which is what fontforge was written in. Oh man I gotta look into the composite glyphs. I don't know much about fonts in general. Thanks for this bit of information.
- Zyst 9y ago>To me that's definitely in the realm of "fix this if you need to run this program more than once" Maybe the programmer doesn't need to use this more than once?
- ClassyJacket 9y agoHobbyist-only coder here who hacks together high-level crap, not memory management and such. Question - If this program needed to operate from memory instead of a disk, why didn't the coder just... code it that way? Are they saying to use a RAM disk to ensure you don't encounter automatic paging out to disk by the OS?
- codefined 9y agoI believe it's a requirement of font forge that they're using. It requires file paths, and it will be doing a large amount of reading. Easiest way of solving this is probably just to fake that your memory is a hard drive.
- djsumdog 9y agoAs other comments have stated, most operating systems do a pretty good job at caching this type of I/O anyway. It goes back to the idea of not optimizing until you know where the bottlenecks really are. A lot of time the underlying layers may take care of it for you.
- deleted 9y ago[deleted]
- chungy 9y agoThat warning made me want to try it on my hard disk just to see how long it would take... It was only a couple minutes. That's a bit disappointing.
- sleepychu 9y agoSSD or spinning platter?
- chungy 9y agoSpinning platter. ZFS with compression is probably helping that.
- panic 9y agoYour OS is probably caching the file at the virtual memory layer, so it doesn't even have to hit the filesystem at all.
- sillysaurus3 9y agoA good lesson not to try to guess where the bottlenecks in a program will be. :)
- wereHamster 9y agomount -o sync :)
- Retr0spectrum 9y ago> WARNING: PLEASE DO NOT RUN THIS CODE ON A HARD DRIVE, I'M NOT SURE HOW LONG IT WOULD TAKE. I USED A RAM DISK How much disk IO does this program generate? Why? In any case, the OS should cache stuff and give similar performance to using a ramdisk, provided you have enough spare ram.
- juanpotato 9y agoFontforge doesn't have a function for loading svgs as glyphs from strings. Only files paths.
- 13of40 9y ago> the OS should cache stuff When I worked at Microsoft back in the 90's I inquired around building 26 as to why I couldn't create a ram disk on what was to become Windows 2000, and this was basically the answer. So yes, if caching doesn't solve this then caching hasn't been implemented correctly.
- MichaelGG 9y agoWhat if you're using a program that fsyncs? And the filesystem isn't just keeping writes cached and flushing only when full. So if I'm writing GB of temp files, I'm causing tons of disk load which may impact other programs. Can't seek to read while writing all my temp data...
- 13of40 9y agoThat's actually a good point.
- Dylan16807 9y ago> What if you're using a program that fsyncs? Remove the fsync or use libeatmydata. > So if I'm writing GB of temp files The kind that won't fit on a ramdisk in the first place? And this particular use case shouldn't need that.
- 9y ago
- boltn 9y agohow would one go about running code/operations on ram as opposed to the hd?
- Retr0spectrum 9y agoOn most Linux distros, /tmp is a ramdisk.
- JetSpiegel 9y agoBut with only 1 GB capacity
- glandium 9y agoIt depends on your setup. The default when no size is given is to use half the RAM.
- colejohnson66 9y agoHalf? That seems kind of excessive. Are you sure that’s right?
- Sidnicious 9y agoI would guess that it’s given that capacity, but the memory is allocated lazily.
- yjftsjthsd-h 9y agoCorrect; tmpfs only uses as much memory as as is used by the files it contains.
- mcpherrinm 9y agoI don't think this is nearly universal - certainly none of the systems I use have /tmp as tmpfs. /dev/shm, on the other hand, is almost always guaranteed to be a tmpfs on glibc systems.
- peterburkimsher 9y agoThat's great! When I first started trying to learn Chinese, I had a problem because I couldn't read the characters and sometimes couldn't copy-paste from some apps. I made a font that was similar, and then I could use the Unicode Hex Input keyboard. Your font looks so much better though!
- juanpotato 9y agoThanks dude!
- hobarrera 9y agoDoes anyone know the name of the app that's listing/displaying fonts? It looks pretty neat, and I haven't found anything good-looking like that for Linux/*nix.
- relyks 9y agoIt's GNOME's font manager: https://fontmanager.github.io/ https://fontmanager.github.io/ If you're using ubuntu, there's a package for it
- juanpotato 9y agoyep
- hobarrera 9y agoOh, thanks, cool. It's designed with GNOME in mind, but not part of GNOME itself, so installing it doesn't require pulling a huge part of GNOME either, and that's a nice plus! :)
- lifthrasiir 9y agoIt is both reasonable and unfortunate that TrueType & OpenType fonts can have no more than 65,535 glyphs. That said, probably the logical font made of multiple physical fonts can be probably made to support all available planes.
- userbinator 9y agoThat said, probably the logical font made of multiple physical fonts can be probably made to support all available planes. Yes, that's how you can fit all of Unicode into one "font" -- use a collection of fonts with at most 64K glyphs each: https://graphicdesign.stackexchange.com/questions/73166/what-is-the-maximum-number-of-glyphs-an-opentype-collection-can-hold https://graphicdesign.stackexchange.com/questions/73166/what... I'll leave it as an "exercise for the reader" to generate such a font.
- djsumdog 9y agoWow, I did not know about that limitation. That's pretty interesting.
- edem 9y agoWe had a bug some weeks ago which was caused by a missing `trim` and an invisible chararcter. Our tester copied some text from a webpage which had such characters. This font is helpful in those cases.
- transitorykris 9y ago"This is stupid. Yeah probably, but for its very specific use case it's not terribly bad." Don't put your work down like this. You created something useful for yourself, and likely useful for others. I'd be surprised if someone called it stupid.
- djsumdog 9y agoYea I was surprised at that too. This is incredibly useful for debugging and trying to fiend weird security/unicode gotchas. I can think of a couple of use cases this might be worth trying.
- juanpotato 9y agoLol it was a joke. Thanks for the support man!
- insulanian 9y agoI'd call it "Unfont" :-)
- LoSboccacc 9y agovery nice! this should be the default binary view on many, many things, especially debuggers/inspectors. how does it handle combining characters? do they get everything in a single box or are going to be rendered as two boxes?
- juanpotato 9y agoThey _should_ be treated as two separate boxes as I made it so that each glyph is certain to be full width regardless of the default.
- jfk13 9y agoMight be interesting to compare SIL's "Unicode BMP Fallback Font",[1] which is significantly more compact (I believe it uses composite glyphs). [1] http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=UnicodeBMPFallbackFont http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=...
- juanpotato 9y agoI'm trying to find how to do this in fontforge
- nicostouch 9y agoTOFU = Terrified Of Fucking it Up. e.g I wanna try it but i'm TOFU
- dgreensp 9y agoI feel like I'm missing the punchline. How big is the generated font?
- juanpotato 9y ago~20MB