-
When Player Plays It Too Safe: Unlocking Hidden HD Tracks on Android
It started with a simple request from the content team: “Let’s push 50 FPS for videos, smoother playback, better experience.” Reasonable enough. But once we rolled it out, a lot of users started complains about the videos stuck at 480p on multiple mid-range devices. No errors. No crashes. Just lower quality than expected. The playback…
-
Mastering Engineering Habits for Growth
It’s my turn for our team’s mini tech talk this week. You know the drill someone’s gotta bring a topic that’s interesting enough to keep people from checking social media halfway through. I wanted to talk about something deeper than just tools or frameworks. Something that actually sticks.Coincidentally, I’m in the middle of finishing Better Than…
-
When Smart People Clash
What Engineering Taught Me About NVC When Smart People Clash: What Engineering Taught Me About NVC My coworker gave a short tech talk today not about Kotlin or CI pipelines, but about Nonviolent Communication. And it hit me. Hard. Because conflict in teams is one of those things we all quietly struggle with. No matter how good…
-
Migrate to Grafana Oncall
TL’DR We are happy with OpsGenie. But to reduce our cost, we are migrating off from OpsGenie to Grafana oncall in just 4 months. Overall, we have a positive experience and feel happy with the decision. There are some obstacles that we need to plan around but all is good. On a peaceful morning in…
-
Multi-key DRM: A balance between security and accessibility
This article provides brief technical documentation on how a security mechanism known as multi-key DRM operates, which is also implemented in Vidio. Multi-key DRM is a security method for media streaming that involves encrypting separate video track groups (such as HD and SD) with different DRM keys and security levels. This approach enhances flexibility by…
-
Streamline Your UI Testing Efforts with Maestro
Introduction Modern software development needs test automation to handle complex user interfaces (UIs) and fast release cycles. Manual testing can’t keep up with the growing complexity of UIs, so automation is essential for reliable and efficient software delivery. Challenges in Current UI Automation Implementation The current state of our UI automation implementation presents several challenges…
-
Refactoring Google Payment
Simplifying Google Payment Tests with FakeGooglePurchaseServer: Power of Abstraction Testing in-app purchases involving Google Payments can be a nightmare. Current methods require extensive setup, including stubbing requests for various response scenarios from the Google Payment server. This can make tests difficult to read and maintain let!(:google_sku) { ‘com.vidio.nr.platinum.7’ }let!(:partner_product) { create :partner_product, product_catalog: non_recurring_product_catalog, partner:…
-
Version Catalogs Migration: Scalable Dependencies Management
Introductions This article demonstrates how to migrate our dependencies management from deps.gradle to version catalog toml, a new feature in Gradle 7.4. We decided to implement this feature after upgrading our project to Gradle 8.1.2. Version catalogs enable us to add and maintain dependencies and plugins in a scalable way, by creating a central list…
-
Create ML Workflows with MLflow and Docker
MLflow Introduction MLflow is a widely used tool known for managing the life cycle of machine learning workflows for MLOps or data scientist. MLflow has several main components: Tracking: Record and query experiments: code, data, config, and results Project: Package data science code in a format to reproduce runs on any platform Model: Deploy machine…
-
Panduan Migrasi Services ke Kubernetes (Bagian 3)
Panduan ini berasal dari dokumentasi internal untuk tim engineering di Vidio, yang kami rasa mungkin berguna untuk dibagikan kepada komunitas yang lebih luas. Kami sadari ada background / context yang kurang lengkap yang kami masih belum sempat menambahkannya. Bagian 3 ini merupakan bagian akhir dari artikel tentang panduan migrasi services ke kubernetes. Diawali dengan penjelasan…