Dart: optimizing simultaneous data fetching
Let’s say we have a class ProductService , which is a singleton, like this: class ProductService { static ProductService? _instance; static ProductService get instance => _instance!; Future<List<Product>> fetchProducts() async { // Perform the HTTP request and transform the result } } In various places, we can call the method fetchProducts as: ProductService.instance.fetchProducts().then((v) { ... }); The problem is that this method might be called from various places simultaneously, including in multiple FutureBuilders for example, which will be wasting bandwidth and unnecessarily loading the server, and potentially slowing the app down....
Kenapa harus Passkey
Passkey terbilang cukup baru dengan diumumkannya baru tahun 2023 kemarin. Tetapi walaupun passkey masih terbilang baru, saya pribadi sangat menganjurkan untuk menggunakannya, atau untuk pengembang sistem untuk menerapkannya. Di tulisan ini kita akan coba melihat beberapa alasan kenapa kita sebaiknya mulai menggunakan / menerapkan passkey. Tahan terhadap phishing Keunggulan utama dari passkey adalah ketahanan terhadap phishing (phishing-resistant), dan phishing merupakan alasan utama dari munculnya passkey. Tidak jarang kita menjumpai kasus akun yang “di-hack....
How to use Flutter’s FutureBuilder properly
When developing a Flutter app, there might be a need to display data that is not instantly available. This data needs to be prepared asynchronously to prevent freezing of the app. And while the data is being prepared, we want to display an indicator so the user knows that their data is being loaded. Fortunately, the Flutter framework has FutureBuilder widget that fits well for this use case. The official documentation does provide explanations on how to use the FutureBuilder, but I find that turning it into a set of practical rules makes it easier to follow especially to avoid the misusages....
Modularizing an app
Why do we want modularize our apps? Jump to the last section of this article for the rationale. Imagine we have a two app projects. One of them is a task management app (tasker) while the other is a chat app (messenger). NOTE: we are using “MVC pattern” for the examples. Modularization can be applied to other “patterns.” We have this for the tasker app: . ├── models │ ├── user_model....
Pacing gowes berdasar analisis data
Beberapa waktu lalu aku gowes ke Klangon dari Prambanan secara non-stop. Oke. Mungkin hal tersebut bukan sesuatu yang impresif buat banyak pesepeda. Mungkin udah pada sering, mungkin ada yang bisa melakukannya dengan satu tangan, dsb. Tapi yang buatku, yang kulakukan kemaren itu menjadi sebuah pencapaian dan pembuktian. Setelah mulai gowes lagi, setelah beberapa waktu mendalami performa pergowesan, dan setelah menerapkan latian-latian untuk meningkatkan performa, aku ingin melakukan sebuah pembuktian. Pembuktian apakah, dengan kondisi performaku, dipadu dengan data-data yang bisa aku ambil dari beberapa sumber, aku bisa membuat planning pacing untuk sebuah gowes yang cukup akurat....
Containerized development environment
A few days ago I was asked by a team member about which Go version to install to work on the project. Then it hit me that I no longer cared about setting up my development environments, almost. Most of my development environments are replicable, disposable, and recreate-able within seconds. A few years back, when I was working on various projects, I realized that dealing with various versions of various tech stacks was a real pain....
Nama domain dengan karakter non-Latin
Seperti biasa, di sebuah grup di Telegram ada diskusi. Ada yang sedang mengerjakan proyek portal untuk beberapa negara Asia dan stuck. Kendala yang dihadapi adalah bagaimana untuk melokalisasi URL, yaitu menampilkan URL yang nama sub-domainnya menggunakan karakter non-Latin menyesuaikan nama tenant. Asumsi awalnya adalah bahwa semua ini bisa teratasi dengan UNICODE terutama UTF-8. Tetapi ternyata domain / hostname itu tidak mendukung UNICODE, karena hanya mendukung karakter-karakter Latin / ASCII. Saya teringat kita saya sering berurusan dengan handling alamat email (untuk login dsb), bahwa ada prosedur khusus untuk mencocokkan alamat email yang dimasukkan pengguna dengan apa yang ada di database....
Git reroot
So, you have a pet project in a private repository. It turns out that the project could work as an open source project. When you looked into its history, you find some stuff that must not go public. You want to delete those early commits and keep recent commits. Note that this article uses master as the default branch name. Recent repositories might use main for it. Note that the instructions provided in this document might destroy your working repository....
Dasar translasi object di game (ActionScript)
Di sini kita akan membahas seputar pergerakan object di dalam game yang digerakkan dengan cara mengklik titik tujuan kemana object harus bergerak. Cara input seperti ini banyak digunakan untuk game-game RTS dan RPG. Secara garis besar bisa kita jelaskan sebagai: menggerakkan object ke arah yang dituju. Cukup simpel. Tapi kalo menggampangkan, hasilnya tidak seperti yang kita harapkan; misal, ketika sampai di tujuan, object-nya bergerak bolak-balik atau posisi akhirnya tidak tepat....