[MUSIC] [MUSIC] Okay, welcome to my talk. This is about Messenger, two P2P phone calls. There's a story behind it I want to tell and of course what it is and what it's about. Why I took it on me to learn Android and stuff. So let's go. Information about myself, my name is Moritz. Warning, funny name. It's not a Künstler name, it's really my name. I'm from Berlin. I'm a software programmer as I guess a lot of people here. And I feel associated with this Freifunk community. It's a grassroots mesh routing community in Germany. You have hundreds of those in Germany. And I would describe myself as a mesh routing enthusiast. Okay, let's go in it. What is it about? What is it? So you might have heard already that it's some kind of Android app. It's now written in Kotlin. And it's all about audio video calls. That doesn't sound very special at this point. Because of course you have WhatsApp, you have Facebook Messenger, you have all the other things. But this simple app, really it's kind of stupid, is all about just calling an IP address. So it doesn't use any servers, any mesh, no discovery, which is important for Freifunk, for mesh routing. Networks where you block almost all broadcasts and can't really do discovery. And of course it's a GPL. It's a free open source software. And now for a bit of background, why it came to be. It's basically case for no internet. So this Freifunk in Germany, most people see it as a Freifunk hotspot. I can connect, I have internet. And if I don't have internet, then it's broken. Which is a bit sad, because Freifunk is mostly about having a decentralized infrastructure. Where and in these networks the internet gateway that is provided usually by the community is all about... I mean it's just a very popular service. But it's not really what Freifunk is about. But the problem is also that since everybody knows, okay you can get internet over that. You don't need a password to log in these Freifunk networks, these mesh networks. Yeah, that's all what you know about. And there's not really a use case for mesh networks without internet access. Because there's a lack of apps, lots of lack of applications, how to find content, stuff like that. And I thought okay, maybe we need some kind of demo app for Freifunk. That is not only for Freifunk, but all kinds of other things. And I looked around, if there is something like that. But actually I couldn't find anything. I looked on Google Play, F-Droid, no not really. I couldn't find anything. And of course it's really important that we have something that is not really specific to a certain network. So this app, since it's only calling IP addresses directly, otherwise it doesn't work. It works at home in your own network, but you don't even need internet. You can use it at home, at your company in awkward situations, in general disaster areas. Maybe you can put up some Freifunk routers, have some Wi-Fi cloud, and then you can use it to call people. So a bit more background. This all started in 2018. Of course there will be some demo soon. But let's go a bit down and back in history. I had no idea of Android development in general. I knew a bit Java from university. That's not very good. But I had this idea, okay, I really would like to have some app like that to exist, but I can't program it. So there was a Google Summer of Code where Freifunk was participating in it. We submitted it as an idea and we found a student and he implemented that with WebRTC. Over the time there were ups and downs. In the meantime I was able to learn Android programming myself. I don't know, it was an interesting experience. Mixed. Now the software is mostly complete, I would say. A bit about how it works. It's basically you scan a QR code. So you have to meet the person you want to call. And in that QR code, like you see it maybe here in the app, it's just a JSON formatted block with some name fields, so it's some nickname, some public key and then some area of IP address. Usually it's just one. And it also has a lot of extra features. Here you see a bit how it looks like. You have a contact list, call history on the right side of the tabs there. And I've also opened here the context menu so you can delete, rename, ping that IP address and then the red dot will turn maybe green because you can reach that and then you can make the call. And of course you have all kinds of features. Also a bit weird features like you can also accept calls. So if you want to use it as an intercom system in your house and want to, I don't know, call the kitchen or something. So I think it's really important that you can use this software for all kinds of different applications, not just Freifunk. Okay, it's about calling. It calls an IP address. So that is basically how it looks like. On the right side you see, okay, this is also the debug menu that you see there where you can see what codec is currently used, bitrate, audio rate, resolution. But usually you don't see that. This is what you toggle by tapping on this eye icon on the left side, on the top, in the corner. And you can of course not only speak but also use video. So that's quite nice. And it's pretty basic. And lots of other features I won't go through. You can set a specific frame rate. You can disable the proximity sensor. You can use it with Bluetooth headset. At least I hope it works for most cases. I haven't really tested it a lot. And of course this is when you use expert settings. So this is like everything but by default it's really a small list. So people, I mean this is meant to be a simple app and I don't want to, we don't want to scare people. But this is the full list of all the options so it's a long list. Alright, this is a bit for experts. I mean this QR code usually you have the default IP address of your Wi-Fi adapter in there when you start it the first time. But you can configure it and put other stuff in there like other IP addresses on your system. You can add it manually, maybe even a host name. But this is more some expert thing. Yeah, the current state of the project. I said it started in 2018. It has been rewritten and a follow up, Google Summer of Code to Kotlin. Which I like a bit more than Java. More cleaned up. And well it has a lot of releases, lots of commits. So basically I would say the app is done. I mean, okay I've told you the name is Messenger. But I have to admit it doesn't really mesh itself. It's just calling an IP address and it's also not sending messages. Maybe in the future but I don't really have right now the resources to implement that. If anybody wants to fork it and do that or just commit a merge request you are really welcome. But for now it's good. This is a bit of a GitHub code graph where you see 2018. Let's see, yeah. Where it was initially done and then like in sports. There were lots of gaps where I said okay I want to work on different stuff. And then in the end you see one big spike where it got converted to Kotlin. And I did a lot of stuff on the right side. So I'm mostly the only person working on it. There were a few merge requests from other people fixing stuff. So that's always awesome and warms my heart. This is a GitHub homepage. Not that much to see here. More screenshots of the app itself. For the future I already told you I see it mostly as done. And I don't think I want to go into iOS development. I have other stuff to do with my life. Maybe someone wants to use Flutter or something. Or just fork the whole app. I don't care. It's open source. It's meant to be something to support communities. And yeah hopefully we get more translations. I think we have Chinese, Russian translations, Ukrainian even. I have to look. I don't know it. And there might be even some null pointer exceptions, some bugs. But this is still something I'm hunting. But it's more or less stable. And yeah where to get it? Yeah, FDroid. Primarily. On Google Play you can also find it. But I would prefer FDroid. Yeah there's also down there the website. For the use of the app, I mean it's always interesting to know how many people are using that app. I mean it has been around since 2018. Okay most features and bugs were fixed lately. For FDroid I don't know. They don't know. Which I think is a good idea. But at least I could since it's on Google Play store I can show you that data. So Google Play tracks a lot and you see by now it's somewhat over 500 installations I think. If I'm not blind. So that's interesting. So that's this graph that you can look at if you log into the developer console when you are signed up for Google Play as a developer for your app. And also have some GitHub statistics which shows that I guess there's some 40 people, big appeal dresses not people, per day accessing the GitHub project. And that's basically it. I can also now show you maybe a bit of a demo. I mean I can't really show you like my phone screen is a bit too small. But I can tell you, maybe you have just to believe me, I've installed it here and on this phone. And this is just a small travel Wi-Fi router which could of course be part of a mesh network. And then I can just, okay I've already did the scanning with the QR code. And then I press it and it says connection failed because I'm not in that same VLAN. So I need to switch. Okay let's see. Wrong menu. Let's do that quickly. Okay it doesn't show my travel router. Oh yeah I moved it and that's triggered it to restart. Of course the connector is kind of bad. Okay but maybe in the meantime I can tell you something like this app only works of course on local networks. It's called an IP address. There's no stun, turn, servers. I mean it's based on WebRTC. But it calls only an IP address so when you have some net going on then it doesn't work. I tried it on the internet via two routers with a public IP address, no firewall. Okay then it works. Also IP addresses of course change. So this is kind of a problem but the thing is with Freifunk networks you usually get the same IPv6 address for link local at least because there's your MAC address of the Wi-Fi adapter inside so that stays pretty consistent. And for those scenarios it's quite nice. It works. But of course you can just edit this QR code, this address management and then maybe add some host name or something. So that should also work. So let's see maybe if I can make a call. I hope the router has booted up again. Oh yeah, I need to connect to the Wi-Fi. Let's check if that phone is also in the same Wi-Fi. Please connect. Obtaining an IP address so that looks good. This one is connected and this is also connected so let's give it a call. That didn't work of course. That's the so called fof effect. Okay, so now it works. And then I can... Oh no, that was declining. That's not what I wanted to do. Okay, accept here. And then I can use the phone camera from one phone and then the strip on the other one. I can enable switch the cameras, use the camera from both sides. And yeah, that's it. So thank you very much for listening. If you have questions feel free to ask. And then... Oh yeah, already one question. But maybe we let this disco train pass by because otherwise nobody will hear. Okay, they got the notice. Thank you. Thanks. Couple of questions. One is how low bandwidth friendly is the voice code? Well, it uses WebRTC which is rather bandwidth friendly. I had some numbers for the video. It really depends on the resolution. There's some default automatic settings so the resolution will readjust to how much bandwidth is available. But I would expect it to for audio to be at a few kilobyte, slightly over 10 kilobyte maybe. Thanks. And second question is you mentioned file transfers. I suppose in that is also like sending an image and probably more importantly is a voicemail. How hard do you think those features would be to implement even if they're not on your to-do list? Okay, so I understood your question is about file transfer, voicemail. Okay, well these are all features that can be implemented. But well, no resources right now, no time. But of course it shouldn't be that hard. I mean, over WebRTC you can use specific channels to transfer files. It's mostly a UI thing I think. So the most work to do is to add the icons, the menus, and the transfer of the files is not even that much of a big of a problem. But it has to be implemented of course. More questions? Over there, please. Hello. Great app first. Regarding the auto acceptance, can you do this like only activators for all callers or can you also differentiate either all callers or only certain callers? I implemented it as a general feature. So I know somebody who has a 3D printer in the basement. I thought, okay, maybe he can just put his old phone next to it and then call that phone of the Wi-Fi and he doesn't have to go down and then he can check on his old 3D printer. But to answer your question more directly, it's just for everybody. But of course it could be made a per contact setting. But that's not how I did it right now. Okay, thanks. But it's no problem to do that, to implement that. So you said it only works on local networks, but can I use something like WireGuard or ZeroTier to connect two phones via some other tunnels? Yeah, sure. I mean you can use some tunnel on your phone. Then you go to this address management and then say, yeah, my QR code should also contain the address of this tunnel, local tunnel on your phone. And then you need to scan again to add that IP address. And yeah, if there's an IP, if it's reachable, then of course it works. So I can choose under which IP I want to be called and there's only one address in the QR code? Or is it all of my IPs? By default. Actually it's the MAC address. It's a special address basically of your Wi-Fi adapter. That's by default if you start the app. And from that, link local addresses are then created by default. And also the phone then looks at what kind of prefixes you have, IPv6 prefixes, and then it puts the MAC address of the person you want to contact. And hopefully it will get through. But for Firefox this works well. But there are a lot of configuration options. Okay, thank you. Alright, thanks for the nice talk and I hope you all found it enlightening. [music]