Hacker News new | ask | show | jobs
Show HN: From a “hello world” project to a complex messenger (github.com)
88 points by v_paliy 2298 days ago
4 comments

My journey of becoming an iOS developer begins in the summer of 2019. Back these days, I did not know anything about programming at all, so it was hard for me even to understand the most straightforward code. As a big fan of Apple, I decided to learn something related to iOS; therefore, I chose to learn Swift. Since there were a lot of tutorials on YouTube, I decided to start learning there. After a week of intense studying, I gained fundamental skills, which allowed me to enroll in Udacity Nanodegree program. With every new project, the difficulty increased. Luckily, my motivation allowed me to complete it successfully in less than three months. With all the experience that I got from this program, I decided to build my first complex app. Since I've always wanted to build my own messenger, I decided to create it as my portfolio app. Due to the fast speed and flexibility of Firebase Database, I was able to create a complex friend network for messenger users. Besides that, users receive data almost instantly, which makes a messaging process more enjoyable. Also, mChat uses a Mapbox API, which allows users to choose custom-designed maps. Overall, this messenger presents a modern design with lots of animations and custom chat color designs.
This is a very impressive story and equally impressive work! Keep it up!
Thanks!
Looks Awesome great job. What is your background ? and how many hours did you spend per day while learning
Thank you! As I mentioned before, when I started, I did not know anything about programming at all. I spent about 4 to 5 hours of studying per day. It was hard for me at the beginning, but if with the right motivation, everyone can do impossible things. Five months ago, I never thought that I would be able to create something like this.
Looks elegant, good job!
Thank you!
Also really impressed by your contributions history on GitHub. From the graph, you’ve literally worked every days (including Saturday and Sunday) in the last 12 months - except two days in Feb.

If this is true, you deserve some holiday!

Thanks! I try to work every day to develop a habit of coding.
It looks quite nice. Sadly the backend seems kinda limited in terms of federation (everybody can host his own server and they all communicate with each other). But you seem to have the skills to bring some real value to software projects.

How about supporting one of the open-source messengers like ChatSecure or Monal? I would love to see those chat apps have a similar user experience as your chat app has.

Thank you. I heard Go language is a good idea for the backend.
Well, it is. I am a huge Go fan, but one of the most common XMPP servers (ejabberd) is written in Erlang and I think it probably is an even better choice for that purpose.

However, more important than the implementation language is the protocol you are using. So far, this is probably something you didn't spend much time on since you had just one client and the server was more or less just Firebase. But as soon as you want to allow others to run their own servers (they might want to because they trust only themselves), you need at least some kind of server-to-server (s2s) protocol. If you want other developers to build clients for your network, you will also have to define a client-to-server protocol (c2s).

A well-known standard in this regard is XMPP and another competing is Matrix. XMPP is much older and part of the 'official' standards by the Internet Engineering Task Force, while Matrix is younger and setting a stronger focus on what the server should do.

> A well-known standard in this regard is XMPP and another competing is Matrix. XMPP is much older and part of the 'official' standards by the Internet Engineering Task Force, while Matrix is younger and setting a stronger focus on what the server should do.

It's a bit disingenuous to sell XMPP as a single IETF standard (RFC 6120 only covers core) when it is not. It is many standards known as XEPs (XMPP Extension Protocols) https://xmpp.org/extensions/

They are hugely fragmented and many many clients support some but not others. (Just take a look at the case of E2EE on XMPP), some support OTR, some support OMEMO, some do both, and neither work for other channels like VOIP. If you ever do any kind of federation you're going to want strong E2EE for privacy reasons.

It's also worth noting that the Matrix developers had quite a bit of experience developing XMPP software before they undertook the Matrix project. The specification https://matrix.org/docs/spec is an maintained document with a reference client (Riot) which has helped third party developers with implementation and example.

Thank you for your advice! I'll try to implement it in my future projects.
Wicked stuff, looks like an excellent candidate for matrix synapse front end
Thanks!