
Show HN: Experimental chat written in Common Lisp - lerax
https://github.com/ryukinix/lisp-chat
======
lisper
Add this:

[https://github.com/rongarret/tweetnacl/blob/master/ratchet.l...](https://github.com/rongarret/tweetnacl/blob/master/ratchet.lisp)

and you can turn this into a state-of-the art encrypted chat.

(Note that to _really_ turn this into a secure chat you need to also add key
management code. I'm working on that part now.)

~~~
lerax
Seems pretty nice! Thanks for share it.

~~~
lisper
My pleasure. If you do decide to integrate it let me know.

------
theamk
When I found both client.py and client.lisp, I thought it would be nice to see
direct lisp/python comparison. However, turns out Python version does much
more that Lisp one (it maintains edit field even if other people send the
messages), so no direct comparison is possible.

Author, can you add a simplified python client with exactly the same
functionality as the lisp one?

~~~
lerax
As you requested:
[https://ghostbin.com/paste/zba9f](https://ghostbin.com/paste/zba9f)

This is the simplified version making the same output of the lisp version.

I was wondering about race conditions when I try close the read stream on
finally keyword. Seems crash sometimes. However I never got this on the Lisp
version. Funny.

I hope you like it. Maybe I should push this version to the repository?

------
RUG3Y
I'm learning Lisp right now so I'll definitely try this out when I get home.
It's nice to go and read other's Lisp projects.

I love the brevity of this code! Awesome work.

Are you on Lainchan?

~~~
lerax
Thanks for look it! I did that as exercise to topics of multi-threading,
streams and sockets using SBCL. I added later a Python version (using ncurses
as bonus) to non-lispers can test.

On client written Lisp I have a problem with asynchronous STDIN and STDOUT
yet. When the user is typing a message input, a message from server may comes
and print in middle of the input, so the console will be mixed with stdin and
stdou... a messy. .

After looking for a solution almost everybody points to use curses... but I
was hesitant for it because I wish keep server and client as more simple
possible. As was proposed, the Python client using curses doesn't has this
problem and works fine.

Curious question about Lainchan. In another days I posted some programming
related stuff on there and a personal music album. Why are you asking?

~~~
jarboot
Take a look at the first picture in your readme :)

~~~
lerax
Oooh... this is really obvius >.< Thanks. It's because I'm really a big Lain
fan. Lain for all.

~~~
RUG3Y
I love Lain.

------
m-j-fox
Cool.

I'm not sure that using quicklisp that way is kosher. Quicklisp doesn't allow
you to pin a particular version of a dependency. The upshot is that your code
that works today may not work tomorrow.

I've been looking for a best practice and all I can seem to come up with is
make a bundle and include it in your repo.

[https://www.quicklisp.org/beta/bundles.html](https://www.quicklisp.org/beta/bundles.html)

~~~
aidenn0
Quicklisp does let you pin to a particular release, or make your own
distribution, both of which will handle this. There is also qlot for more
fine-grained dependencies.

------
raocah
besides, that shows me how well readable lisp code is. even better than
python.

~~~
CCing
What ? maybe I'm stupid, but to me the python version seems a a lot more
readable. It's only me ? (maybe because I don't know lisp, but neither python,
so should be the same)

~~~
raocah
What programming languages do you know? If you know one or some algol-like one
their syntax is very similar to each other and very different from lisp-like
langs.

------
erlehmann_
What I do not understand: Why not write a simple IRC (or even XMPP) client –
but an “IRC-like” client? The documentation is out there. Do people feel
special when their software is incompatible with older software without having
features that make incompatibility a necessity?

Internet Relay Chat: Client Protocol
[https://tools.ietf.org/html/rfc2812](https://tools.ietf.org/html/rfc2812)

Internet Relay Chat: Server Protocol
[https://tools.ietf.org/html/rfc2813](https://tools.ietf.org/html/rfc2813)

~~~
aidenn0
I think many people overestimate how complicated the IRC protocol is. A
minimal IRC client is much less work than one would expect.

~~~
azrazalea
Last time I was thinking about it the number of non-standard extensions
combined with there being multiple RFCs involved if you want to support more
than minimal features led me not to consider it for my hobby/learning project.

------
bigjimslade
Why did you choose SBCL among the several other common choices available?
Thanks.

~~~
Koshkin
Not the OP, but my guess would be because SBCL is the fastest known _free_
implementation of Common Lisp.

~~~
lerax
Yes.

------
agumonkey
read eval transport print loop

~~~
lerax
RETPL. HAHAHA

~~~
agumonkey
is this a common acronym ?

~~~
DigitalJack
I think maybe lerax had a dyslexic moment and thought it was REPTL, which
would be a little funny (reptile).

~~~
agumonkey
I thought it was a ROTFL synonym...

------
lubien
Well done, manoel

~~~
lerax
HAHAHAHAHA. Thanks.

Was my first front-end on HN.

------
jaddood
The writer has good taste

~~~
lerax
Thanks.

Ps.: Lain + Lisp?

------
erjantj
Very interesting

