freenode/#lisp - IRC Chatlog
Search
4:14:08
no-defun-allowed
But SICL hash tables and Luckless permit any hash and test functions, and are basically drop-in replacements for Common Lisp hash tables. (Except that hash functions based on the address of an object will not work in either, if your implementation moves objects.)
4:46:08
easye
beach: I just joined RavenPack, so right now most of my energy is going into learning the code base.
4:47:00
easye
I am working with phoe to get ELS 2021 airborne, hopefully to get the CFP out before the holidays.
4:48:00
easye
Moving isn't possible at the moment. I will evaluate things when the pandemic starts to tamper off, which probably won't be until late 2021.
4:48:49
easye
But I think living in dense urban cities isn't necessarily my thing anymore, so Southern Spain sounds quite attractive at this point.
4:49:58
easye
Really, if I had to pick a beach, I would move in your neck of the woods, to around an hour north of Biaritz.
4:51:28
easye
French food, and the sheer amount of great stuff y'all have in your hypermarks is magnitudes better than what is available in Austria.
4:53:18
easye
And groceries in France are considerably cheaper than in Austria. When I have been shopping in France, a full basket of great stuff rarely breaks 100EUR. In Austria, the same stuff at less quality would easily break 300 EUR.
5:00:01
jeosol
beach: going through my CL archives, I came across a document you author, in 2000 or compiled by Loic Lacomme: "Symbolic programming using Common Lisp"
5:01:00
jeosol
it does contain good points when I was trying to justify CL for choice of a project back then - I no longer do this anyway, following advice here and elsewhere
5:02:39
jeosol
beach: the bootstrapping procedure, version 3, that's also probably in the spirit of iterative CL development
5:12:42
jeosol
I think the person mentioned compiled it from notes, it seems but attributed the content to you
5:12:53
beach
jeosol: In this case, it is just that I was unable to predict the negative consequences of the choices I made for versions 1 and 2.
5:14:57
jeosol
I recently did some refactoring also using "layering" of problems and macros to automatically generate functions - always good feeling afterwards
5:16:40
jeosol
beach: oh ok. I saw a thread on reddit about parallel gc's or something a few of the lispers chiming in. Did you see it?
5:17:09
jeosol
Is parallel GC something you are looking into? FYI, I am not a compiler guy - not an expert in that space
5:17:26
easye
<https://www.reddit.com/r/Common_Lisp/comments/kd816x/excerpts_from_the_pro_mailing_list_on_common_lisp/>
5:17:41
beach
Yes, the GC I designed for SICL is parallel and concurrent, but it hasn't been tested in real life yet.
5:19:10
beach
I need to vanish for a while. Busy morning today, with tasks unrelated to Common Lisp.
5:22:26
easye
no-defun-allowed managed to get ABCL working with the Project Loom green threads <https://twitter.com/nodefunallowed/status/1337560381930098690> which I would like to add.
5:24:46
easye
Yes, RavenPack is based in Spain. We do "sentiment analysis" of data, providing structured feeds of unstructured data.
5:25:33
easye
The bread and butter at the moment is providing machine-readable "signals" for financial news, but we are actively expanding into general analysis of textual data.
5:27:47
easye
It is very nice, indeed, especially after a long drought of commerical work for me personally. To be doing it in our favorite CONS makes it extra so.
5:34:27
easye
Exactly, and we are starting to incorporate Machine Learning for the buzzword trifecta.
5:35:57
jeosol
easye: I see, I once looked at Gabor Melis's code and I realized he integrated with python do some of the ML work.
5:36:04
lotuseater
i worked a while for a data science company where mostly python is used, the libs are very mature :)
5:37:33
lotuseater
yes and also pandas is cool for example. but back then (2018) i just was new to functional programming and far away from CL
5:37:57
jeosol
easye: regarding your commercial statement, I seem to recall that some defense companies (US side) are using allegro works, I was in a few of their talks on Ontology and knowledge graphs
5:38:53
jeosol
lotuseater: pandas is nice. I recall someone (i forgot who) was developing a similar dataframe-based library in CL and has some applications
5:39:29
easye
RavenPack is an Allegro shop. Our semantic taxonomies are mostly home-grown, mainly for efficiency/speed.
5:40:30
easye
I did a lot of semantic web research in a former life, and really like processing things with RDF, so will bring that perspective, slowly, into focus.
5:43:34
easye
This is my second job using commercial implementations, the previous one was using LispWorks.
5:44:13
easye
If you have the money, and you have a job to get done, it is nice having commericial support.
5:45:22
jeosol
easye: so you'd recommend Allegro. I hear it's slower compared to SBCL, I haven't done a test.
5:45:45
jeosol
I only used it briefly many years when starting out and figuring which compiler to start using
5:46:02
easye
I wouldn't recommend anything without knowing the context (how much money do you want to spend? What are your developers used to? etc.)
5:46:23
jeosol
what about their single digit revenue "clause". I thought there was something like that. May be different now.
5:46:43
easye
SBCL is a fine implementation. GOOG uses it for the air flight search application they acquired from ITA.
5:46:56
jeosol
easye: Fair point. What I meant about recommended is all within CL sphere, and in relation to LispWorks
5:47:19
easye
jeosol: Franz is definitely the ORCL of Common Lisp implementations in terms of cost and licensing, but their support is nicer.
5:57:05
no-defun-allowed
easye: Hey, sorry for the delay, I was gardening, but using Loom is not backwards compatible with OS threads.
5:57:21
no-defun-allowed
Or, more specifically, you have the same methods to spawn OS threads, then you have another method to spawn a green thread.
5:58:28
no-defun-allowed
The change I made was to put `javaThread = Thread.startVirtualThread(r);` in the constructor for LispThread(Function, LispObject) instead of the other stuff to make a Java thread.
5:59:44
easye
no-defun-allowed: cool. Would you recommend that as the way to spawn all threads when running on Loom then?
6:01:02
no-defun-allowed
But again, it's not backwards compatible with older Java, and Loom is based off a test of JDK 16, so it's not even compatible with anything stable.
6:01:35
easye
Detecting the presence of the Thread.startVirtualThread() method should be sufficient.
6:02:29
easye
Do you know if Loom openjdk16 EAs are multi-platform? (I assume you are running Linux)
6:04:00
easye
<https://github.com/AdoptOpenJDK/openjdk16-binaries/releases/tag/jdk-2020-12-10-20-02> looks pretty multi-platform.
6:22:59
no-defun-allowed
easye: I still wish there was an incremental and/or concurrent _and_ generational GC on Java. The first generational collector (to my knowledge, the Liebermann-Hewitt collector) was an extension of an incremental collector (Baker copying), so this feels like a bit of a step back.
6:24:44
easye
I thought GC1 was concurrent and generational, but without realtime guarantees. But I trust you have looked at the current state of JVM GCs a lot harder than I have in recent years.
6:25:29
no-defun-allowed
G1GC? I thought it stopped the world, at least for major GCs when not apparently in a failure mode.
6:26:24
no-defun-allowed
No, it is concurrent, but I always got pauses when...using it with large heaps with...soft-realtime stuff.
6:26:38
easye
<https://blog.idrsolutions.com/2017/05/g1gc-java-9-garbage-collector-explained-5-minutes/> sez: G1, however, will only “stop-the-world” during a full garbage collection. In addition to this, it also offers a variety of tuning options so that full collections can be avoided outright.
6:28:49
no-defun-allowed
I see. I think I got a major GC every few minutes, which was no fun to play on-- er, I mean no good for my...latency-sensitive application.
6:30:16
no-defun-allowed
You got me. But a decent Minecraft modpack demands a large heap, and thus a clever GC. From what I heard, recent Minecraft conses up a lot of useless stuff like point objects, so the generational hypothesis would hold.
6:32:09
adlai
easye: to what extent does your employer have access to the signals and classifications?
6:33:02
adlai
one pervasive idiocy in finance is that you should sell signals, instead of trading on them yourself, then your signals are worth whatever your the willing sucker pays the happy seller
6:33:13
no-defun-allowed
But my observation could have been due to swapping as well; as I mentioned a few days ago, I got more memory around the same time I got into JVM occultism. And I read that G1 only stops the world when it's completely out of memory.
6:34:15
adlai
my question could be rephrased as "Does RavenPack sell its customers the actual signals, or a tool for building their own signal classifier and alert system"
6:35:36
easye
There is nothing trivial with games, their playing, or their optimization. Conway was a famous gamer. And according to <https://en.wikipedia.org/wiki/Computability_logic> all computer programs are isomorphic to a two-player static agmes.
6:36:18
adlai
ACTION incidentally is from the polar opposite finance dogmas, where the only possible good use of human-generated text is for consumption by humans, and anything automating human judgement is automatically suspect
6:36:31
no-defun-allowed
I had read a lot of the Handbook, but all the cool Java collectors do some clever analysis that I could describe as "they do the marking and count up the marks in regions, then lazily sweep the most unmarked regions", which I don't recall.
6:36:34
easye
adlai: RavenPack buys feeds like DowJones, and sells our own feeds enriched with semantics for the signals.
6:37:29
easye
That transformation is mostly proprietary, mainly because our customers have been interesting it things working well/fast rather than how they work.
6:39:03
easye
We sell tools for enriching the signals to some extent primarily an online Juptyer-like notebook.
6:39:44
easye
But I have only been at the company for a couple weeks now, and am engaged primarily as a CL hacker, so my statements may not entirely accurate.
6:40:05
no-defun-allowed
So what can I say, that's kinda neat. And they use mark information to decide what needs to be compacted, but moving regions and not large amounts of a heap sounds tedious.
6:42:10
no-defun-allowed
It may be too much to hope for, but I would hope for another edition of the Handbook that covers these collectors in depth.
6:44:51
adlai
so RavenPack itself never touches any of the exchanges? I guess it is still possible to simulate a signal's effects, for reinforcement.
6:45:34
easye
adlai: "touching the exchanges" not as far as I know. We certainly don't have realtime/historical equity prices.
6:46:06
no-defun-allowed
beach told me that it is not the clearest to read at times, and I have to agree sadly. But it is still very useful to read.
6:48:57
adlai
easye: I'd expect that the market feed is an important factor for distinguishing noise about an event (where various [anti-]correlations in the time series reduce towards absolute zero), from noise about noise (where [anti-]correlations increase away from absolute zero, and you'd detect human amplification of e.g. a surprising quarterly report)
6:49:58
adlai
although I am probably "teaching to the choir", here, and should go study something myself
6:53:07
easye
Well, we are just transmitting the structure of events related to companies; e.g. "Oracle just poached so-and-so as SVP of marketing from Salesforce". What these events have to pricing doesn't really factor into such knowledge. The companies which use our feeds add that sort of information.
6:54:26
adlai
ACTION finds the company's pandemic dashboard... that is probably a good free demo of what your paying customers get, for other contexts
6:54:29
easye
If we added pricing information to our decision, that would presuppose a pricing model.
6:55:49
adlai
hmm, you could call yourselves a quality-pass filter between the data science garbage pipelines; although somehow "big data" is a more popular meme than "gigo" these days :(
6:59:44
adlai
I think your employer's big group photo is a good site design choice, as a background to the executive mugshots...
7:00:34
adlai
when I see an "About Us" page that only lists half a dozen names, my own internal automated sentiment processor starts giving false positives along the lines of "wow, a statistically significant percentage of these people must have a passing familiarity with common lisp"
7:01:19
adlai
then I see the photo that enables estimating the denomenator more accurately, and laugh
7:04:02
adlai
ahh. I was gonna say, it has all the other dynamic sites that I've encountered lately completely beaten as far as working reasonably on an overworked computer
7:04:55
easye
I don't think having an entire company knowing the technology intimately is a reasonable standard. I doubt the majority of Intel knows much about chip design, lets say.
7:05:07
adlai
believe it or not, there are actually sketchy cryptocurrency bucket shops that put sentiment feeds into the same one webpage of their site that the traders use for charting and commands
7:05:59
easye
Cryptocurrency is definitely the Wild West. I had been ranging on it for the past half-decade before joining RavenPack.
7:07:08
adlai
there is not really anything to join. there are various companies although the well-managed ones are almost invariably providing services that have existed in the digital finance world for half a century, maybe more. (e.g., the kind of service your employer offers)
7:08:48
easye
The "social movement" aspect of crypto is more interesting, reminding me of the pre-commercial Internet.
7:08:49
adlai
it has been quite interesting to see how the folks who make a name for themselves doing manually, what RavenPack does programmatically, end up moving in one of two directions once they have attracted their audience
7:17:25
adlai
let's go back to talking about garbage collection for reclamation, as opposed to filtering for noise... no-defun-allowed, I can never figure out if you are referring to "ANSI Standard Minecraft", your own client implementation, some de-facto standardized upstream client, etc
7:18:31
adlai
no-defun-allowed: I tripped up reading your previous message that "recent Minecraft... conses up a lot of point objects"
7:19:13
no-defun-allowed
Yes, I heard that Minecraft conses a lot of short-lived objects from the OptiFine developer, who was very pissy about it, and somehow didn't sound familiar with GCs at all despite what they make.
7:19:31
easye
no-defun-allowed's work on Minecraft <https://gitlab.com/cal-coop/minecraft-hacks/abcl-minecraft>
7:19:58
adlai
ACTION wonders whether there's already a name existing for the subalgorithm of hash-consing, in the context of ... for lack of a more general context, flat euclidean space.
7:20:11
no-defun-allowed
They said that you have to scan all the dead objects, which no sane GC does these days.
7:21:09
adlai
so a CL minecraft client could have points use a metaclass, where allocate-instance reuses the hash-consed point objects, and behind the scenes are a handful of multidimensional bit arrays
7:22:53
adlai
... this kind of hash-point-consing, as opposed to the algorithms where you cons up points and shapes explicitly, and then end up having to maintain heaps of them, sorted by various geometrical constraints
7:24:56
adlai
my guess is that most who are "familiar with GCs" are familiar with them in a manner similar to the guy who drives the truck, rather than the one who troubleshoots the compactor after it stops crushing
7:27:32
adlai
I guess my thinking of this as related to hash-consing might be a false positive, too; because, "hash" is almost certainly the wrong metaphor in contexts where the sparse data behaves contiguously
7:36:16
adlai
easye: that photo probably contains ... i dunno, strictly within (3,27) common lisp programmers; although, my semantic operational conclusion is that the bus factor evidenced by that photo is "only one backpack was important enough to not be out of sight for one second, ever?"
7:51:34
adlai
flip214: the big background image of view-source:https://www.ravenpack.com/about/ where you see dozens of people doing something outdoorsy, rather than mugshots of executives
7:54:28
adlai
easye: hmmm, there is still a bit of GIGO: localizing the pandemic dashboard causes display of headlines from the english-language sites of local newspapers, and the local newspapers are garbage :)
7:55:50
adlai
e.g., it appears that haaretz.com double-published an article with a mistake in one copy's headline; and both links appear in the dashboard.
8:02:38
adlai
minion: memo for nij: earlier someone pointed you at chanl, for writing parallelized code; you should be warned that it is unsuitable for production use (there are a few race conditions, that should be detected by test failures)
8:04:38
adlai
adlai: memo for adlai: the ABCL+JVM green threads might be a good choice for the next platform for hunting down the race condition
8:06:13
adlai
ACTION forgets. He'll think through whether it's a worthwhile hunting tactic, when the bug next speaks.
8:28:18
no-defun-allowed
Where do people draw the line on "large" Lisp programs? I found that my full network stack is about 8,500 lines of non-test code, and 1,300 lines of test code, and I'm worried that I've done something wrong by approaching 10,000 lines total.
8:29:22
no-defun-allowed
I don't know how many lines it should be, but it feels larger than it should be. But, then again, it's also ridiculous to me that I only wrote that much over two years.
8:32:54
White_Flame
large team commercial projects are always going to be way larger than smaller or solo codebases
8:34:29
White_Flame
Our biggest codebase (of multiple interconnected projects) is 30k, and does a ton
8:39:03
no-defun-allowed
I see. Part of my fear is that it's harder to sell, and no one would want to write another implementation of it. Some ACME Network Protocol supposedly requires a hundred times less code to implement; even though I think it does much less, it's not likely someone would begin duplicating a 10kLOC codebase if they want their own implementation.
8:39:39
no-defun-allowed
As in, they would be much more hesitant to pick it up as a weekend project, though I hope there isn't a need to reimplement it :)
8:42:41
no-defun-allowed
In any case, it's at a size where I'm not sure if it's too large, and I've played myself into picking up a lot of bloat; or if it's too small, and despite the time I put into it, I've been incredibly unproductive for two years.
8:42:44
adlai
e.g., 10ksloc was also a magic number that weighed heavily on my mind when I began building scalpl, and I often deleted gangrenous waste just so I could tell myself that the entire thing is less than ten thousand lines.
8:43:32
adlai
... then one day, I tried using SBCL instead of CCL, and discovered that my project also uses Ironclad... and OpenSSL!
8:43:51
no-defun-allowed
Thanks to DuckDuckGo for showing me some lovely images of gangrene, after searching for a definition of "gangrenous", as I forgot what it was.
8:44:40
no-defun-allowed
I don't have to maintain Ironclad, SBCL or OpenSSL though, and neither does some other implementor.
8:44:46
adlai
scalpl is probably the only app that uses chanl; so, is chanl's linecount tax-deductible because it supports the ecosystem by existing as a separate library?
8:46:15
no-defun-allowed
Or on the other hand, I could say I have three projects, and none of them are disconcertingly large.
8:46:45
adlai
recently I broke apart scalpl into separate systems, because it was making http requests at compile- and load-time, so the systems for each exchange are now separate, and the linecount space is arguably also not euclidean.
8:48:31
adlai
ACTION used the word 'gangrenous' to describe code that is actively bitrotting, by being an unchanged implementation of unstandardized protocols; e.g., reading a data feed published by a sketchy exchange
8:49:25
no-defun-allowed
To be fair, I have gone on an anti-minimalist streak, with enough abstractions and polymorphism to scare aeth at least. But it's somewhere around 30 to 100 times larger than an implementation of a more stupid protocol! That just seems wrong.
8:50:03
adlai
considering scalpl as a central library, along with half a dozen exchange implementations, gives a much better picture of the same lines' counts; and a similar split is probably possible with games and game engines
8:53:13
no-defun-allowed
I have a distributed hash table and a protocol for handling wire protocols, a distributed object system, a bytecode interpreter for reproducible computing, a server and client that glue those together, and a filesystem-backed "database" for the server.
8:56:41
no-defun-allowed
My size ratio was wrong; it's closer to my implementation being 20× larger.
8:58:02
no-defun-allowed
adlai: Well, cl-decentralise2 (3200 lines) does DHT and wire protocol, Netfarm (3400 lines) does object system and bytecodes, and I have "glue code" (without a better name -- 1700 lines) which extends decentralise2 server and client to work with Netfarm.
8:58:51
adlai
I like the third item of https://gitlab.com/cal-coop/netfarm/netfarm#todo ; it reminds me of the ending of Animal Farm.
8:59:00
flip214
I've written a snippet that counts forms (recursively) instead of lines, and takes ' and ` as single items (as they're mostly data, not logic)
8:59:34
no-defun-allowed
I may need to update that README for the next release. I've done all three of those.
8:59:34
flip214
LOC doesn't help much for things like (LET ((a 1)\n(b 2)) or long parameter lists in DEFUN and so on
9:00:18
no-defun-allowed
Yeah, I get a lot of additional lines from using long names, such as UPDATE-SYSTEM-FOR-NEW-INTERESTING-OBJECT-PREDICATE
9:00:32
adlai
the unit of mental load is the screenfull; and if your widescreen battlestation has three windows of your IDE open, then that is three screenfulls in one monitor.
9:01:24
adlai
both LOC and SLOC are worthless metrics when you have lots of utilities; decide to use alexandria, or anaphora, etc, and suddenly have your linecount vanishes, and the other half - has to be rewritten
9:06:01
adlai
Nilby: no, I disagree; the friction for that package's creation is that the topologists are busy catching up on twentieth-century technical debt; all those junk categories and complexity classes of linear algebra optimizations
9:08:06
Nilby
adlai: hmmmm, that could be. It seems almost everyone, including me, is still mired in 20th cen. debt.
9:12:50
Nilby
easye: I've been trying to hang in there for years considering terminals at 80x25, but sometimes that window just needs to be expanded. emojis and non-latin chars can bring it down closer to 40x25 too.
9:19:29
adlai
the tablet's 80x25 is "one paragraph of a Paul Graham essay", because you should not be editing, nor source code, on a touchscreen
9:23:45
Nilby
Coding in the repl with good completion is not as bad as one might imagine on a tiny device. I've also been tinkering an audio only repl for a while.
9:27:13
Nilby
but I like how PG admitted he coded much of hackernews at the repl of the live running site.
9:29:26
adlai
the failure mode of repl+production is harmless, you just ask someone to go reboot the server; failure more of touchscreen IDE is that suddenly you start counting how many pixels your code is, and your unit of measurement is nonlinear and called the fingersmudge
9:31:21
adlai
Nilby: if I understood correctly, that you have actually developed code in a repl from a touchscreen: you use the system keyboard, or something smarter that the IDE provides?
9:32:04
adlai
fingersmudge has a biometrically precise definition, it's just one quantum of uncertainty in a police fingerprint database
9:32:37
adlai
in square arrangement, the fingersmudge is approximately equal to the area of a cell in minesweeper.
9:33:14
Nilby
Yes. I used the stupid on screen keyboard. sbcl with my custom shell/repl running on a linux phone.
9:34:43
Nilby
I can see you would quickly be assigned keeper of units in my imaginary kingdom. As long as it's non-cheating minesweeper based units.
9:46:46
Nilby
but the thing i'm loathe to admit, is that it made me want to make "vi" bindings, since emacs chords are a bit much for smudge based input.
10:00:01
flip214
Did somebody already extend prometheus.cl to give HT request latencies as well? I just added the thread count and am wondering whether I'm the first to work on that
10:37:16
adlai
ACTION mumbles something about editor mode entropy flux interacting badly with translucent capacitors
10:38:42
adlai
a response to something that was written just before you joined, about editing lisp code using a touchscreen peripheral instead of a separate keyboard
10:40:13
adlai
once srandon111's connection stabilises, maybe I can remember what parts of the idea were signal and what parts were noise
10:41:08
adlai
it probably boils down to "modal editors oughtta waste at least one highly-visible pixel on the mode indicator"
10:41:32
adlai
fuukshiit was once known as srandon111, and is now known as fuukshiit, and I have internat enough for 2020.
11:35:49
jackdaniel
you probably mean a person with a nick with the same number of letters and starting with "j" (quite misleading coincidence): jmercouris
11:40:46
oni-on-ion
it was not anything important. but i sincerely apologise for mistaking you ! dont think i have dyslexia but my brain sorts words with first letter. thank you for clarifying
11:41:02
jackdaniel
(fun fact: our irc passwords also start with the same letter and have the same number of letters!)
11:44:58
nij
I have a function 'f that works as (f x y z). But now I have a list (list x y z). How would I pass the list to f?
11:44:58
minion
nij, memo from adlai: earlier someone pointed you at chanl, for writing parallelized code; you should be warned that it is unsuitable for production use (there are a few race conditions, that should be detected by test failures)
11:47:02
jackdaniel
and if you are doing something terribly wrong, then (if (eval (first list)) (eval (second list)) (eval (third list)))
11:50:26
flip214
you can't FUNCALL #'IF, oh, you just have to wait.... they said EVAL don't come easy ...
11:51:34
flip214
jackdaniel: that's what I parodied above. https://www.youtube.com/watch?v=C9IwBJYTwQ0
11:54:14
jackdaniel
youtube asks me to give my consent for some really long terms of service (and I don't have time to read it) - I can't watch it then, sorry
11:54:30
minion
nij, memo from pjb: Sometimes, it will take them a few seconds to type their answer!
11:54:59
jackdaniel
nij: the library alexandria has functions curry and rcurry (writing your own is also trivial)
11:55:05
solideogloria[m]
<jackdaniel "youtube asks me to give my conse"> https://invidious.snopyta.org/watch?v=C9IwBJYTwQ0
11:55:31
nij
flip214: I've just learned format and is comfortable with that. But 10 years later I won't understand it.
11:55:59
jackdaniel
(defun curry (function &rest args) (lambda (other-args) (apply function (append args other-args)))
11:56:25
flip214
still, have a one-line thing (that's "common" and standardized) or many more lines of code? Same as with Regexp!
11:57:52
jackdaniel
if you have a well-estabilished construct that takes one line and it is recognizable, then it is simpler and clearer
11:58:11
jackdaniel
in the same way as using "functions" instead of bunch of gotos in a single state machine
12:02:43
jackdaniel
apply treats the first argument as a function and the last one as a list, everything inbetween is treated as a single argument
12:02:57
nij
no.. cuz this doesn't work: (defun testing (a b c) (+ a b c)) (apply #'testing 1 2 '(2 3))
12:06:31
jackdaniel
what unclear do you find in (format t "~x~f~1234,2314sd,dsf~{fasd~[~{~a~}~]~}~%" args #'format-function 'string "xxx") ; hm?
12:23:03
loke[m]
nij: Yes, flip is right. Your APPLY solution is not great. You can, however, do the following: (reduce (lambda (a b) (concatenate 'string a b)) '("foo" "bar" "test"))
12:23:51
loke[m]
Another solution: (with-output-to-string (*standard-output*) (mapc #'princ '("foo" "bar" "test")))
12:25:39
mrios222
Hi, if I want to use SQL in a program, what is the best library to choose? My first guess is clqsl, but the links to the documentation and tutorials are dead. Any recommendations?
12:29:14
nij
Also, I dunno why but suddenly 'SLY' starts taking over 'SLIME'.. I like SLIME more.. what could have happened? SLY elision of strings is quite annoying..
12:34:04
flip214
there's an (implementation-specific) limit to how many arguments a function call may have -- and that also applies to APPLY
12:34:39
flip214
so if your list contains 1M strings (most of them could even be empty, ""), the APPLY call might fail with an error
12:50:44
jackdaniel
it would be better if you have had started: you can't apply to the operator if ^_^
12:59:57
Nilby
(format t "~@:(~s~) is~:[n't~;~] ~c ~(~s~) ~(~s~)~v,,,va~%" (car -) t #\u61 (cadr (pathname-directory #p"/*/")) (car '#'_) 8 #\! #\!)
13:08:06
_death
(constantia:out "Better " (car -) " than some " (:dc (cadr (pathname-directory #p"/**/"))))
13:27:29
_death
although it creates some quirks that I didn't bother with.. for example (let ((n 16) (c #\0) (w 4)) (outs (:d 12345 :width w :base n :pad-char c))) works, but add a (commas t) binding and :commas commas and you get an error
13:38:49
Nilby
_death: Your out macro certainly seems clearer, more extensible, and more constructable. I try to resist the allure of most non-standtard constructs, because I fear getting a bit too far into a remote realm, like ytools seems.
13:43:18
_death
yeah, even if operator X could be useful and make code pretty, still doesn't mean that it's a good idea to now depend on its library and use it everywhere
13:58:26
freedddd
Hi. I'm trying to create a function which creates a subclass that overrides all ':allocation :class' slots of the superclass (the reason is that there will be further subclasses of this subclass that share their allocation of these slots). Is there some way to do this without re-writing all the slot definitions?
14:10:40
nij
How to format '("a" "b" "c") to "a\nb\nc"? I used (format nil "~{~%~a~}" lst) but got "\n\na\nb\nc".. and cannot find the working variant.
14:18:46
freedddd
Thank you. I will have a look. Btw can I use MOP out of the box with CL implementations?
14:19:59
freedddd
Thanks. I want my application to be usable on some different implementations such as SBCL, CCL, ECL
14:21:30
freedddd
Is it hard to use basics of MOP without much study, e.g. reading AMOP? Already a rookie with CL
14:24:50
freedddd
Thanks. Will give it a try and reevaluate my approach if it turns out to be too much
14:27:40
Nilby
Every time I thought I should use :allocation :class slots, it turned out I didn't really want that. It happened mostly when I first starting using Lisp instead of C++.
14:29:46
freedddd
Yeah I'm not quite sure myself. I'm trying to create "views" which contain references to underlying data structures based on certain specification (e.g. "a b c" points to structures a, b and c, while "a d" points to structures a and d). The idea is that several subclasses may share the same view (e.g. "a b c") but implement a different generic run method that acts differently.
14:33:33
freedddd
Now that you're mentioning it, I could instead have a single class and several differently named methods instead (rather than the generic run method). Should be easier to implement..
14:36:14
Nilby
Also keep in mind that a generic run method can specialize on various classes. (run a b c) (run a x y) (run b c d) can all be totally different methods, or not.
14:41:23
freedddd
I might have explained it a bit poorly. Imagine a, b, c, etc. are just arrays with values belonging to some "entity" defined by an ID. Then I want some class that acts on values of all common entities (defined by IDs) across several such arrays. That's where the idea of a view comes in, such that I don't have to rediscover and duplicately store which entities and values each class should operate on. However the logic in the run method
14:41:23
freedddd
may operate differently (but should only take the class instance as an argument in the case I was planning on).
14:43:16
jackdaniel
a presentation is an object, that associates arbitrary object with a presentation type (of course the object must be presentation-typep to said presentation type)
14:45:20
freedddd
The idea was: Combination of component types (e.g. "a b c") -> view with shared storage -> implement subclass which defines the generic run method to act on entities which have component types a, b and c
14:46:23
jackdaniel
this may be of some interest: http://www.jucs.org/jucs_14_20/an_implementation_of_clim/jucs_14_20_3358_3369_moore.pdf
14:47:53
jackdaniel
very useful, because presentations in the clim spec are simply described, without explaining how useful concept that may be
15:02:37
freedddd
From some skimreading presentations isn't exactly what I was looking for. Interesting resources nevertheless :)
15:06:48
Nilby
I guess I knew the contents of the Moore paper already, but the Ciccarelli paper really explores the foundations of lispm/emacs style of UI.