What does HackerNews think of kons-9?

Common Lisp 3D Graphics Project

Language: Common Lisp

#3 in 3D
"Vulkan represents a low-level way of talking to the GPU more or less on the GPU's terms. As opposed to OpenGL which is a way of talking to the GPU on boomer CAD programmers' terms."

Kind of like that description. I've been doing GL since before it was OpenGL.

In my Common Lisp 3D system [1], I've been happily using very simple immediate mode OpenGL calls, taking advantage of CAD-like features such as drawing wireframes of various thickness over shaded polygons. OpenGL provides specific Z-buffer API calls to facilitate such things.

Is there a simple way of doing such CAD-centric things in Vulkan?

[1] https://github.com/kaveh808/kons-9

In some small way I am revisiting the idea with https://github.com/kaveh808/kons-9

We'll see what comes of it.

"He can see far; further than in fact his strength allows him to travel. He conceives of brilliant ambitious projects requiring great resources, and he embarks on them only to run out of steam. It's not that he's lazy; its just that his resources are insufficient."

This speaks to me. As I get older, I am tempted to start curating a list of my "failed" (or abandoned) projects.

I have been fortunate enough to launch an open-source 3D graphics Lisp project late in life which has managed to keep my interest. Early on, I made a number of conscious decisions about how I would view this project and avoid some mistakes of my past.

- No comparing to existing 3D packages. It's evident that I can't compete with commercial packages with decades of programmer effort.

- No hunting for a "better" language (though this hasn't really been a problem). A goal of the project is to develop a system where I can bring the power of Common Lisp to bear on 3D graphics. In some ways this is a throwback of work I did developing 3D graphics on Symbolics Lisp Machines back at the MIT Media Lab [0]. Returning to my youth?

- Keep it simple. Or, does it need to be more complicated? Understandable code is a benefit, as is code you can (mostly) keep in your head. Avoid excessively clever code, which I have been guilty of in the past (macros, anyone?). Also (more controversially) avoid dependencies where possible; keep it in house.

- Build a community. Having others involved is the best way I have found for not running out of steam. My other projects have invariably been solo efforts. Now I am interested in creating something which will outlast me. Hence the decision to put the project on Github [1].

- This "thing" has value in and of itself, and doesn't need to be "better" than what is out there. By virtue of being different enough, it is a worthwhile project to bring into existence. The world probably doesn't need another browser-based JavaScript package.

- Keep the momentum going by working on whatever interests me at the time. Avoiding tedious development and yak shaving keeps me from losing motivation. I do realize the article touches on this as a weakness of the Lisp developer mindset, and I admit to not being motivated to build an industrial-strength system. E.g. my half-baked GUI built on top of raw OpenGL.

- Finally (have to stop sometime), don't overthink things. Enjoy the journey. I am enjoying enhancing the system while not fretting over who will use it or for what purpose. The journey is the destination.

[0] https://medium.com/@kaveh808/late-night-lisp-machine-hacking...

[1] https://github.com/kaveh808/kons-9

I work in a slightly different way by always saving my code in emacs and loading it fresh each session (though I have gone a couple of weeks with a live image/session on my laptop). I am fortunate that my 3D system [0] compiles and loads in a few seconds.

I also use the REPL for quick tests, and evaluate new code by writing it in emacs and compiling it one function at a time (C-c C-c).

Finally, I keep files of tutorial/demo/test cases which work a bit like a notebook, allowing me to quickly verify that existing 3D scenes still work.

[0] https://github.com/kaveh808/kons-9

Common Lisp is a curious creature. Ancient in some ways, prescient in others.

It is not perfect by any means, and politics did play a large part in the 10-year ANSI standardization process.

At the end of the day, for me, what makes it my favorite language is the principle that the language should provide the maximum possible power to the programmer, boosting productivity of (most evidently) the individual developer.

It has served me well in my 3D graphics project [0], which is different enough from what is out there that it does feel like a worthwhile endeavor.

[0] https://github.com/kaveh808/kons-9

If you're into 3D graphics, this could be a fun Common Lisp codebase to look at. I have tried to keep it simple and comprehensible.

https://github.com/kaveh808/kons-9

I've really enjoyed reading (and playing with) kons-9's codebase in Common Lisp. It lets you do exploratory 3D modeling via the program's GUI or the repl. The source is very neatly structured and readable. I don't see many CL projects that do 3D rendering, so it's nice to see!

Quick demo:

https://www.youtube.com/watch?v=i0CwhEDAXB0

Repo:

https://github.com/kaveh808/kons-9

I began my 3D graphics development on a Symbolics workstation at the MIT Media Lab in the mid-80's. This was before the S-Graphics suite was released. [0]

The outstanding feature of the S-Graphics suite was the polygonal modeler which used a winged-edge structure that was far ahead of its time. It survives conceptually in the Wings3D system, which is a quite faithful copy of that modeler.

And of course you got the extensibility that came with the graphics system being built on Lisp.

But Symbolics was never, as far as I saw, a serious or popular contender in 3D production. Not only was the system expensive, but the hardware could not keep up with SGI's graphics abilities. Furthermore, the mass of CG developers at the time came from a C/Unix background, and rendering especially was so speed critical that C (and Fortran) resulted in faster systems.

Almost 40 years later, I have returned to the idea of developing a 3D system in Common Lisp [1]. We shall see where it leads.

[0] https://medium.com/@kaveh808/late-night-lisp-machine-hacking...

[1] https://github.com/kaveh808/kons-9

Older developer here (I started my career by writing 3D graphics software in the mid-80's).

I recently spent a number of years in semi-retirement, concentrating on my photography [0] and filmmaking [1] and thinking I was done with (and too old for) software development.

Professional software development had lost its lure for me as the CG and VFX industry had grown into a massive factory-like industry. Though I had worked on some satisfying projects -- writing the animation code used in "Jurassic Park", leading the R&D team for "Final Fantasy: The Spirits Within", working on "The Hobbit" movies -- I had lost the desire to write software.

Then about a year ago a friend asked me to teach him some Common Lisp online. So I wrote some tutorials and as we did our sessions [2] I got increasingly enthusiastic about developing for fun, especially if I could use the tool of my choice (Common Lisp) for the domain of my choice (computer graphics). So I started a new 3D graphics project and made it open source [3]. Even started a blog about the journey [4].

Although I don't consider myself to be up on the latest buzzwords and web architectures and the only scrum I'm familiar with is from my rugby-playing days, I have found -- rediscovered -- the pleasure of designing and implementing software. Surprisingly (to me at least), I don't feel over the hill. Yes, I probably can't do the marathon programming sessions I used to do, and all-nighters are a thing of the past, but I don't find my mind being any less sharp than it used to be.

[0] https://www.kardanphotography.com

[1] https://vimeo.com/kavehkardan

[2] https://www.youtube.com/playlist?list=PLTA6M4yZF0MzsMlNL0N67...

[3] https://github.com/kaveh808/kons-9

[4] https://medium.com/@kaveh808/once-more-into-the-breach-a-new...

A design decision which needs to be made is at what level of abstraction should the data be "fixed", i.e. not to be manipulated with the full power of CL. This is often a flexibility vs. efficiency tradeoff.

In my 3D CL system [0], I have so far kept all geometric data as naive CLOS classes as the intent of the system is to provide a sandbox for experimentation. I have thought of, perhaps one day, representing the geometry as a foreign library for efficient passing to the GPU.

[0] https://github.com/kaveh808/kons-9

Will continue development of my 3D Common Lisp system: https://github.com/kaveh808/kons-9

Brief trailer: https://youtu.be/i0CwhEDAXB0

I had a similar experience, doing my first 3D graphics development on Symbolics Lisp Machines back in the 80's [1], and then spending my career developing 3D CG code in Fortran, C, and C++, missing the Lisp experience the whole time.

Some of the milestones along the way: - Developed 3D animation software used to animate the dinosaurs in “Jurassic Park”. - Software R&D lead for CGI feature “Final Fantasy: The Spirits Within”. - Senior Software Developer on “The Hobbit” films.

Now I have returned to Common Lisp with a new open source 3D system [2], and it feels really good. As I deliberate over innumerable design decisions, the one thing I have told myself I will not consider changing is the choice of language. New, popular, hot, trendy languages (Clojure, Julia) may monopolize the conversation, but I am content with what Common Lisp allows me to do.

[1]: https://kaveh808.medium.com/late-night-lisp-machine-hacking-... [2]: https://github.com/kaveh808/kons-9

I should re-read the Norvig paper...

Life is great. I am currently working on a new open source 3D package written in Common Lisp: https://github.com/kaveh808/kons-9
Please join the project GitHub repo if you would like to contribute or be notified of updates: https://github.com/kaveh808/kons-9
I agree with the GP that it's very difficult to get contributors if the project is not usable. Reading the post in reddit, it looks like just a call for help for an empty project.

But looking at the repo linked in the post https://github.com/kaveh808/kons-9 and the demo, it looks like you have something that is already working.

Also, what does this mean in the readme?

> If you're brave enough, change the pathnames in main.lisp and eval the buffer.

I see no pathnames in https://github.com/kaveh808/kons-9/blob/main/main.lisp I don't use CL, so perhaps I'm missing something, or it's an outdated instruction.

Another important thing to get users (and later contributor) is a complete idiot proof method to install the project and run the demo [1]. something like "git clone & make demo" or whatever is the correct syntax for that spell.

[1] I recommend to read an old post by Joel Spolsky https://www.joelonsoftware.com/2000/04/26/designing-for-peop...