<br><br><div class="gmail_quote">On Mon, Jan 14, 2013 at 9:04 PM, Erik Reitsma <span dir="ltr"><<a href="mailto:erlang@ernovation.com" target="_blank">erlang@ernovation.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On 01/14/2013 11:37 AM, Joe Armstrong wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
This is amazing - works like a charm - fantastic.<br>
<br>
</blockquote></div>
I am glad it not only works on my own devices. :-)<div class="im"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Quick comment -<br>
<br>
    It would be very nice to make the client and server in fac_example.zip run "out of the box"<br>
client.erl is a *must read* file. server.erl does not export main/0 and should be changed to<br>
spawn the server - otherwise you don't get control in the shell ...<br>
<br>
</blockquote></div>
The server was intended to be run on some server, not on the Android device. Only the client should run on the device. Of course, the server could easily be adapted to run on the same device, or another device, as well.<br>

The example was mainly intended for people familiar with Erlang, who want to try their Erlang skills on Android. A different example may be required for Android programmers who do not yet know Erlang.<div class="im"><br>

<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
First thoughts/questions:<br>
<br>
  - The download is rather large - I'm sure this could be made a *lot smaller<br>
</blockquote>
<br></div>
Definitely. As I wrote, I put in as much as I could, mainly to show that all those libraries could run on the device. I intend to make a minimal installation too. The current download includes almost everything from OTP, including things like epmd (which also works, but you will need to start Erlang from a shell, probably with root permissions). I think I can probably remove the corba applications, the megaco application, ASN.1 and many others. I will see if I can make it possible to make your own selection of OTP applications, and perhaps even allow other repositories with non-OTP-applications.<div class="im">
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  - Need Erlang APIs to the camera, GPS, .... etc.<br>
</blockquote>
<br></div>
For now the easiest way to do this is write wrappers around the SL4A APIs. Have you looked at those and found them lacking? You can find all available functions here: <a href="http://code.google.com/p/android-scripting/wiki/ApiReference" target="_blank">http://code.google.com/p/<u></u>android-scripting/wiki/<u></u>ApiReference</a> I have actually only tried a view of them myself.<br>

All functionality from SL4A is available through the module android. I have implemented this using a dirty trick: I have modified error_handler.erl such that for an undefined function android:F(Args), the function android:rpc([Args]) will be called. So I only implemented android:rpc/1, which will be called for any other function android:F/N. Dirty, but if there is a new function in SL4A, it will be supported automagically. This is similar to the implementation for Python4Android.</blockquote>
<div><br>Golly - I read the code - you modified error_handler.erl !!!! <br><br>So what happens is ...<br><br>   I call android:fooBar(Args) - fooBar is not defined in android.erl<br>   so it's caught in error_handler and then android:rpc(fooBar, [...]) is called<br>
   and this ends up as a Json call to a socket -<br><br>   (aside) I'm not sure I'm totally happy with modifying the error_handler for this,<br>   what's wrong with calling android:rpc(Func, Args) in your code and not<br>
   changing the error handler?<br>   (/aside) <br><br><br>   It appears that SL4A is interfaced via a socket carrying JSON encode terms - is that correct?<br><br>   I Googled a bit to see if I could find where the protocol is defined - but found nothing.<br>
   Where, for example, is the handshake that you perform in android:init *specified*<br> <br>   If I want to call an andoid function I need to create a JSON argument list from erlang -<br>what are the calling conventions? <br>
<br>   This is all very interesting stuff - I'd really like some documentation though, how the<br>heck did you figure out how the interface works? - did you have to sniff the socket? - is there an architectural description somewhere?<br>
<br>Cheers<br><br>/Joe<br><br><br><br><br><br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  - The client.erl example shows I can make an application *without* eclipse<br>
     it would be very nice top abstract the details of the layout() function<br>
     so as not to see the XML :-)<br>
<br>
</blockquote></div>
Yes. :-) SL4A does not provide an API to dynamically create gui elements, so this is a limitation with the current approach. It would be possible to write Erlang code that transforms something erlangy into the required XML. I would have to look at how generic that could be made, because I may be too lazy to specifically implement all possibilities for the layout XML. I think it would be possible to make some simple XML-generation from lists of tuples records. I will give it some thought.<br>

<br>
Regards,<br>
*Erik.<br>
</blockquote></div><br>