Categories
Uncategorized

Jesse from Vodeo, ‘Fora Soft is in a perfect spot of good pricing of projects and development.’

Our copywriter Nikita talked to Jesse Janson about his experience of working with Fora Soft.

Jesse hails from the Janson family. Movie nerds might know the family by their brand, Janson Media. After all, they’ve been in the movie renting business since 1989.

Jesse’s app isn’t officially released yet, but he certainly does have something to say about his work with Fora.

Today we have Jesse Jenson with us. Jesse is a CEO of Vodeo, am I correct?

Yes. So my name is Jesse Janson, and I work at Janson Media, which is our TV and film distribution company. I am in charge of acquisitions and business development. And Vodeo is a mobile first video streaming rental service that we worked on with Fora Soft, and that’s a separate company which. Yes, I’m president of that company.

Tell me a little bit about Vodeo. What is it? How did it come to be?

Vodeo is a rental only mobile service, an application that we’re going to launch on iPhones first. The service is different and unique in the sense that the users can rent movies or TV episodes for a limited period of time. And for this, they use a credit-based system within the app, which allows the cost per movie rental or episode rental to be much lower than any other application or video rental service currently available in the market. So, within Vodeo, our users can pre-buy credits within the app that they can then use to rent movies and rent TV episodes. And each credit to the user only costs them about $0.10 right now.

Was Fora Soft your first choice?

I think it was probably our first. Definitely the first company and only company we’ve worked on for Vodeo and for the development of the application. I certainly researched and spoke to other companies as well.

But after speaking with Fora Soft, we decided to work together, and it’s been a good decision.

Tell me why you turned to Fora Soft? Why us?

The previous work that Fora Soft has done was impressive, and that was an important factor in our decision. Also, the communication was excellent. So I understood the scope of the project, the estimated time, work, and costs that it would take to get the project up and developed. And yeah, it’s been really good. The communication mostly. And then also the previous work was a big factor.

Share your before and after working with us, like what it used to be before you worked with Fora Soft and what it is now?

Sure. Well, before the Vodeo app, it was really just an idea on paper and just a concept. So we really needed Fora Soft to help us with an MVP. in the space and get that up and running. And then once we sort of had that tested and we had a first version, we worked with Fora Soft to update it. It’s still private, just for us to look at. And we went through a few versions of that, and that whole process has been excellent. And now we’re pretty much to a point where I believe we are planning to publicly launch this year, so maybe June.

Congratulations on that. So I believe since you haven’t officially launched yet, you don’t have any measurable figures, any amount of crushes or profit or anything like that, right?

No, not yet. Right now it’s very much private, and in beta. We probably have a pool of maybe 20 private users who have been testing the app on their phones – registering, renting movies and making sure everything works properly. And that whole process has been great so far. The feedback has been very good from everyone in our small private circle.

Let’s talk a little bit about difficulties. If there were any difficulties with working with us, please tell me honestly.

Yeah, no, I haven’t encountered any difficulties yet. Working with Fora Soft, every question or product feature that I’ve requested or asked about has been easily addressed by Fora Soft. I never got the impression that Fora Soft couldn’t implement a feature or an update to where we are so far with the app. Even discussing future possibilities of updates and features on our future roadmap down the line. Fora Soft has said all of it is possible, and we haven’t had any difficulties in that regard in terms of the development and adding new features. It’s been excellent.

What’s the situation where you would think like, all right, I really want this feature, but how do I implement it? Can they implement it? And you talk to Fora Soft and Fora Soft was, like, yes, sure. Easy peasy. We can do that.

Yeah, that’s been the case. Sometimes it’s not a quick “Oh, that’s easy”. Sometimes the project manager I’m working with at Fora Soft will have to bring it to the developer team and ask them if it’s a feature that could be done. Then they will come back to me and provide me with an estimate and explain how long it will take to implement the process. So, yeah, it’s been really good. Some features are easy and quick “Oh, yeah, we could do that quickly and easily”. And some are “let me just check with the developers and see if it’s possible”. And that’s always been “Yeah, it’s possible. We’re able to do it”. So it’s been great.

Qualities like determination and communication and professionalism are really important when it comes to project type of work. Can you please rate us on those qualities on a scale of ten and maybe come up with other qualities if you need to.

Yeah, I give a 10/10 across the board on everything. It’s been really great.

I really enjoy personally working with a project manager.

We’ve worked with two project managers so far at Fora Soft. We worked for a while with our first project manager, maybe a year, and she was excellent. And then there was a transition. She left or moved on and we worked with a new project manager, and that transition was super seamless and easy. A new project manager picked up right where she left off.

Working with a project manager and communicating with them has probably been the most valuable to me. Especially because I’m not a developer by any means, and I’m not able to speak developer language, code and whatnot. But working with a project manager helps that a lot. So I can communicate what I would like to see and have done.They know how to communicate with the developers and the designers and then bring that back to me and let me know how it goes.

I’ll make sure to forward this feedback to Vladimir. He’s a cool guy.

Yeah. Excellent.

Okay. And would you recommend Fora Soft to your friends or colleagues?

Yeah, I’d definitely recommend them. I think Fora Soft certainly has the skills and know-how to develop applications like this very well. Also, I felt like the price in working with Fora Soft was very competitive across the market, and that we liked as well. 

There’s a trade-off. Once you go too low in price, usually the quality of the work is reflected and is poor with the cost being so low. Sometimes, when the price is very high, it doesn’t necessarily mean that the quality will be that much and greated. So, I think Fora Soft is in a perfect spot of good pricing of projects and development. At the same time, they offer very high quality in the work that gets done.

Do you have anything else to add?

No, it’s all been great.

I’m in New York, Fora Soft is in Russia, there’s a time difference. Even with that, the communication’s been great. I don’t feel like we’re that far apart. The work’s been excellent.

It might be around a couple of years of working on this application. We’re pretty at the point where we’re ready to put it out in the public and hopefully get good feedback.

Thanks a lot, as a movie geek myself, I really hope everything will work out. Bye!

Categories
Uncategorized

Jan from AppyBee, ‘You usually give me a solution that is better than mine.’

Watch the interview on Youtube

We’re happy to present our interview with Jan from AppyBee. Jan is our client who has a history of coming to us, then parting with us, and then coming back. What didn’t Jan like about Fora Soft the first time, why did he decide to return, and what is he thinking about our collaboration now? Read the interview to find out.

Hi Jan, tell us about AppyBee.

It’s an online reservation system. with which we can literally book anything. An online event, a project, group session, or person. On top of that, it’s not only booking. Communicate with clients, send push notifications, messages. Pay by bundles or smart subscriptions.

We, as a B2B company, deliver website widgets and a native app.

We’re currently focused on the sports business. We have many types of businesses, such as co-working spaces, dog-walking services, and solariums.

By sports, did you mean pro sports, like football or basketball or gyms?

Both. The main thing is personal trainers, but one can also book a yoga class, a traditional gym, where you can pay a monthly fee to train. We also provide a solution for the current, corona-affected times. If you can’t buy a subscription, you just pay for a visit. Many types of business models, yeah.

appybee client dashboard
Clients overview on AppyBee

Was Fora Soft your 1st choice?

We started with Fora 6 years ago. We weren’t really experienced back then. We had an idea. We worked with Fora Soft for a couple years and wanted to develop an MVP, and that’s what we went with. The problem is, we went with it for too long, instead of moving on. Fora Soft should’ve advised us to change, but they didn’t do that. And, as I said, we were inexperienced. So things were messy, so we decided to leave Fora Soft. We weren’t happy with them.

We then tried all kinds of solutions. Outstaffing people, freelancers, other agencies, a combination of those. In the end, it was a disaster. We have a saying where I’m originally from: “I had it, I didn’t know. I knew it, I didn’t have it anymore”.

Everything has to fit. It’s not enough to have 1 good developer, 1 good project manager. Everything has to work together: QA, design… We burned a lot of money on it.

During that time there was some info we needed from Fora Soft. What I felt is “oh crap, I need to ask them something but we’re not working anymore..”. But I got all I needed instantly, they helped us a lot.

Then we decided to go back. There was one guy there, a PM who was always there. He gave us confidence that they have it under control.

We changed technology from Bootstrap to React. React.JS, React.Native, PWA (Progressive Web Apps). So, I asked the PM if they can handle it, and he said yeah. And then he explained everything. It felt like it was a Friday evening after a hard week. You sit out there and you have that vodka. 

I should have returned to Fora Soft much earlier. Fora Soft has everything under control. Everything under one roof. It all works perfectly. 

So the story is like a boyfriend and a girlfriend. At first, it doesn’t work out, but then you end up married.

By the way, the reason I worked with an agency is that I just wanted them to solve my problems and handle the answer in the correct and professional way. So, in another company, we worked with 5 different developers within 3 months. There also was a case where we changed a huge architectural part, which was a major update. It was really buggy and slow. In fact, thinking back I’m realizing that it was OK, but back then I didn’t.

In Fora Soft we worked with the same team all the time. For me, it’s a sign that people are happy with the company. They like what they’re doing. You guys grew from 30 people to 90 people (editor’s note: it’s 110 people now 🙂 ). So, before it was a mess. You could say that we had a relationship, it didn’t work out, but then eventually it did. Now we’re back together for 5-6 months, but if I’m being honest, we should’ve done this much earlier. The breakup had to happen, but here we are.

AppyBee client profile
A client profile on AppyBee


Compare before and after working with Fora Soft. Before the first time we worked together, even.

In the beginning, there was some technology, and we didn’t know what the usual way was. What we noticed in the beginning, we had a Trello board. It’s nice, but it’s like this (shows a pack of sticky papers), like moving this around. Then we moved to another company. They taught us that with Jira we can do this, with that we can do that. They overdid it. I felt like I was wasting hours on all that. That was the main difference. I wanted to go back, I was never unhappy with the PM. He’s the good guy, he was also there to help. It’s one of the reasons I went back. He gave me confidence.

Now it’s the same project, which is important. I also got more people who’re helping me. I get to talk with the business analyst, with the designer, with the front-end, and the back-end. It’s a complete solution.

The advantage of Fora Soft is that the team’s communication system is really good.

You talk to each other within teams. It’s difficult to have an agency, an out-staffer, a freelancer. It works, but not efficiently. So here we are with the comparison.

Can you share any measurable figures, such as a number of crushes, clients, or revenue?

The revenue is difficult because another large part is the marketing, and the development cannot change that. 

However, what we do notice is the amount of money we paid to Fora Soft, let’s say, amount X. I don’t wanna name numbers now. I see it now: I pay half and I get double. I got much more value. but not only the value. It’s also the stability. You have confidence. Right now all the things that are not efficient are being solved. I get information back. So I have a confident feeling now. I sleep well now. What I’m saying is, I don’t know it’s not only the measurable things, but I sleep well.

I’m going to tell you about one situation that happened at the previous company. They did work for us. They had one guy that also was working for us from that agency full-time. I asked him questions, but I didn’t get any information back. So we were doing tasks and ping each other within Jira. We had a daily meeting, and I was asking: why aren’t you reacting to any questions we’re asking in Jira? He said, ‘ I turned off the notifications’.

We’re paying a lot of money, it’s full-time, we’re with 5-6 people in a daily meeting and he gives an answer like that. I can tell you one thing. If he said that at the table, I think it would finish differently. You should be happy that it was online and with distance. So with software you cannot just move. It’s not another jacket you could buy. It’s not possible. So you really need to think about which company you are gonna work with and it needs to be a match. You also need to understand a company. The company needs to understand our culture, but we also need to understand the company’s culture and that needs to be a match. That’s really important. The expectations. And what I also noticed is that you have different projects. On one hand, you have short term projects, maybe 1-2 months. Easily done. But you also have work such as what we do. These are long-term projects. Important structural things that one needs to understand and move forward step by step. Test it thoroughly, think about what the clients have, move the priorities, and do some mind exchange, like what we’re doing with the business analyst right now. This was also a big difference. Back then you guys didn’t have that. Fora Soft didn’t have any business analyst that I talked to. But now I get to talk with the assistant project manager. We discuss everything. From time to time when I have an idea. I don’t share it. I want you to let me see what they’re gonna come up with. 

A lot of times, I get a solution from you guys which is better than mine. That’s a good thing.

Sometimes you have the feeling that it doesn’t go fast enough. Those are the important things. And as a company you can’t only point fingers. There’s a lot of things that we can also do better on communication. I also asked the question: what can we do better as an organization? How would you want us to deliver the information? Are we happy with it? Do we need to do something more? This is also important to have a good match. You cannot only say that this needs to be done and then finish. You really need to give correct information so they really understand what you want.

Were there any difficulties while working with Fora Soft, aside from that MVP thing?

The difficulties of working with Fora Soft. What I find difficult, but that’s not only connected to Fora Soft, is that I would like to, meet the team once a month. I’m looking for a situation how I can do that. So just sit down 1 day, 2 days, once a month, maybe once in 3 months to do a structural visit. To sit down with the guys face to face, to see who’s who. And then maybe pop up some ideas, have a board, talk, drink vodka and see what comes out. The difficulty is that you’re always behind the screen and talking. So that’s on the one hand, on the other hand, I cannot think about any difficulties. 

AppyBee founder
Jan, AppyBee founder

Qualities and things such as communication, professionalism, and determination are very important when it comes to any type of project work. Can you maybe rate us on a scale of 10 on those qualities and add something else that you see important here?

– What I would see as the quality, and I can really say that, because I had a lot of companies in between. I had three or four agencies, freelancers, and outstaffing people I worked with. I even had, not gonna name names, really had to fly in the “experts” to have a problem solved, which cost in the meantime. So I can definitely say it’s a 9 on communication.  In the beginning, I didn’t understand why you guys don’t want me to talk immediately with the developer. I do communicate but mostly need to go to the project manager. Back then I didn’t see it. Right now I absolutely see the advantages. because he will arrange everything.  I talk with him daily, and he will divide the work, and it’s efficient. It’s perfectly efficient. He’s always aware of everything that happens, good or bad. And that’s the communication which makes stuff more efficient.

Would you recommend Fora Soft to your friends or colleagues who are interested in a video application?

I would recommend Fora Soft to friends, family, and colleagues. I would not recommend Fora Soft to my competition.

That’s a good one, a good one. Thank you.

I think we have a contract also on that, right? So no competition. I wouldn’t recommend you guys to my competition but I do recommend to my business, my associates, and everybody else.

Maybe anything else that you would like to add?

– No, no, actually not.  As I said, seeing the team, that would maybe change, to have a drink from time to time, advice from Fora Soft. I would also expect we’re gonna organize a specific day for all the clients and whatnot it would be nice to go. And Mr Sapunov brings a big bottle of vodka, some special Russian vodka I’m dying to drink. Other than that I’m all good.

Thank you very much. My sincerest thanks for your time. It was a pleasant experience talking to you, and I will see you later.

Categories
Uncategorized

Anthony from Speakk, ‘You are so much more competent than other developers.’

We created Speakk, a chat and voice messenger for South Africa that doesn’t consume internet data. Here’s our interview with Anthony, Speakk CEO. He says why he chose Fora Soft over many other companies, how we overcame difficulties with the app, and how Fora solves issues.

Watch customer video testimonial on software development

Tell me about Speakk. What is it?

Speakk is an innovative app in South Africa. People chat and send messages and voicemails there. Similar to WhatsApp. However, users don’t pay for any of the mobile data used. Data is very expensive. Millions of South Africans walk around with smartphones but they can’t afford to use them just because of how expensive data is. That’s why we developed Speakk. For them to not pay for data used.

How it works is a simple chat app like WhatsApp. Sign up, send text messages, voice messages. We have ads, so every 8 messages or so you’ll see an ad popping up. So we pay for the data and we make money through advertisements.

How many users?

When we signed up, we got nearly 100k users over a month. Then we had a slight change in business plans. We built another app using that technology. This new app was for the educational market. We had great opportunities with COVID. Fortunate negatives, so to speak. There were many public schools in SAR where kids had no opportunity of communicating with teachers in lockdown. So we used our existing technology for that market as well. Fora Soft helped us do that.

Was Fora Soft your first choice?

No, it wasn’t. We considered many software development companies, both locally in SAR and overseas. What was very interesting for us, we gave a very simple brief to developers. We wanted to see how they understood the brief and base on that, what technologies they’d recommend and how it would cost.

Out of all the companies we’ve contacted, Fora was the only company to really grasp the challenge of what we’re doing and give us an accurate quote.

That’s why you ended up with us, right?

Yeah. Hundred percent. So, it was really because of the technical competence, we landed up being impressed by a number of other aspects working with them, but initially, you were much more technically competent than any of the other developers we’d spoken to. We had a look at your portfolio of existing work, which was not only quite wide and quite varied across different industries, but it did overlap somewhat in what we were doing as well. So, you had the experience in the space that we are in as well, which helped.

Can you please share your “before” and “after” working with us?

We don’t really have it before and after, because we’ve been partnering with Fora Soft from the beginning of this project. So really we worked with Fora Soft for the minimum viable product. We worked with them to create something that would be as light as possible but would still work. And that was the first version of the product that we created with Fora. We then evolved the product and we moved on to new products. The relationship has evolved as the products have evolved, but there wasn’t any before Fora Soft. They were really the beginning of the project for us. 

Are there any measurable figures that you could share with us that can be disclosed? Like we’ve talked about a number of users, maybe a number of crashes, revenue numbers?

Because our business has changed slightly, it’s difficult to share a lot of that, but we could say that there have been millions of messages sent in our app since we started. We accumulated that really quickly. We were a trending app on Google Play Store for quite a while. We had, at one stage, many thousands of downloads every single day. I can’t think of any other metrics that we could share. The app grew very quickly at the beginning.

Were there any difficulties while developing the program? If yes, able to overcome those difficulties with Fora Soft?

Yeah. Like any project, we had a number of difficulties. One of the big challenges we had to overcome was that the app uses this reverse billing technology, which has very, very specific technical requirements. It led to a number of issues at the beginning of the project which were unforeseen on our side and on the Fora Soft side. But it’s something that we did work with Fora Soft over a number of months to get through.

We ended up with a much more sustainable, robust product at the end that we are quite proud of. That version works better. 

I don’t know if you want me to talk about this, but the other issue we had is that we did have some issues with Fora Soft in terms of the initial specifications of some new projects that we worked on. There were some of the features that were underspecified that led to us underbudgeting the project. It had a number of ramifications for the business. Fora Soft was very apologetic about that. They rectified the billing we were on, on some kind of an agreement to help us through some of the budgetary constraints. Then going forward, we didn’t have that problem again. I think you realized where the error came from and you were very careful about that going forward.

Professionalism, determination, and communication are very important when it comes to any IT project. With us working with you and you working with us, could you rate us on the scale of 10 on those criteria and maybe add some other criteria that you deem necessary?

So in terms of professionalism, Fora Soft was very professional throughout.

We’ve dealt with many different people in the organization and everyone we’ve dealt with has been great, very professional. Obviously, in a long-term working relationship like we’ve had there, there have been one or two issues and those issues had been resolved very, very quickly. I’d say Fora has been incredibly professional in terms of communication as well. We were concerned that our company is based in South Africa. Fora is based in Russia. There would be language constraints and language issues in dealing with Fora. This didn’t prove to be a problem at all. We set up a Slack channel to communicate with our project manager when we’re in the middle of the big dev cycles,. We were speaking to those project managers throughout the day on a daily basis over Slack.

The communication was pretty much flawless.

When we did need to have a face-to-face meeting, we hopped on Skype and we were able to look each other in the eye and to speak a bit more casually. Communication hasn’t been an issue at all. You know, I think the only communication issues that were introduced every now and again was just due to some of the technical requirements that we had on our side that are very unique to the mobile environment that we are working in. I must say, just on that point, I was very impressed that South Africa has a very unique set of mobile users. We have people walking around with the latest and greatest smartphones. And we have people walking around with cell phones that are many, many years old.

Would you turn to Fora Soft with any other project or maybe recommend us to somebody else?

Yeah, yeah, definitely. And we have done other projects with Fora Soft and we have recommended Fora Soft to others as well. So not only would we do it, but we have done it already.

Categories
Uncategorized

Naseem from MobyTap, ‘You guys know what you’re doing.’

Our copywriter Nikita talked to Naseem, the CEO & Founder of MobyTap, a video review platform. On MobyTap, businesses can show how much they love their customers, and how much their customers love them back. Naseem came to us in 2016, and after 5 years of cooperation, he definitely has something to tell us!

Software Development Reviews – MobyTap

Was Fora Soft your first choice?

Amazingly it was Vadim (the Sales Head at Fora Soft) who found me. I was on an online auction platform; I had lots of offers, and I chose my company. But when Vadim approached me, I was like, okay, let’s chat. His personality and everything he did was professional. I thought ‘even though we’ve done the contract with somebody else, why not.’ He asked me to give Fora Soft an opportunity, and I did. And that’s where the ball got rolling.

So, it was Vadim who swooped in and won you with his personality, right?

Yeah, he’s shown me some examples of the work you’ve done, I was really impressed with that.

Share any before and after working with us?

It was my 1st time developing an app. I’ve been in the recycling business for the past 15 years. So when the idea came to me, I thought recycling and video apps are worlds apart. But since my customers love what we do, that’s the easiest way to get feedback and reviews. And I thought, yeah, make an app. Sounds simple, but when you get into it, you realize that it’s not as simple.

Can you share any measurable figures, such as revenue, number of crashes, etc?

Not many crashes. It’s just been a continuous improvement. So all we’ve been doing is improving the app, making it better. And your team is fabulous. It was all about communication, and getting my message to you. You guys made life very easy, and that’s what the business is about. It took a couple of years but the job was well done, compared to the other company I had used. I literally had to cancel them and let you do the whole app.

Hands down, you guys know what you’re doing.

Those guys took a lot of time and messed up. And you guys clearly showed that you’re professional in what you do. It makes me very happy.

Thank you for your kind words. Were there any difficulties while working with us?

The only difficulty was the technology wasn’t there, so we were doing things that were 4-5 years ahead. Things that Google was catching up with. We got stuck where we needed to make it simpler for the users to input the domain name of any company in the world. If you’re doing a review, the app would find where you’re located and find the local business you’re reviewing. Nobody in the world had done that. And Google, just that year, had finished their SDK for Android. We were stuck for 4-5 months. How do we get the whole world’s domain names into the app? Then the idea came. Well, Google’s doing an SDK, could we use it? And then your team said, “We could do it”. Several months of work are saved.

You guys literally saved me a fortune by coming up with an idea of how to get the whole world’s domain names into the app.

And it works today! Because of you, guys.

Can you rate us in terms of professionalism, communication, and dedication?

Not even thinking about the score. It’s 10/10 straight up.

Do you have anything else to add?

The best thing with Fora Soft is aftercare.

You’ve raised the bar so high now, I expect it from every company.

The aftercare was so great, and the communication was amazing, it blew me away. Even in the UK here, in England, we don’t get that aftercare.

You guys looked after me and literally held my hand. Any issues that arose, you fixed them instantly, it’s like waving a magic wand. You don\t get that much in the tech world.

You’ve proved that you can find a good company online that will do what you want with your budget. If you got a small budget or a high budget, you’ve managed it perfectly. I think it’s been 5 years now.

So, if somebody needs a video app, I instantly think of you and pass them your number and details.

Thank you very much! Even though recycling and video apps are, as you said, worlds apart, we do wish you all the best.

Got a project idea of your own? Maybe, you’ve tried to make it come to fruition but are dissatisfied with the results? Contact us using the form on this website, and we’d be happy to review your case and offer the best solution.

Kindly follow us on Instagram as we share a lot of information regarding projects. You can also DM us if that’s your preferred method of communication!

Categories
Uncategorized

How to Create Video Chat on Android? WebRTC Guide For Beginners

webrtc in android

Briefly about WebRTC

WebRTC is a video chat and conferencing development technology. It allows you to create a peer-to-peer connection between mobile devices and browsers to transmit media streams. You can find more details on how it works and its general principles in our article about WebRTC in plain language.

2 ways to implement video communication with WebRTC on Android

  • The easiest and fastest option is to use one of the many commercial projects, such as Twilio or LiveSwitch. They provide their own SDKs for various platforms and implement functionality out of the box, but they have drawbacks. They are paid and the functionality is limited: you can only do the features that they have, not any that you can think of.
  • Another option is to use one of the existing libraries. This approach requires more code but will save you money and give you more flexibility in functionality implementation. In this article, we will look at the second option and use https://webrtc.github.io/webrtc-org/native-code/android/ as our library.

Creating a connection

Creating a WebRTC connection consists of two steps: 

  1. Establishing a logical connection – devices must agree on the data format, codecs, etc.
  2. Establishing a physical connection – devices must know each other’s addresses

To begin with, note that at the initiation of a connection, to exchange data between devices, a signaling mechanism is used. The signaling mechanism can be any channel for transmitting data, such as sockets.

Suppose we want to establish a video connection between two devices. To do this we need to establish a logical connection between them.

A logical connection

A logical connection is established using Session Description Protocol (SDP), for this one peer:

Creates a PeerConnection object.

Forms an object on the SDP offer, which contains data about the upcoming session, and sends it to the interlocutor using a signaling mechanism. 

val peerConnectionFactory: PeerConnectionFactory
lateinit var peerConnection: PeerConnection

fun createPeerConnection(iceServers: List<PeerConnection.IceServer>) {
  val rtcConfig = PeerConnection.RTCConfiguration(iceServers)
  peerConnection = peerConnectionFactory.createPeerConnection(
      rtcConfig,
      object : PeerConnection.Observer {
          ...
      }
  )!!
}

fun sendSdpOffer() {
  peerConnection.createOffer(
      object : SdpObserver {
          override fun onCreateSuccess(sdpOffer: SessionDescription) {
              peerConnection.setLocalDescription(sdpObserver, sdpOffer)
              signaling.sendSdpOffer(sdpOffer)
          }

          ...

      }, MediaConstraints()
  )
}

In turn, the other peer:

  1. Also creates a PeerConnection object.
  2. Using the signal mechanism, receives the SDP-offer poisoned by the first peer and stores it in itself 
  3. Forms an SDP-answer and sends it back, also using the signal mechanism
fun onSdpOfferReceive(sdpOffer: SessionDescription) {// Saving the received SDP-offer
  peerConnection.setRemoteDescription(sdpObserver, sdpOffer)
  sendSdpAnswer()
}

// FOrming and sending SDP-answer
fun sendSdpAnswer() {
  peerConnection.createAnswer(
      object : SdpObserver {
          override fun onCreateSuccess(sdpOffer: SessionDescription) {
              peerConnection.setLocalDescription(sdpObserver, sdpOffer)
              signaling.sendSdpAnswer(sdpOffer)
          }
           …
      }, MediaConstraints()
  )
}

The first peer, having received the SDP answer, keeps it

fun onSdpAnswerReceive(sdpAnswer: SessionDescription) {
  peerConnection.setRemoteDescription(sdpObserver, sdpAnswer)
  sendSdpAnswer()
}

After successful exchange of SessionDescription objects, the logical connection is considered established. 

Physical connection 

We now need to establish the physical connection between the devices, which is most often a non-trivial task. Typically, devices on the Internet do not have public addresses, since they are located behind routers and firewalls. To solve this problem WebRTC uses ICE (Interactive Connectivity Establishment) technology.

Stun and Turn servers are an important part of ICE. They serve one purpose – to establish connections between devices that do not have public addresses.

Stun server

A device makes a request to a Stun-server and receives its public address in response. Then, using a signaling mechanism, it sends it to the interlocutor. After the interlocutor does the same, the devices recognize each other’s network location and are ready to transmit data to each other.

Turn-server

In some cases, the router may have a “Symmetric NAT” limitation. This restriction won’t allow a direct connection between the devices. In this case, the Turn server is used. It serves as an intermediary and all data goes through it. Read more in Mozilla’s WebRTC documentation.

As we have seen, STUN and TURN servers play an important role in establishing a physical connection between devices. It is for this purpose that we when creating the PeerConnection object, pass a list with available ICE servers. 

To establish a physical connection, one peer generates ICE candidates – objects containing information about how a device can be found on the network and sends them via a signaling mechanism to the peer

lateinit var peerConnection: PeerConnection

fun createPeerConnection(iceServers: List<PeerConnection.IceServer>) {

  val rtcConfig = PeerConnection.RTCConfiguration(iceServers)

  peerConnection = peerConnectionFactory.createPeerConnection(
      rtcConfig,
      object : PeerConnection.Observer {
          override fun onIceCandidate(iceCandidate: IceCandidate) {
              signaling.sendIceCandidate(iceCandidate)
          }           …
      }
  )!!
}

Then the second peer receives the ICE candidates of the first peer via a signaling mechanism and keeps them for itself. It also generates its own ICE-candidates and sends them back

fun onIceCandidateReceive(iceCandidate: IceCandidate) {
  peerConnection.addIceCandidate(iceCandidate)
}

Now that the peers have exchanged their addresses, you can start transmitting and receiving data.

Receiving data

The library, after establishing logical and physical connections with the interlocutor, calls the onAddTrack header and passes into it the MediaStream object containing VideoTrack and AudioTrack of the interlocutor

fun createPeerConnection(iceServers: List<PeerConnection.IceServer>) {

   val rtcConfig = PeerConnection.RTCConfiguration(iceServers)

   peerConnection = peerConnectionFactory.createPeerConnection(
       rtcConfig,
       object : PeerConnection.Observer {

           override fun onIceCandidate(iceCandidate: IceCandidate) { … }

           override fun onAddTrack(
               rtpReceiver: RtpReceiver?,
               mediaStreams: Array<out MediaStream>
           ) {
               onTrackAdded(mediaStreams)
           }
           … 
       }
   )!!
}

Next, we must retrieve the VideoTrack from the MediaStream and display it on the screen. 

private fun onTrackAdded(mediaStreams: Array<out MediaStream>) {
   val videoTrack: VideoTrack? = mediaStreams.mapNotNull {                                                            
       it.videoTracks.firstOrNull() 
   }.firstOrNull()

   displayVideoTrack(videoTrack)

   … 
}

To display VideoTrack, you need to pass it an object that implements the VideoSink interface. For this purpose, the library provides SurfaceViewRenderer class.

fun displayVideoTrack(videoTrack: VideoTrack?) {
   videoTrack?.addSink(binding.surfaceViewRenderer)
}

To get the sound of the interlocutor we don’t need to do anything extra – the library does everything for us. But still, if we want to fine-tune the sound, we can get an AudioTrack object and use it to change the audio settings

var audioTrack: AudioTrack? = null
private fun onTrackAdded(mediaStreams: Array<out MediaStream>) {
   … 

   audioTrack = mediaStreams.mapNotNull { 
       it.audioTracks.firstOrNull() 
   }.firstOrNull()
}

For example, we could mute the interlocutor, like this:

fun muteAudioTrack() {
   audioTrack.setEnabled(false)
}

Sending data

Sending video and audio from your device also begins by creating a PeerConnection object and sending ICE candidates. But unlike creating an SDPOffer when receiving a video stream from the interlocutor, in this case, we must first create a MediaStream object, which includes AudioTrack and VideoTrack. 

To send our audio and video streams, we need to create a PeerConnection object, and then use a signaling mechanism to exchange IceCandidate and SDP packets. But instead of getting the media stream from the library, we must get the media stream from our device and pass it to the library so that it will pass it to our interlocutor.

fun createLocalConnection() {

   localPeerConnection = peerConnectionFactory.createPeerConnection(
       rtcConfig,
       object : PeerConnection.Observer {
            ...
       }
   )!!

   val localMediaStream = getLocalMediaStream()
   localPeerConnection.addStream(localMediaStream)

   localPeerConnection.createOffer(
       object : SdpObserver {
            ...
       }, MediaConstraints()
   )
}

Now we need to create a MediaStream object and pass the AudioTrack and VideoTrack objects into it

val context: Context
private fun getLocalMediaStream(): MediaStream? {
   val stream = peerConnectionFactory.createLocalMediaStream("user")

   val audioTrack = getLocalAudioTrack()
   stream.addTrack(audioTrack)

   val videoTrack = getLocalVideoTrack(context)
   stream.addTrack(videoTrack)

   return stream
}

Receive audio track:

private fun getLocalAudioTrack(): AudioTrack {
   val audioConstraints = MediaConstraints()
   val audioSource = peerConnectionFactory.createAudioSource(audioConstraints)
   return peerConnectionFactory.createAudioTrack("user_audio", audioSource)
}

Receiving VideoTrack is tiny bit more difficult. First, get a list of all cameras of the device.

lateinit var capturer: CameraVideoCapturer

private fun getLocalVideoTrack(context: Context): VideoTrack {
   val cameraEnumerator = Camera2Enumerator(context)
   val camera = cameraEnumerator.deviceNames.firstOrNull {
       cameraEnumerator.isFrontFacing(it)
   } ?: cameraEnumerator.deviceNames.first()
   
   ...

}

Next, create a CameraVideoCapturer object, which will capture the image

private fun getLocalVideoTrack(context: Context): VideoTrack {

   ...


   capturer = cameraEnumerator.createCapturer(camera, null)
   val surfaceTextureHelper = SurfaceTextureHelper.create(
       "CaptureThread",
       EglBase.create().eglBaseContext
   )
   val videoSource =
       peerConnectionFactory.createVideoSource(capturer.isScreencast ?: false)
   capturer.initialize(surfaceTextureHelper, context, videoSource.capturerObserver)

   ...

}

Now, after getting CameraVideoCapturer, start capturing the image and add it to the MediaStream

private fun getLocalMediaStream(): MediaStream? {
  ...

  val videoTrack = getLocalVideoTrack(context)
  stream.addTrack(videoTrack)

  return stream
}

private fun getLocalVideoTrack(context: Context): VideoTrack {
    ...

  capturer.startCapture(1024, 720, 30)

  return peerConnectionFactory.createVideoTrack("user0_video", videoSource)

}

After creating a MediaStream and adding it to the PeerConnection, the library forms an SDP offer, and the SDP packet exchange described above takes place through the signaling mechanism. When this process is complete, the interlocutor will begin to receive our video stream. Congratulations, at this point the connection is established.

Many to Many

We have considered a one-to-one connection. WebRTC also allows you to create many-to-many connections. In its simplest form, this is done in exactly the same way as a one-to-one connection. The difference is that the PeerConnection object, as well as the SDP packet and ICE-candidate exchange, is not done once but for each participant. This approach has disadvantages:

  • The device is heavily loaded because it needs to send the same data stream to each interlocutor
  • The implementation of additional features such as video recording, transcoding, etc. is difficult or even impossible

In this case, WebRTC can be used in conjunction with a media server that takes care of the above tasks. For the client-side the process is exactly the same as for direct connection to the interlocutors’ devices, but the media stream is not sent to all participants, but only to the media server. The media server retransmits it to the other participants.

Conclusion

We have considered the simplest way to create a WebRTC connection on Android. If after reading this you still don’t understand it, just go through all the steps again and try to implement them yourself – once you have grasped the key points, using this technology in practice will not be a problem. 

You can also refer to the following resources for a better understanding of WebRTC:

WebRTC documentation by Mozilla

Fora Soft article on WebRTC security

Categories
Uncategorized

Ali from TapeReal, ‘The team treated the project like their own.’

Our copywriter Nikita sat down with Ali, TapeReal CEO & Founder from Vancouver, to talk about his experience of working with Fora Soft. Ali came to us in August 2020, he wanted to create a video social media. This is how Ali describes the product:

TapeReal is a better version of YouTube. Like,if YouTube was built today instead of 2005, for the people of today. That’s what we’re trying to build.

Software Development Reviews – TapeReal

Was Fora Soft your 1st choice?

No, it wasn’t. Before this, I was working with a number of developers and other software developing companies with varying degrees of success. We got some MVP prototypes.

I decided to turn to Fora Soft because I was impressed by their expertise in streaming technologies, the focus on quality, and their commitment to client’s success. 

What about your “before” and “after” of working with us?

Before working with Fora Soft, our development sprints were planned a little differently. I’d put together the requirements for design, but I wasn’t involved in user stories.

With Fora Soft we planned our sprints more effectively, they were more precise, the user stories were very clear.

The project manager provided a clear development plan about what is going to be achieved on certain days and certain milestones. So that part, I think, helped make the sprints more successful. The team was very involved in the whole planning process and provided a lot of great feedback as well.

Can you share any measurable figures? Like, profit, number of users, how many crashes?

In AppStore, we generated more positive reviews. The app was stabilized in many respects as well. We were facing a lot of issues with call recording and also with solo recording features. The team was able to fix some of those bugs and stabilize that experience for the community as well.

Were there any difficulties while developing the app?

We had an existing codebase, so it took some time for the team to familiarize themselves with the codebase.

You know, whenever there were challenges, the team did their best to overcome them, or they presented alternative options and solutions.

They communicated very effectively. In the beginning, it was just a matter of us getting used to each others’ communication styles and timelines. So, there were some miscommunications, some expectations from both ends that were a little bit challenging. Once we got to the standardized process, we had some clear expectations. The project ran pretty smoothly thereafter.

With TapeReal being quite an unusual project, communication is king. Determination and professionalism are very important, too. Rate us on those qualities, and maybe add some others?

In terms of communication, professionalism, and determination, nobody is perfect. I’d like to give you a score of 10, but obviously, we’re human beings. We make mistakes sometimes, but the main thing is that we learn from them, and we overcome them. In that respect, I really appreciated working with you guys. In terms of communication, you’re very proactive. The weekly status reports are really helpful, kinda gives you an idea of what was achieved, what’s planned for next week. You always communicated on Skype effectively. The professionalism also was always there.

The team treated the project like their own. They wanted to see the client succeed.

As for determination, I’d say that when there’s a technical challenge, the team enjoys trying to solve it. They put forth the best solution for it, which is great. If they’re unable to do it, you guys present the options or the alternatives for achieving the result in the end. In that respect, I also really appreciated the eye on the budget. Obviously, being a startup, we have limited funds. The team took that into consideration whenever they planned all their sprints, so I appreciate that, too.

Thanks! On behalf of the whole Fora Soft team, I wish you all the best with your project. I believe it has a great future.

Got a project idea of your own? Maybe, you’ve tried to make it come to fruition but were dissatisfied with the results? Contact us using the form on this website, and we’d be happy to review your case and offer the best solution.

We also started Instagram, so make sure to follow us there as we share a lot of information regarding projects. You can also DM us if that’s your preferred method of communication!

Categories
Uncategorized

Code refactoring in plain words: what is it and when it’s needed

what-does-code-refactoring-mean
Make your project better with code refactoring

You know that feeling when you build something for a long time, update and rework it, and this something turns out to be a complete mess? What if several people are working there, and each of them has their own understanding and vision? For example, you spend decades writing a book. The way you see things will inevitably change, you will get new assistants. As soon as the book is ready, you will certainly have to read it once again and get rid of plot mistakes, logic inconsistencies. Then correct grammar, and you’re good to go!

Refactoring is the same rework. Not of a book though, but of a program code. Let’s find out when we need it, and when we don’t.

What does it mean?

Code refactoring is the process of changing the code structure. It helps understand the program’s internal structure and its work principle. Refactoring is also there to fix problems. Nevertheless, refactoring doesn’t fix mistakes, rework functionality, or change external program behavior. Optimization does that, but it’s a topic for another article.

Why does your project need refactoring?

  • to make the code clearer

Going through the mountains of old code is difficult even for seasoned professionals, so of course, it’s very hard for new ones. Refactoring helps new programmers spend less time onboarding on a new project. If you pay for their time, it’s in your best interest for them to work faster. 

  • to speed up development, to make code simpler and faster.

To extend the functionality of the program it is better not to “mold” additional code on top of the old one, but to refactor it first. The task here is the same as that of drilling a tooth, when you get filling put on a decayed tooth. It’s to clean up the old code so that the new code fits better.

  • to improve the stability of the program.

The more concisely you express yourself, the easier and more understandable it is to listen to you. Just like people feel comfortable communicating with those who speak clearly, concisely, and to the point. In IT, programs that have the most concise code work better. 

When does your project need refactoring?

Signals to the customer that it is worth accepting the offer to refactor from the programmer:

  • The project has been going on for a long time, and the requirements have changed frequently
  • The program becomes less efficient: slow, often glitches
  • Mistakes in estimating the deadlines and increased cost of implementing new functionality.
  • The programmers have been changed
  • You are going to use this project for a long time, support it and modify it: the time spent on refactoring now will pay up. As in, further development will go faster, there will be fewer bugs. Spend 50 hours now, to save hundreds in the future.

Signals to the customer that they are offering to refactor for the sake of refactoring, and there is no benefit:

  • There are no serious or frequent problems with the program
  • The project has not been going on for a long time and the requirements have not changed.
  • You are not going to tune the project for a long time.

These are the characteristics programmers look for when suggesting refactoring. If you hear any of these, you can be sure that they are offering to refactor for a reason: 

  • Bulky classes (each class has to perform one function of its own);
  • Long methods, noodle-like controllers;
  • A large number of parameters in a method;
  • Lack of use of framework functions;
  • Bad naming of variables and functions;
  • Much duplicated code;
  • Lack of documentation.

But the best thing is, of course, to find programmers you trust 🙂 

When code refactoring is not needed?

  • When the code is so bad that it takes too long to support and implement new functionality
  • When the program is written on too outdated technologies which are no longer supported. Example: Flash is no longer supported by browsers. Whatever you do, how long you refactor it – nah, it won’t work.

What to do in these situations? This:

code-refactoring-do-not-needed
When a project can’t be saved by code refactoring

Begin writing from a scratch 🙂

“Can I skip refactoring altogether?”

When asking this question, first ask yourself: “is it possible to write without mistakes right away?”. The answer is no, because humans are not machines, and there will always be factors that reduce code quality. Refactoring, however, when used correctly, keeps the project code in good condition. It also minimizes the time spent on adding functionality and hiring new developers. This in turn opens the door to customer acquisition and marketing – much more useful than endlessly adding new team members because of missed development deadlines 🙂

Still have questions? Want to know more about refactoring? Send us a message and we will be happy to answer it for you! The feedback form is here. And we also launched Instagram, where we also answer DMs, share company news, project portfolios, and chat with you 🙂

Categories
Uncategorized

Why Russian software engineers are ranked #1 in Coursera’s research

Russia is on top of the IT world, while the country’s programmers are unparalleled when it comes to technology and data science.

Coursera, an American e-learning company, has released the second edition of their Global Skills Index 2020. The index consists of three main fields, and Russia has been named cutting-edge in two of the three: Technology and Data Science, while not only being ranked #1 in Europe but also in the entire world. The third field is Business, where Russia is #8 in Europe and #9 in the world.

So what is it that puts Russia so high at the top of the IT world, where the competition is as fierce nowadays as it’s never been before? 

To create the ranking, Coursera has used five components: their skill graph, skill score for country/industry/role, trending skills, correlations with third-party data, and top field of study & roles per selected skills.

First, let’s dive into the rankings themselves. We’ll first take a look at the Technology and Data Science Fields, and then check out the authors’ reasoning behind the Index.

Technology

Russia tops Belarus, Switzerland, Ukraine, and Finland – these countries are on the places from the 2nd to the 5th. 

The technology field consists of six subfields: Computer Networking, Databases, Human-Computer Interaction, Operating Systems, Software Engineering, Security Engineering. 

Russia was able to hit 100% in Databases, Operating Systems, and Software Engineering, and 98% in Security Engineering.

Data Science

In Data Science, Russia tops Switzerland, Belgium, Austria, and Finland – these countries are on the places from 2nd to the 5th.

The Data Science field consists of six subfields: Data Management, Data Visualization, Machine Learning, Math, Statistical Programming, and Statistics.

Russia got 100% in Statistical Programming, Math, and Data Management, as well as 98% in Machine Learning and Statistics.

Coursera’s comments

All of Russia’s tech and data science competencies are categorized as cutting-edge or competitive, with the Index showing that the country is unparalleled in software engineering, statistical programming, operating system, database, and data management skills.

They also went on and mentioned that Russia has been outperforming China and the US at international programming contests. 

Another important thing is that informatics is being taught as a compulsory subject in middle school. The skills students get then are later developed in higher education. For instance, Russia’s Higher School of Economics has announced the first top tier online master’s program in data science.

Coursera has also addressed Russia’s relatively low position on the Business Index, compared to the other two. They have, however, noted that the situation is looking to change as the Moscow and St. Petersburg’s startup scenes are constantly growing.

IT students from St. Petersburg win more contests than anyone else

We would like to add to the research from Coursera that universities from St. Petersburg, the city Fora Soft is located in, win International Collegiate Programming Contest more often than not just any city in the world, but any country. Students from St. Petersburg won the contest 11 times out of 27. The first two places are split among St. Petersburg Institute of Fine Mechanics and Optics and Saint Petersburg State University, with 7 and 4 victories respectively. Many graduates from these schools end up working here, at Fora Soft!

International Collegiate Programming Contest is a competition between IT-specialized universities. 50,000 students from 3000 universities in 111 countries have taken part in the contest. Overall, Russian students have won 13 contests out of 27 times it was held, and the country has been on a winning streak since 2012.

The results can be easily seen on the Contest’s Wikipedia page. If you want to dive deeper into the information about the winners, please, visit the official website of the contest.

This fact correlates well with Coursera’s mention of how many engineering graduates are produced by Russia – about 450,000, which is more than in any other country in the world.


We at Fora Soft are proud to announce that even in the region with such high competition, we are still the best! Check out our report on the top B2B development companies in Russia.

If you want to learn more about our know-how or order a project from us, feel free to get in touch with us via the Contact us form!

Categories
Uncategorized

Clutch named Fora Soft a top Russian B2B development company

At Fora Soft, we really know how to develop multimedia software. We’ve been doing it for years and amassed lots of experience! Our work has found appreciation in the latest Clutch rating.

Clutch is an American rating platform. They release geography-based top-company ratings every year, and this time we made it there. Fora Soft is on the 15th place out of 94 in the Development category.

Cool! Thanks to our clients – for the opportunities and for the kind references. – Nikolay Sapunov, Fora Soft CEO

To create the rating, Clutch took different things into consideration. For example, in order to determine the level of industry expertise, the following criteria are looked at:

  • Case studies
  • Awards that companies received
  • In-depth phone interviews with clients
  • Services offered
  • Social media presence

Fora soft is also able to deliver a high-quality product. To get to this conclusion, the rating platform checks how companies perform at the criteria mentioned below:

  • Brand reputation and visibility
  • Clients that a company works with
  • Services offered by a company
  • Reviews on Clutch

By the way, Fora Soft currently has 5 stars out of 5 from 9 reviews! Among many things, our clients highlited how we met their expectations, professionalism in development, clear and fast communication, and the fact that we always finished our projects in time.

The most focused company

We at Fora Soft know how to deliver high-quality services. One of the reasons for it is that we have been creating multimedia and video software for a long time – 15 years. Over this time, we’ve gained a lot of experience in the field, and we’ve never betrayed video and multimedia projects.

To check out the variety of the products in our niche that we have created, look no further than our portfolio!

With that being said, Clutch has put us into their Top Russian Custom Software Developers matrix that consists of top 15 leaders in the custom software development field in Russia. It seems like Fora Soft has been recognized as “the most focused” company in the region.

To learn more about us, check out our Clutch profile.

If you want us to estimate your project or learn tips and tricks that we use in the video & multimedia software development process, feel free to get in touch with us via the Contact us form!