Disclaimer: Trading results in capital loss. Do your own due diligence before taking any action. Trade what you can afford to lose.


If we’re not in Vietnam, I think we all still work from home at the moment due to COVID-19. A few months ago, I watched a video on youtube in which the author emphasizes working home is a rare opportunity to improve ourselves, you need to pick up a skill where it helps you through economic downturn. I’ve started learning how to trade Forex since then. Recently, I found a trading method where we just buy at green…

I had a chance to travel back to Vietnam a few months ago. My family, my best friend and I decided to go to Phu Quoc for our vacations. While visited the island, I came up with an idea of building a new app.

Our group arrived at the resort

Getting the idea

My new app Phu Quoc Island is designed to help you relax, focus and sleep better. You can take a trip to this tropical island anywhere you are, whenever you like and listen to a guided meditation or experience the island by yourself.

A couple of days ago I completed the sale of Live Message. In this article, I wanted to share what I built, why I decided to sell the project.

Why I started a side project?

When I start a side project, I usually have a clear reason to do so. The reasons can vary, from wanting to learn a new technology or to solve a problem I’m experiencing.

Live Message had a bit of an unusual start. Back in 2017, when Samsung released Note 8, Live Message, which is exclusive for Note series, really caught my attention.

Aww, that looks so cool.

A few weeks ago, Facebook released a new feature. When I tapped into Messenger, pretty soon my attention went from the actual conversations to the funky gradient effect of the message bubbles containing them. This is a new feature of Messenger, which allows you to choose a gradient instead of a plain color for the background of the chat messages. I was so amazed. Ever since then I have always asked myself how Facebook engineers made that. …

One of the challenge is to reserve image quality when exporting a live message. Due to gif limitation, we planned to adopt APNG, WEBP. However, they are not widely used in most popular messenger apps. The team ended up going with mp4 format.


With an existing infrastructure, we already have an Encoder, whose method addFrame(bitmap) gets called every 33ms, converts a list of bitmaps to a gif backed by a native gif encoder engine. To support video, we only need to add a video encoder engine. Unfortunately, we weren’t able to find a turnkey solution. …

Our mission is to embellish the way people vent their feelings to the one they care through message. From “LOL” to “I love you,” you can express yourself in countless visual ways when you’re conversing with your friends. Today, we’re introducing the new UI overhaul and new brushes on Live Message.

Gradient framework

As our engineers have overcome their technical debt, the new render architecture allows us more artistic freedom. With that being said, instead of a lame solid color background previously, we now can replace that with a vibrant background either gradient or animated GIFs

Background color, photo chooser

We bring background and photo choosers…

After having watched Google I/O 2018, we decided to invest in supporting Instant App. In this article, we will cover the experience how we went from a monolithic project to multi-modules project and benefits Instant App brings to us.

Live Message and our instant app concept

Before we take a deep dive, we’ll tell you something about our product. Use Live Message feature to draw your own emojis or write handwritten messages on photos then make animated GIFs. Technically speaking, what drawn on the canvas is recorded and play back. …

At Sentio, we reach to the point that we have to support our hardware, that is we update firmware from our app. All the native code was compiled with gradle successfully on my machine until I pushed. A question popped up, how it would work on CI since local.properties is ignored from git.

With that being said, the first error message appeared on CI

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':firmware'.
> NDK not configured.

After having googled, CirleCI 2.0 currently doesn’t have pre-built NDK which means it’s required to download…

TextView is one of the most complex widget in the entire framework. It is mostly responsible for displaying text on Android — other widgets also directly or indirectly inherit TextView such as Button, EditText... Its internal implementation is quite complex, the number of lines on the code alone, android-27 in TextView full 11968 lines. In addition, TextView’s operations are very heavy — for example, the setText method needs to set SpanWatcher, allocate a new Spannable, re-create Layout. This article will cover pre-rendering technique in order to improve TextView performance.

TextView basic principle

Every images displayed on Android are backed by Drawable . If…

Why do we need rich text?

While working on UI tasks, we may often encounter some complex texts with various fonts, colors, styles displayed inline. Our first reaction to this is use multiple TextViews to achieve — each TextView sets different styles. We end up adding more weights to the view hierarchy. It becomes challenging when trying to render rich content which contains complicated views — a lot of text and images in RecyclerView. Fortunately, Android has fairly extensive support for formatted text lying in those packages android.text. *; android.text.style. *However, some of this rich text support has been shrouded in mystery. …

Daniel Lee

Intraday Specialist

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