Adventure at Zamphyr

Djordje Sumenkovic
7 min readFeb 6, 2018

Zamphyr looked very attractive and I was tired of searching around. I had no idea if they are extremely demanding as others on the Internet, but Zamphyr says they are giving an opportunity to be part of startup to change the technology education as we know it. I bit the bait when I saw that I can contribute to an open-source vision. Remotely of course.

It was a little scary as they accept only one candidate for each position but I stepped into the application page.

One to rule them all

The first step joining the Zamphyr was very interesting for me because of the application itself. There were many formal questions at the begging of the application form, which could be troublesome if you have no experience. But when you see that first page ending with Star Trek / Star Wars question, you can’t resist going further. That was the moment when I stopped for a while and started researching more about Zamphyr. I read tons of blog posts and watched some videos, which immediately led me back to the application form.

Have to say that I actually am a movie addict and I chose Star Wars although I haven’t watched any of two. That was my pick because I saw tons of memes about Star Wars and they were enjoyable every time. If you ask me to choose the side, that would be Lord of The Rings over Harry Potter, I am that kind of person.

“What makes you our best choice for this position?”

There were technical questions, but my personality is what I can stand out with. This doesn’t mean I am scared by lack of experience, this means that I have enormous desire to progress and achieve more. Title kind of questions assured me at least to try with Zamphyr.

First video call

Let me share something unrelated to Zamphyr. There was a job offer sent to me in January 2018, but I actually applied for it back in October 2017. They simply asked me to pick a time for video call after 90+ days? I tried to stay professional by not replying to them. I learned that response may never happen, one may be terribly slow and one may be very fast, which is rare. Zamphyr was neither of them.

Zamphyr’s CEO Marko Kazic sent me a message after One day, and I scheduled the video call for tomorrow. It was both fluent and calm experience. We talked a lot about me and Zamphyr. As I heard more about Zamphyr, I became more interested. I tried to stay polite, but Marko is always excited to talk, so we chatted a lot. The final touch was about my job. Actually, I had to pick what would I like to do and what I am comfortable with. That was amazing.

Zamphyr XYZ

They call ideas the experiments. Experiments are ideas for interns placed on Trello. Also, you can recommend your own, or you can modify any existing. They allow you everything just to make sure you feel comfortable collaborating with them. Zamphyr project is designed specifically, so there are many mini features you can do independently and those can be easily implemented to the project. My initial experiment was the android library with showcase app written in Kotlin. It is the OAuth2 authorization library to log in with Zamphyr account.

Workspace

Ubuntu, Android Studio, Zoom, Slack, and GitLab did my job. My efficiency and progress depend not on technical, but soft skills Zamphyr gave me. Great examples and advice on tools accelerated every task I had to do.

By setting up the environment I found out that new Android Studio 3.0 includes Kotlin plugin which allows both Java/Kotlin to be converted. It’s cool when you paste some Java code which is automatically converted to Kotlin, vice versa. Also, I found out that the code completely compiles when it contains both Java and Kotlin. You can type both languages in the same file.

Interlacing the app code

One of the ideas was to learn a new language so I converted all my Java code to Kotlin. I learned some Kotlin advantages, but after a while it became unpleasant. It was messed up with code mixture and the app started to crash randomly. The problem occurred when I lost touch with code and I lost control on what I am doing.

Auth app

After a while, I consulted with my mentors and they set me back to the beginning. This time without Kotlin. I started to make a bigger picture of what I am actually creating. OAuth protocol, GET/POST, redirect_uri, access token, access code etc. Those were the terms I was supposed to deal with first. I’ve learned OAuth2 basics and the Zamphyr examples written in Meteor.Js gave a better look on how to do it. The essence of OAuth2 was the main thing to understand, and the coding was the easier part but also the longest.

More soft skills and implementation

In the meantime, I advanced in git and GitLab services which allowed me to properly set up my project. The most time, I was dealing with networking in Android. The implementation took many hours. Volley, FAN and Retrofit. I tried them all and I finally returned to Volley. Google’s library did well with Zamphyr Web API, but it was very confusing at the beginning. Happily, there is a lot of Zamphyr’s documentation to consult with.

I did not focus on the design and appearance of the application but on the functionality. The three buttons made the application core. One takes care of login flow and access code. Another for gaining access token, and third to access the API for user information. The base classes which made this functionality were consulted with the team, and the goal was to keep them as minimal as possible because it is for public SDK.

Then I began to think about separating the functionality of the library from the application, I mean about the library itself. This required a series of new research on independent libraries, the process of separation from the application, and the idea of ​​where to put it all up and publish it to everyone.

Bintray, Maven, Gradle, and JCenter as centralized services for all Android libraries were sufficient but also complicated. The logic of accessing these services, as well as settings in Android Studio and Gradle is a long process. The beginners will get tired of setting up the library.

Luckily after a while, this has become a common process and the publication and modification of the library have become a regular part of the development. When the authorization library had already entered the final stage, development focused on the Android account manager and the account management system. The new idea was to create a demo app that checks whether there are Zamphyr users among the accounts. If there’s some, get that information and try to use them instead of re-logging.

The struggle

I have to mention the issue with Manifest files. There were several problems with application and the greatest one was the redirect process. When you log in, the Chrome Custom Tab should redirect you back to the app and it did great for a while. After separating and publishing the library and the appropriate app, they got interlaced. In the context of Manifests.

This is the correct redirection activity setup in the lib’s manifest.

Chrome Custom Tab failed to redirect and took me a lot to understand why. Also there were several test versions of the app, and when you redirect sometimes another switch on.

The key is to set the correct intent filters.

This is the correct MainActivity setup in the app’s manifest.

Few words for future Zamphyrs

I want to encourage anyone who is motivated to start. Zamphyr is the greatest place to try first. You will be supported and mentored by whole team for 24 hours a day. For real. 4am or 4pm, they are always online for you. That’s amazing!

Thank you Marko Kažić, Andrej Budinčević and Nikola Dašić. I’m happy to have you as a part of this team. In the short time I have been here, you have really helped to make things run smoothly. I really appreciate your willingness to help out wherever needed. It’s that kind of flexibility and dedication that will help this company grow to its full potential.

You really came through, proving what it means to be a team player. The extra effort you put in was really appreciated.

I appreciate your willingness to assist. It is helpful to have someone who has had experience with similar issues on previous projects to offer guidance. I am looking forward to implementing many of your suggestions and experiments.

Technical keywords to describe what I did

Open source, Remote, Ubuntu, Android Studio, Slack, Zoom, Gitlab, OAuth2, Java, Android, Accounts, Android Account Manager, Gradle, Kotlin, Web API, RESTful , Google Android library Volley for networking, GSON helper library for JSON, FAN — fast android networking library, Retrofit networking library, Chrome Custom Tab library, Bintray, JCenter, Maven.

--

--