- 67
- 54 391
The Lisper
เข้าร่วมเมื่อ 30 มี.ค. 2023
Hi 👋, I'm Alberto, if you are curious about applying the old Lisp art in the modern cloud, you are in the right place!
Here, web dev, DevOps and security meet macros and interactive programming. You should expect to find videos about languages like Common Lisp or Clojure, but also Unix and Emacs-related stuff.
Here, web dev, DevOps and security meet macros and interactive programming. You should expect to find videos about languages like Common Lisp or Clojure, but also Unix and Emacs-related stuff.
วีดีโอ
The Loop Macro in Common Lisp: Not Lispy but Convenient
มุมมอง 2082 หลายเดือนก่อน
The Loop Macro in Common Lisp: Not Lispy but Convenient
Verifiy JWT: OAuth Client From Scratch In Common Lisp [2/2]
มุมมอง 1432 หลายเดือนก่อน
Verifiy JWT: OAuth Client From Scratch In Common Lisp [2/2]
How To Get A Access Token: OAuth Client From Scratch In Common Lisp [1/2]
มุมมอง 2532 หลายเดือนก่อน
How does the Authorization Code Grant with PKCE work? Let's build it from scratch in Common Lisp. Github Repo: github.com/albertolerda/htmx-with-cl/tree/main/oauth-intro Code we started with taken from: github.com/albertolerda/htmx-with-cl/blob/main/basic-htmx/basic-htmx.lisp Session with redis: th-cam.com/video/O2uIL_JKTHw/w-d-xo.html
CLOS: Introduction and usage of defclass
มุมมอง 5066 หลายเดือนก่อน
What is CLOS? What is a class and how to define one? All with the interactivity of Common Lisp!
Haskell-Like Type System In Common Lisp With Coalton
มุมมอง 7277 หลายเดือนก่อน
Algebraic Data Types in Common Lisp??? With Coalton it is possible!
Manage Cookies Securely With Clojure and Ring
มุมมอง 987 หลายเดือนก่อน
Manage Cookies Securely With Clojure and Ring
Series: A Functional Approach To Common Lisp
มุมมอง 7307 หลายเดือนก่อน
Series: A Functional Approach To Common Lisp
Building a Webapp in Clojure with Ring
มุมมอง 2838 หลายเดือนก่อน
Building a Webapp in Clojure with Ring
Common Lisp Installation With Roswell On Windows And Linux (with Tips For Troubleshooting)
มุมมอง 2518 หลายเดือนก่อน
How to install roswell? What to pay attention during the installation? How to choose the implementation we want?
Clojure installation on Windows and Intellij IDEA
มุมมอง 4748 หลายเดือนก่อน
Quick video on how to setup Clojure in Intellij IDEA
ABCL (Common Lisp) Installation
มุมมอง 5898 หลายเดือนก่อน
Let's see how to install ABCL and share some first sight impression. What about you, have you ever used ABCL?
.env (dotenv) in Common Lisp (+ Codition System bonus!)
มุมมอง 5669 หลายเดือนก่อน
What is a .env file? How to deal with them in Common Lisp? As a bonus we will see how to deal with error in an interactive environment! Commit described: github.com/ollelauribostrom/cl-dotenv/commit/a1f513c15d98e810e9de5732685a54c2ac407f70
Easy database with cl-dbi and sxql (Common Lisp)
มุมมอง 4739 หลายเดือนก่อน
Easy database with cl-dbi and sxql (Common Lisp)
Cookie and Session with Common Lisp (using Lack)
มุมมอง 3329 หลายเดือนก่อน
Cookie and Session with Common Lisp (using Lack)
Improving The Countdown with Forms in Phoenix Liveview [Elixir]
มุมมอง 1949 หลายเดือนก่อน
Improving The Countdown with Forms in Phoenix Liveview [Elixir]
From Clack to Ningle passing through Lack (Common Lisp)
มุมมอง 79810 หลายเดือนก่อน
From Clack to Ningle passing through Lack (Common Lisp)
HTMX with Common Lisp: Dynamic Tables and Advanced Forms
มุมมอง 59710 หลายเดือนก่อน
HTMX with Common Lisp: Dynamic Tables and Advanced Forms
Tail Recursion With Common Lisp, Do or Don't?
มุมมอง 94810 หลายเดือนก่อน
Tail Recursion With Common Lisp, Do or Don't?
Build A Countdown Using Phoenix Liveview
มุมมอง 34711 หลายเดือนก่อน
Build A Countdown Using Phoenix Liveview
Elixir For Lisper: Concurrency, Macros and Community
มุมมอง 42511 หลายเดือนก่อน
Elixir For Lisper: Concurrency, Macros and Community
Dynamic Forms and Tables with Common Lisp and HTMX
มุมมอง 73511 หลายเดือนก่อน
Dynamic Forms and Tables with Common Lisp and HTMX
Closures in Common Lisp, when CLOS Is Too Much
มุมมอง 88911 หลายเดือนก่อน
Closures in Common Lisp, when CLOS Is Too Much
TDD with Datomic and Clojure using clojure.test
มุมมอง 214ปีที่แล้ว
TDD with Datomic and Clojure using clojure.test
You use with-html-string for all of your spinneret components and layouts, and you compose them with (:raw. But, if you use with-html for everything, you can compose without (:raw and then stringify at the top (i.e. at the ningle route). It's working for me so far but I wonder if it's going to bite me in the ass.
Yes, it should work the same way! I chosen this approach because it looked easier, but not going through :raw is generally better!
This is my favourite Lisp channel. Just a little bit too fast for me which grabs my attention and stops me from becoming bored. The web dev content is most fun for me.
Thanks for the feedback! Appreciated!
why do we need to ctrl x ctrl f what is happening if we dont what top screen do
run-sum can just be (adjust for the later form in the fixed example) (dotimes (i n) (incf *counter*)) Same with thrs. Loop has the repeat word if you just want to do something a set number of times and not use a var. (loop repeat n do (incf *counter*)) Now if you want to not include the termination number you can use the below keyword. (loop for i below 12 ... ) This will let you go from 0 to 11. If you don't assign a value to a counting variable it's assumed to be 0. Loop is handy for complex behavior but there are more simple forms like dotimes, dolist, map, mapc, mapcar etc. Loop is an absolute monster of a DSL. It's worth learning but you really have to allocate maybe a week or so to go through all the different use cases and clauses. Generally it has a bunch of initialization clauses where you can bind variables, it can have multiple parallel stepping clauses, it can have termination clauses, and it also has finalizing clauses. The loop aggragate clauses like "sum" "collect" "max" "min" "count" are handy too.
Your Lisp series is great! I wonder if you would be interested in sharing a Lisp course with our channel? We could repackage content you already made. beau at channelname.
Yes, it would be interesting!
Hi, getting the error: CL-USER 14 : 3 > (for (i 0 10) (princ i)) 0 Error: The variable VAR is unbound. 1 (continue) Try evaluating VAR again. 2 Return the value of :VAR instead. 3 Specify a value to use this time instead of evaluating VAR. 4 Specify a value to set VAR to. 5 (abort) Return to debug level 3. 6 Return to debug level 2. 7 Return to debug level 1. 8 Return to top loop level 0.
Hi, with which version? What CL implementation are you using?
Hi@@the-lisper, thank you for your quick response. I am working on LispWorks Personal Edition 8.0.1. Regarding CL implementation, I checked documentation and I could not find anything. Anyway I was able to run the macro successfully. From package user I run: (format t "~A~%" (for (i 0 10) (princ i) (princ 7))) then I get: 07172737475767778797NIL NIL Best,
Bro pls never stop i am yet to find a good CLOS video resouece out there and i think you are tbe omly one. CL resources dont abound and or are old asf. This channel is a goldmine
Yes, time permitting, I will go on! 👍 Thanks!
Bro this is a godsent many thanks. Also the fact that even during runtime you never really Crash the program, just freeze execution in CL is actually mindblowing. I cannot imagine the power this can give you in the correct hands
Thanks!
I think you do the best CL stuff on here, now
Nice to hear! Thanks!
updated finding: if you set *print-circle* t, and define a long list with repeating elements, you will see that the elements that repeat are not stored as individual elements, but are stored as pointers pointing to the original list item that it duplicated... I guess this changes when you update the element? Anyway, when you print the list in the repl, you will see items that are list as #1YourItem, #2AnotherItem, etc. When the printout gets to the repeating elements, instead of printing them it will show (for example) #1# (if the item is a repeat of the first list item). This really threw me when I stumbled over it. But if you take (nth somenumber yourlist) and somenumber is a repeat item, you will see the correct list item. just an FYI. cheers!
Yes! In the video we have shown how to use the reader macro #1# to create a recursive data structure (putting it in the tail), but it can actually be useful every time you want to see if two references are the same!
Mr. Lisper, what do you think about doing a series on Data Structures and Algorithms implementation in Common Lisp? I would love to watch that.
That is a nice idea! :)
@@the-lisper there is a great lack of such content for Lisp on TH-cam. You would bring great value to the community :)
You're a mind-reader! I was just thinking earlier about using a circular list, and their dangers. Thank you, for the explainer.
lol, both of you are! I just implemented a couple of functions with circular lists over the weekend!
Happy to help! Circular lists are definitely interesting. Glad the timing worked out! Thanks for watching!
@@the-lisperThank you for your top-tier content, a true gift in this long lisp journey. I'm having a bit of trouble implementing lack-middleware-csrf with my djula templates. Could you please make a tutorial with an example of the same?
@@thinkingpostm Never actually used it, I can put it in the backlog!
My favorite YT channel 🙂
Thanks! 😊
I'm personally a big fan of this macro. But I mostly use. the iterate library.
Yeah, I completely agree with you... Both do and loop are at times a little bit harsh
Great! Thank you! Could you also show do in more detail?
There was a small introduction in one of the first videos th-cam.com/video/aL1Sdjdo1MY/w-d-xo.html , but for sure do deserve a video by its own and more in details!
Definitely do. This is Lisp. It should support anything that is useful to do.
Ja, the ANSI standard just doesn't mandate to optimize it. Even though it usually does (when possible)
Why would you want public keys to be secrets? They are "public" for a reason. Am I missing something?
Nono just the client secret has to be secret, the rest is just not good practice to have them in the code...
Over complicated in my opinion. Is there any tutorial /book which can explain this? what are :initarg and :text ? How to get them populated in IDE? I am using Portacle
Thanks for the feedback, I assumed some basic knowledge of CLOS, which is a prerequisite for the condition system.. For :initarg for example there is this video th-cam.com/video/cssHR_MLwNQ/w-d-xo.html
This is excellent and will be useful for my first large CL project! Thank you for your work on these videos, I watch every single one.
Thanks! :)
Interesting. But thats's not from scratch. I was under impression that Auth provider will be in Common Lisp! Authentik is written in Java or Golang i believe.
I meant writing the OAuth client from scratch... Updated the title...
@@the-lisper Thanks
@@the-lisper Thanks.Which IDE do you recommend? I tried Emacs but could not adjust. How is VS Code?
I am an emacs user... If the problem is setting up emacs, you can try Portacle which comes preconfigured (the first videos on this channel were made with it). Sadly I cannot talk about VS Code, because I have never used the plugin for Common Lisp... If I will ever try it, for sure I will make a video!
always happy when you post :)
Thanks!
Great you are back again.
Finally talking about authentication and authorization!
Which IDE to use for Common Lisp? I really don't like emacs and its flavors.
I am a Emacs/Portacle user... But I have heard that the situation is improving with VSCode. I cannot really talk about it now, because I have never tried it...
Well id just recommend (as another noob) to just bite the bullet really. The fastest way to set up c++/c# is visual studio. And has the most powerful features. Could you make It run in vscode? Yes but why getting a worse experience overall? The same reasoning applies to Emacs for common lisp and the best lisp-in-a-box IDE that just works out of the proverbial box is portacle. Which saves you tonnes of choices and configurations making an already steep learning curve, a bit less so. Why would you want to make your life more difficult when there is already a way? TLDR: CL is already conceptually harder to learn due to unfamiliar paradigms (almost 180° to M-expression based languages (anything ALGOL derived)). Dont make It harder than It needs to
Go ahead and use Emacs. It's not a language you edit and then run. You need something that can interact with the REPL while the program is running.
Papers have been written proving that compiled lisp code can be just as fast as C code, especially with statically typed variables and optimal data structures like indexed arrays and vectors.
Yes, that is exactly what I meant!
Good tool for faster solutions while keeping CL.
Exactly!
Thanks!
I love to see the common lisp community growing and getting more active.
so, are we making competition to HTMX?
No, we don't.. We use it together! th-cam.com/video/xnwc7irnc8k/w-d-xo.html :)
That's really inspiring, thanks a lot!
Thanks to you for the comment, it is important to use packages correctly!
so, about the type inference is it exclusive for classes or applies to structs and types with deftype as well?
Type inference is quite implementation specific, for example in SBCL the strictness is configurable up to a certain point. Coalton is a library that doesn't depende on the implementation.
I love to see a new raise in the common lisp community, is slow and steady, this is the best, because in the last times, it was fast and went as fast as it came, we need time to build an ecosystem that makes lisp great again.
Common Lisp has had some great introductory material for some time for who is interested, but the ecosystem can really be improved...
you forgot to talk about CLASP implementation of Common Lisp, targeting LLVM to interface with C++ and compile everything to native, no interpreter and it is being used to work in chemistry for nanotechnology and design nanomachines and molecules.
Yeah, there are a lot of interesting projects!
Excellent, thanks for a short and effective presentation 😊
Do you know of anything like flet for multiplatform (gtk / web/ mobile) implementations usable and integrateable like this from CL ?
No, sorry... The CL ecosystem provides a lot of building blocks, but integration with many platform is a lot of works and requires a bigger community... I think that the best chance is to integrate CL as a shared library (ECL or sbcl-librarian) into some other products outside the CL ecosystem... (or buy LispWorks)
I like how emacs org-mode is used to drive the presentation.
Org-mode is convenient everywhere! :P
Really useful video. I heard about py4cl but didn't use for anything practical yet.
I also really like the idea, Lisp has to find ways to talk to the outside world. This way it can be used to write the core logic and take advantage of libraries that receive a lot of development!
Informative! I was aware of those libraries, but as a CL beginner I needed some perspective. These videos are a public service.
Yes, I also think that some context is important when choosing a library!
With the _closer-mop_ library in most Common Lisp implementations, you can deny access to a slot by defining the SLOT-VALUE-USING-CLASS method. Your method would check if it's being called by an approved caller (using a special variable that either does or doesn't have the correct sentinel variable, and a macro to define approved accessor functions in such a way that the special variable has the sentinel value), and it would signal an error if it wasn't. A metaclass that uses a custom slot type would give you a place to store the visibility of each slot.
Thanks for the tip! I think that one should have strong reason to build such a construction, most of the time I would provide the "public interface" and discourage the usage of the "internal interface". The user may mess up at its own risk. Nevertheless, yeah, it is interesting the one can do whatever he wants!
I think the CLOS is a very good OOP system. It's unfortunate that C++ and Java have implemented such schizophrenic notions of classes souring an entire generation on what OOP can be. I used functions quite heavily, but for stateful components in a system (especially when I want dispatch) CLOS is excellent. There are quite a few CLOS books too!
Yes, "Object-Oriented Programming in COMMON LISP: A Programmer's Guide to CLOS" and "The Art of the Metaobject Protocol" is the way to learn CLOS!
Do you think its possible to use CFFI to interface with the Unreal Engine APIs? I understand it has its own GC...
Sorry, I cannot say because I really don't know its APIs...
AFAIK, you can't. Unreal API uses C++, which is fundamentally different from C in terms of FFI.
Excellent approach to teaching! I will imitate it. Thank you!
Thanks!
You're a mind reader, I was thinking about getting dirty with some CLOS earlier today. TFTV!
That’s awesome timing! CLOS is such a fascinating topic. Enjoy getting into it, and feel free to comment if you have some questions or interesting discovery!
I'm pretty surprised what CLisp is capable of, but is it safe for production environments ? I'm asking this as a newcomer in the language, because in my whole life I used java and golang for web apps
Yes, SBCL is production ready (see for example www.grammarly.com/blog/engineering/running-lisp-in-production/ )
Also ABCL for Common Lisp on Java...
At the moment I have little experience with it...
I'm sure the video title sounds like silly nonsense words to non-programmers 😂 Anyway, good video
Thanks! :)
How much math would one need to know in order to master lisp?
Probably knowing some math may help, it may make you see things in a different way. Nevertheless, it is really not required, one can learn by doing and there are no really prerequisites from math.
As someone currently starting with CL, this is very useful. Thanks a lot!
Thanks for the feedback!
Will you make a video for before, after and around methods?
Yes, in the future I may discuss MOP more in details! I wouldn't say "soon"
I think more properly it's a Hindley-Milner type system, used by the whole ML language family, notably OCaml, F# and Haskell.
True, but I thought it was too much for a title, maybe comparing it to OCaml would have been even better since it is not lazy
Very interesting
Thanks!