freenode/lisp - IRC Chatlog
Search
8:54:09
some-user
how to make run-program to respect my PATH? (run-program "ls" '()) doesn't work because it fails to look into $PATH
8:56:19
pjb
some-user: notice that when using the shell, it will in general load some profile (eg. .bashrc when using bash), and the PATH can be reset in this profile.
8:56:53
pjb
some-user: so if you changed the PATH or just want the one inherited, you may have no other choice than calling fork/execvp yourself.
8:59:14
jackdaniel
some-user: function is described in detail in sbcl manual here: http://sbcl.org/manual/index.html#Running-external-programs
9:00:45
jackdaniel
I don't, you never know when it'll break its api, it's not even documented (unless someone considers docstrings being documentation)
9:06:47
some-user
"(run-program "ls" '() :shell t" - unkown keyword :shell, "(uiop:run-program "ls" nil)" - odd number of key args
9:09:49
jackdaniel
the problem is that uiop instead of making distinction between program and arguments does split by itself
9:13:07
jackdaniel
some-user: regarding update, you may use a library created by Anton for that: https://github.com/avodonosov/ql-asdf-chooser
9:14:06
jackdaniel
(some incompatible changes were introduced, like enforcing using make-operation instead of make-instance to assure singleton objects)
9:15:58
some-user
jackdaniel: got it, thanks, will do as readme says most likeley and update asdf manually
9:22:14
some-user
https://common-lisp.net/project/plexippus-xpath/examples.html#id53256 where can i get (stp:make-builder) from?
9:30:20
Shinmera
Sure, it's less powerful than Xpath, but I find it's more than enough in the vast majority of cases.
9:34:11
clintm
I'd probably dislike it a lot more if it wasn't the only way to get a cross platform gui.
9:34:36
Shinmera
I dislike it because of exactly that. Being forced to use a particular tech is irksome.
9:37:55
phoe
<cons><car><symbol package="COMMON-LISP-USER" name="HELLO" /></car><cdr><cons><car><symbol package="COMMON-LISP-USER" name="WORLD"/></car><cdr><symbol package="COMMON-LISP" name="NIL" /></cdr></cons></cdr></cons>
9:38:00
Shinmera
clintm: Well Qt is a toolkit that's already done, so this is new. It's for my game engine. Doesn't need to be super complex for that, fortunately enough.
9:39:56
clintm
Maybe I need to revisit qt and the associated tools for cl. The last time I tried, it always seemed to blow up in unexpected and frustrating ways.
9:46:27
loke
There was an abomination coming out of that... Sit thee down, for 'tis a borrible story.
9:47:29
loke
Or, kinda sorta XML. Because apparently as long as it was like XML it was great. Or something
9:48:05
loke
anyway... the language was called "water" and there is very little information available on it these days. Buthere's a snippet:
9:48:45
loke
The guy was very bullish on his creation, saying that it was going to be the best thing ever, blah blah
9:49:36
loke
Now, after a while, this thing seemed to just disappear, and there were no more updates (I had been casually following it for years, just to see how long it would last)
9:50:03
loke
Then I figured out why the project died, since I recently decided to search for the guy's name to figure out what he was up to now:
9:50:42
clintm
I vaguely remember the huge tech bookstore in portland having a whole wall dedicated to books on UML because it was the future.
9:51:46
Shinmera
ACTION 's "Software Engineering" class this semester required us to model stuff with UML
9:52:42
phoe
clintm: you know what's worse? there's this language called Java with all its spinoffs like SOAP...
9:52:59
Shinmera
In the very least the class also showed formal verification and static analysis, which is actually useful.
9:53:07
loke
After the dotcom company I had been working for for a few months had to fire everybody (this is back in 2002 or something) I interviewed joined a company implkementing a new system. They sead they were heavily into UML, so while waiting for my first day at work, I bought a UML book to learn what the hell it was all about... Well...
9:53:10
jackdaniel
not that I'm saying that languages without macros make sense, but for some syntax macros doesn't ,)
9:54:05
Shinmera
Design patterns are when you don't understand your problem and start out thinking you can fit it into a premade solution, only to realise it doesn't fit, and have to warp it into a monster of crap as time goes on.
9:54:19
loke
Turns out that the cuonsolutancy company who had been doing the implementation of the system (I was hired to bring the project in-house) had designed an object model in UML (rational Rose, I think). The model was based on EJB 1.0. And they they hired some interns to implement stubs for aveenrthing in C++
9:55:40
clintm
I got a job at <large, huge, online retailer that you almost certainly have heard of and probably have used> and no one on my team ever wrote code outside of work. I mean, it's their time to do with what they want, but it was still a bit shocking to me.
9:56:07
loke
Shinmera: Probably because the lead developer didn't know Java, but he had heard about the gratness of EJB
9:56:24
Shinmera
clintm: Most of the students I've met at uni don't really code in their free time either.
9:57:56
loke
So instead of doing new Foo() and call a method on it, you had to look up a session home, instantiating it, and call a creation method on that to generate some kind of object or whatever. I don't rememebr, it was just too insane.
9:58:20
loke
So you had kinda-sorta the calling sequence of Java EJB 1.0, with none of the benefits.
9:59:11
loke
phoe: He had no Java experience. If he had, he'd ahve known EJB 1.0 was an absolute clusterfuck.
10:00:41
loke
He also implemented the application in 4 distinct "layers". And even though the classes for all of them were available everywhere (it was all compiled into a single monolithic C++ application using VS anyway), he still created these "session objects" that did nothing but to call the next function in the stack.,
10:01:37
loke
So he had thousants of stub classes implemented by these interns who had just been manually copy/pasting the class definitions. None of the classes had any implementations behind them of course, and these classes were just things they had designed in Rational Rose without any imput from the domain experts.
10:01:49
clintm
(trying to keep from writing a simple parser for Water... I best just close the tab)
10:02:27
loke
So you had objects representing hardware devices with a .PowerOn() method... How to send a command to an unpowered device? Hell if I know....
10:11:24
clintm
ah, ok, qt4 et. all has finished installing, so I can distract myself with qtools, etc. closing the tab...
10:11:45
Shinmera
qtools install its own version of the qt4 libraries. No need to install anything manually.
10:13:19
loke
clintm: If you want a bigger insight into the mess which is that language, have a look at this: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.199.9060&rep=rep1&type=pdf
10:19:55
clintm
Huh. Should (ql:quickload '(qtools qtcore qtgui)) work out of the box? Maybe I've done something to my sbcl and ccl installs. Or, maybe I need to read the docs and this time pay attention.
10:24:11
clintm
what's the shortcut in sbcl for a backtrace in the restarts prompt? I seem to have forgotten it.
10:31:00
Shinmera
linux / osx / windows only for the moment. With all the different bsd flavours I wouldn't even know where to start.
10:31:12
Shinmera
Should put in a better error message for unsupported systems though. I thought I had done that.
10:33:14
clintm
Supporting bsds requires building all of the libraries, correct? Not exactly a trivial job.
10:34:45
Shinmera
But, since I never put in any support for BSD, I first need to fix up some of the lower level stuff.
10:41:08
clintm
Naw, but then again, I'm very used to it. The installer is right about the same complexity as the text based debian installer, if you're familiar with that.
10:43:30
clintm
I'm not sure, I know openbsd has a large fan base. Afaik, most people use it for a server as opposed to desktop.
10:43:42
Shinmera
ACTION wonders if he'll have to go through similar hoops as on Linux (patchelf, et al)
10:44:36
clintm
Oh, but there is a full (or afaik reasonably full) binary compat layer in freebsd that seems to be complete.
10:48:12
clintm
Maybe it's time to do this month's "what versions of linux don't have systemd" scan a little early.
10:49:24
clintm
TMA: Yea, I've seen that as well. For example, you used to be able to use the linux version of skype4 but something bitrotted and the port hasn't been updated. or, at least it wasn't about a month ago.
12:12:55
Shinmera
clintm: Weew, looks like Smoke is not configured for Freebsd either, so I'll need to make fixes to that to get it to compile.
12:13:16
Shinmera
I'm gonna tackle that another time. Setting up a running desktop took me long enough already.
12:26:02
whoman
meditate instead if you wanna code better =P n some yoga and eating healthy never hurt anyone
12:41:58
pjb
http://www.ibtimes.co.uk/mummified-buddhist-monk-still-alive-after-200-years-nearly-buddha-1486570
12:45:26
pjb
and there are more than one: http://www.welikeviral.com/mummified-buddhist-monk-found-alive-almost-90-years-death.html
14:18:22
Xach
Sort of. It's a pull request from a new contributor, and marijn offers maintainership to him.
14:19:18
Xach
http://report.quicklisp.org/2017-08-24/failure-report.html <-- ieee-floats isn't in the failure list, but its dependant systems do.
15:16:25
minion
knusbaum, memo from jackdaniel: try (clim:accepting-values (t) (setf *config-name* (clim:accept 'string :prompt "Config nname:"))
15:18:26
jackdaniel
that said, as it was pointed out by nyef, this is a bug that accepting-values doesn't return last value(s) on `OK'
15:23:46
antoszka
Is there a preferred git hosting service for QuickLisp projects? As in github vs gitlab?
15:30:40
dim
some days using CL feels lonely. Today I wanted to see about implementing MySQL replication protocol, already existing in Java, Python and Go. Reading the docs makes me turn away.
15:30:58
dim
I would have implemented support for it in pgloader if I didn't have to implement the protocol myself :/
15:32:58
dim
that said I might be able to pay another CL hacker to implement the lib, then use it in pgloader
15:41:03
phoe
as long as Quicklisp can do a git clone from that location and you're sure no malicious agents can inject their code there, you're golden
15:46:25
jackdaniel
first thing is that you use keywords, many people consider it a bad thing in loop macro
15:47:27
phoe
(loop for wf in (list (list 1 #'1+) (list 2 #'1+)) collect (funcall (second wf) (first wf)))
16:35:19
oleo
the form maybe multiple values over which the function gets funcalled or it maybe a list to the function as in a lambda-list
17:11:52
Xach
random-nick: there are really very many ways! you could expose the repl, or commands that load stuff. document functions and data.
17:13:40
Xach
random-nick: i've always been interested in writing an application that is extensible with cl-js.
17:29:10
beach
random-nick: An important technique that I use it to make sure I use standard classes and generic functions as much as is practical. That way, client code can extend it with sub-classes and specific methods.
17:34:33
Shinmera
And you need to still take care to design things in a way that makes them actually extensible, even if you do use CLOS.
17:44:36
whoman
i like the analogy of prefabricated or closed objects. if i am building my whole house, i dont have to build my own furniture. also if i am building my own furniture, i dont need to build my own house. or i can build it all, or i can get them all prebuilt and arrange them according to how they are built
17:48:47
jasom
random-nick: for basic configuration stuff, a file that gets loaded at startup is great. almost no work and really easy
17:53:42
jasom
random-nick: http://paste.lisp.org/+7LC1 <-- here's my config from a small webapp I wrote
17:59:10
beach
jasom: The application must be written to allow for extensions and the possible extensions must be documented somewhere.
18:01:57
knusbaum
Should be obvious, but it's worth saying that files that the application calls (load) on shouldn't be writable by users with fewer/different permissions than the user the application runs as.
18:03:48
jasom
beach: yes, making an application properly extensible is a wide problem, hence I said "for basic configuration stuff"
18:04:56
dlowe
the downside of LOADing configuration is that your configuration file becomes un-analyzable by simple software.
18:05:41
jasom
dlowe: only if you do complicated stuff in it; if it's a line of a dozen SETFs then it's fine to analyze. It's only harder to analyze if you use things that you couldn't do in a simple file.
18:07:02
knusbaum
In general, my experience says that if something *can* be abused, it *will* be abused, especially in large teams.
18:08:36
jasom
many configuration files start out simple and get an ad-hoc turing complete language by accident at some point.
18:09:01
knusbaum
Just limit it to a file containing an assoc list or somesuch. If you're limiting your config to simple setf's anyway, what's the difference?
18:09:43
jasom
beach: well .emacs was always a turing-complete language (as was vimrc). I'm thinking things like every web server ever written.
18:10:26
knusbaum
To be clear, I'm saying for situations where you *don't* want it to get out of hand. loading configs is great for stuff like emacs, where I know it's only me that's going to be messing with the config. :)
18:11:23
jasom
I've just seen too many things where it starts out as like a .ini file and then they start adding [if condition=foo]... [else]... and it's now crappy *and* can't be analyzed
18:12:55
beach
My question is "why would you want it to be analyzed?" And that depends on the use case.
18:14:23
knusbaum
Well for machine-analysis that depends on the use-case, yes. For human-analysis, config files should ideally be as readable as possible (again, if they have to be shared among many people)
20:04:00
jackdaniel
random-nick: also #clim channel can provide you some good advice if you are stuck
20:07:50
jackdaniel
(lispworks guide is also good learning material of course, same as allegro clim manual)