Hi all,
I have written a simple example of using the Eclipse Paho libraries, via ABCL, to send messages in Common Lisp using MQTT. I will not write much more here since it's in the article which contains the code and some other considerations: http://finisterra.motd.org/?p=237
As I note I initially did this in Clojure so - and just like my experiments with Swing before which I sent to the list as well - this is in a way a comparison on how the interop facilities work. My code is not exactly stellar (either the Clojure or the CL one) but it is, I hope, easy enough to understand and follow, especially since I couldn't found any other example out there, which is why I thought the list could have some use for it (even if only for future reference).
I stumbled a bit on getting the command-line arguments but that was due to my custom-made abcl script end with $@ instead of "@" - something to watch for :)
I had one problem that I found weird and which I would welcome any help, I'm not sure why the following works:
CL-USER(3): (#"currentThread" 'Thread) #<java.lang.Thread Thread[interpreter,5,main] {BD30B16}>
... but the following doesn't:
CL-USER(4): (#"sleep" 'Thread 100) #<THREAD "interpreter" {19AA4D78}>: Debugger invoked on condition of type ERROR no such method Restarts: 0: TOP-LEVEL Return to top level.
For another short demo I have I will need to subclass, something used in Swing programming a lot from what I could understand. If I'm not mistaken this isn't currently supported in ABCL, but I will read on it.
Best regards,
Frederico
On Mon, Jun 24, 2013 at 4:50 PM, Frederico Munoz fsmunoz@gmail.com wrote:
Hi all,
I have written a simple example of using the Eclipse Paho libraries, via ABCL, to send messages in Common Lisp using MQTT. I will not write much more here since it's in the article which contains the code and some other considerations: http://finisterra.motd.org/?p=237
As I note I initially did this in Clojure so - and just like my experiments with Swing before which I sent to the list as well - this is in a way a comparison on how the interop facilities work. My code is not exactly stellar (either the Clojure or the CL one) but it is, I hope, easy enough to understand and follow, especially since I couldn't found any other example out there, which is why I thought the list could have some use for it (even if only for future reference).
Hi! This is very interesting - both the "how to use Eclipse Paho in Lisp" part, and the comparison with Clojure. Thanks for sharing!
I stumbled a bit on getting the command-line arguments but that was due to my custom-made abcl script end with $@ instead of "@" - something to watch for :)
I had one problem that I found weird and which I would welcome any help, I'm not sure why the following works:
CL-USER(3): (#"currentThread" 'Thread) #<java.lang.Thread Thread[interpreter,5,main] {BD30B16}>
... but the following doesn't:
CL-USER(4): (#"sleep" 'Thread 100) #<THREAD "interpreter" {19AA4D78}>: Debugger invoked on condition of type ERROR no such method Restarts: 0: TOP-LEVEL Return to top level.
I think this is because Thread.sleep takes an argument of type long, while 100 is an int, and ABCL isn't smart enough to search for applicable methods taking type conversions into account.
For another short demo I have I will need to subclass, something used in Swing programming a lot from what I could understand. If I'm not mistaken this isn't currently supported in ABCL, but I will read on it.
Creating Java classes in Lisp (known as "runtime-class" for historical reasons in ABCL) is a partially implemented feature at the moment, and documented quite messily (see http://lisp.not.org/trac/armedbear/wiki/JavaFfi/RuntimeClass; it is more of an idea dump than a proper reference). The key missing functionality is calling superclass constructors, which renders it not useful in a lot of cases. I worked on it a bit a while ago; if you're interested, I might start working on it again a bit - adding constructors is not a lot of work.
Cheers, Alessio
Best regards,
Frederico
-- Some gratuitous spam:
http://ripple.com Ripple, social credit system http://common-lisp.net/project/armedbear ABCL, Common Lisp on the JVM http://code.google.com/p/tapulli my Lisp open source projects http://www.manydesigns.com/ ManyDesigns Portofino, open source model-driven Java web application framework
Hi,
Alessio Stalla alessiostalla@gmail.com writes:
Hi! This is very interesting - both the "how to use Eclipse Paho in Lisp" part, and the comparison with Clojure. Thanks for sharing!
You're too kind, thank you. I'm glad you found it worthwhile, my idea is to share practical tidbits, even if code-wise they are hardly very elegant.
CL-USER(4): (#"sleep" 'Thread 100) #<THREAD "interpreter" {19AA4D78}>: Debugger invoked on condition of type ERROR no such method Restarts: 0: TOP-LEVEL Return to top level.
I think this is because Thread.sleep takes an argument of type long, while 100 is an int, and ABCL isn't smart enough to search for applicable methods taking type conversions into account.
That was exactly my idea, which is why I tried: (#"sleep" 'Thread (coerce 100 'long-float)), but now that you mention it I went looking around and found jcoerce, which seems like a way to do it without relying on any smartness. That being said it doesn't seem to work:
(java::jcoerce 100 "java.lang.Long") => The value 100 is not of type "java.lang.Long". [Condition of type TYPE-ERROR]
I found this link that points towards some conversion not being implemented (http://lists.common-lisp.net/pipermail/armedbear-devel/2012-July/002481.html), so perhaps this is not doable right now.
Creating Java classes in Lisp (known as "runtime-class" for historical reasons in ABCL) is a partially implemented feature at the moment, and documented quite messily (see http://lisp.not.org/trac/armedbear/wiki/JavaFfi/RuntimeClass; it is more of an idea dump than a proper reference). The key missing functionality is calling superclass constructors, which renders it not useful in a lot of cases. I worked on it a bit a while ago; if you're interested, I might start working on it again a bit - adding constructors is not a lot of work.
Yes, thank you, I remember you referring to this some months ago when I wrote about the Swing examples. I'll take a look and perhaps present a very simple use-case and why it does or doesn't work, just to identify specific implementation improvements.
Best regards,
Frederico
I think getting constructors to work, even partially, would help everyone.
Sent from my iPad
On Jun 24, 2013, at 19:07, Alessio Stalla alessiostalla@gmail.com wrote:
On Mon, Jun 24, 2013 at 4:50 PM, Frederico Munoz fsmunoz@gmail.com wrote:
Hi all,
I have written a simple example of using the Eclipse Paho libraries, via ABCL, to send messages in Common Lisp using MQTT. I will not write much more here since it's in the article which contains the code and some other considerations: http://finisterra.motd.org/?p=237
As I note I initially did this in Clojure so - and just like my experiments with Swing before which I sent to the list as well - this is in a way a comparison on how the interop facilities work. My code is not exactly stellar (either the Clojure or the CL one) but it is, I hope, easy enough to understand and follow, especially since I couldn't found any other example out there, which is why I thought the list could have some use for it (even if only for future reference).
Hi! This is very interesting - both the "how to use Eclipse Paho in Lisp" part, and the comparison with Clojure. Thanks for sharing!
I stumbled a bit on getting the command-line arguments but that was due to my custom-made abcl script end with $@ instead of "@" - something to watch for :)
I had one problem that I found weird and which I would welcome any help, I'm not sure why the following works:
CL-USER(3): (#"currentThread" 'Thread) #<java.lang.Thread Thread[interpreter,5,main] {BD30B16}>
... but the following doesn't:
CL-USER(4): (#"sleep" 'Thread 100) #<THREAD "interpreter" {19AA4D78}>: Debugger invoked on condition of type ERROR no such method Restarts: 0: TOP-LEVEL Return to top level.
I think this is because Thread.sleep takes an argument of type long, while 100 is an int, and ABCL isn't smart enough to search for applicable methods taking type conversions into account.
For another short demo I have I will need to subclass, something used in Swing programming a lot from what I could understand. If I'm not mistaken this isn't currently supported in ABCL, but I will read on it.
Creating Java classes in Lisp (known as "runtime-class" for historical reasons in ABCL) is a partially implemented feature at the moment, and documented quite messily (see http://lisp.not.org/trac/armedbear/wiki/JavaFfi/RuntimeClass; it is more of an idea dump than a proper reference). The key missing functionality is calling superclass constructors, which renders it not useful in a lot of cases. I worked on it a bit a while ago; if you're interested, I might start working on it again a bit - adding constructors is not a lot of work.
Cheers, Alessio
Best regards,
Frederico
-- Some gratuitous spam:
http://ripple.com Ripple, social credit system http://common-lisp.net/project/armedbear ABCL, Common Lisp on the JVM http://code.google.com/p/tapulli my Lisp open source projects http://www.manydesigns.com/ ManyDesigns Portofino, open source model-driven Java web application framework
armedbear-devel@common-lisp.net