Android question: how to connect to swank, running on android?

PR polos.ruetz at gmail.com
Sun Aug 20 20:17:16 UTC 2017


2017-08-20 21:47 GMT+02:00, Daniel Kochmański <daniel at turtleware.eu>:
> Did you try again (without restarting ECL on Android) to slime-connect
> to Android host? I don't remember, but I think I had such problem, but
> connecting again worked (but it may be just my imagination).
>
> Other ideas: are you sure your slime and swank versions match?
>
> Did you try to update slime and swank to the newest (i.e taken from
> github) versions?

oh yes, I tried everything I could imagine...

Both slime and swank versions match (it showed a warning previously,
so I updated them to the latest version, on both computers).

Me thinks it's something trivial, which simply needs some more fantasy
and patience (as always...). In fact, I have no experience with remote
Slime connections, so this is my first try.

(Never mind, I like "puzzles" like this one, they teach you so much
about things you didn't even intend to learn!)

Paul




>
>
> On 20.08.2017 21:39, PR wrote:
>> 2017-08-19 23:25 GMT+02:00, Daniel Kochmański <daniel at turtleware.eu>:
>>> AFAIR I was connecting over wifi to the REPL on my Android device.
>>>
>>> If the port forwarding works fine - do you have some logs either from
>>> emacs or running ECL process which show what's going on?
>> ok, just to report the current state:
>>
>>   - if I run '(start-swank)' from the desktop (same sources as on
>> android), it works locally
>>   - PC and tablet are connected via USB
>>   - both PC and tablet are in the same wlan, and can ping each other
>>   - port forwarding is enabled: 'adb forward tcp:4005 tcp:4005'
>>   - if I try to connect from the PC to Swank running on the tablet,
>> Emacs logs these messages:
>>
>>
>> <snip Emacs messages>
>>
>>    Connecting to Swank on port 4005..
>>    Lisp connection closed unexpectedly: connection broken by remote peer
>>
>>    error in process filter: if: Lisp connection closed unexpectedly
>>    error in process filter: Lisp connection closed unexpectedly
>>    Error running timer `slime-process-available-input': (error
>> "Selecting deleted buffer")
>>
>> </snip Emacs messages>
>>
>>
>> So, still no luck...
>>
>> Paul
>>
>>
>>
>>
>>
>>
>>> Daniel
>>>
>>>
>>> On 19.08.2017 22:24, PR wrote:
>>>> thanks to both of you, but it still doesn't work.
>>>>
>>>>   From the PC, I did:
>>>>
>>>>     $ adb forward tcp:4005 tcp:4005
>>>>
>>>> so, this part works.
>>>>
>>>> Daniel, I already "stole" the functions from the "ecl-android" project
>>>> (prior to post my question); without them I would have been lost...
>>>>
>>>> So, I'll have to play around a little... Of course I will post the
>>>> solution here, if I get it to work.
>>>>
>>>> Paul
>>>>
>>>>
>>>> 2017-08-19 17:27 GMT+02:00, Daniel Kochmański <daniel at turtleware.eu>:
>>>>> Hello,
>>>>>
>>>>> swank listens by default only for localhost connections (for a good
>>>>> reason!). To force it to listen for connections from specific host
>>>>> other
>>>>> than 127.0.0.1 you have to bind swank::*loopback-interface* to it. For
>>>>> instance to listen for connections from everywhere on port 4005 you
>>>>> could use functions from
>>>>> https://gitlab.common-lisp.net/ecl/ecl-android/blob/master/assets/lisp/etc/user.lisp
>>>>>
>>>>> (defun start-swank ()
>>>>>      (format t "Starting swank server~%")
>>>>>      (mp:process-run-function
>>>>>       "SLIME-listener"
>>>>>       (lambda ()
>>>>>         (let ((swank::*loopback-interface* "0.0.0.0"))
>>>>>           (swank:create-server :port 4005
>>>>>                                :dont-close t
>>>>>                                ;; :style nil #|:spawn|#
>>>>>                                )))))
>>>>>
>>>>> (defun stop-swank ()
>>>>>      (format t "Stopping swank server~%")
>>>>>      (swank:stop-server 4005)
>>>>>      (format t ";; Swank off-line~%"))
>>>>>
>>>>> Note, that newest slime/swank should support :spawn communication
>>>>> style
>>>>> just fine with ECL (my PR was merged lately). In that case it should
>>>>> be
>>>>> enough to call create-server which won't block (note that in the
>>>>> example
>>>>> above we create separate thread for that).
>>>>>
>>>>> Since ECL isn't run from CLI but as shared library, it is useful to
>>>>> define implementation for implementation program (don't remeber for
>>>>> sure, but I think lack of this caused some problems later)
>>>>>
>>>>> (defimplementation lisp-implementation-program ()
>>>>>      "Return the argv[0] of the running Lisp process, or NIL."
>>>>>      "org.lisp.ecl")
>>>>>
>>>>> Hope this helps.
>>>>>
>>>>> Best regards,
>>>>>
>>>>> Daniel
>>>>>
>>>>>
>>>>> On 19.08.2017 16:32, PR wrote:
>>>>>> Hi again,
>>>>>>
>>>>>> so, the progress of the new android REPL is going well, it already
>>>>>> runs Quicklisp and can start swank, and right there I'm stuck now:
>>>>>> How does one connect from the local computer to the android device,
>>>>>> which is running the SLIME-listener?
>>>>>>
>>>>>> They are connected via USB, and the device is /not/ rooted.
>>>>>>
>>>>>> Since this is certainly of public interest, I ask here, thanks for
>>>>>> any
>>>>>> help!
>>>>>> Below the link to the current APK of the REPL (you'll need android
>>>>>> version >= 4.1, API >= 16):
>>>>>>
>>>>>> http://lights-of-holiness.eu/tmp/repl.apk
>>>>>>
>>>>>> After launching the app, do (there is currently no feedback of the
>>>>>> progress, sorry):
>>>>>>
>>>>>>      (quicklisp)   ; should take less than a minute, with a fast
>>>>>> internet
>>>>>> connection
>>>>>>      (start-swank) ; same as above (needs to byte-compile all
>>>>>> 'contribs')
>>>>>>
>>>>>> If I run:
>>>>>>
>>>>>>      (mp:all-processes)
>>>>>>
>>>>>> it lists the running "SLIME-listener" process, so it seems to work...
>>>>>>
>>>>>> Thanks for any help!
>>>>>>
>>>>>> Paul
>>>>>>
>>>
>
>



More information about the ecl-devel mailing list