IRC channel logs

2017-02-24.log

back to list of logs

<paroneayea>of course :)
<dsmith-work>So how do all the CL implementation do it? There are very good compilers, so I hear. How do they handle changing macros and inlines?
<dsmith-work>Oh I wish I could remember that CL site that has been running the same lisp *process* for years and years.
<dsmith-work>Been rewwritten many times, database schema changes etc.
<paroneayea>dsmith-work: I dunno, probably the same way Guile does it?
<paroneayea>if you evaluate code with a macro, the macro is expanded
<dsmith-work>All done interactively.
<paroneayea>if you change the macro
<paroneayea>you need to re-evaluate that one
<paroneayea>whereas if it's a value, that references the new value
<dsmith-work>paroneayea: Yes, need to re-evaluate the definition
<paroneayea>and I think that's just fine!
<dsmith-work>Well in Guile you do. Not sure about CL. (I just don't know. Not a CL guy)
<paroneayea>for the most part, I'm not changing syntax forms as much as I am values anyway
<dsmith-work>Does being a lisp-1 or list-2 make a difference? Dunno.
<wingo>paroneayea: davexunit_ something i would like to explore sometime would be the relationship between guix's very very static binding and the modify-it-at-runtime thing that we also want
<wingo>like why is guix's approach good for distros (and services!) but we want to be able to dynamically rebind thigns in our programs?
<wingo>i admit to wanting both things but it's not clear what relationship they have
<wingo>and why is the line where it is (e.g. we dicide that we shouldn't able to just update libfoo in place; if a server uses libfoo it will have to be rebuilt and restarted)
<wingo>that guix philosophy seems similar to me to racket's module philosphy
<jmd>Is there a way I can override a variable's value when I start guile?
<lloda`>jmd: put your overrides in a file and load it with guile -l file
<jmd>lloda`: YEah. Can there be more than one file ?
<jmd>And if so, in which order are they loaded?
<lloda`>the order you give, guile -l loadfirst -l loadsecond
<lloda`>you can try it
<jmd>lloda`: I will do. Thanks.
<jmd>I don't seem to be able to get guile to respect the value of SCHEME_LIBRARY_PATH. Is there a trick to it?
<TMM>hey wingo
<sneek>Welcome back TMM, you have 1 message.
<sneek>TMM, wingo says: cool :)
<amz3`>o/
<TMM>hi am3` :)
<wingo>jmd: what is scheme library path
<roelj>jmd: export GUILE_LOAD_PATH=$SCHEME_LIBRARY_PATH ?
<janneke>slow and steady progress on mescc
<janneke>mescc now compiles 50 of the 51 functions of the scheme interpreter
<janneke>#51: make_cell compiles into segfaulting code
<TMM>wingo, I read your blogpost about completely equal pay inside a company. I found it very interesting.
<TMM>wingo, I think I'd like to work for a company where that was actually implemented. I'm less certain about whether or not it's possible to implement it after the fact in a company in a reasonable way.
<profan>TMM: most companies are too happy about their ability to pay less when developers often dont have the courage to ask for what theyre worth according to the markets, would be nice though
<profan>ACTION is not at all bitter
<janneke>TMM, wingo: most interesting, must read that
<jmd>IMO most developers get paid too much.
<TMM>yeah, many do
<TMM>most people in it get paid too much
<jmd>There was an interesting headline yesterday: In indonesia, the 4 richest men earn more than the sum of what the poorest 100,000,000 earn.
<profan>TMM: do they? not so much here i would say (in sweden at least)
<profan>salary differences between europe and the US seem gigantic however
<TMM>profan, most of the people I work with in IT don't know their elbows from their assholes
<TMM>profan, yet they tend to get paid between 1.5 and 2x median wage of the country
<wingo>is the elbow the one with the toes on it
<wingo>i always get that wrong
<TMM>I get more than that, which I agree is unfair. But if my company were to say 'everyone gets paid the same now' while keeping those guys around I'd definitely leave.
<profan>wingo: depends on your genetic disposition im sure
<profan>TMM: yeah it is a hard problem, i had the opposite problem at my last company
<profan>where some of the people who did the hardest work werent brave enough (or didnt have the formal credentials) to ask to be compensated better
<profan>while those who were loud got paid way more
<TMM>Yeah, you need to be able to stand up for yourself...
<profan>then again, it was small enough that it was difficult for anyone who basically did nothing to stick around
<TMM>I'm sure we have some of those people here too. I work at a big company.
<TMM>I do try to find them and get them on my team though
<TMM>then work to get their pay increased
<profan>haha, you're doing great work then :)
<TMM>self preservation ;)
<profan>lol, indeed
<TMM>can't have the talented people leave to other places while the shouty wastes of carbon stick around ;)
<TMM>I'd mostly just really like to work in a company that doesn't have that much dead wood though
<TMM>but the larger the companies get the more you seem to get
<jmd>profan: It's true that workers in the US seem to get a much higher salary than in Europe. But you have to remember that in the US it costs $10,000 a year for medical insurance, whereas in most european countries that is paid out of your taxes.
<profan>jmd: that is indeed true :p
<TMM>even then they get more though
<TMM>I have friends who work in SF who retired at 40
<TMM>making 250,000+ a year
<TMM>and stock options
<jmd>Anyway, one thing in life I have learned is not to compare yourself to others. There are always going to be people better off than yourself, and people worse off.
<profan>jmd: when it comes to pay, you -need- to do this, to not get screwed though, and it can sometims be a good indicator for seing if youre being screwed or not :)
<profan>but sure, generally
<profan>comparing things make people think
<profan>if nobody makes the comparison, nothing will ever change, so i think avoiding it entirely is just silly
<TMM>yeah
<dsmith-work>Happy Friday, Guilers!!
<paroneayea>wingo: that also came up in the guix panel kinda
<paroneayea>an audience member expressed wanting to modify something in /etc withougt reconfiguring, civodul suggested maybe something like emacs live hacking in guile for playing with the system level, and I think rekado said it would be giving up too much
<paroneayea>and after that I thought similarly of why I want live hacking in Guile, but want everything immutable on the distro end
<paroneayea>and I don't know the answer to that!
<paroneayea>wingo: but maybe the answer is also that the live hacking part is "exploration during development"
<wingo>sure
<paroneayea>there's some assumption there that it's a bit messy, but when you're done, you'll compile the whole thing and you'll be running it like a normal program that you aren't changing
<paroneayea>I dunno
<wingo>there's also an argument to "live deployment" or something
<wingo>especially with stateful services
<wingo>or to diagnose problems
<wingo>dunno, i just think we need a bit more thinking and writing and "best practices" around this sort of thing
<wingo>in practice all uses of (ice-9 q) can be inlined :)
<paroneayea>sure, and how to have that option without "losing track" of things.. not sure :)
<paroneayea>it's also true that sometimes when live hacking, you find out that almost everything you did while live hacking works afterwards
<paroneayea>but there was some intermediate live hacking thing done
<paroneayea>and you need to fix up that thing afterwards when you shut down your repl, compile, and run it again
<stis>hej guilers!
<holomorph>bonjour
<stis>wingo: you mentoined in the sourcecode that you wouldlike to use the system loader in the future. What's your thoughts?
<wingo>did i? i don't know. tbh at this point i see not so many advantages with the system loader.
<wingo>what advantages do you see? :)
<stis>what about shared code sections?
<stis>combining s-code and scheme code more tightly
<stis>sorry c-code
<stis>perhaps copy on write as well for seldom mutating objects
<stis>if that's what the system linker uses
<stis>It just feels a bit silly to base a module of a .go file and a .so file when both are elf
<paroneayea>wingo: I thought more about it, and one difference that "live hacking my guile code" has that "live hacking my debian /etc/ files" doesn't is
<paroneayea>when I'm done with live hacking my guile code, the "program" in all the parts I'm presumably keeping are inscribed in a place where if I shut down the repl, I should be able to bring back up the same system again (and if I didn't, I correct that)
<paroneayea>whereas when I "live hack" on an imperative distro's files, I lose track of what it was I was changing
<stis>\\me reading guile sources. Indeed .go sections that are read only are shared.
<stis>The pages are read in as readonly in which case no data is created just virutal memory remapping
<stis>and later the page allocations are changed for according to flags indicating if a section is writeable or executable and such
<stis>after that it is cow I guess
<stis>The only benifit would be to have one file and stat less often if one want's to embed native code
<stis>not sure that it's worth it to combine native and vm code
<stis>But just to learn about the elf format I will try it anyways, for fun!
<wingo>:)
<davexunit_>wingo: would fibers work well for a program that doesn't use ports much, such as scripting objects in a game?
<wingo>i think it would work great :) it does allocate a bit tho
<wingo>channels are really great
<davexunit_>allocation is pretty OK outside of the core game loop
<davexunit_>yes channels look great, as does pre-emption.
<davexunit_>in my case I think I would need to disable multi-threading
<davexunit_>but the switch is available so great.
<davexunit_>the only thing I'm not sure of is that I would need a way to say "suspend for X amount of game time and resume afterwards"
<davexunit_>where "game time" is not equivalent to real world time, just some arbitrary counter somewhere.
<davexunit_>wingo: would I be correct in saying that the "conditions" section of the manual covers this use-case?
<davexunit_>I just don't see how to flip a condition from unsignalled to signalled.
<wingo>signal-condition!
<wingo>but to wait on a timeout you would use timers
<wingo>and specifically "sleep" probably
<davexunit_>so this is a timeout of sorts but it's not measured in real-world seconds
<davexunit_>but rather the timer of the simulation
<davexunit_>so I don't think 'sleep' is the desired operation.
<davexunit_>I just need a way to implement my own special sleep, which I guess is what conditions will allow me to do
<davexunit_>wingo: btw I think the manual is mising signal-condition!
<wingo>ACTION makes a note of it
<davexunit_>anyway, I'll give this a shot sometime. it sounds like it will be fun to play around with cute graphics whirling around screen.
<amz3>oh! someone posted on guix mailling list a very nice ffmpeg command to record a screencast with sound
<amz3>ffmpeg -video_size 1920x1080 -framerate 25 -f x11grab -i :0.0+0,0 -f pulse -ac 2 -i default -y output.mkv
<davexunit_>ooh that's pretty nice
<amz3>davexunit_: I saw your message about obs, seems like a useful piece of software
<amz3>i need something light, the gnome tool is crashing my machine for some reason
<amz3>maybe that's only a bug of gnome (or gnome's ubuntu) but anyway ffmpeg just works
<davexunit_>amz3: yeah obs is good
<amz3>This is the schema I use for my wiredtiger database
<amz3> https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model#Structure_of_an_EAV_table
<amz3>that's basically the tuple space that is described in this article
<amz3>minus the validation part of attributes
<amz3>that article looks like advertisement for a medical company or something
<amz3>last time I tried my database handled 1500 documents per seconds using that model
<amz3>I need to do a mistake tonight
<amz3>I will rewrite the tuplespace:)
<amz3>I need a name...
<amz3>please cast a vote https://twitter.com/_amz3_/status/835221169313837056
<amz3> https://en.wikipedia.org/w/index.php?title=Entity%E2%80%93attribute%E2%80%93value_model&direction=prev&oldid=351277819#Downsides
<paroneayea>arg
<paroneayea>I always interpret (compose ...) as being in the opposite direction I think it is
<amz3>me too!
<amz3>paroneayea: what do you think of P2P with webservers as peers?
<amz3>paroneayea: one could build a p2p network on top of you federation work?
<paroneayea>amz3: so the activitypub protocol could run on top of a peer to peer network, with a couple of small tweaks
<amz3>it requires peers to be able to answer queries about data found in other nodes
<paroneayea>amz3: yes, so
<paroneayea>amz3: https://foo.bar/example/ <- normal uri right?
<amz3>yes?
<paroneayea>amz3: what if you change out the schema
<paroneayea>scheme-torrent://foo.bar/example/
<paroneayea>as a made-up example
<paroneayea>but you can imagine telehash, whatever
<paroneayea>or even
<amz3>ok
<paroneayea>POST message => telehashy://G0CdilxYHkdq4MfpGaPeBa8CNuSYkB/u/amz3/inbox
<paroneayea>whammo, you've got a federated network running over a peer to peer network. It's possible, assuming you can have the p2p network "speak" http messages.
<amz3>that's not what I have in mind.... basically I thought gnunet had a rest API
<amz3>paroneayea: yes correct
<paroneayea>amz3: I don't know anything about gnunet, can't speak to that :)
<paroneayea>but might be possible to do over gnunet too
<paroneayea>I haven't really succeeded at digging into gnunet yet
<paroneayea>I'd like to understand it better
<amz3>the thing is that the layout of gnunet data is non standard, you can't think of it like sql tables
<paroneayea>amz3: that's fine, as long as you can do some sort of mapping of key to value
<paroneayea>you can pull it off.
<amz3>not really because you need also messaging in the system somehow to build relations
<paroneayea>amz3: anyway, proof of the pudding is in the eating, etc :)
<amz3>clearly
<paroneayea>amz3: as long as you can do something along the lines of HTTP POST between nodes
<paroneayea>and a GET
<paroneayea>that's all you need
<amz3>yes
<amz3>the EAV stuff is totally crazy stuff, it says, that eav database builds up a set of metadata about itself to construct bigger abstraction of data and then render it correctly to the user
<amz3>then it goes on to say on wikipedia that there metadata about the access level of metadata
<amz3>or maybe that is tables I'm not sure
<amz3>yes they free mix tables with eav database
<paroneayea>yeah you could also build this stuff on top of a triplestore
<paroneayea>that's what the more "RDF'y linked data" type people do :)
<paroneayea>Pubstrate is building on top of GDBM for now even, so obviously you don't need much ;)
<amz3>do you do full traversals of the database?
<amz3>that's the issue I have with gdbm, I can query some data without a full db scan
<paroneayea>amz3: I'm being very dumb about things, just "follow your nose" from one link to another, no advanced queries
<paroneayea>amz3: it could be a lot better obvs :)
<paroneayea>this is prototype level stuff
<paroneayea>which hopefully will evolve beyond that ;)