--- 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 |