Time |
Nick |
Message |
00:06 |
|
DeepThgt joined #minetest |
00:29 |
|
Lesha_Vel joined #minetest |
00:33 |
|
JerryXiao joined #minetest |
01:23 |
|
smk joined #minetest |
02:09 |
|
fling_ joined #minetest |
02:16 |
|
sid0 joined #minetest |
03:56 |
|
Verticen joined #minetest |
04:00 |
|
MTDiscord joined #minetest |
04:08 |
|
sys4 joined #minetest |
04:12 |
|
liceDibrarian joined #minetest |
04:25 |
|
amfl2 joined #minetest |
04:49 |
|
wsor joined #minetest |
04:49 |
|
Ingar joined #minetest |
04:50 |
|
Chis27 joined #minetest |
05:28 |
|
izzyb joined #minetest |
05:45 |
|
calcul0n joined #minetest |
06:32 |
|
definitelya joined #minetest |
07:02 |
|
Lesha_Vel joined #minetest |
07:11 |
|
jaca122 joined #minetest |
07:20 |
|
s20 joined #minetest |
07:47 |
|
calcul0n_ joined #minetest |
07:51 |
|
fury999io joined #minetest |
08:21 |
|
appguru joined #minetest |
08:28 |
|
mrkubax10 joined #minetest |
08:29 |
|
fury999io joined #minetest |
09:15 |
|
TomTom joined #minetest |
09:18 |
|
hyvoid joined #minetest |
09:40 |
|
appguru joined #minetest |
09:58 |
|
muurkha joined #minetest |
10:02 |
|
appguru joined #minetest |
10:23 |
|
dabbill joined #minetest |
10:33 |
|
appguru joined #minetest |
10:44 |
|
appguru joined #minetest |
10:55 |
|
Niklp8 joined #minetest |
10:58 |
|
Fleckenstein joined #minetest |
11:06 |
|
Fleckenstein joined #minetest |
11:08 |
|
LizzyFleck joined #minetest |
11:10 |
|
appguru joined #minetest |
11:23 |
|
Fleckenstein joined #minetest |
11:39 |
|
appguru joined #minetest |
11:49 |
|
definitelya joined #minetest |
11:53 |
|
Fleckenstein joined #minetest |
11:58 |
|
appguru joined #minetest |
12:15 |
|
appguru joined #minetest |
12:33 |
|
appguru joined #minetest |
12:34 |
|
Fleckenstein joined #minetest |
13:24 |
|
erle joined #minetest |
13:28 |
erle |
here is my unicode rendering library. keep in mind i created this half a year ago, so if you have questions, i may not be too good at answering them. help with bidirectional text rendering is appreciated. https://git.minetest.land/erlehmann/tga_unicode_renderer |
13:30 |
erle |
my goal is to have unicode on signs |
13:32 |
erle |
here is an example rendering, i believe no existing signs library can do even a fraction of it https://mister-muffin.de/p/lgrI.png |
13:34 |
erle |
i would appreciate input from someone writing arabic or hebrew how they even get these characters to appear inside minetest and how they should render |
13:36 |
|
appguru joined #minetest |
13:39 |
erle |
appguru please extrapolate your onions on my unicode rendering library |
13:49 |
|
Guest9650 joined #minetest |
13:59 |
MTDiscord |
<luatic> i got a notification of "appguru please extrapolate your onions on my unico" which my head completed to unicorn |
13:59 |
erle |
well anyway |
13:59 |
erle |
luatic what are your opinions |
13:59 |
erle |
also can you fix the bidi text rendering |
13:59 |
appguru |
let me take a peek |
14:08 |
|
pounce joined #minetest |
14:09 |
appguru |
erle: the `i = nil; j = nil; k = nil` at the end of `pixelops.lua` is dead code |
14:10 |
erle |
appguru, spoken like someone who thinks that thing will not get extended |
14:10 |
appguru |
erle: then use do-end blocks to scope your variables? |
14:10 |
appguru |
your variables and your test cases in general |
14:10 |
erle |
better idea yes |
14:10 |
erle |
patches welcome |
14:11 |
erle |
look i wrote this half a year ago, i just now published it because i was like “come on, it's stupid to talk about it if i am not publishing it right” |
14:11 |
erle |
like why wait until i got the rendering perfect |
14:11 |
erle |
if no one is even able to put hebrew on signs now |
14:11 |
erle |
or arabic (yes the rendering looks horrible, i have not implemented glyph shaping) |
14:11 |
erle |
but for the simple purpose of having random-ass emoji or chinese or so on signs, it's alright already |
14:12 |
erle |
appguru i am sorry i was not good with patches in the past |
14:13 |
erle |
like accepting patches |
14:13 |
erle |
i'll get better! |
14:14 |
appguru |
what's wrong with the bidi rendering btw? |
14:15 |
erle |
i had to add a single line to test case W2 to make it not crash in an assertion |
14:15 |
erle |
but generally, it is incomplete |
14:15 |
erle |
the handling of mixed RTL and LTR text is borked |
14:15 |
erle |
so if you include numbers (which are often LTR) in RTL scripts, already problems occur ig |
14:16 |
erle |
see the hebrew example bidi text |
14:22 |
erle |
appguru i do not use bidi rendering, that is why i need help |
14:22 |
erle |
appguru also what do you think about my benchmarks? |
14:22 |
erle |
i mean it's quite a surprising result that optipng and even zopflipng is a dead end |
14:24 |
MTDiscord |
<rollerozxa> text renderer! |
14:24 |
erle |
yes very text |
14:25 |
erle |
please take it and make some better signs libraries |
14:25 |
erle |
i will put it on contentdb as soon as some people say it's not shit API-wise |
14:25 |
erle |
i want emoji and weird unicode garbage on signs please |
14:26 |
erle |
and japanese and capital ẞ and random latin variants from the math glyphs codeblocks |
14:41 |
erle |
appguru ROllerozxa is the API for the unicode renderer fine with you two? |
14:44 |
appguru |
erle: looks ok, though it feels slightly weird that load_glyphs takes a line iterator, whereas save just takes a file path; would you ever want to not give it a file path? |
14:45 |
erle |
appguru this is a funny question and one that i leave you to ponder for a minute or two before i answer |
14:45 |
erle |
there is a pretty clear reason that becomes obvious once you think about how you might want to use the function |
14:45 |
appguru |
also, why are you exposing details like scanline order? |
14:46 |
erle |
because the output format is actually a pixel array and pixel arrays do have a scanline order |
14:46 |
appguru |
I'd just define it to be top to bottom |
14:46 |
erle |
yeah that's stupid |
14:46 |
erle |
i mean that was a bit crass |
14:47 |
erle |
but you can't really do it for reasons that become obvious once you try to implement it |
14:47 |
erle |
it is part of the reason why imagemagick convert(1) randomly flips images when you convert them and they have a scanline order that is not the default scanline order for the file format hardcoded in imagemagick |
14:48 |
appguru |
you could just normalize everything to top to bottom by reversing if it's bottom to top... |
14:49 |
erle |
look, having it bottom-to-top serves multiple purposes: 1. it is the default in tga (though that can change) 2. it is the default in tga_encoder 3. if you “don't care about scanline order” your image will be flipped upside down, which is a hint that you should care |
14:49 |
erle |
like, the answer to “why is my image flipped upside down” is “you thought you could ignore a thing that you should not and the default is setup so that you *will* run into this if you ignore it” |
14:50 |
appguru |
you can't ignore it in your code, but why can't users of your code ignore it? |
14:50 |
erle |
making an “edge case” into a default case if no info is given about scanlines makes programmers handle it correctly |
14:50 |
erle |
because they have to know |
14:50 |
erle |
if you have a pixel array, it does not encode if 0,0 is top left, top right, bottom left, bottom right |
14:51 |
erle |
and if you remember school, 0,0 is bottom left |
14:51 |
erle |
in a coordinate system |
14:51 |
erle |
minetest internally does this too at some places i think |
14:52 |
erle |
any hardcoded assumption will randomly flip your images |
14:52 |
erle |
which is why imagemagick is shit (the devs are not willing to fix it lol) |
14:53 |
erle |
all i did was chose a default that is guaranteed to a) work with tga_encoder b) trip up people who think they don't have to care about scanline order |
14:53 |
erle |
basically i write code that makes it hard to pretend something is an edge case |
14:54 |
erle |
appguru, also as you may have noticed, you don't need to give scanline order, as long as you adhere to the traditional (you learned it in school) idea that 0,0 is the bottom left pixel |
14:54 |
ROllerozxa |
why *should* I need to care about scanline order in the first place? |
14:54 |
appguru |
I think in programming the convention is typically the opposite. |
14:55 |
appguru |
If you specify an image as a Lua table, it will be upside down in your code if you use a scanline order from bottom to top. |
14:55 |
erle |
ROllerozxa, because whenever you do not, you assume some default that breaks some use cases (e.g. the “images are randomly flipped” thing) |
14:56 |
erle |
the only thing that i did that trips you up was choose a default that is entirely appropriate for tga_encoder (because it assumes that default, i can not change it) |
14:57 |
erle |
i mean i can change it |
14:57 |
erle |
but then every image will be flipped upside down lol |
14:57 |
erle |
also i am pretty sure that the axes are labeled x and z and z goes up |
14:58 |
erle |
in any case “why should i care about scanline order” is like “why should i care about gamma” |
14:59 |
erle |
i.e. you ask it only if you have not explored the problem space enough of “well what happens if i don't care” |
15:01 |
erle |
ROllerozxa appguru apart from “hurr durr scanline order” anything else that trips you up about the API? |
15:02 |
erle |
i mean it can't be much higher level without being shit |
15:02 |
erle |
for example, the whole color format thing is also something that people don't want to care about, but have to |
15:02 |
erle |
not caring about it gets you the fliesizes that minetest.encode_png() produces ;) |
15:03 |
erle |
i mean, i fully expect most signs to contain exactly 2 colormap entries |
15:03 |
erle |
which means the pixels in the pixel array are an index into the colormap then |
15:03 |
erle |
which unfortunately looks exactly the same as a grayscale pixel array |
15:03 |
erle |
but that's life |
15:03 |
erle |
in largely untyped programming languages |
15:07 |
erle |
ROllerozxa appguru i'll leave it simmer for a few days, then put it on contentdb based on further feedback, so pls gib more of it |
15:12 |
erle |
tbh i have the feeling almost everyone who fancies themselves an EXPERT PROGRAMMER in some domain asks the same questions as the hacker news commenters, i.e. “why have / haven't you done this thing that is obviously (not) a good idea to a person with domain language” coming from someone seeing a thing for the first time |
15:13 |
erle |
like people who can't program at all don't do this. people who realize that their expertise in one domain does not transfer easily don't do it. but “i have drawn a bunch of textures with gimp so i know about file formats” is the sweet spot ;) |
15:13 |
erle |
(not directed to ROllerozxa and appguru, just a general observation) |
15:15 |
erle |
another good one is “i do not believe in benchmarks because the result is obviously false” (instead of pointing out what the problem with the benchmark code is; this is how you spot a huge ego) |
15:17 |
erle |
at work i once got issues with a project manager who was literally “i have done some stuff with raspberry pi, so i think you can do this in a few days”. i believe that person may no longer be allowed to question anyones estimates lol. |
15:18 |
erle |
i meant “a person with domain knowledge” not “a person with domain language” |
15:41 |
|
jaca122 joined #minetest |
15:53 |
|
bdju joined #minetest |
15:55 |
|
Fleckenstein joined #minetest |
16:09 |
erle |
for future reference: the reason why you want a line iterator and not a file when loading a font is because overriding a single glyph is common enough that it does not make sense and because having to handle file loading error cases sucks |
16:10 |
erle |
given that the .hex font format has one glyph per line, a line is the most obvious unit to iterate over |
16:10 |
erle |
other font file format loaders might use other separators than newlines or even other data structures, but even then it would make sense to separate file loading and parsing the input |
16:11 |
erle |
as it is, definitely, separate concerns |
16:11 |
erle |
also, notably, writing files is not done by filenames at all. you get a pixel array. |
16:12 |
erle |
the only reason that is stuffed into tga_encoder is because that is the easiest and fastest solution both in terms of CPU and in terms of mental load |
16:21 |
|
Fleckenstein joined #minetest |
16:30 |
|
fruitsnack joined #minetest |
16:43 |
|
appguru joined #minetest |
16:47 |
erle |
appguru see log for iterator explanation |
16:47 |
|
vampirefrog joined #minetest |
16:47 |
erle |
TL;DR: you want to load single glyphs often enough, the file format has one glyph per line |
16:47 |
erle |
appguru also the saving is done using tga_encoder and not using tga_unicode_renderer, that one merely gives you a pixel array |
16:49 |
|
vampirefrog left #minetest |
16:57 |
appguru |
erle: seems reasonable then |
16:59 |
|
Verticen joined #minetest |
16:59 |
erle |
appguru, any other comments? the only useful one i got so far was from someone who was like “how to do CJK variant selection” |
17:00 |
erle |
and i must admit i had not thought about this |
17:00 |
erle |
appguru in other words: if you would use this library to generate textures for signs in minetest, what would be missing or wrong API-wise? |
17:03 |
|
appguru joined #minetest |
17:07 |
appguru |
erle: I'm not familiar with Unicode rendering (I wouldn't have thought of CJK variants, for example). I'm not really missing anything at the moment. |
17:20 |
erle |
appguru anything you think that is absolutely stupid and should not be in there? |
17:20 |
erle |
again, in the context of a signs library |
17:20 |
erle |
or really any texture you can generate |
17:22 |
appguru |
I see exclusively `dofile`s without `get_modpath` in the code. Have you tested this in Minetest yet, from different working directories? |
17:25 |
appguru |
erle: ^ |
17:31 |
|
appguru joined #minetest |
17:32 |
|
mrkubax10 joined #minetest |
17:34 |
erle |
appguru i have, but ig i did not commit it! |
17:35 |
erle |
appguru first person to notice that the code in the repo does not work in minetest, conclusively proving no one ever tried to make a mod yet ;) |
17:35 |
erle |
appguru what's the minetest-safe idiom to do this both in and out of minetest? |
17:35 |
erle |
surely you have one |
17:35 |
erle |
as a LUA EXPERT |
17:35 |
|
LizzyFleck joined #minetest |
17:36 |
appguru |
I don't think there is a terribly simple "idiom", I usually end up writing myself some "load file" helper function which prepends the mod file if necessary (if minetest is present) |
17:39 |
|
LizzyFleck joined #minetest |
17:39 |
erle |
appguru, ok show me yours (after all, i showed you mine) |
17:39 |
erle |
your helper function i mean |
17:42 |
appguru |
erle: wait a sec |
17:42 |
appguru |
do you use luacheck? |
17:42 |
|
Fleckenstein joined #minetest |
17:42 |
appguru |
there seems to be some global pollution there |
17:43 |
Fleckenstein |
my phone was logged in as Fleckenstein |
17:43 |
Fleckenstein |
and i was wondering why i cant do it on laptop |
17:44 |
appguru |
hmm the global pollution probably is limited to examples.lua and test.lua where it may be considered fine |
17:45 |
appguru |
still usually you put all your global variables under an API table which has the same name as your mod, or you pass them around using require or similar mechanisms |
17:46 |
appguru |
for example you set an utf8 global variable to the utf8 functions you need in the format you need them - this would be incompatible with any other mod attempting to do the same |
17:47 |
appguru |
oh also why do you explicitly list 0-9 and A-F in your hex charsets? |
17:47 |
appguru |
why not use %x or if you only want to allow uppercase, [%dA-F] |
17:48 |
appguru |
also what's with the "coding: utf8" comment, that seems like a python thing you don't need in lua |
17:51 |
erle |
appguru, i did not use luacheck and the examples are stuff i just shat out with no regards for code quality |
17:54 |
erle |
appguru, the coding comment is an emacs thing |
17:55 |
erle |
appguru, the explicit list of hex chars is a funny thing. the code is easier to read that way. |
17:55 |
erle |
at least that is what i think |
17:55 |
erle |
very explicit |
17:55 |
erle |
in my experience people usually don't know lua patterns |
17:56 |
erle |
evidence: funny bugs where inserting stuff into formspecs hangs servers |
17:58 |
|
Fleckenstein joined #minetest |
18:03 |
|
appguru joined #minetest |
18:04 |
|
qqq joined #minetest |
18:22 |
|
Talkless joined #minetest |
18:35 |
|
Verticen joined #minetest |
18:40 |
|
PrairieWind joined #minetest |
18:40 |
|
PrairieWind joined #minetest |
18:59 |
|
Fleckenstein joined #minetest |
19:01 |
|
appguru joined #minetest |
19:45 |
|
jaca122 joined #minetest |
20:28 |
|
Leopold joined #minetest |
20:44 |
|
Fleckenstein joined #minetest |
20:58 |
MinetestBot |
[git] chmodsayshello -> minetest/minetest: Send ever lasting particle spawners to all players (#13774) 294ad98 https://github.com/minetest/minetest/commit/294ad987763014c5d20d4260b76fee831581c87a (2023-09-02T20:58:11Z) |
21:02 |
MinetestBot |
[git] grorp -> minetest/minetest: Rewrite the gamebar (#13768) 83b85ba https://github.com/minetest/minetest/commit/83b85ba16aaab7bddc479beada4ca3af9fa54a1b (2023-09-02T21:02:02Z) |
21:25 |
|
erle joined #minetest |
21:51 |
|
ShadowNinja joined #minetest |
22:34 |
|
panwolfram joined #minetest |
22:59 |
|
YuGiOhJCJ joined #minetest |
23:04 |
|
hook54321 joined #minetest |
23:39 |
|
sys4 joined #minetest |