freenode/#lisp - IRC Chatlog
Search
23:03:27
aeth
Bike: The architecture can also run on an 4 core machine, yes, but there's less of a motivation for it there.
23:05:29
aeth
Bike: But consider e.g. a game or similar application that can be divided into several systems. In today's world, if it's parallel at all, each major system would probably get its own thread. That'll only scale up to the number of major systems, which is probably far less than 90.
23:07:22
Bike
in that case whether you have five or ninety processes isn't important for basic architecture.
23:08:18
aeth
Except for the most part, afaik what you'd typically see when the end user has quad core is maybe putting one task on each a thread to be "parallel", not also subdividing those tasks.
23:10:40
Bike
if you already have an idea for how to structure a program for multiprocessing, what are you even asking?
23:13:32
aeth
Bike: I'm wondering if anyone has successfully deployed a CL application that takes advantage of one of these CPUs with a "very high" core count. ("very high" being relative to the normal 2-4 cores that you would have seen for this kind of hardware until recently)
23:14:23
Bike
the machine i use to build clasp has thirty something cores. during build we have each core do a compile-file so we can compile a bunch of files at once.
23:15:04
whartung
I mainge someone one has. At those core counts, you’re getting into “super computing” kinds of designs and applications.
23:15:53
whartung
Funny Bike, back in the day, when I had the CPU meter on my desktop, I’d just kick off builds until it reach 90%. … by hand. Whenever it dipped down, I’d kick off another one.
23:18:37
whartung
My friend laments how horrible Swift builds are on the Mac — it’s apparently very CPU intensive.
23:22:37
aeth
Bike: I would personally probably just manually implement the required algorithms and data structures when needed in my case rather than using a library. Micromanaging this sort of thing is kind of a key point of the engine (when I get there), not a secondary feature.
23:24:21
aeth
It's mainly due to the requirements for 100 FPS logic and no consing at the library level in the game loop (I have consed in all of my substantial tests, of course... too hard not to... but that's in the user's code)
23:27:44
aeth
no-defun-allowed: A 3D game engine. I switched my original design (nothing is stopping it from being general purpose, of course) from first person to third person strategy (i.e. far away camera) because of fewer physics requirements (otherwise the project would become more about writing a physics engine than a game engine)
23:31:06
aeth
I just need to do mouse selection of an entity and a destination and then I have arbitrary movement on a 2D plane within the 3D world (e.g. ships on water). After that (soundless) games would technically be possible, although still fairly difficult because the text rendering isn't complete yet.
23:33:59
aeth
I'm guessing the input and the final update of the authoritative game state would have to stay on a core thread.
23:36:38
whartung
as I understand it, it’s prety difficult to multitask the (a?) rendering pipeline.
23:37:14
whartung
you can easily have a rendering thread, a state thread, sevearl AI threads. But the busy thread is typically the rendering thread.
23:37:26
Bike
you don't really have the opportunity anyway since the graphics library wants to do rendering in mysterious ways
23:37:48
jasom
Bike: there are some tradeoffs you can make; e.g. make the serial performance much worse in trade for more parallelism; the number of cores you have can decide if you will make that tradeoff
23:38:10
Bike
mostly because rendering is so hard we've farmed it off to repurposed bitcoin-mining chips
23:38:39
whartung
well, they happen to be pretty good at the job. If they weren’t we wouldn’t be handing them off to it.
23:40:26
whartung
as I understand it, the games job is to get the models oriented properly, send them to the GPU, and make sure the proper textures are loaded at the same time. The GPU does the actual rendering stuff.
23:40:45
jasom
aeth: my most recent webapp will probably scale well past 8 cores; all the state is in the database and each worker thread has its own DB connection. It's when you get past 32 cores that things can get sticky.
23:44:37
whartung
but the gpu guys have a way of getting it to work on multiple GPUs (2 GPUs, alternatiing scan lines or something like that)
23:46:35
aeth
whartung: It's generally not worth it to have multiple GPUs. The game (or application) has to specifically support it (and probably support it differently for nvidia and AMD) and it's usually better just to get the next tier up in graphics cards so it probably only applies to you if you're using Titans.
23:48:32
aeth
For nvidia it's called SLI and the general advice on forums has been to not do it, at least for the past few years.
23:49:25
White_Flame
whartung: different generations had different limitations. I know there were 3x linked card setups,a nd probably 4 as well
23:49:56
White_Flame
I think some also just send along the PCIe bus instead of having their own inter-card connectors
23:50:06
aeth
See https://en.wikipedia.org/wiki/Scalable_Link_Interface and https://en.wikipedia.org/wiki/AMD_CrossFireX
23:50:26
aeth
but apparently nvidia just abandoned SLI on the next generation (that isn't out yet) in favor of "NVLink Bridge"
23:52:52
whartung
I’ve spent enough treasure on computer equipment, I’m glad I was never really in the GPU chase :)
23:53:15
White_Flame
nvidia is going off the deep end with prices anyway, best to ignore it for now, too
23:53:28
aeth
But when I was saying that rendering is heavy, I mean heavy on the CPU. The GPU is doing most of the work, but #'draw still seems to be the most CPU intensive function at the moment for me. I think Vulkan would allow this to be split up, though.
23:53:59
White_Flame
no-defun-allowed: most lisps are fully reflective, if you use their implementation internals
23:54:21
aeth
White_Flame: You see that all over the place. CPUs, GPUs, smartphones, etc. The high end is improving, but also getting more expensive.
23:54:53
White_Flame
aeth: RAM prices are settling down, though, finally returning to where they were 3 years ago or wherever it was before that spike
23:54:59
whartung
depends on how high powerful the polisher you’re using no-defun-allowed, and what kind of compound you’re using
23:56:46
whartung
no, I understand aeth. Just getting the frames set up. A lot of that is the modeling side (modeling the car(s) for example), and things like the physics engine. Is it worth while to farm our modeling the suspension dymanics of 40 cars in a nascar sim to different CPUs per frame? I dunno. it may not even be possible if you’re modeling drafting and what not.
23:58:42
aeth
whartung: but on the other hand I think a large part of strategy games is embarassingly parallel, or close enough.
23:59:09
whartung
yea it can be, quesiton is whether it’s cpu worthy enough to bother breaking it out.
23:59:56
aeth
I've definitely played some building strategy games (games with workers doing tasks and carrying resources around a village) where it uses all the CPU
0:00:05
whartung
The only time I upgraded a machine for a better game performance (among other things) was way back when I went from 133 to 400 for Total Annihilation. So it coul dhandle more units. But even that would be difficult to paralleize because of the dependencies on each other (notably in traffic jams)
0:00:56
aeth
Even without htop up, I can tell when my desktop's fully using the CPU in a multithreaded way because I can hear the CPU fan when that happens.
0:01:44
whartung
my friends laptop turned in to an air hockey table when compiling Swift. You’d think it would float off the desk...
0:02:28
aeth
In general, simulation(ish) strategy games seem to max out the CPU and recent AAA games tend to max out the GPU
0:02:55
aeth
(I don't think both would be possible, unless you wrote specifically to the hardware combination and optimized heavily.)
0:05:17
jasom
aeth: do you sometimes render inconsistent state when you do that (i.e. some objects 10ms behind others)?
0:06:13
aeth
Oh and 100 fps for logic because its inverse is 10 ms and what you want is (integerp (* 1000 (/ n))) so both measurements are integers imo.
0:07:28
whartung
unrelated, are they any good examples of network servers in CL floating around on the net? I’ve seen the http server (Hunchenroot? Is that right?) Just curious if there are others of that ilk I could look at.
0:08:08
aeth
In case anyone's wondering about the other numbers... (loop for i from 1 to 2000 when (integerp (* 1000 (/ i))) collect i) => (1 2 4 5 8 10 20 25 40 50 100 125 200 250 500 1000)
0:10:24
aeth
Looks like it's 1 and numbers whose only prime factors are 5 and 2. (I ran my factoring function on that list to verify)
0:14:05
aeth
(limit in the sense that you can't get better than 1000, not in the calculus sense of the word "limit")
0:20:05
aeth
Bike: I didn't expect the fundamental theorem of arithmetic but I guess I should have expected it as soon as INTEGERP entered
0:20:56
aeth
Here I was working with periods and frequencies in a real world problem and then suddenly PRIMES
0:24:14
Bike
people are all like one plus one is two, well in my opinion it makes more sense to define two as the octave
0:27:07
aeth
Bike: But this is sort of the same problem. With the logic running at 100 ticks a second, some parts might actually only need to run at 50 or 25 or even 1. And this can be determined with a simple MOD
2:04:10
stacksmith
Is there a foreign pointer validation function in CFFI? To check if dereferencing would crash...
2:07:43
stacksmith
I was hoping for a less-than-perfect validation - like check if it's in-range for any areas allocated with CFFI. But yeah, that was wishful thinking.
4:01:33
no-defun-allowed
no, this is the right channel, stacksmith was asking about bounds checking for cffi arrays
4:02:54
beach
I should be quiet. Whenever I complain about the fact that half of the contents here is about other languages, I am told that I am wrong to complain.
4:12:40
no-defun-allowed
are there any good implementations of unordered sets that can be looked up in less than O(n) time?
4:13:50
beach
no-defun-allowed: All discussions of sets in the CS literature are about special subclasses of sets.
4:14:20
beach
no-defun-allowed: And that's because there is nothing better than O(n) in the general case.
4:16:56
beach
If your keys are simple and you have a lot of elements, then they are typically better than lists.
4:51:33
White_Flame
no-defun-allowed: a rule of thumb from other languages is that around 10 elements is where hash tables tend to get faster than iterating a list. I would suspect CL's tradeoff (again, for simple keys that dont' take forever to hash) would be in the same ballpark
5:14:51
aeth
even if a plist is slightly faster at 3-5 elements, I didn't notice it last time I benchmarked it because both are just so fast.
5:19:55
aeth
I'd personally say hash-table vs. plist is whatever semantically seems to make more sense for a few elements. Above a few dozen, use a hash-table unless you're only sequentially iterating over it with something like alexandria:doplist or you're in a macro (where you're probably sequentially iterating over it anyway).
5:51:03
cobax
Shinmera: any names you can throw at me would be appreciated, so I can read up some more on the alternatives
5:52:25
White_Flame
if by "orthogonal" you mean transparent, that model tends to be underrepresented because it's quite difficult and usually doesn't work well
5:53:39
cobax
That is what I mean, yes. Difficult to whom, is the question. Postgres is quite easy for its programmers but hard for whomever needs to install and maintain and deploy it. On the other hand...
5:53:43
White_Flame
if the object model is integrated with the OS itself in a fully persistent address space like some mainframe & experimental OSes, then it would work better. But application-level, not really
5:54:41
cobax
White_Flame: I'm not sure all that is needed. Ruby doesn't have that and there is Maglev for it.
5:55:05
aeth
Lispers seem to prefer just representing SQL as s-expressions (nothing is stopping someone from writing an SQL database in CL, though)
5:56:37
White_Flame
cobax: well, if you just want persistence without performance, then it wouldn't be hard to pull off
5:57:51
cobax
So now you know I'll be abusing whatever persistence library as a replacement for an RDBMS (I don't care about performance and joins) then what are the current persistence libraries?
6:00:50
cobax
White_Flame: the angle I'm coming from is, Lisp is image-based, but how can I take easy/comfortable advantage of this fact, to make small apps without a database, by persisting my environment, like Smalltalk does?
6:02:08
White_Flame
so certainly on exit of your application, you can have it save the image & exit, and your startup script would resume from that image
6:03:03
White_Flame
but if you crash, the saved image's heap wasn't constantly updated with your running heap or anything
6:03:28
cobax
Ok, so tell me where I'm wrong here, then an easy way to make a prototype website with db functionality but without postgres, instead relying on CL's image-based-ness, then I can deploy a CL app and take a snapshot every 24 hours for data backup?
6:04:21
White_Flame
if you want to use CL images, then that's taking manual snapshots of the entire CL runtime
6:04:24
cobax
I don't know what you mean by "DB-like functionality". an RDBMS has several aspects to it. For instance, I don't need the fact that it's relational.
6:06:31
White_Flame
SBCL, for instance, has SAVE-LISP-AND-DIE as its only image writing function (as far as I'm aware). I don't know how well other systems deal with saving an image but not exiting
6:06:53
White_Flame
because bundling that all up for a resumable disk state sometimes involves closing stuff out
6:08:03
White_Flame
most deployed Lisp images don't constantly re-save themselves; they're like standard deployed applications where the image on disk starts up adn then reads its application data from other files/DBs
6:08:37
White_Flame
but you can certainly try an image-based application persistence model. I don't think there's anything preventing it; it's just uncommon
6:09:14
White_Flame
especially if you're fine with it restarting every 24 hours for snapshotting & flushing purposes
6:10:39
cobax
White_Flame: I have many books on Lisp and its implementations and it seems as if the "image-based" aspect is less explored than in smalltalk, would you agree?
6:10:59
cobax
for instance, even Picolisp seems to be ahead of Common-Lisp in terms of a rich image-based-ness?
6:11:08
White_Flame
it was more useful in ye olde days where reinitializing everything would take way too long
6:11:36
White_Flame
nowadays, you can cycle in a fresh Lisp image, load & initialize all your code in seconds
6:12:26
cobax
White_Flame: I understand, but you see, then an advantage is lost, namely the ability to exploit the image-based-ness for purposes of long term storage
6:13:00
White_Flame
cobax: most people store long term data as data, not all wound up as artifacts inside a runnable Lisp heap
6:13:47
White_Flame
especially if you save non-executable images, the image format can change across minor versions
6:16:42
cobax
I think it starts with good serialization. what is the best CL serializer, is what I should seek next.
6:16:59
aeth
You probably don't want to leave an image up too long in development because you can have bugs with "stale" functions. I think the most common one is when you rename foo to foobar, but don't change all calls to foo. (1) calls to foo will no longer get your updates to foobar and (2) your program will not start in a fresh image
6:17:57
White_Flame
cobax: I never use general serializers, because I always end up wanting to serialize closures
6:17:59
aeth
Now embed a db in an image and this sort of thing becomes a lot more common, where you cannot get to where you are from a fresh start
6:19:14
cobax
for instance, think of cl-swap-file and clufs, if I store serialized lisp objects there, I pretty much have an object data base, no?
6:21:05
cobax
ok, so help me out, and I appreciate all this help so far, and understand you are away from keyboard now, but...
6:21:54
cobax
if I have serialization of the objects I'm interested in storing, and I have a pure common-lisp file system / swap thing like clufs, then I have an object database for the objects I care about?
6:36:05
MichaelRaskin
I think you won't get true orthogonality, because long-term-compatible serialisation of functions is not always available.
6:45:31
MichaelRaskin
Well, if you ask for transparency and don't list any limitations, there is a question can a slot value be a function. Or maybe even a class reference
6:46:23
cobax
MichaelRaskin: Ah, yes I understand that difficulty, but yet the few orthogonal transparency (or near that) solution I've seen for Smalltalk all do that without problems
6:49:47
cobax
If I may paste this here for reference, this is how maglev / gemstone serializes things:
6:49:49
cobax
"Ruby classes are stored as bytecode in the stone server, which is transported via shared memory for local connections, and via optimized binary protocol for remote connections, to the local interpreter and then compiled down to native machine code."
6:50:52
cobax
so if by serialization we mean down to bytecode, then serializing anything is suddenly doable, including functions but perhaps not class references?
6:57:44
MichaelRaskin
I guess it all depends on design choices, especially when you take the optimiser into account
6:57:57
cobax
hmm I found this which seems to have many answers from a GemStone engineer: https://maglevity.wordpress.com/2010/01/12/gemstone-internals-videos/
7:04:32
White_Flame
but serializing byte code compiled from source code is not equivalent to serializing runtime state
7:04:55
White_Flame
again, closure objects and such, not to mention the baseline issue of cross-module object references
7:05:40
White_Flame
I do think your problem is underspecified as well, at least from what has been said here
7:15:58
White_Flame
looking through the gemstone videos, it points back to what I said before about the object system being integrated all the way down to the running platform (not really OS in this case, but same idea) in order to implement it properly
7:22:48
White_Flame
there are also quite a number of limitations and inflexibilities compared to Lisp objects
7:24:12
cobax
wait, but Gemstone allows serialization of objects etc, so they've solved the problem somehow, no?
7:24:30
xificurC
I put "yason" into :depends-on in my my-system.asd. Now when I try (asdf:load-system "my-system") it errors with "Component yason not found, required by ...". Obviously I'm doing things the wrong way? I thought depending on a system would make asdf call out quicklisp to fetch the system
7:25:17
beach
You either need to compile your system with quicklisp or call quicklisp manually to install the dependencies.
7:25:52
White_Flame
cobax: they built a database system. They didn't bolt on serialization on top of an existing runtime
7:26:24
cobax
I came to the same realization. I guess the solution is to start with a database, and put the language I want in control of it
7:26:35
White_Flame
so if you want the same, then build up a Lisp enironment that is a database system
7:27:12
cobax
White_Flame: I'm trying to understand, and I really appreciate all your help, but I'm not sure I understand if Picolisp is that or not
7:28:47
cobax
"distributed ruby with the maglev vm" is the name of one article. maglev is gemstone. so it's distributed.
7:30:28
White_Flame
and looking at the docs, "Whenever an external symbol's value or property list is accessed, it will be automatically fetched into memory, and can then be used like any other symbol." this is not library functionality. It's again wound right into the low-level definition of memory access
7:30:57
White_Flame
now, certainly this can be done with CLOS, but only with CLOS, not any general slot reference
7:32:16
xificurC
White_Flame: picolisp is dynamic, no lexical context to carry. A function is just a list. There's no lambda, just quote, so '((X Y) (+ X Y)) is really just a list, written with QUOTE directly (quote (X Y) (+ X Y))
7:32:37
cobax
I'm not quite sure I can appreciate, from what you're saying, what is it exactly that low-level integration can afford that very good serialization cannot. The problem is around references, it seems, but I don't get it.
7:33:02
White_Flame
cobax: you can't really change how memory references are done in a library. It's part of the fundamental VM
7:33:55
White_Flame
all these systems perform special things on memory reads, loading things transparently
7:34:14
cobax
White_Flame: I understand now. So let's call that the last-mile of orthogonal persistency :)
7:35:14
cobax
xificurC: can you say a bit more about how being dynamic and not having to carry lexical context can afford Picolisp... what exactly? Distributability of serialized objects the way I am talking about?
7:36:56
White_Flame
hmm, in picolisp, external symbol names are brace-surrounded disk locations where their data is stored
7:37:18
Demosthenex
so in emacs slime, M-. is bound to slime-edit-definition which fails to jump to my function defs in the same file, but xref-find-definitions works. any suggestions for how to fix it, or shall i just override the keybindings?
7:38:30
White_Flame
cobax: yeah, hopefully your takeaway is that this sort of thing is not really library functionality. It's fundamental language/runtime functionality
7:38:40
trittweiler
xref-find-definitions might just search for a regexp in the current buffer. slime-edit-definition works on source location information stored in your Lisp session
7:39:10
White_Flame
cobax: and that there are extreme design considerations for all of these sorts of systems; they're not as flexible as a Common Lisp environment, because they need to support that persistence
7:39:49
Demosthenex
trittweiler: i'm editing a buffer that's been completely eval'ed into the running slime session
7:40:05
Demosthenex
trittweiler: and the def is two pages back in my source, so a simple backward regexp find easily can find it
7:40:39
cobax
White_Flame: I understand the loss of flexibility, but I am fascinated by how we took this path of fragmented development instead of integrated programming systems which in my opinion are more productive
7:41:27
Demosthenex
trittweiler: wait, i just had a thought. my source file is local and my sbcl process is on a remote host. though i did compile and execute the functions in emacs, is slime trying to use the filesystem maybe?
7:42:01
cobax
White_Flame: constraints help correctness if they still allow all the same programs to be made, so those are good things, or can be
7:42:26
White_Flame
I'm talking about feature & performance constraints, not towards-working-code constraints
7:42:57
White_Flame
sometimes when you're constrained you need to write spaghetti in order to implement something mor ecomlex, and that doesn't help correctness at all
7:43:10
cobax
I understand, and to me the interesting aspect is precisely the productivity of integrated environments
7:44:08
White_Flame
I've written OO systems in limited BASIC environments. The constraints of BASIC didn't help.
7:44:49
cobax
White_Flame: the constraints of Gemstone seem to be helping lots of people who keep them employed, so there seems to be a market and people that agree with me that the trade offs are worth it
7:45:14
xificurC
cobax: since functions don't carry a lexical context and are not compiled, they are just a list
7:45:32
White_Flame
certainly Common Lisp meets this definition of "integrated" because it doesn't have modern OS interactions bult in the spec (no threading, networking, process spawn, etc). That means we have to jump through hoops & ad hoc systems to get things done
7:46:24
xificurC
White_Flame: indeed persistent symbols are "special" in that regard. But you are able to work with them the same way as with any other symbol
7:46:40
cobax
hmm I don't want to talk about specs, I want to stay in the realm of practicality and productivity
7:47:14
cobax
not vague, I mean integrated like a smalltalk programming system like squeak or gemstone
7:47:47
cobax
and I want to eliminate the hoops of having to keep maintaining separate things from one's programming language, such as postgres
7:48:35
cobax
White_Flame: no, but they seem to be more productive for CRUD websites than most current development workflows
7:48:49
White_Flame
right, so you have a specific context there, of database systems. Many programs don't have databases and don't need those features; any productivity there is contextualized
7:51:16
xificurC
cobax: depends on what you're building really. There's plenty of places to keep non-persistent state in a website
7:52:03
cobax
well, be that as it may, it is usual to have a database, and I think it is more productive to have the most things integrated possible
7:52:03
xificurC
if you're building a website that shows a company's portfolio or an association they might not have e-shops and forums and registrations etc. Just a plain old hyperlinked site with no fuss
7:52:40
cobax
xificurC: sure, but I don't want to have to switch technologies between clients that want a DB and those that don't... the point is to streamline production
7:53:21
xificurC
cobax: I was just saying "the context is making website" is still not that clear. Different requirements ask for different solutions. If you need databases, sure.
7:53:54
Demosthenex
cobax: don't most websites export state information to the database so the codebase can be considered stateless?
7:54:04
shrdlu68
Well well, since I can't define a subclass of a bit-vector, is there another way to create a thing that behaves like a bit vector?
7:55:24
cobax
sorry folks I'm just tired of having to fix postgres, redis, this that and the other, I just want to code in a productive environment that doesn't switch my attention off of programming
7:55:45
Demosthenex
cobax: your complaint is about integration and systems administration for dependencies then
7:56:09
cobax
Demosthenex: yes and I feel Smalltalk solves this but is too heavy a hammer... and that there should be a lispy equivalent
7:56:27
Demosthenex
cobax: which is why cloud services are so popular now, you export the care, feeding, administration and ownership to a third party and pay for the priviledge of using it
7:56:32
White_Flame
and "it should just work!" for a plethora of use cases, each with their own individual complexities
7:57:21
Demosthenex
cobax: you said you were tired of fixing dependent products. i said cloud services allow you to pay for a maintained product.
7:58:03
cobax
Demosthenex: well then it's broader than that. having to code against amazon's services doesn't contribute to orthogonal transparency
7:58:06
Demosthenex
i am mistaken that one of the advantages of exporting all application state to the DB means that you can use concurrent functional stateless code at the webserver layer?
7:58:46
White_Flame
cobax: your problem isn't orthogonal transparency. It's something that you think would be a silver bullet to your problems, but I can assure you it isn't
7:59:10
cobax
Demosthenex: look at GOODS, it is open source. what I am saying is not Amazon Services, it is things in the direction of Gemstone and GOODS
8:00:39
cobax
if Amazon had their own Ruby in which I can call an amazon lambda natively, then that is more what I mean
8:01:00
Demosthenex
so you want a programming language pre-integrated into a cloud environment where all teh dependencies are handled for you?
8:01:56
cobax
Demosthenex: yes! otherwise what is the point of integration, if I have to "do it all over again" in code
8:02:51
cobax
White_Flame: well I'm glad nothing stopped the gemstone people from giving this crazy idea a go
8:03:38
Demosthenex
cobax: you should compare that to 4gl solutions like openedge progress, ibm's rational 4gl, etc.
8:03:46
White_Flame
right, they have a niche they're serving. If you want fully integrated, does-anything, no-config, no-admin general programming, well then wait for AI
8:04:45
cobax
White_Flame: it's interesting, when gemstone released maglev, most of the Ruby community didn't get it either. maybe we're stuck with clunky database code forever
8:05:08
Demosthenex
because that's a common thing. 4gl's were popular because appdevs wanted to work in an environment where presentation and storage were already solved. if you use a generic language (python, CL, java, etc) you have to do it all over again yourself, or use a framework
8:05:23
White_Flame
and for many, the database interfaces mesh with the transactional level and robustness considerations they need to manage
8:05:53
White_Flame
all of the "hide the details" systems don't break in survivable ways as mature DBMSes. That's why the latter are still aroudn
8:06:00
cobax
Demosthenex: everyone that codes for the web should want to "work in an environment where presentation and storage are already solved" no? :)
8:06:19
Demosthenex
cobax: no, i get that. but isn't that why there are so many web frameworks? they are the new 4gl
8:06:44
cobax
Demosthenex: but like White_Flame said, frameworks will never integrate at the binary level... hence they won't solve this problem
8:06:45
White_Flame
they focus on one particular facet of the tech; your engineering work is still to be done on top fo that
8:07:22
cobax
White_Flame: I totally appreciate your point about survivability and breakage. I agree.
8:07:50
cobax
Demosthenex: I had seen the term "4gl" but am not too familiar. perhaps there was some boat I missed.
8:08:00
Demosthenex
the tradeoff for 4gl style languages is you are bound by the limits the designers made for you
8:08:37
Demosthenex
cobax: ibm rational is all i can think of, it's really outside my area of expertise
8:09:51
Demosthenex
the 4gl's i have been exposed to are things customer applications are written in that i've had to support.
8:10:30
cobax
Demosthenex: too bad much material on openedge progress is behind a paywall, I'd love to see their REST example
8:10:47
Demosthenex
cobax: https://en.wikipedia.org/wiki/Fourth-generation_programming_language "Languages claimed to be 4GL may include support for database management, report generation, mathematical optimization, GUI development, or web development."
8:11:16
Demosthenex
frankly, i haven't ever seen a OSS 4gl outside of the xclip/harbor project, which is a OSS implementation of CLIPPER, an 80's application language
8:12:00
cobax
ah that's it then! yes, Clarion is there :) that's what I mean then, 4gl, it's a shame we don't do more 4gl...
8:12:44
cobax
Demosthenex: what would a 4gl for terminal apps look like? it would make curses first-class somehow?
8:15:00
cobax
Demosthenex: I feel someone needs to do something about my complaint and currently I am researching solutions that I may bring to the market
8:15:49
Demosthenex
i understood 4gl's to integrate common application requirements, db/object integration, reporting, forms interfaces, etc.
8:15:54
cobax
xificurC: I guess it is 4gl if the context is "operating system calls" but then we're stretching the meaning of the term beyond usefulness
8:16:16
Demosthenex
cobax: 4gl's are really good at making simple apps and for prototyping complex ones
8:16:39
Demosthenex
cobax: big apps often outgrow them because of the limitations that integration brings, however, that doesn't sound like your issue ;]
8:17:06
cobax
Demosthenex: thanks for the link, I have provided tech support for many dbase applications I suppose! also looks as/400-ish
8:17:40
Demosthenex
i grew up using Borland products that all had TurboVision for text user interfaces, and that's virtually vanished
8:18:10
Demosthenex
i absolutely hate user interface creation, or i'd have made my own curses lib by now.
8:18:17
cobax
Demosthenex: well, I just think that today with the processing power we have, we are wasting too much time on rails and jango and postgres when most clients needs would never surpass those integration limitations
8:18:42
Demosthenex
cobax: think with the processing power today how much time is wasted on the entire webstack, client and server.
8:19:18
cobax
Demosthenex: paint this picture for me so I can better understand it, what does Picolisp lack from your ideal dbase/4gl for terminal apps?
8:21:03
Demosthenex
cobax: their example app with their builtin html application stuff looks pretty simple
8:22:17
cobax
I've decided my next project will be in a language with an integrated database and picolisp seems like the suitor
8:24:24
Demosthenex
cobax: i can't find screenshots for their example html application, link if you find anyone or see one running
8:27:45
Demosthenex
cobax: have you considered itemizing the features you want from a 4gl, and looking at what libraries CL has that can supply those? for instance, at https://cliki.net/web%20framework they discuss libs like bknr which do objects, template, and web presentation
8:29:21
cobax
Demosthenex: part of my having this conversation was realizing even which parts are there that I need but did not know about. it has helped me clarify a lot and I think as you said, I need to make a definite list
8:31:08
cobax
"BKNR was seen as not so much a web framework, more a persistent object framework with some web stuff wrapped around it." I love it!
8:34:13
Demosthenex
i think it's funny how the nosql crowd has screamed that SQL is too hard, why does it have to be so difficult to just store my data, without really understanding all the features a database actually offers ...
8:37:51
xificurC
yason docs say: "Interning strings coming from an external source is not recommended practice." . Is that from a security standpoint? Does INTERN allow arbitrary code execution or something?
8:40:52
xificurC
Demosthenex, cobax: this page describes a minimal complete application https://software-lab.de/doc/app.html and there's a live version of it for user's convenience here: https://7fach.de/app . un/pass is admin admin
8:45:52
Demosthenex
to be fair, looking at the source at https://github.com/picolisp/picolisp/tree/dev/app , is there something similar in CL
8:47:53
jackdaniel
i.e when I'm in a supermarket to pick up a toothbrush, I'm a subject of a choice terror
8:48:00
Demosthenex
yep. every first year compsci student learns to compose strings and immediately thinks they can make a web framework from templates ;]
8:49:59
jackdaniel
sure, but many people perceive this kind of choice and a necessity to compare things being a terror of choice, it is worth to keep that in mind if you try to figure out "what they want"
8:50:06
Shinmera
I could just tell you to use Radiance, but I'm not a salesman, so I won't just suggest it to people without knowing their needs
8:50:16
Demosthenex
cobax: picolisp might help, but it feels like a small solution. i've used many programming languages, and i find it difficult to beat CL's ability to hot-reload and debug code, ala SLIME/swank and the repl
8:52:14
Demosthenex
i'm still thrilled i added 3 lines to add lparallel into a slow process yesterday importing records, and was able to max my 8 cores and load in record time.
8:52:50
Demosthenex
Shinmera: hate to say it, but top software is often due to salesmanship more than technical quality. look at the whole windows ecosystem
8:52:57
xificurC
Demosthenex: why would it be bad to point him to another language *if* that's the correct thing to do? No point chatting with him here if he's not interested
8:53:54
cobax
Shinmera: if it helps I like these words: "easily and in such a way that they can be used on practically any setup without having to undergo special adaptations"
8:53:55
Demosthenex
xificurC: it may be, but it didn't sound like he wasn't interested, just frustrated with the features he needs.
8:54:18
Demosthenex
cobax: careful, that's awful close to the description of a "magic bullet" solution
8:55:05
cobax
Demosthenex: it is a spectrum, right? at one end, a totally integrated environment. at another end, config files and vim in a terminal, forever.
8:56:37
Demosthenex
cobax: i'm an old fart. the number of "integrated" environments i've outgrown and broken is silly to the point i no longer use them
8:57:12
cobax
Demosthenex: I'm an old far who made money doing VB6 apps for clients and it felt good, and I long for that level of productivity
8:58:27
cobax
Demosthenex: perhaps, but then that write up I linked, that team outgrew AllegroCache and went manardb
9:01:35
Demosthenex
cobax: ok, that said they had to work on every item at once on every node all the time. surely that's not your standard OLTP system
9:02:33
Demosthenex
cobax: seriously, the writeup's first paragraph says basically they need the whole db in memory at all times, not just accessing a server
9:04:17
Demosthenex
and allegro CL includes allegrocache in the free download for evaluation and personal use. if you make apps to distribute buy a license.
9:11:36
cobax
we're programmers, whatever work needs to be done to integrate these tools should be done only once and then spread wide. beautiful stuff.
9:12:55
cobax
Shinmera: everything to me is "compared to what?". I think it's beautiful, compared to all the alternatives.
9:13:45
Shinmera
cobax: I mean that the way portacle is done is a collection of really gross hacks and kludges that I had to figure out.
9:15:05
cobax
Shinmera: as opposed to the collection of really gross hacks and kludges that I have to figure out when no one integrates stuff for me? ;)
9:15:58
Shinmera
When you set up an IDE for yourself you typically don't have the requirements that portacle has and which in turn necessitate said hacks
9:24:21
cobax
changing topics, I spent a long time studying Haskell only to now conclude that a good interactive debugger is many more times preferable than the paltry benefits derived from the type checker
9:24:44
cobax
does anyone here have a similar experience with being disappointed by types and coming back to Father Lisp?
9:36:49
cobax
I believe Erik Meijer also gave up on types? Certainly I've watched some of his presentations where he was openly mocking them
9:37:52
cobax
and Alan Kay spoke of the academization of programming, and how Biology does not have the word "Science" in it thew way Computer Science does
9:44:14
cobax
_death: he made the point that Computer Science has "Science" in the name just like "Social Sciences" and some other dubious one that made the point clear
9:45:23
cobax
Demosthenex: I like how you say "end user apps". Do engineers speak of "end user skyscrapers" ? I imagine that is how Kay would answer
9:52:24
Demosthenex
https://bpaste.net/show/9c4e3ef16975 very exciting that croatoan's starting to add form support!
9:55:27
_death
I think the verisimilitudes guy made a good point.. and his acute-terminal-control library works OK, mostly.. I started using it for some project.. it would make sense to have a TUI library based on it
9:56:36
Demosthenex
_death: i think my issue is that while many low level terminal control libs exist, there are no tui environments. there were a few tries to make turbovision work, but they're all dead
9:58:46
_death
I know. thing is, it's not a big deal to come up with a basic TUI library.. in the DOS days, everyone wrote their own TUI/GUI libraries anyway
9:59:27
White_Flame
but there you had direct screen access, instead of sending terminal commands, too
10:00:59
_death
White_Flame: it's not very important.. you can easily come up with a "frame buffer" abstraction
10:03:43
_death
but it's not even clear that you'd want to do that.. back then you'd still have abstractions like gotoxy and friends
10:07:43
beach
I WIN! Here is what I ended up with for MAKE-METHOD and CALL-METHOD: https://pastebin.com/TaXeRVWe
10:11:49
beach
I think there is still some minor problems. The call to MAKE-INSTANCE should probably be evaluated at macro-expansion time.
10:20:11
no-defun-allowed
is there a consise way to FORMAT eight items on a line, then another eight on the next line and so on?
10:28:38
beach
So here, you must subclass GENERIC-FUNCTION and specialize your method to that new class.
10:29:55
jackdaniel
from other "the more you know" things if you create a handler-case you may want to handle serious-condition (which error inherits from), not error
10:30:19
no-defun-allowed
i had a need to make a readable signature generator kinda thing for hand checking diffie-hellman keys
10:30:22
jackdaniel
some conditions are not errors still you want to "catch" them (i.e timeout is not an error, same goes for out of memory)
10:30:38
no-defun-allowed
[so here's one, just cause i think the output is funny](https://gist.github.com/TheEmacsShibe/511b4fd71b5d9712e09b0408033a8d5b)
10:32:48
specbot
Constraints on the COMMON-LISP Package for Conforming Programs: http://www.lispworks.com/reference/HyperSpec/Body/11_abab.htm
10:33:31
beach
19. Defining a method for a standardized generic function which is applicable when all of the arguments are direct instances of standardized classes.
10:51:31
_death
Demosthenex: I think I already mentioned that some years ago I started writing bindings for it.. but my conclusion was that tvision's API was too convoluted because it adopted old C++ "OO" dogmas of the day (lots of inheritance and needless interaction within hierarchy levels) and a Lispy interface is too much work for too little
10:53:06
_death
Demosthenex: I think it's better to start afresh.. may have turbovision look and feel if you like