
Show HN: From a “hello world” project to a complex messenger - v_paliy
https://github.com/realpaliy/mChat
======
v_paliy
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.

~~~
rasengan
This is a very impressive story and equally impressive work! Keep it up!

~~~
v_paliy
Thanks!

------
corentin88
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!

~~~
v_paliy
Thanks! I try to work every day to develop a habit of coding.

------
arendtio
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.

~~~
v_paliy
Thank you. I heard Go language is a good idea for the backend.

~~~
arendtio
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.

~~~
dngray
> _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/](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](https://matrix.org/docs/spec)
is an maintained document with a reference client (Riot) which has helped
third party developers with implementation and example.

------
ahasani
Wicked stuff, looks like an excellent candidate for matrix synapse front end

~~~
v_paliy
Thanks!

