Selling your product is probably way high up on the list of things you ought to do in order to have a sustainable product!

However, the deeper you dig into marketing the more things prop up — from generating mailing lists to identifying users as leads, customers, etc and then targeting campaigns to make free users to paid! Sure, you can hire a marketing expert to manage this and then use a bunch of disparate services to somehow intermingle this mess together, but that low-key defeats the point of paying for a third-party SaaS product — that’s the ease of…


In Early May 2021, our team started working on a concept game that blends RPG in a Japanese setting.

There are two major parts which from the get-go, we knew we’d have to nail (over and above actual gameplay) to stand a chance to have some market share in the up and coming VR games segment and that were

  1. Getting the game well optimized to run on stand-alone devices like the Oculus Quest 2 (i.e. hit a minimum frame rate of at least 90fps)
  2. Having the physics of the interactions feel realistic in VR

The former is a beast which…


Most fast-moving startups encounter this roadblock sooner or later in their dev cycle — “We’ve built a pretty functional product, but the product ain't pretty”. It’s just one of those costs that teams pay for moving quickly — overlooking the UI.

Our team over at P2P started to have the same conversation at around mid-February, but given the task was a giant one, we were on the edge. We finally bit the bullet in March & started the rehaul & here’s what we learned along the way —

All hands on deck isn’t necessarily the best approach from the get-go

A clean architecture dictates that you have a solid foundation. What everyone…


We have all run into this at some point or other, we wish to perform a whole bunch of tasks, and at the same time prevent some other tasks to happen until we have a response come back from the server.

Well, the easiest way to approach this would be to set a flag like “loading” to true in your reducer whenever you run an action that would later require some sort of a server response.

Here’s the deal — this is technically the lowest hanging solution, and on the surface, there is no such apparent drawback with this —…


We all have heard about the dreaded blue screen of death on windows but there’s a new “white screen of death” in town introduced in React 16, where now if you run across an unhandled error all your customer sees… is a white screen!

What throws developers off guard is the fact that on development builds we are shown the error so we just try to work towards fixing but for any off-case which we didn’t handle, react would not keep the last rendered state of the app! …


Entering the industry as a full-time SDE, I came in with the idea that the fact that I could write code during my internships well would translate well when I start writing code as a full-time SDE — and then Code reviews happened.

To this date, I remember my first ever PR had 50+ comments with multiple changes requested, this seems extremely negative at first because a lot of the changes requested seem extremely pedantic at the moment, but looking at it in hindsight I really feel, code reviews hands down are the best thing to happen to a junior…


Pre-requisites

Certificates

Your auto update doesn’t necessarily require certificates, but it’s honestly worthless to incorporate auto-updates without this — Especially in MacOS, you won’t be able to distribute your app at all, to begin with, leading to a situation where you build the app and auto-update your own app. Buy the certificates for the respective platforms. I’ll be assuming you have the certificates handy!

Some CI platform for releases

From a PR merger -> updating the desktop app at the client’s end there are a whole lot of things that need to happen in order to get this module working correctly. …


As of now, if you start looking up code to act as a boilerplate for an application that uses electron + any other JS Framework, you’d be bombarded with preload.js files attaching the remote module on the window object and then these projects use this remote module over on their frontend framework

But, why?

Because it’s convenient! You see, remote provides access to pretty much most of the APIs your application would need access to throughout its lifetime. As a result simply calling them like window.remote.SOME_API() is much much easier than the alternative!

Why is remote bad, then?

Argument 1 (And probably the most important one, in my opinion) — Main process cannot block waiting for renderer to return result

The alternative to remote, i.e. ipc calls, allow us…


Electron has been coming up as the choice of frame work to be used when porting a project which was formerly a web app to a desktop app (or adding additional functionalities when using the web app over on desktop — the case we handled at P2P.inc)

Problems with the default setup


voice-ping.com

The Epilogue

Finally — after going through the deprecated/non-optimal ways of approaching Noise reduction, let us use the ideal way now! AudioWorklets, it is!

Just as in Part 3, we will use RNNoise as our template for this walkthrough — however, this time around it’ll be running inside a worklet!

Remember the super high latency we faced in the scriptProcessor implementation? At a bufferSize of 16k for the scriptProcessor we were facing a latency of around a second or so! However, using the AudioWorklet API, the buffer size can go down to 128 frames, i.e. 2.667ms. We need to be…

Viral Tagdiwala

My work straddles around webRTC, noise reduction, and everything to do with audio over the web

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store