freenode/#lisp - IRC Chatlog
Search
7:00:16
fiddlerwoaroof
ACTION wishes we could program against a better abstraction layer than CFFI for inter-language communication
7:02:10
fiddlerwoaroof
Ah, I see, I was hoping that there was some way for the dumper to link in the object files
7:05:23
fiddlerwoaroof
What makes them difficult? (I barely know anything about how they work under the hood)
7:06:03
|3b|
save-lisp-and-die only rebuilds the lisp part, it doesn't rebuild the runtime (written in C)
7:06:40
Shinmera
|3b|: I didn't want to say because I'm not sure about it: does it basically just attach a memory block to the existing C binary that is loaded on boot?
7:07:01
fiddlerwoaroof
Yeah, but I'm talking about doing something to prevent things libraries like osicat from making your dumped image have a runtime dependency on a shared library
7:07:44
Shinmera
Well, again, if you need to deploy, you can set up static linking in the SBCL build.
7:07:46
fiddlerwoaroof
It would be nice if you could somehow convince dlopen to treat a bunch of memory as a .so
7:08:46
Shinmera
The issue with dynamic linking and all of that is the version mismatch possibilities.
7:09:27
|3b|
you could theoretically include the .so in the directory, but then you still need all of its dependencies (possibly even to libc depending on what you build on and care about running on)
7:09:59
fiddlerwoaroof
Sure, that's why I'd like (ql:quickload :osicat) to load the contents of the dependent .so files into memory in such a way that it can find them again when the image is run
7:10:06
Shinmera
For the C libraries I have in Quicklisp, I always ship prebuilt binaries and try to minimise dependencies as much as possible.
7:10:09
|3b|
probably easier to convince people to give you build scripts for their package manager of choice to include a dep on the shared library
7:10:55
fiddlerwoaroof
Perhaps, one way might be to bundle the libraries as constants and then to "unpack" them to a well-known location on first run
7:10:57
Shinmera
fiddlerwoaroof: If deployment of .so s is your issue, just use something like the Deploy library.
7:11:42
|3b|
including libs (particularly in memory as opposed to just in dir with executable) will annoy people when you include a version with security vulnerabilities (or other bugs) that are fixed upstream in the lib but not in your copy
7:12:37
Shinmera
I find having to dig for the library and installing the required version annoys a lot more people than the problem you outlined.
7:12:47
fiddlerwoaroof
Yeah, but that's one of the well-known trade offs between static-like linking and dynamic linking
7:12:50
|3b|
there are various installers outside normal distro package managers that try to deal with libraries etc
7:13:15
|3b|
maybe one of those would help, hopefully without annoying your users too much when you don't pick the one they like :)
7:13:46
Shinmera
If someone really cares about security / being up to date, they can just remove or replace the included .so file.
7:14:21
Shinmera
Which is something they'd probably know how to do, whereas someone uninitiated knowing to install the correct library and how is much less likely.
7:15:27
Shinmera
Anything to do with deployment is such a pain in the ass I sometimes wish I hadn't gotten into software at all.
7:18:41
fiddlerwoaroof
My common lisp deployment problems are nothing compared to the deployment issues of the gigantic Java/Scala/Groovy/etc. code base I deal with at work
7:20:06
fiddlerwoaroof
One thing I've learned about large software projects is that half-completed attempts to improve code quality are worse than useless
7:30:06
fiddlerwoaroof
Because then someone else comes along behind you trying to get something done, they have to think about both your new way and the old way
7:30:37
fiddlerwoaroof
This is mostly an issue when you have a half-finished architecture change or other wide-reaching changes
7:56:54
Arnot
Thanks! I've used it for a bit, mostly just for working through Practical Common Lisp to be honest
12:25:18
zulu_inuoe_
3b: this is way late in the conversation, as far as including the shared library in the image, I played around with that and got the file saved as a lisp vector, then allocated room for it and did all the memory loading steps for it
12:29:02
zulu_inuoe_
It was a fun experiment, but I think at the end of the day I think that any time you're distributing a software package of any significant importance, shared libraries etc are the least of your worries, especially if you're willing/able to package them together with your own package
12:40:37
thetabit
Good morning, just wanted to ask if are any libraries for working with creating linux daemons?
12:42:05
antoszka
thetabit: Creating linux daemons is not really different from launching any other program.
12:42:19
jackdaniel
thetabit: writing daemon definition is something you do for your init script system
12:42:44
antoszka
thetabit: If you need the daemon to listen on TCP sockets, yes, there are libraries going to help you with that.
12:42:59
jackdaniel
CL allows you to produce binaries, you may write service definition file (be it systemd's service, or initd shell script) and put it in appropriate directory
12:43:59
jackdaniel
poor man's daemon is running repl in tmux session and starting whatever you like there
12:58:32
schweers
I have a question regarding packages. I am a little fed up with having to include a certain set of dependencies into every package I create. such as metabang-bind and iterate. I wanted to create a "base" package which depends on said packages and exports all symbols exported from any of its dependencies and of course from "COMMON-LISP". This is the package I created: http://paste.lisp.org/display/353574
12:59:50
schweers
when I try to quickload another package which depends on it, and :USEes it (and nothing else, not even :CL) I get an error claiming that <PACKAGENAME>::NIL is not defined
13:02:55
zulu_inuoe_
My immediate guess would be you need an eval-when to make sure that export loop runs at the right time
13:05:06
schweers
I added (eval-when (:compile-toplevel :load-toplevel :execute) ...) around the loop, didn’t help. Even restarted the lisp process
13:07:14
Bike
well, forget about compile time side effects for a minutes. if you just load the code one form at a time, does the package export everything it's supposed to?
13:11:14
zulu_inuoe
Please tell me there's another lisper that's into Dark Souls. I'd have found my soul mate then
13:12:38
zulu_inuoe
Yeah it'd be finding a niche person (who may not even be a programmer) and teaching them lisp. That's sure to work great
13:13:18
schweers
zulu_inuoe: you might have more luck with non-programmers. they have not yet been conditioned to believe that lisp is evil
13:16:13
dlowe
Quote: It was Bernie Greenberg, who discovered that it was. He wrote a version of Emacs in Multics MacLisp, and he wrote his commands in MacLisp in a straightforward fashion. The editor itself was written entirely in Lisp. Multics Emacs proved to be a great success programming new editing commands was so convenient that even the secretaries in his office started learning how to use it. They used a manual someone had written which showed how to extend Em
13:16:24
schweers
I recently stumbled across the claim that every site is a dating site if you’re creepy enough ;)
13:18:04
zulu_inuoe
schweers: It's actually just interfacing with people, I think. My experience has been that dating sites are some of the worst places to find people to date. More effective to join a group and just mingle naturally
13:18:10
dlowe
as much as I love that anecdote, there should be a disclaimer: "These secretaries were MIT secretaries"
13:18:52
schweers
zulu_inuoe: people seem to often use such sites with the wrong expectations, but that wasn’t my point. I was just joking a little.
13:24:19
dlowe
schweers: I don't know how "especially smart" you are saying, but I'm saying that the sample is probably skewed towards high capacity to deal with 1970s computers
13:25:29
schweers
don’t know that much about MIT, so I don’t know how their secretaries are. or were. I’m too young for such stories ;)
15:35:07
thetabit
How do I format a number as a string and if the number is less than 10 place a zero on the front. I am trying to print datetime so that it will be compliant with mysql datetime
15:37:55
thetabit
I've got something like (format nil "~[00~;01~;02~;03~;04~;05~;06~;07~;08~;09~]" <input>)
15:43:06
dlowe
thetabit: you might want to check out local-time which has formatting for stuff just like this
16:58:36
Fare
jasom: ok, so between 2013 and early 2017 --- I removed the name recently. Is anyone using it directly?
17:53:47
_user
one of them that looks pretty good to me is this one: https://github.com/fukamachi/prove
17:57:04
_user
I see a lot of reccomendations for FiveAm as well, but I haven't seen active dev on it
17:57:59
rpg
_user: I thought it had been recently overhauled to remove its ancient arnesi dependency. But TBH, I haven't been tracking it that carefully.
17:59:05
rpg
For reasons of stability, we use a local copy, and haven't had much time to pull changes from upstream. Which is actually a good sign that it isn't broken!
17:59:44
rpg
I would avoid RT, which is interesting, but crude (e.g., doesn't take well to multiple bits of testable software sharing the same image).
18:00:11
_user
yeah, I was going to avoid RT, based on your feedback I'm now considering prove/fiasco
18:00:36
rpg
we also have a "FiveAM ASDF" system that provides the ability to use 5AM to supply the TEST-OP for ASDF systems.
18:09:40
Shinmera
rpg: You can do (define-test foo (define-test bar)) which is the same as (define-test foo) (define-test bar :parent foo)
18:10:04
Shinmera
rpg: I implemented the 5Am compat layer so I should know what it means exactly in terms of 5Am, but I don't anymore.
18:10:10
jasom
minion: memo for Fare: quux-hunchentoot uses asdf/package and it appears to still be present in the most recent QL version
18:10:37
rpg
PS one suggestion: for ASDF I also added a test count, so that you can check and make sure that the expected number of checks is run. After being burned by that before.
18:11:14
rpg
:-( have to leave this interesting discussion because I'm getting temporarily evicted from my office by cleaners....
18:24:14
jasom
in doing ql2nix I have come up with a number of patches for various projects; it will be interesting to see if any of them are accepted upstream
18:26:41
jasom
Shinmera: I don't think so; the list so far (I'm about 70% of the way through all systems in QL) is here: http://paste.lisp.org/+7KTZ
18:27:44
jasom
which isn't *wrong* but is also usually unnecessary since asdf has an output directory
18:30:34
jasom
IIRC it's something like load-asd sets up a specific package for .asd files to be executed in and then the various fancy features added recently can be confused by it. This is all stuff I only slighty understood 6 months ago and have now forgotten, so may be 100% wrong now.
18:34:10
minion
Fare, memo from jasom: quux-hunchentoot uses asdf/package and it appears to still be present in the most recent QL version
18:45:53
Shinmera
I just had it in my template, so it's in pretty much every single ASD I've ever written
18:47:34
jasom
Shinmera: it's very nearly a non-problem; I think I can handle it now with ql2nix (bundling was broken on enough packages that now I fall back to a more traditional load structure).
18:50:37
jasom
however the architecture for ql2nix that was 90% complete when I stopped working on it last fall appears to be a good choice; There is one nix package for each "project" (I think that's the term quicklisp uses for a single source tarball) that just installs the source, and then each ASDF system gets its own nix package, which depends on the project package (and possibly other things).