←2019-11-11 2019-11-12 2019-11-13→ ↑2019 ↑all
00:02:32 -!- FreeFull has quit.
00:16:44 <int-e> moerjaning
00:17:17 <oerjan> Sic transit Lucrezia
00:17:41 <oerjan> mornint-e
00:18:07 <int-e> Oh I forgot about GG yesterday.
00:18:52 -!- Frater_EST has left.
00:20:06 <int-e> Looks great.
00:21:26 <int-e> And I guess the haircut settles who is who.
00:27:22 <oerjan> unless the clank lucrezia managed to make more copies, this leaves only the Zola copy on the run. which is not in control. hopefully.
00:27:56 <oerjan> (if it _does_ gain control there would be a danger of it becoming a queen too)
00:28:49 <int-e> 3 months from discovery (http://www.girlgeniusonline.com/comic.php?date=20190809) to... well, maybe defeat.
00:29:35 <int-e> We could also have two roaming souls as a result.
00:29:44 <int-e> Just to keep things messy.
00:38:54 -!- ashtons has joined.
00:39:03 <ashtons> hello
00:41:43 <oerjan> hi
00:42:07 <oerjan> `relcome ashtons
00:42:09 <HackEso> ashtons: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: <https://esolangs.org/>. (For the other kind of esoterica, try #esoteric on EFnet or DALnet.)
00:42:42 <ashtons> :) i just came from the wiki
00:43:51 <shachaf> `5 5 w
00:44:08 <HackEso> 1/2:indonesia//Indonesia is a large island country in Asia and the world's most populous muslim country. Its major export is rayon textile from the Indonesian fnord. \ hodl//Hodl ym bere, I'ev gto thsi! \ wiki//The wiki is at <https://esolangs.org/>. \ hash 2346ad27d7568ba9896f1b7da6b5991251debdf2//hash 2346ad27d7568ba9896f1b7da6b5991251debdf2 \ canary//A canary is a small bright yellow chicken that dwells in deep caves. Unlike bats,
00:44:25 <ashtons> I've actually been working on my own esolang, but I don't really know what to call it yet.
00:45:21 <int-e> `n
00:45:21 <HackEso> 2/2: canaries are oriented right way up, unless they're pining for the fjords. \ ..............................................................................................................................................................................................................................................................................................................................................................................
00:45:38 <ashtons> anybody got tips for naming esolangs? cause i suck at naming stuff
00:45:53 <shachaf> int-e: what did you do..............................................................................................................................................................................................................................................................................................................................................................................
00:46:01 <int-e> shachaf: I don't know.
00:46:03 <int-e> `n
00:46:04 <HackEso> 1/2:indonesia//Indonesia is a large island country in Asia and the world's most populous muslim country. Its major export is rayon textile from the Indonesian fnord. \ hodl//Hodl ym bere, I'ev gto thsi! \ wiki//The wiki is at <https://esolangs.org/>. \ hash 2346ad27d7568ba9896f1b7da6b5991251debdf2//hash 2346ad27d7568ba9896f1b7da6b5991251debdf2 \ canary//A canary is a small bright yellow chicken that dwells in deep caves. Unlike bats,
00:46:09 <ashtons> i have no idea what is going on
00:46:17 <int-e> Why does it cycle.
00:46:35 <int-e> ashtons: HackEso is a bot. ` is its command prefix.
00:46:44 <ashtons> ah
00:46:50 <ashtons> `h
00:46:55 <ashtons> `help
00:46:55 <HackEso> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch [<output-file>] <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
00:47:10 <ashtons> `echo hello
00:47:11 <HackEso> hello
00:47:17 <int-e> ashtons: And well... it has a bunch of less and more obscure commands.
00:47:32 <ashtons> `man 2 waitpid
00:47:33 <HackEso> Nice try.
00:47:33 <shachaf> int-e: What should it do instead?
00:47:40 <int-e> shachaf: stop
00:47:53 <shachaf> `cat bin/n
00:47:54 <HackEso> line="${1-$(cat /hackenv/tmp/spline)}"; len="$(awk 'END{print NR}' /hackenv/tmp/spout)"; echo -n "$line/$len:"; sed -n "${line}{p;q}" /hackenv/tmp/spout; echo "$((line<len?line+1:1))" > /hackenv/tmp/spline
00:47:57 <ashtons> i was not expecting that response
00:48:07 <HackEso> No output.
00:48:20 <shachaf> You could make it stop, I guess?
00:48:22 <ashtons> `$PATH
00:48:23 <HackEso> ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: $PATH: not found
00:48:28 <shachaf> It has to print something.
00:48:29 <int-e> `cat bin/man
00:48:30 <HackEso> ​#!/bin/sh \ echo Nice try.
00:48:35 <ashtons> `echo $PATH
00:48:36 <HackEso> ​$PATH
00:48:46 <int-e> `` echo $PATH
00:48:46 <ashtons> :\
00:48:47 <HackEso> ​/hackenv/bin:/usr/bin:/bin
00:48:55 <int-e> `cat bin/`
00:48:56 <HackEso> ​#!/bin/bash \ cmd="${1-quote}" \ TIMEFORMAT="real: %lR, user: %lU, sys: %lS" \ shopt -s extglob globstar \ eval -- "$cmd" | rnooodl
00:49:10 <int-e> it's all perrrfectly logical.
00:49:14 <ashtons> `echo banana
00:49:14 <HackEso> banana
00:49:36 <shachaf> ``
00:49:37 <HackEso> 652) <shachaf> fizzie: What kind of speech recognition do you do? <shachaf> If you only need to recognize famous speeches, like Churchill or something, it should be pretty easy.
00:49:47 <int-e> shachaf: I take it back.
00:49:47 <shachaf> Golly.
00:50:08 -!- kspalaiologos has quit (Ping timeout: 268 seconds).
00:50:10 <ashtons> `touch banana.txt
00:50:17 <int-e> `? prefixes
00:50:17 <HackEso> No output.
00:50:19 <HackEso> Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ?, thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ .
00:50:40 <ashtons> `ls
00:50:41 <HackEso> a.out \ banana.txt \ bin \ canary \ emoticons \ esobible \ etc \ evil \ f \ factor \ good \ hw \ ibin \ interps \ izash.c \ karma \ le \ lib \ misle \ paste \ ply-3.8 \ quines \ quinor \ quotes \ share \ src \ test2 \ testfile \ tmflry \ tmp \ wisdom
00:50:46 <int-e> `url /
00:50:47 <HackEso> File is outside web-viewable filesystem repository.
00:50:49 <int-e> `url .
00:50:50 <HackEso> File is outside web-viewable filesystem repository.
00:50:50 -!- arseniiv has quit (Ping timeout: 240 seconds).
00:50:53 <int-e> aww
00:51:06 <ashtons> so how do i put stuff in banana.txt now
00:51:34 <int-e> I wanted this output: https://hack.esolangs.org/repo/file/tip/
00:51:35 <kmc> what's a banana.txt
00:51:35 <ashtons> if i remember correctly you can pipe output from echo into a file
00:51:44 <ashtons> i made it make a file called banana.txt
00:52:48 <oerjan> `url
00:52:49 <HackEso> https://hack.esolangs.org/repo/
00:53:29 <ashtons> `echo "bananas are awesome" >> banana.txt
00:53:29 <HackEso> ​"bananas are awesome" >> banana.txt
00:53:37 <ashtons> `cat banana.txt
00:53:37 <HackEso> No output.
00:53:43 <ashtons> :(
00:53:52 <int-e> `` rm a.out izhash.c test2 testfile
00:53:54 <HackEso> rm: cannot remove 'izhash.c': No such file or directory
00:54:06 <int-e> `` rm izash.c
00:54:11 <HackEso> No output.
00:54:14 <kmc> F
00:54:21 <ashtons> `echo "bananas are awesome" > banana.txt
00:54:22 <HackEso> ​"bananas are awesome" > banana.txt
00:54:31 <int-e> kmc: yes?
00:54:47 <kmc> `` ls wisdom | paste
00:54:48 <HackEso> https://hack.esolangs.org/tmp/paste/paste.6286
00:54:59 <kmc> `` /bin/ls wisdom | paste
00:55:00 <HackEso> https://hack.esolangs.org/tmp/paste/paste.9161
00:55:15 <oerjan> ashtons: ` alone only takes a single command argument and no shell syntax
00:55:28 <int-e> ashtons: the trick is to use `` [note the space]. And you can experiment in the tmp/ subdirectory... then it won't end up under version control.
00:55:43 <ashtons> okay
00:55:57 <shachaf> `? shaventions
00:55:58 <HackEso> Shaventions include: before/now/lastfiles, culprits, hog/{h,d}oag, le//rn, tmp/, mk/mkx, {s,p}led/sedlast, spore/spam/speek/sport/1/4/5, edit. Taneb did not invent them yet.
00:56:02 <kmc> `` echo 'Big beats are the best, get high all the time.' > wisdom/'big beat manifesto'
00:56:06 <kmc> `? big beat manifesto
00:56:07 <HackEso> No output.
00:56:08 <HackEso> Big beats are the best, get high all the time.
00:56:19 <shachaf> `? le/rn
00:56:20 <HackEso> le/rn makes creating wisdom entries manually a thing of the past. Usage: `le/[/]rn <key>//<wisdom>
00:56:29 <fizzie> As for the naming, that's easy.
00:56:30 <fizzie> `langs
00:56:32 <HackEso> lambrelang doverlang befactionlang crablang pathlang wadelang wherlang 2dblang adepoullang sumlang fmandlang lxxxlang netwlang bajolang minlang bfreetonlang ttilang qwedlang pointlang frualang
00:56:33 <ashtons> ` ` echo "Bananas" > banana.txt
00:56:34 <HackEso> ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: : not found
00:56:38 <kmc> `coins
00:56:40 <HackEso> hifhcoin trincoin vcoin catcoin concoin julicoin liberacoin vhccoin symeshauvecoin rectpcoin netwofifcoin forthcoin thisesocoin peterbcoin liacoin aeonstrolcoin lopocoin duricoin paxcoin auresecoin
00:56:43 <shachaf> `cbt langs
00:56:44 <HackEso> words ${1---eng-1M --esolangs 20} | sed -re 's/( |$)/lang\1/g'
00:56:50 <kmc> catcoin
00:56:54 <ashtons> :/
00:57:18 <fizzie> Presumably that exists already.
00:57:20 <int-e> `mk tmp/banana.txt//Bananas are tasty but not very juicy.
00:57:20 <HackEso> tmp/banana.txt
00:57:27 <int-e> `cat tmp/banana.txt
00:57:28 <HackEso> Bananas are tasty but not very juicy.
00:57:33 -!- atslash has quit (Quit: This computer has gone to sleep).
00:57:39 <ashtons> :/
00:58:21 <int-e> `` echo -n "Bananas cause far fewer accidents than cartoons may lead you to believe." > tmp/banana.txt
00:58:22 <HackEso> No output.
00:58:29 <int-e> `cat tmp/banana.txt
00:58:30 <HackEso> Bananas cause far fewer accidents than cartoons may lead you to believe.
00:58:49 <oerjan> `? banana
00:58:50 <HackEso> Bananananananana BATMAN!
00:59:36 <ashtons> ` ` echo -n "Bananas taste good and have potassium, but they bruise kinda easily. I still like to eat them though :)" > tmp/banana.txt
00:59:36 <HackEso> ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: : not found
00:59:41 <ashtons> seriously
00:59:57 <int-e> ashtons: there's no space *between* the two backticks.
01:00:10 <ashtons> `` echo -n "Bananas taste good and have potassium, but they bruise kinda easily. I still like to eat them though :)" > tmp/banana.txt
01:00:13 <HackEso> No output.
01:00:20 <ashtons> cat tmp/banana.txt
01:00:44 <ashtons> wait
01:00:50 <int-e> The backtick is followed by a command name to be executed, then a space, and then the command's argument.
01:00:54 <ashtons> `` cat tmp/banana.txt
01:00:55 <HackEso> Bananas taste good and have potassium, but they bruise kinda easily. I still like to eat them though :)
01:01:15 <ashtons> right
01:01:15 <int-e> So `` foo executes the ` command with parameter "foo". Which is why this is relevant:
01:01:18 <int-e> `cat bin/`
01:01:19 <HackEso> ​#!/bin/bash \ cmd="${1-quote}" \ TIMEFORMAT="real: %lR, user: %lU, sys: %lS" \ shopt -s extglob globstar \ eval -- "$cmd" | rnooodl
01:02:30 <ashtons> nice
01:02:52 <int-e> (Of course that's a simplification. Some commands are built into the bot, like `help)
01:02:59 -!- Frater_EST has joined.
01:03:12 <ashtons> will it recognize, say...
01:03:14 <ashtons> `halp
01:03:15 <HackEso> No halp 4 u
01:03:34 <ashtons> hahaha i was not expecting that
01:04:06 <shachaf> `dobg halp
01:04:09 <HackEso> 6613:2016-01-29 <mromän> echo "echo No halp 4 u \\$1" >> bin/halp \ 6612:2016-01-29 <mromän> echo "#!/bin/sh" > bin/halp \ 6611:2016-01-29 <mromän> echo "echo $1" >> bin/halp \ 6610:2016-01-29 <mromän> echo "echo No halp 4 u" >> bin/halp \ 6609:2016-01-29 <mromän> echo "#!/bin/sh" > bin/halp \ 6608:2016-01-29 <mromän> chmod +x bin/halp \ 6607:2016-01-29 <mromän> echo "help" >> bin/halp \ 6606:2016-01-29 <mromän> echo "#!/bin/sh
01:05:49 <ashtons> i just remembered why I came to this chatroom :\
01:06:31 <int-e> naming is hard
01:06:47 <ashtons> very hard
01:07:03 <int-e> and also really easy :P
01:07:32 <int-e> (as fizzie pointed out above... just generate something random)
01:08:01 <shachaf> Why random? Just generate increasing names.
01:08:11 <ashtons> had to scroll up to find that
01:08:38 <shachaf> You only get ~sqrt(n) names before a collision if you do it randomly.
01:08:48 <ashtons> okay then
01:08:55 <int-e> Right. The first 26 variable names are easy. Then it becomes a bit harder.
01:09:27 <shachaf> 1112111 variables should be enough for anyone.
01:09:51 <int-e> Those aren't all assigned, are they.
01:10:08 <shachaf> Wait, I meant 1114112.
01:10:22 <int-e> > length ['\0'..]
01:10:24 <lambdabot> 1114112
01:10:30 <shachaf> > 2^16*17
01:10:32 <lambdabot> 1114112
01:10:55 <shachaf> Some of those aren't even assignable (like the surrogate code points for UTF-16).
01:12:16 <ashtons> right now i'm wondering if there's a program online somewhere that can randomly generate a plausable-sounding word
01:12:18 <ashtons> probably not
01:12:35 <int-e> `german
01:12:36 <HackEso> ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: german: not found
01:12:40 <int-e> hrm
01:13:18 <fizzie> `words --german 10
01:13:20 <HackEso> ausly hörderensgeschönhein rungsvorschen paraktion gottag vorschaftsynopen condres bezieren prodendustierben indi
01:13:27 <shachaf> `words --english 10
01:13:28 <HackEso> Unknown option: english
01:13:32 <int-e> fizzie knows, of course.
01:13:33 <shachaf> oh no
01:13:35 <fizzie> `words --list
01:13:35 <HackEso> valid datasets: --brazilian --bulgarian --canadian-english-insane --catalan --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --esolangs --finnish --french --gaelic --german --german-medical --hebrew --irish --italian --manx --norwegian --ogerman --opcode --pokemon --polish --portuguese --russian --spanish --swedish \ default: --eng-1M
01:13:38 <shachaf> too obscure, probably?
01:13:40 <shachaf> `words --hebrew 10
01:13:41 <HackEso> ​האור וסברתי העתקו וטיות דפרק בתפול בנלו חקרו שיש מאים
01:13:42 <ashtons> `words --help
01:13:42 <HackEso> Usage: words [-dhNo] [DATASETS...] [NUMBER_OF_WORDS] \ \ options: \ -l, --list list valid datasets \ -d, --debug debugging output \ -N, --dont-normalize don't normalize frequencies when combining \ multiple Markov models; this has the effect \ of making larger datasets more influential \ -o, --target-offset change the target length offset used in the \
01:13:54 <shachaf> `words --eng-us 10
01:13:54 <HackEso> kanaticule chrin yourg xacted skeypl rati usmarkiequa lando preni gliardrivi
01:14:12 <shachaf> I gotta say those aren't very plausible.
01:14:12 <int-e> Hmm, german... the trailing "ly" is odd.
01:14:20 <ashtons> is there a way to specify word length?
01:14:27 <shachaf> Some of the Hebrew ones are more plausible (several are actual words).
01:14:36 <int-e> and "condres" doesn't look german at all.
01:14:40 <fizzie> Not directly, but you can affect the standard distribution with -o.
01:14:43 <ashtons> cause at this point i don't care much if it's pausible, more so if it's pronouncible
01:14:48 <fizzie> `words --eng-all -o 10
01:14:50 <HackEso> fathfieldobferlogly
01:14:54 <int-e> (But of course we have loan words, so maybe it learned from those.)
01:14:56 <fizzie> `words --eng-all -o 12 10
01:14:57 <HackEso> avrailobeddleded gbowingenetitatexicochoodfron whlcandjhancequane expuriaprotyletablemean praethylludient dirconcianeogeora extrisatingbilissej matripublecescraticator towhyneckalnarawn humindltloniantioning
01:15:03 <shachaf> All words are pronouncible, some only once.
01:15:13 <ashtons> `words --eng-us -o 16
01:15:13 <fizzie> The English isn't doing so well.
01:15:14 <HackEso> affcloshnavdaupraetterban
01:15:27 <ashtons> `words --eng-us -o 16 16
01:15:28 <HackEso> grsedaledwardingerencing microsyarnyamaiary govardisawendeisation supjtherianticouncestrkakenrodi splarrowetkeotegenspielin focessolundrendorfempte asgimizedeemajorissed kuedaugauctivinctivossen allowtiendocumenoloxalre nenrinderinitroducenzelet feraytternianotersomatione iithaltlleroundedpoiloselege theritoidendefmeditegoritanci incurallctivingedivitrepat armicrouhlerowitat dubalatriumqueftremene
01:15:32 <fizzie> The Finnish words are sometimes pretty plausible, sometimes completely not (it doesn't understand vowel harmony).
01:15:39 <fizzie> `words --finnish 10
01:15:40 <HackEso> kukimästävilta venyvinä loittavaltta latasointävä pisemme aamuvanani barrosoluovi himpääsi aforittelevikseen kuvilläsi
01:15:43 <int-e> fizzie: 16 may be too long
01:15:58 <int-e> hmm
01:16:06 <fizzie> "venyvinä" is a real word, as is arguably "aamuvanani".
01:16:27 <int-e> Oh that's the number of words. Why are the words so long though...
01:16:37 <ashtons> `words --eng-us -o 16 4
01:16:39 <HackEso> pirabildualinendently cretophiquakneyagammisperp nonpsyconvespectathebutstonch mpcarockentdrumminerievraneandu
01:17:11 <int-e> `words --eng-us -o 4 16
01:17:12 <HackEso> ianaximurrexcluaen unettionaliniallin thanincrgonogeeder nambryadeon uuoitewoodli iyingtonelightef homicrossarthe narethylphotoph ofcentakethemke immunabild earumcumburythnol vaidhainia lenallyflyridge shonicataque threding trisiticantum
01:17:23 <int-e> hmm. no clue what -o does.
01:17:30 <fizzie> For the record, -o isn't the target length, it's an offset.
01:17:35 <fizzie> `words --eng-us -o 0 10
01:17:36 <HackEso> fiverlike grphildt sutulari musenseguilimizi crossamg ringersonemee waainesindele duatiored maring deckley
01:17:37 <int-e> `` words --help | paste
01:17:38 <HackEso> https://hack.esolangs.org/tmp/paste/paste.2803
01:17:43 <fizzie> `words --eng-us -o -4 10
01:17:44 <HackEso> barrie bouf confraga disibiliary libar mine scipisar kid potedeconoxim univar
01:17:54 <int-e> `words --eng-us -o -4 16
01:17:55 <fizzie> That looks pretty reasonable.
01:17:55 <HackEso> liedisal kard peeck ramia besermo fatio orkmannarsoninewmant need edit nung hujici lusiedrintr gliaccal stru pertrever onemijde
01:17:59 <fizzie> Lengthwise.
01:18:07 <int-e> oh sorry
01:18:27 <int-e> (You just did that while I went to read the paste)
01:18:31 <fizzie> FWIW, the length modeling isn't particularly great, it's a restriction of character n-grams.
01:19:01 <fizzie> I think `words had some very ad-hoc hack for lengths.
01:19:21 <ashtons> is there a way to specify length in letters?
01:19:36 <fizzie> No, but you can just generate and filter.
01:20:00 <ashtons> gotcha
01:20:19 <fizzie> It's not really possible to have an exact target length for the kind of model it uses, unless you just do a hard truncate, and that way the word doesn't end the way words normally end.
01:23:45 <ashtons> `` words --eng-us 8 | grep -e /([a-z]{16})/
01:23:46 <HackEso> ​/hackenv/bin/`: eval: line 5: syntax error near unexpected token `(' \ /hackenv/bin/`: eval: line 5: `words --eng-us 8 | grep -e /([a-z]{16})/'
01:24:26 <int-e> just drop the /( and )/
01:24:34 <ashtons> `` words --eng-us 8 | grep -e [a-z]{16}
01:24:35 <HackEso> No output.
01:24:38 <ashtons> `` words --eng-us 8 | grep -e [a-z]{16}
01:24:39 <HackEso> No output.
01:24:43 <int-e> actually, hmm
01:24:46 <ashtons> `` words --eng-us 256 | grep -e [a-z]{16}
01:24:47 <HackEso> No output.
01:24:53 <ashtons> >:(
01:25:19 <int-e> Ah, of course... it puts everything on one line.
01:26:17 <ashtons> Okay, so how do we deal with that?
01:27:31 <int-e> `` echo $(words --eng-us 256 | tr \ \\n | grep -e ^[a-z]{16}\$)
01:27:32 <HackEso> No output.
01:27:49 <ashtons> `` words --eng-us 256 | grep -e [a-z]{16} > wordlist.txt
01:27:51 <HackEso> No output.
01:27:58 <ashtons> cat wordlist.txt
01:28:08 <ashtons> `cat wordlist.txt
01:28:09 <HackEso> No output.
01:28:15 <ashtons> >:(
01:28:18 -!- Frater_EST has quit (Read error: Connection reset by peer).
01:28:51 <kmc> ask your doctor if potedeconoxim is right for you
01:28:56 <shachaf> `rm wordlist.txt
01:28:57 <HackEso> No output.
01:29:06 <kmc> actually, is there a words dict for drug names? that would be fun
01:29:24 <shachaf> I recommend doing experiments like that in tmp/ (and probably also in /msg).
01:29:35 <ashtons> ask your doctor if pseudobanadeconoxim is right for you
01:29:47 <kmc> ask your doctor if bananadine is right for you
01:29:52 <kmc> can one create new dicts easily?
01:29:54 <ashtons> side effects may include turning into a banana
01:29:56 <kmc> `paste bin/words
01:29:57 <HackEso> https://hack.esolangs.org/repo/file/tip/bin/words
01:31:06 <int-e> `` echo $(words --eng-us -o 6 256 | tr \ \\n | grep -E '^[a-z]{16}$')
01:31:07 <HackEso> wenkephriskolock medebederabbaseq hypotaryleterney enticadoralfhoea ininograntanther
01:31:14 <kmc> `paste share/WordData/eng-us
01:31:15 <HackEso> https://hack.esolangs.org/repo/file/tip/share/WordData/eng-us
01:31:22 <shachaf> `url share/WordData/Eng1M
01:31:23 <HackEso> https://hack.esolangs.org/repo/file/tip/share/WordData/Eng1M
01:31:29 <kmc> grump
01:31:39 -!- Frater_EST has joined.
01:31:41 <kmc> how do i create a data file
01:31:54 <int-e> `help fetch
01:31:56 <HackEso> ​`fetch [<output-file>] <URL> downloads files, and is the only web access currently available in HackEgo. It is a special builtin that cannot be called from other commands. See also `edit.
01:32:01 -!- Frater_EST has quit (Read error: Connection reset by peer).
01:32:04 <shachaf> `doag share/WordData/EngUs
01:32:09 <HackEso> 0:2012-02-16 Initïal import.
01:32:25 <ashtons> `` echo $(words --eng-us -o 6 256 | tr \ \\n | grep -E '^[a-z]{16}$')
01:32:25 <kmc> i mean how do i generate the file
01:32:26 <HackEso> vededesigtnisult letoriumfreynyne ctorthouaruntero semimalkylamotun
01:32:43 <shachaf> Looks like it's just some n-gram thing.
01:32:51 <int-e> ashtons: you can do this in private chat with HackEso btw
01:33:01 <ashtons> oh ok
01:33:13 <shachaf> EngUs: perl Storable (v0.7) data (major 2) (minor 8)
01:33:14 <int-e> (but please do not modify the file system in private chat, as a courtesy to the rest of us)
01:33:19 -!- Frater_EST has joined.
01:33:22 <ashtons> ok
01:33:22 <shachaf> so you create it with perl hth
01:33:30 -!- Frater_EST has left.
01:33:49 <int-e> fizzie is the ngram master
01:34:44 <int-e> (but nitia is ancient, so it's possible that he doesn't remember)
01:35:07 <int-e> `? nitia
01:35:09 <HackEso> nitia is the inventor of all things. The BBC invented her.
01:36:24 <ashtons> i have found my esolang's name. psychairefatback!
01:36:35 <oerjan> rolls off the tongue
01:36:55 <fizzie> shachaf: kmc: Yes, you create the file with Perl.
01:37:08 <fizzie> I did add a dataset to `words semi-recently.
01:37:57 <fizzie> I don't have the original tools, but it wasn't too hard to reverse-engineer. I think I did it with a Perl oneliner?
01:38:05 <int-e> oerjan: What are nitia's initials?
01:38:30 <fizzie> I think I probably saved the command somewhere.
01:38:32 <shachaf> Nitia never does anything, and yet through it all things are done.
01:38:50 <fizzie> `words --opcode 10
01:38:51 <HackEso> HINT_NOP54 PUSHFD INVEPT VCMPNGT_UQPD UD0 VFMSUBP VANDD BLEND FDIVP PMULLD
01:39:51 <fizzie> Ah, here we go.
01:40:04 <fizzie> cat ../x86.txt | tr a-z A-Z | perl -ne 'use Data::Dumper; use Storable; chomp; $len{length($_)}++; @w = split //, " $_ "; for ($i = 0; $i+3 < @w; $i++) { $c = $w[$i].$w[$i+1].$w[$i+2]; $freq{$c}->{$w[$i+3]}++; } END { store([\%freq,\%len], "Opcode"); }'
01:41:45 <fizzie> That should create a file compatible with `words; then you just include "file" it the script's @options list; it will automatically titlecase-ish it and look it up from "share/WordData/File"
01:41:47 <shachaf> fizzie: I spent a few minutes trying to figure out enough Perl to do it and then decided not to.
01:42:44 <int-e> How Markovian.
01:43:15 -!- Frater_EST has joined.
01:43:47 -!- Frater_EST has left.
01:45:20 <esowiki> [[User:Ashtons]] N https://esolangs.org/w/index.php?oldid=67024 * Ashtons * (+28) Created page with "hi. i'm ashton. how ya doing"
01:47:52 -!- Frater_EST has joined.
01:48:10 -!- Frater_EST has left.
02:01:54 <fizzie> Also you don't actually need Data::Dumper, I think I used that just while debugging.
02:02:27 -!- xkapastel has quit (Quit: Connection closed for inactivity).
02:13:21 <oerjan> today's schlock mercenary should be ignored and talked about. anything else Hurtz.
02:13:28 <oerjan> *not talked
02:14:51 <shachaf> `5 w
02:14:53 <HackEso> 1/2:taneb consistency//Taneb consistency is a consistency that is weaker than all other consistencies. Taneb invented it. \ graham's number//Graham's number isn't as delicious as his crackers. \ cello//The high level structure of Cello projects is inspired by /Haskell/, while the syntax and semantics are inspired by /Python/ and /Obj-C/. \ kanada//Your bankers' vain plazas never nurtured
02:14:59 <shachaf> `n
02:15:00 <HackEso> 2/2:no one / And your concrete expanses lay fallow in the sun / And your cities all collapsing while your corrupt mayors shrug \ ichtymology//Ichtymology is like itymology, but even more fishy.
02:15:11 <shachaf> `cwlprits graham's number
02:15:13 <HackEso> oerjän \oren̈\
02:15:30 <shachaf> `? itymology
02:15:31 <HackEso> Itymology is the science of understanding the true meaning of a statement.
02:20:10 -!- tswett[m] has quit (Changing host).
02:20:10 -!- tswett[m] has joined.
02:20:10 -!- tswett[m] has quit (Changing host).
02:20:10 -!- tswett[m] has joined.
02:22:39 <oerjan> also, petey should totally fab some dronuri moles and reflect some trust on the pa'anuri.
02:23:02 <esowiki> [[Psychairefatback]] N https://esolangs.org/w/index.php?oldid=67025 * Ashtons * (+3399) made the page for my esolang!
02:23:16 -!- FraterEST has joined.
02:24:11 <esowiki> [[Language list]] M https://esolangs.org/w/index.php?diff=67026&oldid=67004 * Ashtons * (+23) /* P */
02:24:31 <esowiki> [[User:Ashtons]] https://esolangs.org/w/index.php?diff=67027&oldid=67024 * Ashtons * (+29)
02:25:02 <esowiki> [[User:Ashtons]] https://esolangs.org/w/index.php?diff=67028&oldid=67027 * Ashtons * (+4)
02:25:27 <ashtons> i see yall see the page i made :p
02:33:46 <int-e> oerjan: I'm waiting for Schlock's display of his innate diplomatic and cross-species communication skills (as displayed in the very first strip. https://www.schlockmercenary.com/2000-06-12)
02:40:09 <oerjan> that too.
02:43:36 <int-e> oerjan: Actually, rather than dronuri (nice one), isn't it more likely that we'll get an antenna instead.
02:44:15 <int-e> Have I complained already that modern x86 CPUs are insane?
02:47:32 <int-e> Ah no, I'm barking up the wrong tree. GCC's vectorizing the code I'm looking at, so doing it manually has little effect.
02:48:19 <int-e> The sentiment is still there though... you can squeeze so many instructions into the time of one RAM access.
02:53:28 <oerjan> int-e: dronuri is the term the pa'anuri used for them
02:55:54 <oerjan> although you're right the fabber might have had the plans for the antennas too
03:11:15 -!- FraterEST has quit (Read error: Connection reset by peer).
03:13:01 -!- Frater_EST has joined.
03:15:44 -!- ashtons has quit (Remote host closed the connection).
03:19:23 <fizzie> The other day I learned that a "dronie" is a selfie taken with a drone.
03:28:56 <int-e> meh. of course it is
03:31:15 <int-e> So a speedie is a selfie taken by speeding into a speed camera.
03:38:19 -!- Frater_EST has quit (Read error: Connection reset by peer).
03:40:49 -!- Frater_EST has joined.
03:41:26 <shachaf> whoa, my solver is 5x faster than minisat on these instances.
03:41:28 <shachaf> Despite just being a worse version of minisat.
03:43:06 <shachaf> Oh, if I disable restarts minisat solves it 30x faster than my solver (which doesn't do restarts). So probably restarts are just not well-suited or something.
03:43:45 <shachaf> Wait, no, only 2x faster.
03:48:00 -!- oerjan has quit (Quit: Nite).
03:55:38 -!- imode has joined.
04:23:03 -!- Frater_EST has left.
04:23:23 -!- ais523 has joined.
04:24:00 <ais523> @messages?
04:24:00 <lambdabot> Sorry, no messages today.
04:24:11 -!- ais523 has quit (Client Quit).
04:44:54 -!- TellsTogo has joined.
05:18:35 -!- Sgeo__ has joined.
05:21:37 -!- Sgeo_ has quit (Ping timeout: 240 seconds).
06:04:41 -!- imode has quit (Ping timeout: 276 seconds).
06:30:44 <int-e> @metar lowi
06:30:45 <lambdabot> LOWI 120620Z VRB01KT 5000 -RASN BR FEW005 SCT007 BKN013 01/00 Q1010 TEMPO 3000 SNRA BKN008
06:31:05 <int-e> (eww)
07:21:40 -!- nfd9001 has joined.
07:22:57 -!- aloril has quit (Ping timeout: 268 seconds).
07:27:24 -!- aloril has joined.
07:31:40 -!- nfd9001 has quit (Quit: Leaving).
07:35:22 -!- kritixilithos has joined.
07:43:16 -!- Deewiant has quit (Ping timeout: 264 seconds).
07:54:05 -!- Sgeo_ has joined.
07:56:57 -!- Sgeo__ has quit (Ping timeout: 240 seconds).
07:58:29 -!- kritixilithos has quit (Quit:  ).
08:07:19 -!- b_jonas has joined.
08:07:24 <b_jonas> `whatis waitpid
08:07:25 <HackEso> waitpid(2) - wait for process to change state \ waitpid(3p) - wait for a child process to stop or terminate \ waitpid(3glibc) - Process Completion
08:07:26 <b_jonas> ashtons: ^
08:08:10 <b_jonas> `url
08:08:11 <HackEso> https://hack.esolangs.org/repo/
08:08:14 <b_jonas> int-e: ^
08:12:24 <b_jonas> int-e: not only that, but it won't generate more than a few dozen words with one command. you need a loop like ( for x in {1..10}; do words 16; done ) to generate 256 word.
08:12:33 <b_jonas> um... yeah, that's obviously not 16
08:12:35 <b_jonas> but you get the idea
08:35:59 <b_jonas> ``` (for x in {1..16}; do words --eng-US -o 6 16; done) | perl -we 'local$/; $s=<STDIN>; while($s=~/(\S+)/g){ push@{$l{length$1}},$1; }; $m=-1; for (sort keys%l) { if ($m<@{$l{$_}}) { $m=@{$l{$_}};$n=$_; } } print "@{$l{$n}}\n";' # if you want words of equal length
08:36:15 <HackEso> tegourneckstor heilcaiyarwink sphotosomoveri descarnallotel dutierundeutio anullockunsman larywaynelland herieclamasten achelsbotswerk piangewahander rotrontoonment renerthrinimre tumpanhomating restermalizing cepeiirginaido formeudongoetl grubbellizedcn denturandberen semirellafisin disatiralevsky hightsforciner tworticeptinum decommereofled pilaintrianden gentermathebra ocebaneysanath fielettedleryn methylsumnecke newchuligelief alzweihuumva
08:36:16 <b_jonas> ``` (for x in {1..16}; do words --eng-US -o 0 16; done) | perl -we 'local$/; $s=<STDIN>; while($s=~/(\S+)/g){ push@{$l{length$1}},$1; }; $m=-1; for (sort keys%l) { if ($m<@{$l{$_}}) { $m=@{$l{$_}};$n=$_; } } print "@{$l{$n}}\n";' # if you want words of equal length
08:36:23 <HackEso> codenovax changlyte atrimeter mazzoleve springrap boronlria sspressit ethylarve ashpeesal truchuval wageprile anadebled icizatite brombrina wennellin hemointer supennill folically kairendel ficaluene nooddered ihvrikaia upcrtamer reptackep deedjacke butyranth devavrana uaregunde cliovozdz ptureatte protoucbi camplaind
08:36:24 <b_jonas> ``` (for x in {1..16}; do words --eng-US -o -6 16; done) | perl -we 'local$/; $s=<STDIN>; while($s=~/(\S+)/g){ push@{$l{length$1}},$1; }; $m=-1; for (sort keys%l) { if ($m<@{$l{$_}}) { $m=@{$l{$_}};$n=$_; } } print "@{$l{$n}}\n";' # if you want words of equal length
08:36:32 <HackEso> smod rock atin tulu itne pton elkl boum fide tock biic obfc unlr wrai eige cond pyra pale kaun aveh fful amba goag ehun savi ysti nanl wref phag chan ning utlc thin ford trae fibe zuge unie pdog ting groe unit rooz dahi eron yuan ment coln huko agfa ditz midc chri rect enrl will port paug meth gada ling dore grod vert fted inte jina nnab bean ambo bibu tena anie firn
08:39:06 -!- b_jonas has quit (Quit: leaving).
09:34:12 -!- TellsTogo has quit (Remote host closed the connection).
09:51:24 <shachaf> `asm pext %rax, %rcx, %rdx
09:51:25 <HackEso> 0: c4 e2 f2 f5 d0 pext %rax,%rcx,%rdx
09:51:28 <shachaf> What an encoding.
09:56:20 <shachaf> It would be nice if `asm supported 32-bit x86.
09:56:29 -!- nico_nico_ has joined.
09:56:31 <shachaf> I guess c4 and c5 were les and lds?
10:00:03 -!- atslash has joined.
10:01:04 <shachaf> Oh, but VEX works even in 32-bit mode, which is why it inverts the initial bits, so they make an invalid modrm byte. I remember now.
10:08:24 -!- Deewiant has joined.
10:14:52 -!- nico_nico_ has quit (Quit: Leaving).
10:21:16 <shachaf> "VEX.LZ.F3.0F38.W1 F5 /r PEXT r64a, r64b, r/m64"
10:29:01 -!- arseniiv has joined.
11:12:35 -!- Sgeo__ has joined.
11:15:49 -!- Sgeo_ has quit (Ping timeout: 250 seconds).
11:58:40 -!- Sgeo_ has joined.
12:01:45 -!- Sgeo__ has quit (Ping timeout: 250 seconds).
12:02:16 -!- Melvar has quit (Quit: WeeChat 2.4).
12:13:03 -!- Melvar has joined.
12:38:57 -!- ddmm_ has quit (Remote host closed the connection).
12:39:07 -!- tswett[m] has quit (Read error: Connection reset by peer).
12:39:18 -!- wmww has quit (Read error: Connection reset by peer).
12:43:10 -!- Sgeo_ has quit (Read error: Connection reset by peer).
12:43:36 -!- Sgeo_ has joined.
12:46:05 -!- ArthurStrong has joined.
12:48:20 -!- mniip has quit (Ping timeout: 612 seconds).
12:51:29 -!- arseniiv has quit (Read error: Connection reset by peer).
12:51:46 -!- arseniiv has joined.
13:30:24 -!- mniip has joined.
13:34:44 -!- wmww has joined.
13:34:44 -!- tswett[m] has joined.
13:34:51 -!- ddmm_ has joined.
13:36:39 -!- arseniiv has quit (Ping timeout: 250 seconds).
13:46:02 -!- Melvar has quit (Ping timeout: 240 seconds).
13:46:29 -!- Melvar has joined.
13:49:12 -!- arseniiv has joined.
13:56:52 -!- tswett[m] has quit (Changing host).
13:56:52 -!- tswett[m] has joined.
13:56:52 -!- tswett[m] has quit (Changing host).
13:56:52 -!- tswett[m] has joined.
14:07:08 -!- Sgeo__ has joined.
14:09:16 -!- xkapastel has joined.
14:10:37 -!- Sgeo_ has quit (Ping timeout: 265 seconds).
14:11:38 -!- imode has joined.
14:21:15 -!- unlimiter has joined.
14:26:37 <Cale> Saw this digital painting on Reddit https://i.redd.it/ux27c13n73y31.jpg and decided to turn it into a magic card https://i.imgur.com/cf994At.png
14:31:43 <int-e> that must be one hell of a headache :P
14:32:09 -!- imode has quit (Ping timeout: 268 seconds).
14:34:47 -!- Frater_EST has joined.
14:46:14 -!- unlimiter has quit (Quit: WeeChat 2.6).
14:52:50 -!- kritixilithos has joined.
14:56:17 -!- arseniiv_ has joined.
14:59:25 -!- arseniiv has quit (Ping timeout: 250 seconds).
15:02:25 -!- imode has joined.
15:22:06 -!- imode has quit (Ping timeout: 268 seconds).
15:26:28 -!- imode has joined.
15:26:54 -!- hppavilion[1] has joined.
15:49:35 -!- Frater_EST has quit (Read error: Connection reset by peer).
15:50:12 -!- Frater_EST has joined.
15:59:10 -!- Frater_EST has quit (Read error: Connection reset by peer).
16:02:09 -!- Frater_EST has joined.
16:11:36 -!- imode has quit (Ping timeout: 240 seconds).
16:15:20 <esowiki> [[Thue]] M https://esolangs.org/w/index.php?diff=67029&oldid=63578 * PaniniTheDeveloper * (+11)
16:19:52 -!- Frater_EST has quit (Read error: Connection reset by peer).
16:22:15 -!- Frater_EST has joined.
16:23:19 -!- nico_nico has joined.
16:23:41 -!- nico_nico has quit (Client Quit).
16:39:14 -!- kritixilithos has quit (Remote host closed the connection).
16:39:37 -!- kritixilithos has joined.
16:41:21 -!- imode has joined.
16:55:34 -!- Sgeo_ has joined.
16:56:53 -!- kspalaiologos has joined.
16:58:49 -!- Sgeo__ has quit (Ping timeout: 265 seconds).
17:04:37 -!- hppavilion[1] has quit (Ping timeout: 265 seconds).
17:29:19 -!- hppavilion[1] has joined.
17:37:00 -!- imode has quit (Ping timeout: 265 seconds).
17:49:35 -!- hppavilion[2] has joined.
17:52:57 -!- hppavilion[1] has quit (Ping timeout: 265 seconds).
17:54:33 -!- nico_nico has joined.
17:59:35 -!- b_jonas has joined.
17:59:50 <b_jonas> shachaf: is that how the instruction encoding works? I didn't know that
18:02:15 -!- nico_nico has quit (Quit: Leaving).
18:13:40 -!- FreeFull has joined.
18:16:20 <kspalaiologos> `` asmbf <<<"mov r1,0/div r1,0"
18:16:21 <HackEso> ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>[-]>>>><<<<[<<<+>>>-]<<<[>>>>>>>[<<<<<<+>+>>>>>-]<<<<<[>>>>>+<<<<<-]<[>+<<-[>>[-]>>>>>>+<<<<<<<<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<<[<-[>>-<<[-]]+>-]<-]>>+<<<]>>>>>>>[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<]
18:16:30 <kspalaiologos> `` asmbf <<<"mov r1,0/div r1,0" > stuff.b
18:16:32 <HackEso> No output.
18:16:35 <kspalaiologos> `` bfi stuff.b
18:16:36 <HackEso> ​/hackenv/bin/`: line 5: bfi: command not found
18:18:30 <kspalaiologos> `` brainfuck
18:18:31 <HackEso> ​/hackenv/bin/`: line 5: brainfuck: command not found
18:18:34 <kspalaiologos> `? brainfuck
18:18:36 <HackEso> brainfuck is the integral of the family of terrible esolangs. The name is a euphemism for "beef". bf -c -t "+>+++++>+++" | mklang --array
18:18:42 <kspalaiologos> bf
18:18:47 <kspalaiologos> `` bf
18:18:47 <HackEso> Run what?
18:18:57 <kspalaiologos> `` bf -h
18:18:58 <HackEso> No output.
18:19:21 <kspalaiologos> `` bf -h 2>&1
18:19:22 <HackEso> No output.
18:19:34 <kspalaiologos> `` bf stuff.b
18:19:35 <HackEso> ​.
18:22:38 <kspalaiologos> `` asmbf <<<"out .0" > stuff.b
18:22:40 <HackEso> No output.
18:22:40 <kspalaiologos> `` bf stuff.b
18:22:41 <HackEso> ​.
18:22:49 <kspalaiologos> `` bf -c `cat stuff.b`
18:22:49 <HackEso> No output.
18:22:54 <kspalaiologos> `` bf -c "`cat stuff.b`"
18:22:55 <HackEso> No output.
18:23:12 <kritixilithos> `` cat stuff.b
18:23:13 <HackEso> ​+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>++++++++++++++++++++++++++++++++++++++++++++++++.[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]<<<[-]>[-]>>]<<]
18:23:19 <kspalaiologos> c'mon man
18:23:26 <kspalaiologos> what's up with this biased interpreter
18:23:31 <kspalaiologos> `` whereis bf
18:23:32 <HackEso> bf: /hackenv/bin/bf
18:23:41 <kspalaiologos> `` cat /hackenv/bin/bf
18:23:42 <HackEso> ​#! /bin/bash \ [[ $# > 0 ]] || { echo "Run what?"; exit 1; } \ ci="$1" \ echo -n "${ci#*!}" | { /hackenv/interps/egobf/src/egobfi8 <(echo -n "${ci%%!*}") ; }
18:23:47 <kspalaiologos> a ha
18:23:50 <kritixilithos> bf -c -t "`cat stuff.b`"
18:24:00 <kritixilithos> `` bf -c -t "`cat stuff.b`"
18:24:03 <HackEso> No output.
18:24:12 <kspalaiologos> `` /hackenv/interps/egobf/src/egobfi8 -h
18:24:13 <HackEso> Use: egobfi{width} [options] [file] \ Options: \ -eof {0|-|n} \ set EOF mode: 0, -1 or no-change (respectively) \ [default: 0] \ -debug \ activate the # command [default off] \ -unicode {on|off} \ set unicode mode on or off [default off] \ -wrap {on|off} \ set wrappong on or off [default on]
18:24:30 <kspalaiologos> `` /hackenv/interps/egobf/src/egobfi16 stuff.b
18:24:31 <HackEso> 0
18:24:33 <kspalaiologos> purrfect
18:24:44 <kspalaiologos> `` asmbf <<<"mov r1,0/div r1,0" > stuff.b
18:24:46 <HackEso> No output.
18:24:47 <kspalaiologos> `` /hackenv/interps/egobf/src/egobfi16 stuff.b
18:24:48 <HackEso> No output.
18:25:30 <kritixilithos> `` bf -c -t "+>+++++>+++"
18:25:31 <HackEso> No output.
18:25:49 <kritixilithos> `` bf -c -t "+>+++++>+++" | mklang --array
18:25:50 <HackEso> ​/hackenv/bin/`: line 5: mklang: command not found
18:26:20 <kspalaiologos> `? egobfi
18:26:21 <HackEso> egobfi? ¯\(°​_o)/¯
18:26:26 <kspalaiologos> `? egobfi8
18:26:27 <HackEso> egobfi8? ¯\(°​_o)/¯
18:26:31 <kritixilithos> our names are exactly the same length, kspalaiologos
18:26:45 <kspalaiologos> what a coincidence ;)
18:27:05 <kspalaiologos> `` egobfi8
18:27:06 <HackEso> ​/hackenv/bin/`: line 5: egobfi8: command not found
18:27:18 <kspalaiologos> `` cat /hackenv/interps/egobf/src/egobfi8
18:27:18 <HackEso> ​ELF............>.....<@.....@.......[..........@.8..@.&.#.......@.......@.@.....@.@........................................@......@............................................@.......@.....T!......T!........ ............X!......X!`.....X!`...........@........ ...........p!......p!`.....p!`......................................@.....@.....D.......D..............Ptd.........@.....@.....D.......D...
18:27:22 <kspalaiologos> crap, its binary
18:27:34 <kspalaiologos> `` ls /hackenv/interps/egobf/
18:27:35 <HackEso> aclocal.m4 \ AUTHORS \ ChangeLog \ config.h \ config.h.in \ config.log \ config.status \ configure \ configure.ac \ COPYING \ INSTALL \ Makefile \ Makefile.am \ Makefile.in \ NEWS \ PORTING \ README \ scripts \ src \ stamp-h1
18:27:43 <kspalaiologos> `` cat /hackenv/interps/egobf/README
18:27:44 <HackEso> ​== egobfi == \ A powerful and fast-ish Brainfuck interpreter. \ \ Use: egobfi{width} [options] [file] \ Options: \ -eof {0|-|n} \ set EOF mode: 0, -1 or no-change (respectively) \ [default: 0] \ -debug \ activate the # command [default off] \ -unicode {on|off} \ set unicode mode on or off [default off] \ -wrap {on|off} \ set wrappong on or off [default on] \ \ \ == egobfc == \ An almost-as-powerful Brainfuck compiler
18:27:46 <kritixilithos> are you the same person as the malbolger in ppcg?
18:27:53 <kspalaiologos> yes
18:27:56 <kspalaiologos> that's true
18:28:06 <kspalaiologos> I'm a Seed evangelist too
18:28:39 -!- xkapastel has quit (Quit: Connection closed for inactivity).
18:28:58 <kspalaiologos> `` cat /hackenv/interps/egobf/LICENSE
18:28:59 <HackEso> cat: /hackenv/interps/egobf/LICENSE: No such file or directory
18:29:07 <kspalaiologos> `` cat /hackenv/interps/egobf/COPYING
18:29:08 <HackEso> ​ GNU GENERAL PUBLIC LICENSE \ Version 2, June 1991 \ \ Copyright (C) 1989, 1991 Free Software Foundation, Inc. \ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA \ Everyone is permitted to copy and distribute verbatim copies \ of this license document, but changing it is not allowed. \ \ Preamble \ \ The licenses for most software are designed to take away your \ freedom to share and change it. By c
18:29:11 <kspalaiologos> no author names
18:29:13 <kspalaiologos> erghhh
18:29:20 <kspalaiologos> `` ls /hackenv/interps/egobf/src/
18:29:21 <HackEso> bfc.c \ bfc.h \ bfi.c \ bfi.h \ c2m \ c2m.c \ c2m.h \ egobfc \ egobfc2m \ egobfc2m-c2m.o \ egobfc2m-egobfi.o \ egobfc-bfc.o \ egobfc-egobfi.o \ egobfc-optimize.o \ egobfi16 \ egobfi16-bfi.o \ egobfi16-egobfi.o \ egobfi16-optimize.o \ egobfi32 \ egobfi32-bfi.o \ egobfi32-egobfi.o \ egobfi32-optimize.o \ egobfi64 \ egobfi64-bfi.o \ egobfi64-egobfi.o \ egobfi64-optimize.o \ egobfi8 \ egobfi8-bfi.o \ egobfi8-egobfi.o \ egobfi8-optimize.o \ egobfi.
18:29:31 <kspalaiologos> `` cat /hackenv/interps/egobf/src/bfi.h
18:29:32 <HackEso> ​/* \ * Copyright (c) 2005 Gregor Richards \ * \ * This file is part of egobfi. \ * \ * egobfi is free software; you can redistribute it and/or modify \ * it under the terms of the GNU General Public License as published by \ * the Free Software Foundation; either version 2 of the License, or \ * (at your option) any later version. \ * \ * egobfi is distributed in the hope that it will be useful, \ * but WITHOUT ANY WARRANTY; w
18:30:24 <b_jonas> ashtons: I recommend using a name made of multiple words
18:30:56 <kspalaiologos> egobfi, HRM
18:31:23 <kspalaiologos> it seems biased tho
18:32:55 <b_jonas> ashtons: it's easier to invent names that way, because you can use a dictionary. eg. I call my future esolang "consumer society", or ais has an esolang called "waterfall model" etc
18:33:36 <b_jonas> actually it's "the Waterfall Model"
18:34:01 <b_jonas> he also has ones called "But Is It Art?" and "Along and Across" and "High Rise" etc, all made of nice dictionary words
18:34:09 <kspalaiologos> do the old esolangers ever join this channel again?
18:34:21 <b_jonas> kspalaiologos: at least one did
18:34:23 <kspalaiologos> like, pikhq, Gregor?
18:35:31 * pikhq never left
18:35:55 <pikhq> Ive just been quiet lately
18:36:03 <kspalaiologos> ah, fine
18:36:38 <b_jonas> well, it might depend on what you mean by "old" of course
18:37:20 <kspalaiologos> that used to hang out here 2002=2010
18:37:24 <kspalaiologos> *-
18:37:45 <b_jonas> and Gregor left not that long ago really, because he used to run HackEgo, didn't he?
18:38:53 <b_jonas> there are regulars who never left for long of course
18:39:30 <kmc> i rejoined after a long hiatus
18:39:41 <kspalaiologos> we had mr. calimari
18:39:49 <kspalaiologos> or however he was called
18:40:16 <b_jonas> kmc: did you use the same nick before that hiatus?
18:41:06 <kmc> yes
18:42:01 <b_jonas> ``` du -sc .hg # how large is the hackeso hg repository? I wonder if I should clone it for backup
18:42:15 <b_jonas> hmm... that times out
18:42:18 <kspalaiologos> `` du -sc .hg
18:42:20 <b_jonas> suspicious
18:42:25 <kspalaiologos> umm
18:42:32 <HackEso> No output.
18:42:49 <HackEso> No output.
18:42:59 <b_jonas> it actually needs only one of -s or -c , but I keep forgetting which is which
18:43:07 <kspalaiologos> let's check it
18:43:09 <kspalaiologos> `` du -c .hg
18:43:11 <kspalaiologos> `` du -s .hg
18:43:12 <HackEso> 116.hg/cache \ 12.hg/store/dh/interps/clc-inte/clc-inte/blib/lib/language/intercal/backend \ 16.hg/store/dh/interps/clc-inte/clc-inte/blib/lib/language/intercal/charset \ 28.hg/store/dh/interps/clc-inte/clc-inte/blib/lib/language/intercal/interfac \ 108.hg/store/dh/interps/clc-inte/clc-inte/blib/lib/language/intercal/include \ 44.hg/store/dh/interps/clc-inte/clc-inte/blib/lib/language/intercal/generici \ 24.hg/store/dh/interps/clc-inte/
18:43:18 <b_jonas> it's -s
18:43:25 <b_jonas> that's what means it writes only the final result
18:43:33 <b_jonas> not the size of every recursive subdirectory
18:43:39 <b_jonas> hmm
18:43:42 <HackEso> No output.
18:43:47 <kspalaiologos> what
18:43:55 <kspalaiologos> `` du --help
18:43:56 <HackEso> Usage: du [OPTION]... [FILE]... \ or: du [OPTION]... --files0-from=F \ Summarize disk usage of the set of FILEs, recursively for directories. \ \ Mandatory arguments to long options are mandatory for short options too. \ -0, --null end each output line with NUL, not newline \ -a, --all write counts for all files, not just directories \ --apparent-size print apparent sizes, rather than disk usage; although
18:43:59 <b_jonas> "No output." means that it's timed out
18:44:01 -!- atslash has quit (Read error: Connection reset by peer).
18:44:02 <b_jonas> in this case
18:44:04 <kspalaiologos> ah yes
18:44:05 <kspalaiologos> alright
18:44:08 <b_jonas> took too long to execute
18:44:08 <kspalaiologos> misleading text
18:44:24 <b_jonas> ``` du -s wisdom; echo done
18:44:25 <HackEso> 6336wisdom \ done
18:44:37 <b_jonas> ``` du -s .hg; echo done # if you don't see done, then it's timed out (or the output is too long)
18:45:07 <HackEso> No output.
18:45:13 -!- atslash has joined.
18:46:58 <kritixilithos> gnu parallel?
18:54:26 <fizzie> I don't think it's a CPU-bound operation.
18:54:48 <fizzie> Anyway, the repo is in the order of 779M.
18:55:32 <fizzie> Of which 271M is the current working copy, the rest is history.
18:55:55 <b_jonas> fizzie: thanks
18:56:09 <b_jonas> wow, what's so large in the workong copy?
18:56:16 <b_jonas> ``` du -s share/mtg
18:56:17 <HackEso> 24876share/mtg
18:56:33 <b_jonas> ``` du -s interps
18:56:36 <HackEso> 30684interps
18:56:38 <fizzie> 83M paste/ is the biggest chunk after .hg.
18:57:04 <fizzie> After that, share/, src/, interps/, bin/, lib/, factor/ in that order.
18:57:10 <b_jonas> thanks
18:57:49 <fizzie> There are five 10485760-byte files in paste/, that takes up the most space.
18:57:58 <b_jonas> fizzie: is tmp accessible through `paste or `url ?
18:58:06 <fizzie> Through `url, yes.
18:58:25 -!- LKoen has joined.
18:58:29 <b_jonas> then we could have a paste command that stores its data there?
18:58:51 <fizzie> That's what paste does nowadays, actually.
18:59:26 <b_jonas> I see
18:59:26 -!- kritixilithos has quit (Quit: kritixilithos).
18:59:44 <fizzie> Huh, looks like I changed it myself, 2017-02-16.
18:59:48 <fizzie> I have no recollection of that.
19:00:17 <b_jonas> well that makes sense, since you'd have to fix stuff if paste filled up the file system
19:02:53 <fizzie> tmp/ itself is only 9.4M, but I think it's been cleaned up every now and then.
19:05:21 <fizzie> `` rm paste/paste.{30459,23201,25872,16755,30692,311,27157,25139,2340,12841} # doesn't really help with the history, but I guess making the working copy smaller has some benefits.
19:05:24 <HackEso> No output.
19:07:26 <b_jonas> ``` chmod -c u+x tmp/EGY*
19:07:27 <HackEso> mode of 'tmp/EGYj6LpQgFKM' changed from 0655 (rw-r-xr-x) to 0755 (rwxr-xr-x)
19:07:35 <b_jonas> ``` rm -rv tmp/EGY*
19:07:36 <HackEso> removed directory 'tmp/EGYj6LpQgFKM/s' \ removed directory 'tmp/EGYj6LpQgFKM'
19:11:17 <b_jonas> ``` du -ac * | grep -E "^[0-9]{4}" | tr \\t \ | sort -nr
19:11:22 <HackEso> 216432 total \ 78076 share \ 39192 share/WordData \ 37444 src \ 33152 src/factor-linux-x86-64-0.95.tar.gz \ 30684 interps \ 24876 share/mtg \ 16724 bin \ 14200 paste \ 10896 interps/c-intercal \ 10736 lib \ 10244 factor \ 10240 factor/factor.image \ 9608 tmp \ 7444 tmp/out \ 6432 share/WordData/EngAll \ 6336 wisdom \ 6208 interps/clc-intercal \ 4892 lib/frink \ 4280 share/WordData/Eng1M \ 4040 lib/p7zip-16.02 \ 3740 share/WordData/EngFiction \
19:18:06 -!- Frater_EST has quit (Read error: Connection reset by peer).
19:19:28 -!- ais523 has joined.
19:22:40 <fizzie> I'm guessing src/factor-linux-x86-64-0.95.tar.gz is also not really needed to be kept permanently.
19:24:05 <b_jonas> I don't know what that is
19:24:57 -!- Frater_EST has joined.
19:27:29 -!- ais523 has quit (Remote host closed the connection).
19:28:42 -!- ais523 has joined.
19:29:37 <ais523> it looks like a source tarball to me
19:30:00 -!- b_jonas has quit (Quit: Lost terminal).
19:30:28 -!- b_jonas has joined.
19:35:34 <b_jonas> anyway, I should probably clone them later then
19:36:04 <b_jonas> fizzie: I have a question about the channel logs. they are present in three formats. do you have the raw (IRC) format even when you fill the logs back from other logs?
19:36:23 <b_jonas> I wonder if I should download the logs too, but want to figure out if the raw logs would be the best
19:47:14 <fizzie> All three formats are rendered on the fly, actually. The actual storage format I use isn't (currently) downloadable; it's a brotli-compressed stream of length-delimited protos.
19:48:13 <fizzie> That said, I don't think there's any loss of fidelity between it and the "raw" format. Except *maybe* in timestamp accuracy, don't remember.
19:49:34 <fizzie> For backfilling, I have a set of programs that convert from the other log formats (clog, my own personal logs, maybe some others) to that proto-based format, as closely as they can manage.
19:52:50 <fizzie> https://github.com/fis/esolangs/blob/master/esologs/log.proto is the storage proto, as you can see it's pretty close to being 1:1 with the "raw" format.
19:56:37 <fizzie> (There are done arguable problems, in that it can't distinguish "FOO x y" from "FOO x :y", or represent lines that are not valid in terms of the IRC protocol. But it is what it is.)
19:57:01 <fizzie> s/done/some/
20:00:42 <b_jonas> fizzie: I don't need the actual storage format, the IRC raw format is good enough
20:01:45 <fizzie> Yeah, I think it doesn't even lose in timestamp accuracy, looks like it's microseconds for both.
20:02:36 <b_jonas> fizzie: and the logs are still not accessible on HackEso's file system, right?
20:03:23 <fizzie> Right.
20:03:32 <b_jonas> I was thinking of making a `why command that looks up the context from the timestamp of a hg commit, for which I either need the logs on HackEso, or download them here and make a compressed database that represents just some of the timestamps to be able to find the right anchor
20:03:35 <fizzie> I was planning to make them accessible over HTTP from HackEso.
20:03:49 <fizzie> Probably with some sort of a search/query API.
20:04:01 <b_jonas> that could work too
20:04:25 <b_jonas> this command would need to look up one or sometimes two days per revision
20:06:48 <b_jonas> I'd have to download the HTML formatted logs for this though, to make sure that the lines match
20:07:17 <b_jonas> and even then hope that the daily logs has the same number of logical lines as the day's section in the monthly HTML
20:07:31 <b_jonas> and that the anchors are always numbered sequentially
20:08:21 <b_jonas> but those are probably true
20:08:45 <fizzie> Yes, all the HTML is generated on the fly so it should always match.
20:11:25 <b_jonas> fizzie: you can probably add a link to https://esolangs.org/logs/ refing the new log website https://github.com/KrzysztofSzewczyk/esologs/ by the way
20:11:41 <b_jonas> well, unless you think that one won't last for long
20:23:42 <kspalaiologos> it's been up and running for around 3 months now
20:24:08 -!- hppavilion[6] has joined.
20:24:36 -!- kspalaiologos has quit (Quit: Leaving).
20:27:37 -!- hppavilion[2] has quit (Ping timeout: 265 seconds).
20:30:03 -!- kspalaiologos has joined.
20:31:23 -!- Frater_EST has left.
20:57:24 <esowiki> [[NFuck]] N https://esolangs.org/w/index.php?oldid=67030 * SoYouWantMeToDoSomethingButIWont * (+524) Created page with "== NFuck == Basically this is BrainFuck with N Dimensions. === Commands === {| class="wikitable" |- ! Command !! Description |- | + || Add one to current cell. |- | - || Remov..."
21:01:12 <esowiki> [[Language list]] https://esolangs.org/w/index.php?diff=67031&oldid=67026 * SoYouWantMeToDoSomethingButIWont * (+13) Added NFuck
21:14:02 -!- hppavilion[6] has quit (Ping timeout: 276 seconds).
21:36:52 -!- atslash has quit (Quit: This computer has gone to sleep).
21:42:22 -!- atslash has joined.
21:45:14 -!- hppavilion[6] has joined.
21:45:42 <shachaf> 1186 hth
21:46:57 <b_jonas> oh, that was fast
21:47:12 <b_jonas> `olist 1186
21:47:12 <HackEso> olist 1186: shachaf oerjan Sgeo FireFly boily nortti b_jonas
21:47:16 <b_jonas> `thanks fungot
21:47:16 <fungot> b_jonas: that might be the case
21:47:17 <HackEso> Thanks, fungot. Thungot.
21:49:55 <ais523> b_jonas: why do you persistently act like you can't distinguish fungot from Rich Burlew?
21:49:55 <fungot> ais523: but valgrind is slow because it involves psyntax
21:50:57 <ais523> it seems like an unlikely confusion to have, I rarely have trouble telling them apart
21:51:52 <b_jonas> ais523: no no, Rich draws the comics, fungot only publishes them
21:51:52 <fungot> b_jonas: i can only see my own messages.
21:52:15 <b_jonas> and I can't thank Rich here, he's not on this channel
22:36:27 <shachaf> ais523: I rarely have trouble telling "thanking fungot for olist" apart from "being unable to distinguish fungot from Rich Burlew".
22:36:27 <fungot> shachaf: it doesnt matter which direction you hold the ' increase red' key for evilwm
22:39:59 <shachaf> I wrote a program to color the output of a program red or green depending on whether it's stdout or stderr.
22:40:16 <shachaf> I wish it was possible to do the interleaving correctly.
22:43:31 <ais523> NetBeans does that (well, black for stdout, red for stderr)
22:43:35 <ais523> it also gets the interleaving wrong
22:43:55 <ais523> I think getting it correct would involve somehow hooking the OS scheduler?
22:44:07 <esowiki> [[///]] https://esolangs.org/w/index.php?diff=67032&oldid=66076 * Odog8 * (+156) yEEe I made something good for once
22:44:13 <ais523> (e.g. by ptracing the program and halting it whenever a write call occurred, until your own program could get scheduled and read the output)
22:44:19 <shachaf> Maybe I should settle for getting it right for a single-threaded single-process program.
22:44:28 <shachaf> Where you could just ptrace, right.
22:46:33 <esowiki> [[///]] https://esolangs.org/w/index.php?diff=67033&oldid=67032 * Odog8 * (+12)
22:46:38 <ais523> oh, I'm being stupid: you ptrace the program and when it does a write() call, you don't even bother reading the resulting filehandle, you just read the data right out of the argument it gives to write :-P
22:47:03 <esowiki> [[///]] https://esolangs.org/w/index.php?diff=67034&oldid=67033 * Odog8 * (+11) /* Thue-Morse sequence */
22:47:03 <ais523> (you still have to read stderr/stdout if it's a pipe to prevent it clogging up, but maybe you could just use /dev/null)
22:47:37 <shachaf> Well, no reason not to read it.
22:47:47 <ais523> alternatively, less general but less efficient: LD_PRELOAD alternative read()/write() routines
22:48:21 <shachaf> LD_PRELOAD isn't so good because the official API in Linux is system calls, not libc calls.
22:49:16 <ais523> indeed
22:49:56 <ais523> hmm, perhaps the dynamic linker should have an option to replace "syscall" (and "int $0x80") with calls to some particular hook code, that'd avoid the context switch in this case
22:50:13 <ais523> (the obvious downside is how do you fit that into two bytes?)
22:50:40 <shachaf> How would it do that?
22:51:13 <shachaf> I think Linux should probably let people override system calls in userspace in a better way than ptrace.
22:51:37 <b_jonas> ais523: that gets tricky though, because you have to interpret like ten other syscalls besides write, just in case the program uses them
22:53:47 <b_jonas> plus you may have to handle different syscall types that coexist on x86_64
22:54:05 <ais523> b_jonas: yes, at least the number of syscalls is finite and small enough to go through all of them
22:54:30 <ais523> also, in the case of stderr/stdout, the program writing to them probably doesn't expect them to be seekable, that cuts down the number of possibilities somewhat
22:55:02 <ais523> actually, in retrospect, I think it's a design flaw for streams and seekable files to be given the same API, the set of operations that can be performed on them is so different
22:55:23 <shachaf> I think the Windows thing where there's no syscall API, just a dynamically linked OS library, has some benefits.
22:55:25 <b_jonas> ais523: for fixing interleaving, couldn't you just use pipes for stdout and stderr, and set their capcity to as low as possible, so that they always block on a second write?
22:55:42 <b_jonas> using fcntl F_SETPIPE_SZ on linux (and there's a call on windows too)
22:56:05 <b_jonas> that's still not perfect, because you still can't tell the order between one stdout and one stderr write
22:56:11 <b_jonas> hmm
22:56:53 <b_jonas> shachaf: the x86_64 abi started by saying that libc is the recommended syscall interface
22:57:00 <shachaf> libc is scow
22:57:05 <b_jonas> but of course everyone wants to call the syscall directly, because it's faster or something
22:57:08 <b_jonas> so we can't have that
22:57:11 <b_jonas> and I for one agree
22:57:19 <b_jonas> libc has like ten layers of wrapper around even simple syscalls
22:57:27 <shachaf> b_jonas: Someone pointed out that in Linux, epoll will tell you the order that fds became readable.
22:57:58 <ais523> shachaf: if Windows actually were like that, it wouldn't be too bad, but the OS library that's dynamically linked doesn't have a documented/defined API, so you need to use a libc as a wrapper anyway
22:58:07 <b_jonas> moving the arguments from where a function expects them to where a syscall expects them, errno check, possible restart on signals (or is it the kernel that's doing that now?),
22:58:16 <shachaf> ais523: Hmm? You don't have to use libc for Windows.
22:58:35 <ais523> shachaf: what dynamically linked OS library are you thinking of?
22:58:37 <shachaf> ReadFile is maybe not a system call, but it's an OS interface that isn't libc.
22:58:49 <shachaf> I'm thinking of kernel32.dll, I think.
22:59:05 <ais523> msvcrt is a libc (and one you're not officially meant to use, at that!); user32/kernel32 have an incredibly large, and mostly undocumented, API surface
22:59:07 <shachaf> Maybe you're thinking of ntdll.dll.
22:59:33 <shachaf> Well, don't use the undocumented parts, I guess?
23:00:39 <b_jonas> anyway, modifying the program that outputs to stdout and stderr is probably the easiest if the order of its outputs matter
23:01:29 <shachaf> Windows has something called OutputDebugString. I'm not really sure what it is.
23:03:17 <ais523> hmm, so it does seem like the API surface is documented in some cases, but only incidentally, e.g. https://docs.microsoft.com/en-gb/windows/win32/api/winuser/nf-winuser-messageboxexw
23:03:48 <ais523> this is documented as being part of winuser.h, a C header file, and it's only mentioned at the bottom of the page that the function exists in user32.dll
23:03:55 <shachaf> What's incidental about that?
23:03:59 <b_jonas> ais523: but there's a documented library too, so why does it matter if there's an undocumented library behind it?
23:04:12 <ais523> b_jonas: which documented library are you thinking of?
23:04:24 <ais523> shachaf: well, it means that the use via user32.dll isn't part of the API contract
23:04:25 <b_jonas> the one that has the windows api calls
23:04:37 <shachaf> ais523: It's certainly part of the ABI.
23:04:44 <ais523> in particular, Microsoft could change the calling convention without violating anything written there
23:04:53 <b_jonas> I don't know what that library is called, the compiler just links it into windows programs automatically, so I never tried to find out
23:04:59 <ais523> I agree that it can't be changed in practice because the .exe files will be linked against a particular calling convention
23:05:05 <shachaf> If you write a program and it calles MessageBoxExW, you'll need to link it with the import library user32.lib.
23:05:13 <ais523> b_jonas: OK, the reason I asked is that this is more complex than you're expecting
23:05:21 -!- LKoen has quit (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”).
23:05:23 <ais523> the library in question normally has a name of the form msvcrt*
23:05:32 <ais523> Microsoft considers this to be part of the compiler, not part of the operating system
23:06:06 <ais523> in particular, there are a number of different msvcrt* files, which you are supposed to ship along with your application, and they have non-open-source licensing that limits what you can do with them
23:06:53 <shachaf> There are multiple parts of msvcrt, as I understand it.
23:07:04 -!- unlimiter has joined.
23:07:04 <b_jonas> ais523: right, they ship with the compiler, as well as with operating systems starting from Win10 via patches, and if you install programs compiled by a new compiler onto an older OS, you have to install the runtime library
23:07:10 <ais523> there is also an msvcrt.dll with no version number that does ship with Windows, this is officially undocumented (and does some weird things like implementing functions with the same name as C standard library functions, but different behaviour), and you aren't meant to use it, but at least it will exist on a user's computer and thus you can link against it fairly safely if you know what it does (and with no licensing issues)
23:07:11 <shachaf> Part of it is things like fopen, which implements the C standard library and you can use if you want to, or not.
23:07:53 <shachaf> And another part is things like memcpy (maybe?) that the compiler just generates calls to automatically, that you have to reimplement yourself if you don't link the official msvcrt.
23:07:57 <ais523> in practice, if you're compiling on Windows using an open-source compiler, you're probably using msvcrt.dll as it's the least problematic of the various "you can't use these" APIs
23:08:08 <shachaf> Neither of these has to do with the OS ABI, which applies to everyone, not just people programming in C.
23:08:29 <ais523> shachaf: the second part isn't a huge problem, the compiler normally has a fix for that (e.g. gcc has libgcc)
23:08:38 <shachaf> If you write a program in assembly that opens a MessageBox, you still link to user32.lib/user32.dll, because that's just the API the OS presents.
23:09:06 <ais523> I agree that the question is "how do you use the OS ABI", and the answer is "either directly or via a glue library, and neither appears to be officially supported unless you use a Microsoft compiler"
23:09:14 <shachaf> In what sense is this undocumented?
23:09:23 <shachaf> It says user32.dll and user32.lib right on the page you linked to.
23:09:48 <b_jonas> ais523: sure, but that's because the non-microsoft compilers for windows are sort of in a sad state
23:09:52 <b_jonas> for multiple reasons
23:09:59 <ais523> in the literal sense that, AFAIK, there are a large number of APIs in those libraries which are not documented
23:10:23 <b_jonas> for one, gcc on windows implements a C ABI that is so incompatible with the MS compiler that even sizeof(long) differs
23:10:41 <ais523> what Microsoft does is documents APIs that are used by some other mechanism, e.g. in the case of MessageBoxEx, via the windows.h header file, and incidentally mentions that you can find the implementation in user32.dll
23:10:43 <shachaf> But the ones that you're supposed to use *are* documented. What do the undocumented ones have to do with it?
23:10:56 <ais523> you have no way to know which ones you're supposed to use or not!
23:10:58 <b_jonas> it's not just that each MS complier used to have a different C ABI for a while, because those only differed in libc stuff like how FILE works, and in libstdc++ and other C++ stuff
23:11:11 <b_jonas> you can still at least link pure C functions between them
23:11:16 <ais523> there is nothing preventing msvcrt implementing a documented function in its C API via an undocumented function in user32.dll
23:11:21 <shachaf> You just linked to the documentation for MessageBoxEx. So clearly that's one that you're allowed to use?
23:11:22 <b_jonas> but if you use gcc, you can only link pure C functions if they don't mention long
23:11:28 <ais523> shachaf: yes
23:11:30 <b_jonas> this is documented, but it's sad
23:11:34 <ais523> I'm not sure if this is a complete set, it might be
23:11:58 <shachaf> I feel like if you're writing a program for Windows you just don't care about msvcrt that much.
23:11:59 <ais523> a long time ago, on a different computer, I downloaded Microsoft's full set of low-level API documentation, but never really got into it that much
23:12:31 <shachaf> You have the documented OS ABI, which is some subset of kernel32.dll etc., and you just use that.
23:12:42 <b_jonas> I used to look at the API documentation at https://docs.microsoft.com/en-us/previous-versions//hh447209(v=vs.85)?redirectedfrom=MSDN , but now it says that "We're no longer updating this content regularly" and doesn't say what supersedes it
23:12:49 <b_jonas> so now I'm not sure where the windows API docs are
23:15:00 <shachaf> ais523: I'm not sure what distinguishes ExitProcess() being exposed in kernel32.dll -- documented in https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-exitprocess -- and SYS_exit being exposed in the Linux ABI.
23:15:10 <shachaf> Except that one is a function call and one is a syscall, obviously.
23:15:13 <ais523> shachaf: I'm saying I don't know where I'd go to find a list of "this is all the functions in kernel32.dll you are allowed to use"
23:15:28 <ais523> because that's not how Microsoft organises their API documentation
23:15:37 <shachaf> Oh, sure, that's an organization thing.
23:15:47 <shachaf> But if you need to exit the process, you can call ExitProcess().
23:16:40 <b_jonas> https://docs.microsoft.com/en-us/windows/win32/apiindex/windows-api-list is probably the new documentation
23:17:08 <ais523> here's an example: https://docs.microsoft.com/en-gb/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessasuserw
23:17:31 <ais523> I found this by clicking the link to process and thread functions from your exit process link
23:17:41 <b_jonas> ais523: isn't that because the same dll has functions for multiple different APIs mixed in it, sort of like libc has all sorts of junk in it too?
23:17:43 <shachaf> Hmm, does /en-gb use British spellings?
23:17:44 <ais523> then clicking on a function I thought might be part of the standard library than the ABI
23:17:46 <ais523> then editing the URL
23:18:22 <ais523> a) the fact that I had to edit the URL means that the index listing isn't complete (and I just happened to know that most functions with a name ending in A have an equivalent with a name ending in W)
23:18:39 <b_jonas> so instead there's a doc that documents all the functions of the Win32 API, which are supposedly enough to write anything in windows, and has functions like CreateFile, plus there's one that documents the libc api that comes with the compiler and has functions like fopen
23:18:40 <ais523> b) the DLL is listed as advapi32.dll, and I have no idea whether that is part of the ABI surgace or not
23:18:43 <ais523> *surface
23:19:30 <shachaf> I'm confused about what you're saying. That there's no comprehensive list of all the functions you're allowed to use?
23:19:57 <shachaf> That doesn't seem particularly necessary. Clearly this specific function is documented, because that's a documentation page for it.
23:20:42 <ais523> shachaf: is it part of the ABI?
23:20:47 <ais523> I can't get a clear yes or no answer from that page
23:21:04 <shachaf> I see CreateProcessAsUserW on the ExitProcess documentation page, by the way.
23:21:36 <shachaf> ais523: It's part of the advapi32.dll API, and the minimum supported client is Windows XP.
23:22:00 <ais523> I don't see it; do you have an URL? maybe we're looking at different pages
23:22:09 <b_jonas> https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessasuserw
23:22:12 <ais523> shachaf: is advapi32 part of the ABI? I agree that it's part of the API
23:22:36 <shachaf> Part of which ABI?
23:22:39 <ais523> b_jonas: that's the CreateProcessAsUserW page
23:22:43 <ais523> shachaf: the Windows ABI
23:22:48 <ais523> the equivalent to Linux system calls
23:23:19 <b_jonas> ais523: right, so what function are you looking for instead?
23:23:31 <ais523> b_jonas: I'm looking for the list that contains a link to that page
23:23:38 <ais523> I didn't find the page via a link, I found it via URL editing
23:23:48 <shachaf> ais523: There's a sidebar on the ExitProcess page that links to that page.
23:23:52 <ais523> (from a link to the -A version)
23:24:03 <ais523> shachaf: oh, it must be because you have JavaScript turned on and I don't
23:24:05 <b_jonas> I don't think there's a flat list, but it's probably in the tree of https://docs.microsoft.com/en-us/windows/apps/desktop/
23:24:09 <ais523> the sidebar doesn't show for me
23:24:15 -!- arseniiv_ has quit (Ping timeout: 252 seconds).
23:24:19 <b_jonas> no wait
23:24:24 <b_jonas> how about https://docs.microsoft.com/en-us/windows/win32/index
23:24:29 <b_jonas> you need javascript for the sidebar, yes
23:24:52 <shachaf> ais523: I also see it on https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/
23:25:00 <shachaf> Anyway, I don't know what advapi32.dll is, so I can't say. It seems to be part of the interface exposed by the OS, so probably?
23:25:05 -!- unlimiter has quit (Quit: WeeChat 2.6).
23:25:22 <shachaf> As a person targeting Windows, you should probably figure out what each of the DLLs you might be linking against is.
23:25:23 <ais523> incidentally, after actually reading the docs on the function, i got alarmed at the actual semantics of cross-user process creation on Windows
23:26:08 <ais523> "Typically, the process that calls the CreateProcessAsUser function must have the SE_INCREASE_QUOTA_NAME privilege and may require the SE_ASSIGNPRIMARYTOKEN_NAME privilege if the token is not assignable. If this function fails with ERROR_PRIVILEGE_NOT_HELD (1314), use the CreateProcessWithLogonW function instead. CreateProcessWithLogonW requires no special privileges, but the specified user account must be allowed to log on interactively. Generally,
23:26:08 <ais523> it is best to use CreateProcessWithLogonW to create a process with alternate credentials."
23:26:31 <ais523> and CreateProcessWithLoginW requires the plaintext password of the user you want to create the process as
23:27:00 <ais523> that isn't an API that I would recommend for any situation other than a sudo-equivalent, and yet it's the recommended way to do things on Windows?
23:27:32 <b_jonas> so "https://docs.microsoft.com/en-us/windows/apps/desktop/", find link "Win32", goes to "https://docs.microsoft.com/en-us/windows/win32/index", find link "Win32 API reference by feature", goes to "https://docs.microsoft.com/en-us/windows/win32/apiindex/windows-api-list", section "System Services", link "Processes", goes to
23:27:37 <b_jonas> "https://docs.microsoft.com/en-us/windows/win32/procthread/process-and-thread-reference?redirectedfrom=MSDN", link "Process and Thread Functions", goes to "https://docs.microsoft.com/en-us/windows/win32/procthread/process-and-thread-functions", section "Process Functions", link "CreateProcessAsUser"
23:28:43 <ais523> b_jonas: which shows CreateProcessAsUserA for me, the version that's sensitive to which language version of the OS is installed
23:29:16 -!- oerjan has joined.
23:29:19 <b_jonas> ais523: ok, but then I don't know which function you want instead
23:29:24 <ais523> even Microsoft eventually realised that having the ABI differ from one country to another was a problem, that's one of the reasons why the -W variants of the functions were invented
23:29:28 <b_jonas> and I'm not familiar with the windows api enough to tell what's best to use here
23:29:30 <ais523> so CreateProcessAsUserW is the more sane version
23:29:48 <ais523> there's a fairly simple rule: do not use functions whose name ends in a capital A ever
23:30:04 <ais523> people just do it because it's convenient (and usually works if both you and your customers speak English)
23:30:04 <shachaf> Except when you can?
23:30:06 <b_jonas> ais523: ok, but aren't they usually documented together?
23:30:20 <ais523> the documentation of the two is almost identical
23:30:33 <shachaf> OutputDebugStringA("some text"); seems fine to me.
23:31:03 <b_jonas> ais523: hmm, you're right, that page doesn't document the W version
23:31:08 <b_jonas> let me see if I can find one that ends in a W
23:31:13 <ais523> only difference appears to be in the title and "syntax" section
23:31:15 <b_jonas> although there might not be one if this is an obsolete api
23:31:21 <ais523> shachaf: the encoding of "some text" differs by which version of Windows you have
23:31:53 <shachaf> Is it not always compatible with ASCII?
23:31:59 <ais523> there's almost certainly an API to discover what it is, then you could do an iconv to convert to the correct format at runtime
23:32:18 <shachaf> I guess if your program uses UTF-8 internally, it has to encode to UTF-16 whenever it calls a W function. Which isn't so bad.
23:32:18 <ais523> I don't know whether it's always ASCII-compatible, my guess would be no though
23:32:35 <ais523> in particular, I have a strong suspicion that the ASCII codepoint of \ is used for ¥ on Japanese versions of Windows
23:32:43 <b_jonas> interesting, there is a CreateProcessAsUserW function too
23:33:01 <ais523> the thing about the A/W split is that this is mostly hidden from the user via header files
23:33:03 <shachaf> I linked to https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/ already.
23:33:05 <ais523> sometimes it's documented, sometimes it isn't
23:33:12 <b_jonas> ais523: you're right, the doc is weird
23:33:33 <ais523> there are tools to make it easy to write programs as a polyglot between the A and W APIs; this doesn't seem useful except for examples in manuals and for writing libraries, though
23:33:46 <b_jonas> ais523: yeah, I know, and the libc functions have such a split too for some functions, also partly hidden by macros and typedefs
23:34:22 <b_jonas> but I don't understand why the documentation doesn't link to the W version of this function from the path that I followed
23:35:20 <ais523> I believe Microsoft's API/ABI policy is to intentionally blur the boundaries between userspace and kernelspace, from the user's point of view
23:35:21 <b_jonas> there is another path, but it's probably not the main path:
23:36:07 <ais523> (incidentally, there actually is a kernel ABI that user32.dll and kernel32.dll use to actually do things, but that's considered to entirely be internals; presumably a reverse engineer could use it directly but that would risk their program breaking on newer versions of Windows)
23:36:18 <b_jonas> ais523: yes, that makes sense, because this way they can take an old system call and turn it to a libc wrapper in future versions of windows, so they don't have to have as many obsolete system call entries _in the kernel_ as linux has
23:36:35 <shachaf> Yes, I think this is reasonable for that reason.
23:36:46 <shachaf> Linux also does a small amount of this with the vdso.
23:36:59 <b_jonas> and the actual syscall abi was supposed to have been internals on linux too, with a few specific exceptions
23:37:06 <b_jonas> you're supposed to call the libc functions to call system calls
23:37:12 <b_jonas> on x86_64 that is, not on x86_32
23:37:35 <b_jonas> it's just that that won't work, people want to call the system calls directly, so they'll do, and some old documentation won't stop them
23:37:46 <shachaf> No, the kernel explicitly keeps the system call ABI stable.
23:37:46 <ais523> b_jonas: I agree that it's a defensible policy, although it does have a major downside to the Linux way of doing things: it makes it impossible to statically/dynamically analyse what a program can/is ask/asking the kernel to do, because you don't know where all the kernel entry points are
23:38:08 <b_jonas> shachaf: which kernel?
23:38:12 <shachaf> Linux.
23:38:15 <b_jonas> exactly
23:38:16 <ais523> I believe Linux's policy for system calls is "use the libc wrapper unless you're doing something weird, in which case use the syscall directly"
23:38:41 <ais523> also, "the libc wrapper is meant to approximately obey POSIX, the syscalls aren't and may act differently"
23:38:57 <shachaf> For the most part the Linux system calls are more reasonable than the libc wrappers.
23:39:06 <ais523> although in practice the syscalls normally have more useful semantics than POSIX (I guess being less useful wouldn't work)
23:39:23 <b_jonas> shachaf: except for _exit. fucking _exit.
23:39:33 <b_jonas> it used to exit the process, but then they changed it.
23:39:49 <b_jonas> so now there's a group_exit system call to exit the process, and libc's _exit and _Exit function calls that
23:39:55 <oerjan> <kspalaiologos> `` asmbf <<<"mov r1,0/div r1,0" <-- i've fixed that so you can just do `asmbf yourcodehere
23:39:57 <b_jonas> and if you try to call the actual _exit syscall, you're screwed
23:40:53 <b_jonas> oerjan: I thought we'd use bin/! to do that part of the wrapping
23:42:42 <b_jonas> ais523: anyway, "https://docs.microsoft.com/en-us/windows/win32/index" as above, then link "Win32 API reference by header", goes to "https://docs.microsoft.com/en-us/windows/win32/api/", then in sidebar, link "System Services", goes to "https://docs.microsoft.com/en-us/windows/win32/api/_base/", then link "processthreadsapi.h", goes to
23:42:47 <b_jonas> "https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/index", then link "CreateProcessAsUserW", goes to "https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessasuserw"
23:43:00 <b_jonas> but I don't know why the other path doesn't lead to this function too
23:43:01 <ais523> b_jonas: yes, that was mentioned earlier
23:43:08 <ais523> although it seems weird to organize an ABI by C header file?
23:43:12 <b_jonas> ais523: yes
23:43:18 <b_jonas> it should be linked from both places
23:43:25 <b_jonas> I don't know why it isn't
23:43:39 <b_jonas> maybe because it's an obsolete function, maybe it's just another doc bug
23:43:56 <b_jonas> it's not the first apparently accidental omission from MS docs that I've seen
23:43:58 <b_jonas> `? lfloor
23:43:59 <oerjan> b_jonas: we're not consistent, also asmbf isn't an interpreter, it's a converter.
23:43:59 <HackEso> lfloor? ¯\(°​_o)/¯
23:44:16 <b_jonas> oerjan: hmm yes, that's a good point
23:44:46 <b_jonas> `? lrint
23:44:47 <HackEso> The lrint and lrintf functions (of C99 and C++11) are actually supported by the MS compiler (starting from the 2013), only strangely undocumented.
23:44:48 <b_jonas> yes, that one
23:45:12 <b_jonas> although I think they fixed that a few compiler versions later
23:47:15 <ais523> b_jonas: anyway, I suspect that there are more obsolete kernel APIs in Windows than there are in Linux, even though Windows should theoretically be able to remove them without breaking backwards compatibility:
23:47:30 <ais523> s/APIs/ABIs/
23:47:39 <ais523> a) Linux only has a few syscalls total, most of which aren't obsolete
23:47:41 <b_jonas> ais523: linux can also remove some of them without breaking backwards compatibility
23:47:43 <ais523> *few hundred
23:48:03 <shachaf> Hmm, quite a few Linux system calls are obsolete.
23:48:22 <ais523> b) Microsoft's main value to their customers is backwards compatibility, and Windows devs are infamous for doing really weird things that require kernel-side workarounds to avoid breakage
23:48:28 <b_jonas> in particular, they are planning to eventually remove x86_32 userspace compatibility from x86_64, which would save a lot of syscall stuff that actually requires glue code in the kernel to handle
23:48:44 <shachaf> ais523: Linux also works very hard on backward compatibility.
23:49:00 <shachaf> Linux the kernel, that is. Userspace breaks all the time for no good reason.
23:49:06 <ais523> shachaf: I agree, but I don't think that's the main selling point of Linux
23:49:13 <ais523> (precisely because userspace breaks all the time)
23:49:16 <shachaf> It's one of the main selling points of any platform.
23:49:26 <shachaf> Linux-the-userspace is just not a good platform.
23:49:54 <shachaf> Fortunately you can statically link executables, unless you're doing graphics or something.
23:51:02 <ais523> shachaf: Mac OS X is planning to require executables to be notarised to run, this has the side effect of breaking backwards compatibility for all old un-notarised executables
23:51:44 <ais523> (notarising consists of sending your executable to Apple, who do static analysis on it to make sure it isn't malicious or does other things they don't want programs to do, and they then produce a signature saying it's been notarised; I think that's part of the program, it conceptually is at least)
23:51:58 <ais523> that's pretty much the opposite of having backwards compatibility as a selling point
23:52:39 <ais523> in general I don't think backwards compatibility is a major selling point for Mac OS X, or even a design goal
23:53:47 <shachaf> Probably not nowadays?
23:54:00 <shachaf> When they switched from Mac OS 9, they did a lot of work on backward compatibility.
23:54:30 <shachaf> This notarization thing is obviously very hostile to developers and users.
23:54:33 <ais523> I've been trying to discover when notarisation first became possible (as opposed to required)
23:54:40 <ais523> but I'm not very good at searcihng
23:54:46 <ais523> my leading theory is that it was 2019, though
23:57:31 <ais523> anyway, I don't think it's obvious that backwards compatibility, especially of executables, will automatically be a concern to an operating system or comparable platform
23:57:46 <ais523> there are clear reasons why it would help, but some companies may decide that the tradeoff isn't worth it
23:58:36 -!- Frater_EST has joined.
23:59:21 <ais523> I guess a lot depends on what your model for deploying software is
←2019-11-11 2019-11-12 2019-11-13→ ↑2019 ↑all