freenode/#lisp - IRC Chatlog
Search
8:52:08
SaganMan
I know this is not relevant to lisp but this is just too fascinating. You all should read this. It's a new way to look into origins of life. https://www.quantamagazine.org/a-new-thermodynamics-theory-of-the-origin-of-life-20140122/
9:00:30
X-Scale
margaritamike: there're some active people on ##algorithms participating in those online judges
12:55:07
margaritamike
luis X-Scale: The thing is that those existing judges which do support SBCL only do so to a very limited extent. SBCL is not supported for even a majority of the problems on the judges, for example. Additionally, the ones I've listed -- Kattis, Timus, Codeforces -- are the judges which really have some of the highest quality problems to solve.
12:58:48
margaritamike
If I were a wealthy person, I would try to get those online judges to support SBCL, to give more people a platform to practice using the language on high quality problems that judge your solution, especially the youth. I would then likely try to campaign very hard to get the language added as an optical language to compete with in the ioi or the icpc, but that would be much harder (maybe not worth the effort idk).
13:00:20
margaritamike
Having SBCL on those judges would be so beneficial, though. It benefits the communities of the languages it supports so much imo.
13:01:51
margaritamike
Still trying though. I've emailed Kattis, recently, and posted on the Timus forum (may email them as well). Planning to try to post on Codeforces forum as well.
14:17:25
jmercouris
this is an opinion question, I have a system file where I have a base system next, with systems next/cocoa and next/gtk. next/cocoa includes customizations necessary for next/cocoa
14:17:45
jmercouris
you CANNOT load next by itself because it assumes some functions will exist, should I provide default implementations of those functions?
14:20:15
|3b|
though sounds more like it would be better to rename it to be more obviously not the whole thing
14:21:00
loke`
jmercouris: you could always create three systems: root/gtk, next/gtk and next. root/gtk would depend on next/gtk followed by next. SO the thing you'd load is root/gtk if you want the gtk one.
14:21:01
|3b|
maybe add another system that tries to guess which of gtk or cocoa would be more useful
14:21:04
jmercouris
here's another good question, do you think I should use conditional reader macros, or separate sytems?
14:21:42
jmercouris
I want the user to be able to just (ql:quickload :next) and it automatically loads the appropriate files depending on OS
14:21:58
|3b|
or else rearrange them so next/gtk and next/cocoa are what you load to get a working setup (so would load internal /gtk or /cocoa system, then load main system)
14:22:03
jmercouris
which is why I'm leaning away from using 3 systems, as I currently have, and just using conditional macros
14:22:56
jmercouris
here's the file: https://github.com/atlas-engineer/next/blob/remote-gui/next.asd
14:25:27
|3b|
if it is just 1 file, and you can easily detect it from *features* (like always cocoa on osx, otherwise gtk), i'd probably just move the specific file to :next system with :if-feature
14:26:20
|3b|
then you would have a next/release with similar feature check to load the correct -release file
14:27:07
jmercouris
and I'll make the if-feature check gtk for linux and bsd, and then cocoa for darwin
14:42:28
jackdaniel
then why won't you provide a minimal example project with files, so others may try to help troubleshot it?
14:48:26
|3b|
but does look right comparing with https://github.com/nikodemus/sb-cga/blob/master/sb-cga.asd#L32
15:06:37
jmercouris
so I had the syntax right, it just wasn't working the way I was expecting due to the mac os being also part of :unix within the if
15:16:51
jmercouris
I am support anything that runs GTK, which could be just about anything except darwin
15:17:10
jmercouris
so yeah, what you wrote, above is what it will have to be (:and :unix (:not :darwin))
15:20:40
makomo
what's the usual way to configure a build in the lisp world (well, ASDF world), i.e. the equivalent of CMake's configuring process or Make's ./configure script?
15:20:44
pjb
jmercouris: (eval-when (:compile-toplevel :load-toplevel :execute) (defun gtk-present-p () (not (not (some (lambda (libdir) (directory (merge-pathnames "**/libgtk*.*" libdir))) '("/lib/" "/usr/lib/" "/usr/local/lib/" "/opt/local/lib/")))))) #+#.(cl:if (cl-user:gtk-present-p) '(:and) '(:or)) (do-something-with-gtk)
15:21:32
jackdaniel
makomo: there isn't (except pushing features and doing what jmercouris does) or adding some ad-hoc method to asdf
15:22:10
jmercouris
the names are a red herring, they are just compatibility layers for how to interpret keybindings from those systems
15:23:59
makomo
jackdaniel: ah :/, so basically you would have some project-specific features you would push then?
15:24:11
pjb
jmercouris: perhaps you could avoid using gtk (at least directly). Have a look at: https://cliki.net/pgl
15:24:54
jmercouris
okay, so I have a cross-platform lisp core that depends on absolutely nothing at all
15:25:18
jmercouris
on Linux I've written a GTK front-end GUI that listens via XML-RPC, on MacOS I've written a Cocoa front-end GUI that listens via XML-RPC
15:25:30
pjb
jmercouris: pgl is written in pure lisp, with as only dependencies the packages: "TRIVIAL-GRAY-STREAMS" "BORDEAUX-THREADS" "ORG.MAPCAR.PARSE-NUMBER".
15:26:03
jmercouris
for it to make any sense to run Next on a non-darwin system, GTK must exist so that the GTK front-end can run
15:26:16
jmercouris
so no, my Lisp program does not directly depend on GTK, only on its sister program, its port
15:27:56
jmercouris
I see it as a different way, I am agnostic of any FFI implementation, and I can run across a network etc
15:28:09
jmercouris
I don't depend on the front-end not crashing, the Lisp core will always be stable
15:28:39
jmercouris
I think it is a very intelligent design, and I get to say that, since it is not my own
15:29:25
jmercouris
the only interface one must implement is a simple API within the Port to support some commands from the Lisp core such as make window, make buffer, etc, it is all abstracted on a very high level
15:30:04
jmercouris
I didn't spend 9 months contemplating this to do something absolutely idiotic, perhaps think for a few minutes why I might have done this before dismising my work
15:31:39
jackdaniel
people spend decades working on things which are not very smart; but since it seems to tick you off, I'll get back to whatever I was doing
15:32:50
jmercouris
I'm upset because I have worked many hours with a lot of thought, and you come in, without any context or understanding of the program architecture and make a blanket statement, it wasn't one with intent to understand, but with intent to injure
15:39:30
jackdaniel
I've criticized the approach, not you, but I'm not much into drama so I'll step aside. keep in mind, that bashing out at people who criticize things leaves you either in hostile environment or in an echo chamber
15:40:55
jmercouris
you appear sincere in your statement, I take it as a criticism of the approach, then
15:41:33
jmercouris
and I'm hardly one to stick in an echo chamber ignoring feedback from others, Next has been now rewritten 5 or 6 times at the behest of the suggestions from people in this channel
15:42:21
jmercouris
https://source.atlas.engineer/view/repository/next you can check out the remote-gui branch
15:42:37
jmercouris
loke`: the backend is agnostic, there will be multiple built, the first one is GTK
15:45:49
loke`
jmercouris: for it to actually play nicely with CLIM, the individual components needs to be represented as CLOS objects somehow though. Like buttons on a web page, or even a DIV, for example.
15:47:05
jmercouris
there is a lot to say about the port architecture and how to implement a port, I think we'll write a blog article
15:48:55
loke`
jmercouris: Might be an interesting experiment. A CLIM-based full operating environment is something that would be really nice, and something I'd like to work on at some point. I am, however, realistic enough to note that an environment without a "full" browser is not going to be complete, and I'm certainly not going to be able to write a full browser in Lisp, so this may be a workable alternative.
15:50:47
jmercouris
loke`: yes, that is my reasoning as well, that is why I leverage the work of other port maintainers, otherwise I would be constantly chasing the html spec, which in ofitself would be hard to implement efficiently
15:51:02
jmercouris
that is something that I see as "down-the-road" work, if possible, and if there is a lot of money available
18:09:16
jcowan
I do wish I could coerce eval-when into properly marking a macro-expansion-time only function, but I can't find any combination that works.
18:10:02
margaritamike
Hey, folks! Good news! Someone is having a look at the submission of using SBCL for Kattis! There is one issue, though. The output of the given solution is spitting out an unnecessary newline. Does anyone know how I could fix the solution to not spit that newline out at the beginning? The solution I'm talking about is here: https://github.com/optimisticlisper/kattis_sbcl_different/blob/master/accepted.lisp
18:10:20
margaritamike
It is meant for the following problem: https://open.kattis.com/problems/different
18:10:52
margaritamike
If you were to provide the input in a file named 'in', it can be run with the following command sbcl --dynamic-space-size 1024 --control-stack-size 64 --script accepted.lisp < in > out
18:11:15
margaritamike
Or if you prefer to see results printed in terminal, sbcl --dynamic-space-size 1024 --control-stack-size 64 --script accepted.lisp < in
18:12:38
margaritamike
I am not very good at common lisp, but am trying to get it added to the Kattis platform to use as a learning tool on the wonderful problem base Kattis has. I believe it will be beneficial for others too, seeing it as an available language to solve high quality problems on this online judge and help in increasing its popularity.
18:13:23
margaritamike
Would anyone happen to know how I could avoid that first new line from being spit out when running it against test data?
18:15:25
jcowan
It's because PRINT for hysterical raisins is implemented as a newline followed by the things to be printed, unlike print/println in most languages which put the newline at the end.
18:16:51
margaritamike
Is there an alternative to print that does not print a newline first? One of the admin/owner of Kattis has mentioned it is likely to break a lot of problems if there is not a reasonable way to avoid this newline.
18:20:52
|3b|
ACTION would probably get rid of the --control-stack-size 64 too unless you have some specific need for it
18:21:16
margaritamike
|3b|: I am keeping that stacksize because some problems can be pretty memory intensive.
18:22:05
margaritamike
This is their runtime settings: -XX:+UseSerialGC -Xss64m -Xms{memlim}m -Xmx{memlim}m -Dfile.encoding=UTF-8 -cp {path}
18:22:50
|3b|
(which is probably a reasonable assumption, those sorts of things tend to not need threads, or at most 1 per core)
18:25:02
|3b|
and CL has pprint, which might layout forms reasonably (or might not, depending on implementation and forms)
18:27:01
margaritamike
What executes faster? (format t "~a~%" (abs ...)) or just using (terpri) after (prin1 ...)?
18:28:31
margaritamike
Luckily this platform will be able to show memory usage and time taken to execute a program, so good for testing things! :)
18:28:38
|3b|
ACTION would expect format with constant format string to use formatter to generate something reasonably fast for simple cases like that