code logs -> 2017 -> Fri, 24 Feb 2017< code.20170223.log - code.20170225.log >
--- Log opened Fri Feb 24 00:00:38 2017
00:01
<&McMartin>
The TS1000 turns out to be the first home computer my family ever owned, and I've finally found an acceptable emulator for it that supports both running programs that count as interesting and *also* supports sane crossdev.
00:01
<&McMartin>
However, pre-Spectrum Sinclair systems were unable to reliably produce a stable video image, and that was also noticably worse on NTSC TVs; the emulator is correctly simulating frequent disastrous loss of vertical hold
00:02
<&McMartin>
So I am sticking the Hell out of TS1000 mode and staying with the PAL ZX81 variant.
00:02
<~Vornicus>
Considering the rest of your description here, I'm not sure "supports sane crossdev" is a thing that one should try to achieve with the expectation of remaining sane.
00:02
<&McMartin>
Vorn: Well, as sane as it gets
00:03
<&McMartin>
It's a Z80 based system, and it turns out that the Broader Community took Z80 far more seriously
00:03
<&McMartin>
So, like, I can pull down a full C/Asm development stack with linkers/packagers for 50+ systems, including the ZX81, even from Fedora's most limited core repos.
00:03
<&McMartin>
It turns out that I accept but am nevertheless Unimpressed with the ZX81 packaging and my experiments this week have found a superior technique
00:04
<&McMartin>
... that happens to exactly match the traditional technique on the C64~
00:04
<&McMartin>
But, strictly speaking, the ZX series can use both techniques and the C64 can't really use the traditional ZX one.
00:05
<&McMartin>
(Also hilarious, because the Spectrum was As Big As The C64 In The US, in the UK, AIUI...)
00:05
<&McMartin>
(... it's got an incredibly aggressive retrocomputing scene too, but it was bound more heavily to cassette tape data storage)
00:05
<@TheWatcher>
[R]: the short version is that the dark engine allows any character - literally anything that fits in a char - in qvar names. The min length of names is 1 char, I believe there is a max length, although I haven't managed to pin it down properly. It stores quest variables in a hash table, with a hashed version of the name as the key, and doesn't seem to care what
00:05
<@TheWatcher>
characters you use.
00:05
<&McMartin>
(So there's dozens of utilities from converting to the sane formats to and from .WAV files for sticking on an iPod for actual transmission to the target machine)
00:06
<&ToxicFrog>
TheWatcher: how the shit did they parse this
00:06
<~Vornicus>
wait you can use NUL?
00:06
<&[R]>
Any means to access that hashtable outside of using a variable name?
00:06
<&ToxicFrog>
Oh god I hope you can use NUL, that would be hilarious
00:06
<@TheWatcher>
Vornicus: no, they're c strings, so
00:06
<&ToxicFrog>
aaw
00:06
<~Vornicus>
aw
00:07
<&ToxicFrog>
This does mean you can use nonprinting characters, though!
00:07
<@TheWatcher>
Yep
00:07
<&McMartin>
While Fedora's repos don't have it, the Debian repos *do* appear to have a Spectrum tokenizer that lets you write Spectrum BASIC in Emacs or what have you and then have *it* sort out the tokens for you
00:07
<&ToxicFrog>
Also BS and DEL, which some terminals/editors will render by deleting the previous character, thus giving you two invisible characters for the price of one
00:07
<&McMartin>
(A *detokenizer* is pretty trivial, I threw together my own for ZX81 in like a hundred lines of C)
00:07
<&ToxicFrog>
Somewhere the writer of the "Guide to Unmaintainable Code" can't stop grinning and doesn't know why
00:11
<&[R]>
How are names like that getting set without the code getting confused?
00:11
<&McMartin>
Vornicus: Anyway, my goal is to do a port of my x86 Lights-Out game to the Z80-based ZX81 and also to do it in a way that it does not hard-lock the ROM if you type "LIST"
00:11
<&McMartin>
... and by that of course I actually mean "hit K, then enter"
00:11
<&[R]>
Seperate, non-code way to set variables?
00:12
< LadyOfLight`>
https://twitter.com/sAbakumoff/status/832883131413884929
00:12
< LadyOfLight`>
checks out
00:13
<&McMartin>
Surprised PHP isn't higher, as they seem to live in a world of cheerfully invincible ignorance~
00:13
< LadyOfLight`>
xD
00:13
<~Vornicus>
PHP's been trying to get better in a lot of ways
00:14
<~Vornicus>
barewords, and string callable as the function it names, are however far too embedded to remove
00:17 * LadyOfLight` notes that data and functions are the same thing and moves on
00:22
< LadyOfLight`>
today's funtime realisations: you only need two types (names and maps) to write a meaningful data and functional programs in-system, and one additional type (actions, which are maps that have external-to-system effects) in order to write meaningful systems that interact with the outside world
00:22
< LadyOfLight`>
All three of these are subclasses of symbols
00:22
< LadyOfLight`>
functions are not first class in this system, nor is any branching logic
00:22
< LadyOfLight`>
all you need is text (well, symbol) substitution
00:23
< LadyOfLight`>
it's kind of crazy
00:23
< LadyOfLight`>
It's sort of lambda calculus, but there are no types beyond those, since *any* lookup in a map is valid, and any name can resolve to {$ = name-error}
00:24
< LadyOfLight`>
And, I really want to stop staring at this and write a proper interpreter to prove this is a useful thing
00:24
<&ToxicFrog>
Vornicus: "getting better" also requires breaking library compatibility with ~everything
00:25
<~Vornicus>
It's true.
00:26
< LadyOfLight`>
interestingly, a REPL consists of something like loop-until <end> eval { set! end! } (console get-line!)
00:26 * LadyOfLight` considers
00:27
< LadyOfLight`>
then name evals to something like print! $name, which evals to end!, which is an action that kills the process
00:27
< LadyOfLight`>
or something :d
00:27
< LadyOfLight`>
there's a bottom type that the system understands as eval completed, basically
00:27
< LadyOfLight`>
and actions can eval to that whilst performing some external thing
00:28
< LadyOfLight`>
</wall-of-text>
00:28
< LadyOfLight`>
it's interesting that my required base syntax now amounts to the tokens "{}()=,"
00:29
< LadyOfLight`>
and anything else is a name (with "", '' and [] reserved, probably)
00:29
<&McMartin>
Have you been experimenting with prototype interpreters or is this notebook work?
00:29
< LadyOfLight`>
both
00:29
< LadyOfLight`>
but whenever I get close to having a working interpreter I have another eureka moment and throw it away :P
00:30
<&McMartin>
Heh
00:30
< LadyOfLight`>
also I am convinced that the central Interesting Thing about this is that there is no failed lookup
00:30
< LadyOfLight`>
there's *always* a valid expression evaluation, there's no side-channels except explicit actions
00:31
< LadyOfLight`>
And lazy/eager evaluation is really easy to differentiate
00:31
< LadyOfLight`>
x = 1; => env now contains {x = 1}
00:31
< LadyOfLight`>
y = x; => env now contains {y = x}
00:32
< LadyOfLight`>
so: eval {x = 1, y = x} y => x => 1
00:32
< LadyOfLight`>
but if you do
00:32
< LadyOfLight`>
y = (x) => y = (env x) => y = 1 => env is now {x = 1, y = 1}
00:32
< LadyOfLight`>
I have no idea if that scales
00:32
< LadyOfLight`>
but the toy feels nice
00:33
< LadyOfLight`>
oh, and a = b is syntactic sugar for set! a b
00:34
< LadyOfLight`>
also, I suspect that + = {$a = {$b = +! {0 = $a, 1 = $b}}}
00:34
< LadyOfLight`>
where it needs to be formulated that way to curry the normal + function, but +! is effectively an action that happens to compute the answer and substitute it
00:35
< LadyOfLight`>
So +! = {$args = <machine-add ($args 0) ($args 1)>}, but effectively computed as a side effect
00:35
< LadyOfLight`>
however, if you're compiling you can stop at that point and emit a low-level add instruction
00:36
< LadyOfLight`>
which lets you simplify your program
00:36
< LadyOfLight`>
to the minimum set of instructions, before it needs to be emitted as an executable
00:36
< LadyOfLight`>
but it still only needs the compile-time environment setting and lookup mechanisms til then, which are as simple as the interpr-hang on
00:36
< LadyOfLight`>
dammit, it's 00:36 I should be trying to sleep
00:37
<&McMartin>
yay z
00:37
<~Vornicus>
zoom to zs
00:37
< LadyOfLight`>
(I'm either crazy or very clever, but I am definitely filling this space up, sorry)
00:38
<&ToxicFrog>
(it says right there in the topic "rants and monologues encouraged")
00:39
< LadyOfLight`>
Oh :3
00:39
< LadyOfLight`>
I *feel* like I've figured out something fundamental in all of this
00:39
< LadyOfLight`>
and I'm convinced it's the infinite-map formulations
00:39
<&ToxicFrog>
(if you aren't looking out at the windswept seas of Venus expounding on your brilliant project that will SHOW THEM ALL, especially those fools at the Institute, you aren't using this channel right~)
00:40
< LadyOfLight`>
LISP is not the bottom language, YOU FOOLS~
00:40
< LadyOfLight`>
I still love {$=$} as the identity function
00:40
< LadyOfLight`>
it feels so neat
00:41
< LadyOfLight`>
identity = {$=$};
00:42
< LadyOfLight`>
identity hello-world => (env identity) hello-world => {$=$} hello-world => {hello-world = hello-world, $=$} hello-world => hello-world
00:42
< LadyOfLight`>
and, since maps are just symbols: identity {$=$} => {$=$} {$=$} => {{$=$}={$=$}, $=$} {$=$} => {$=$}
00:42
< LadyOfLight`>
identity (identity) => identity {$=$}
00:43
< LadyOfLight`>
contrast: identity identity => {$=$} identity
00:43 * LadyOfLight` ponderes
00:43
< LadyOfLight`>
just thinking about this stuff is awesomesauce
00:43
< LadyOfLight`>
having brainspace for cool new things is SO AWESOME
00:48
< LadyOfLight`>
int = {+!, -!, *!, /!, $ = {...some identity function for digits, I suppose}}
00:50 LadyOfLight` [catalyst@Nightstar-bt5k4h.81.in-addr.arpa] has quit [[NS] Quit: Leaving]
00:57
<&[R]>
Identity function?
01:13
<&ToxicFrog>
[R]: the function that returns whatever it's passed
01:13
<&ToxicFrog>
(defn identity [x] x)
01:15
<&[R]>
I almost asked what the purpose of that is
01:16
<&[R]>
But remembered I wrote that a few times in JS
01:24 Turaiel is now known as Turaiel[Offline]
01:30 Turaiel[Offline] is now known as Turaiel
02:05
<@sshine>
the first Crossfit Open workout is out!
02:05 * sshine pretends this carries news value.
02:16 Turaiel is now known as Turaiel[Offline]
03:40 macdjord|wurk is now known as macdjord
03:43 Turaiel[Offline] is now known as Turaiel
04:05 LadyOfLight` [catalyst@Nightstar-dlfk84.dab.02.net] has joined #code
04:09 LadyOfLight [catalyst@Nightstar-6s7hf5.dab.02.net] has quit [Ping timeout: 121 seconds]
05:05 Turaiel is now known as Turaiel[Offline]
05:56 LadyOfLight` is now known as LadyOfLight
06:44 macdjord is now known as macdjord|slep
07:23 Alek [Alek@Nightstar-cltq0r.il.comcast.net] has quit [Ping timeout: 121 seconds]
07:26 Alek [Alek@Nightstar-cltq0r.il.comcast.net] has joined #code
07:26 mode/#code [+o Alek] by ChanServ
07:41
< LadyOfLight>
Oh!
07:41
< LadyOfLight>
Realisation:
07:42
< LadyOfLight>
{; x; =; 1; $; =; $; };
07:44 * Vornicus doesn't get it
07:48
< LadyOfLight>
Every character is a statement
07:48
< LadyOfLight>
So it's trivial to parse the string
07:48
< LadyOfLight>
And requires no backtracking
07:53 celticminstrel [celticminst@Nightstar-f7q0qd.dsl.bell.ca] has quit [[NS] Quit: KABOOM! It seems that I have exploded. Please wait while I reinstall the universe.]
07:55 Kindamoody[zZz] is now known as Kindamoody
08:10 Alek [Alek@Nightstar-cltq0r.il.comcast.net] has quit [Ping timeout: 121 seconds]
08:14 Alek [Alek@Nightstar-cltq0r.il.comcast.net] has joined #code
08:14 mode/#code [+o Alek] by ChanServ
08:26 Kindamoody is now known as Kindamoody|out
08:44
< LadyOfLight>
Right
08:44
< LadyOfLight>
I think I worked out how to parse Reduct in a reductive way
08:44
< LadyOfLight>
So now I can actually write an interpreter
08:45
< LadyOfLight>
...except that requires me to not have written today :|
09:15
< LadyOfLight>
Not to have work*
09:15
< LadyOfLight>
Wow, I'm being very imprecise with words lately
09:15
< LadyOfLight>
Oh well
09:15 LadyOfLight [catalyst@Nightstar-dlfk84.dab.02.net] has quit [[NS] Quit: Bye]
09:41
<~Vornicus>
you're going to reduce reduct?
10:09
<@abudhabi>
We have to go deeper.
10:10 Vornicus [Vorn@ServerAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds]
11:10 * TheWatcher eyes this email
11:11 * TheWatcher gets out the 12 foot barge pole
11:11
<@TheWatcher>
"Does anyone in the group have (or know anyone who has) experience with GTK3? In particular, any experience with migrating code from GTK2 to GTK3?"
11:12
<@TheWatcher>
Oh hells no.
11:43 LadyOfLight [catalyst@Nightstar-cpk2b0.dab.02.net] has joined #code
12:03
<@himi>
I didn't find working with GTK2 to be all that painful . . .
12:03
<@himi>
Admittedly, my graphical user interface experience was that and OpenGL, so hardly representative . . .
12:05
<@TheWatcher>
It's not so much working in GTK2 or GTK3 itself (I wouldn't call either entirely pleasant, but then I don't know of any UI toolkit that is)
12:06
<@TheWatcher>
It's a combination of the migrating, which is always far more difficult than you expect it to be
12:07
<@TheWatcher>
and getting roped into working on yet another project, although this time involving horribly badly written code
12:08
<@TheWatcher>
s/although this time//; # removed for redundancy
12:23
<@himi>
This is your job, though, isn't it?
12:23
<@TheWatcher>
Nope
12:23
<@himi>
Being a sucker for every dumb-arse student's questions?
13:10 * ToxicFrog | Just noticed one of my tabs was titled "Defer, Panic, and Recover". I figured it's an article I planned to read about coping with reality. It was actually a Go tutorial.
13:13
<@TheWatcher>
Snrk
14:21
< LadyOfLight>
Checks out
14:42
< LadyOfLight>
Right, new library works. Time to rip out the old one >:)
15:03 * TheWatcher stabs and stabs and stabs the Twitter
15:04
<@TheWatcher>
These two tweets are the twitter API in a nutshell: https://twitter.com/twitterdev/status/453572442410086400 https://twitter.com/GhostApp_/status/779660868007170048
15:04
<@TheWatcher>
(There's still no way to query pinned tweets)
15:34 macdjord|slep is now known as macdjord|wurk
16:00 Alek [Alek@Nightstar-cltq0r.il.comcast.net] has quit [Ping timeout: 121 seconds]
16:04 Alek [Alek@Nightstar-cltq0r.il.comcast.net] has joined #code
16:04 mode/#code [+o Alek] by ChanServ
16:17
< LadyOfLight>
...tech took away an SDK I require, so now I can't build anything
16:17
< LadyOfLight>
Time to fire to AGDQ videos I suppose
17:02 * ToxicFrog learns about Cloudbleed
17:02
<&ToxicFrog>
Holy shitballs
17:03
<&ToxicFrog>
I wonder how many sites I use on the regular are behind cloudflare proxies
17:06 LadyOfLight` [catalyst@Nightstar-tiq4fu.dab.02.net] has joined #code
17:09 LadyOfLight [catalyst@Nightstar-cpk2b0.dab.02.net] has quit [Ping timeout: 121 seconds]
17:46 LadyOfLight` is now known as LadyOfLight
17:52 celticminstrel [celticminst@Nightstar-f7q0qd.dsl.bell.ca] has joined #code
17:52 mode/#code [+o celticminstrel] by ChanServ
18:34 LadyOfLight` [catalyst@Nightstar-bt5k4h.81.in-addr.arpa] has joined #code
20:01 Vornicus [Vorn@ServerAdministrator.Nightstar.Net] has joined #code
20:02 mode/#code [+qo Vornicus Vornicus] by ChanServ
20:53 LadyOfLight` [catalyst@Nightstar-bt5k4h.81.in-addr.arpa] has quit [[NS] Quit: Leaving]
21:02
<&McMartin>
It does seem like it has to be "on the regular" to be an issue
21:35
<&ToxicFrog>
Yeah, if you haven't used it in the past ~6 months you're good
21:51 Kindamoody|out is now known as Kindamoody
21:54
< LadyOfLight>
Rawr
21:55 * Vornicus gives LadyOfLight a cheese.
21:56 * LadyOfLight noms
22:46 Attilla [sid13723@Nightstar-dok.okb.184.192.IP] has quit [Ping timeout: 121 seconds]
22:48 Attilla [sid13723@Nightstar-dok.okb.184.192.IP] has joined #code
22:48 mode/#code [+o Attilla] by ChanServ
22:56 Attilla [sid13723@Nightstar-dok.okb.184.192.IP] has quit [Ping timeout: 121 seconds]
23:09 Attilla [sid13723@Nightstar-dok.okb.184.192.IP] has joined #code
23:09 mode/#code [+o Attilla] by ChanServ
23:30 * McMartin digs up old computer manuals
23:30
<&McMartin>
" 'How very easy,' you must think, & you will be wondering what to do next, when in rushes your housekeeper saying 'Glory be, eggs have just gone up to 61p a dozen.'"
23:31
<&McMartin>
Not sure if this is because Britain or if the 80s were just *that* different a time
23:31
<&McMartin>
"A variable need not be named after groceries"
23:32
<@TheWatcher>
Damn, they're £1.25 a dozen these days.
23:32
<&McMartin>
Clearly it has been some time since 1981.
23:33
<&McMartin>
... it's also referring to "new pence". When was decimalization again?
23:33
<@TheWatcher>
71
23:33
<&[R]>
"New pence"?
23:33
<&McMartin>
The kind where there are a hundred to the pound
23:33
<&McMartin>
As opposed to, um, 240?
23:33 LadyOfLight` [catalyst@Nightstar-bt5k4h.81.in-addr.arpa] has joined #code
23:34
<&McMartin>
I forget the details of the otherwise super-aptly-named LSD system
23:34
<&McMartin>
"3. If you enjoy humiliating computers, type PRINT "2+2 = ";2+1"
23:35
<@TheWatcher>
Yep, 240d per £. 12 pence per shilling, 20 shillings per pound.
23:35
<~Vornicus>
I keep thinking that decimalization happened way earlier.
23:35
<~Vornicus>
Like in the 30s or some shit
23:35 LadyOfLight`` [catalyst@Nightstar-3r4knu.dab.02.net] has joined #code
23:39 LadyOfLight [catalyst@Nightstar-tiq4fu.dab.02.net] has quit [Ping timeout: 121 seconds]
23:40
<@TheWatcher>
(of course, they also three in half crowns, crowns, florings, guineas, and other bloody madness, because it wasn't enough to be using a system developed by the romans two millennia ago...)
23:40
<@TheWatcher>
*florins
23:41
<@TheWatcher>
I apparently can't type, so I should slep
23:54
<@himi>
Nothing quite like writing some code that runs in seconds on your laptop, but when you build it on your raspberry pi it takes literally five minutes to run
23:59
<&McMartin>
"Exercise 4. 4. Type in a very long program, & them momentarily disconnect the power supply. This sort of thing sometimes happens spontaneously; it is not a bug, but a glitch. There is nothing you can do about it except cry."
--- Log closed Sat Feb 25 00:00:39 2017
code logs -> 2017 -> Fri, 24 Feb 2017< code.20170223.log - code.20170225.log >

[ Latest log file ]