A simple way to record your video and audio on browser and download it using Javascript

Videos have become very popular in our daily activities on the internet. Do you wonder how difficult a website needs to do to support video? It was tough for companies to bring Media technologies to their tech product since it required knowledge from both Media and Software development. But things had changed in the past few years; when WebRTC was introduced as an open standard for browsers and mobile devices, software developers can easily use its APIs without the need for advanced Media knowledge.

This post will introduce a simple example of recording Video and Audio via your browsers, then…


And could cause frustrations sometime if you don’t acknowledge it

Photo by Annie Spratt on Unsplash

It was an afternoon break. I met Justin, a colleague of mine, appearing a bit thoughtful in the pantry. He is a smart junior developer who did amazingly in our project.

“Hey Justin, how are you doing?”

“Not so good. Well, I can’t remember what I did besides meetings today.”

“Wow, what a busy meeting day, hah?”

“Not really.” Justin paused for a while. “I have three meetings. The longest one is for an hour. The other two are just half an hour for each. They are about 2 hours in total. …


We can apply them in other areas as well

Bao Khoi, my 3-year-old son, is a chatty kid. He loves to play and talks with others all the time. A year ago, he saw my wife and me as the whole world. He followed and obeyed us a hundred percent. As he grew up, he figured out many other exciting things and started to negotiate, argue, or even ignore my words. “The crisis of three years” is the common term people called kids at that age.

Keeping my son sleep in regular time was my focus. Many articles pointed out the benefit for kids if they have a consistent…


Instead of generating zip file and transfer it from your server, why not download data and zip them in your browsers?

I recently worked on a side project, which generates reports per user’s request. For each request, our backend will generate a report, upload it to Amazon S3 storage, and return its URL to the client. Since generating a report takes a while, the output files are stored and the server caches their URLs by request params. If a user orders the same thing, the backend will return the URL of the existing file.

A few days ago, I had a new requirement. Instead of individual files, I needed to download a zip file containing hundreds of reports. …


Attached the TTY for a command that required input, then detach it to run in the background

A few days ago, I created my own remote signer for the Tezos blockchain. For those who are not familiar with Tezos, a signer is a process that holds users’ credentials and signs all transactions on behalf of them. Thanks to Tezos’s docker repository, the setup has gone smoothly. What I have to do is pull the docker image, and run its command.

$ docker run --net=host tezos/tezos:carthagenet tezos-signer launch socket signer -a 127.0.0.1 -p 22000 -W

Everything went well in the test environment when I added a testing key in plain text. For production, I need to introduce some…


Note: I’ve published an open-source library go-cloudfunction-auth for this purpose. If you run into the same need, you can just go ahead with the library (see the sample here). In the scope of this post, I will talk more about how I investigate and resolve the problem.

A few weeks ago, I needed to integrate my backend with another service deployed on Cloud Function. Originally, I thought that this integration should be straight forward since my backend and the new service are both backed by Google’s services. Authenticating to Cloud Function should be straight forward using my google service accounts.


Sometimes, you may find currying hard to understand and wonder about its application. In this post, I will list some tips which may helpful for you

In this post, I assume that you already know Currying in Javascript. If you do not, I would recommend you to go through my previous post about currying prior to this post.

Curry in the right order

If you plan to use curried functions for function composition, remember to curry in the right order. The last primary input, which will be traveling along with the composition chain, should be put in the last function. …


Currying is sometimes hard to understand or confusing for actual usage. In this article, I will explain what it is and some use cases.

What is currying?

Currying is the process of transforming a function that takes multiple parameters into a sequence of functions, each of them taking one parameter at a time. It’s a special type of Partial Function Application. In pure functional programming language such as ML or Haskell, functions are defined in curried form by default. Let’s see how it work in Javascript.


// A normal JS function
const sum = (a, b) => a + b
sum(1, 2) //…

Especially when the Covid-19 pandemic is covering the world

Having all teammates located in the same office is the most efficient and productive way for work. However, you will find yourself required to work remotely from home in some cases, especially when the Covid-19 pandemic is covering the world. Below are my tips to boost your productivity.

Find a non-disruptive and quiet place

Concentration is the key to productivity. While working at home, there are a ton of possible interruptions that can distract you. Your spouse talks, baby cries, others watch your favorite tv shows, etc. Those kinds of activities can destroy your day. Living room, where other people do lots of their stuff, is…


Logging is an important part and has a long history developed for different types of applications. Software development changes rapidly from all of its aspects. Logging is not an exception. In the old days, enterprise application developers used to focus mostly on output location, rotation, and rollover. Nowadays, as we are moving to cloud deployment, logging also comes with its new standards.

According to The Twelve-Factor App, cloud native apps should log as event streams and never concern itself with routing or storage. The log will still be handled somewhere else by the cloud provider or another process. …

Ngô Việt Khánh Huy

Technical Leader, Mentor

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