Skip to content

Instantly share code, notes, and snippets.

View phanatagama's full-sized avatar
:octocat:

phanatagama

:octocat:
View GitHub Profile

Basic Android

1. Lifecycle (Daur Hidup)

Setiap komponen Android (Activity, Fragment, Service) memiliki daur hidup (lifecycle) yang terdefinisi dengan baik. Ini adalah serangkaian keadaan yang dilewati komponen dari saat dibuat hingga dihancurkan. Memahami lifecycle sangat penting untuk mengelola sumber daya, menyimpan data, dan memastikan aplikasi berjalan dengan baik. Beberapa metode lifecycle yang umum:

  • onCreate(): Dipanggil saat komponen pertama kali dibuat. Inisialisasi awal dilakukan di sini.
  • onStart(): Komponen menjadi terlihat oleh pengguna.
  • onResume(): Komponen aktif dan berinteraksi dengan pengguna.
  • onPause(): Komponen tidak lagi menjadi fokus utama (misal, aplikasi lain muncul di atasnya), tetapi masih terlihat.
@phanatagama
phanatagama / nginx_config.md
Created June 21, 2025 04:22
Nginx Rate Limit Configuration

Memahami Konfigurasi Dasar Rate Limit Nginx

Nginx menggunakan modul ngx_http_limit_req_module untuk mengimplementasikan rate limiting. Ada dua direktif utama yang akan kita gunakan:

  1. limit_req_zone: Direktif ini mendefinisikan "zona" atau area memori bersama tempat Nginx akan menyimpan status permintaan untuk setiap klien (misalnya, berdasarkan IP address). Ini harus diletakkan di dalam blok http.

    Sintaksnya:

limit_req_zone $variable zone=name:size rate=rate [sync];

@phanatagama
phanatagama / Race_Condition.md
Created June 10, 2025 19:01
Race Condition

Race Condition

"Race condition" adalah kondisi yang terjadi dalam sistem komputasi (terutama pada program multithreaded atau concurrent) ketika perilaku program bergantung pada urutan atau waktu eksekusi peristiwa yang tidak dapat dikontrol, yang mengarah pada hasil yang tidak terduga atau tidak konsisten.

Sederhananya, bayangkan ada beberapa "pembalap" (thread atau proses) yang mencoba mengakses dan memodifikasi "sumber daya bersama" (data, variabel, file, dll.) pada waktu yang hampir bersamaan. Jika tidak ada mekanisme yang mengatur siapa yang boleh mengakses dan memodifikasi sumber daya tersebut pada satu waktu, maka hasil akhir bisa menjadi kacau dan tidak dapat diprediksi.

Mengapa Race Condition Terjadi?

  • Concurrency: Terjadi ketika ada lebih dari satu thread atau proses yang berjalan secara bersamaan (atau tampak bersamaan karena penjadwalan CPU).
  • Shared Resources: Ada sumber daya (variabel global, file, database, UI state, dll.) yang dapat diakses dan dimodifikasi oleh multiple thread.
  • No
@phanatagama
phanatagama / SOLID_principle.md
Last active July 3, 2025 08:59
SOLID Principle

SOLID Principle

SOLID adalah singkatan dari lima prinsip dasar dalam pengembangan perangkat lunak berorientasi objek yang bertujuan untuk membuat desain yang lebih mudah dipahami, fleksibel, dan dapat dipelihara. Prinsip-prinsip ini diperkenalkan oleh Robert C. Martin (Uncle Bob).

Kelima prinsip tersebut adalah:

  1. Single Responsibility Principle (SRP)
  2. Open/Closed Principle (OCP)
  3. Liskov Substitution Principle (LSP)
  4. Interface Segregation Principle (ISP)
  5. Dependency Inversion Principle (DIP)
@phanatagama
phanatagama / Java_Gradle.md
Last active July 3, 2025 08:58
JDK vs JRE vs JVM vs Gradle

JDK vs JRE vs JVM vs Gradle

image

JDK

Java Development Kit merupakan paket yang berisi alat-alat untuk membangun program Java seperti javac (compiler), debugger, dan runtime(jre). Didalamnya terdapat JRE dan JVM.

JRE

Java Runtime Environment merupakan sebuah lingkungan/platform yang digunakan untuk menjalankan program Java. Didalamnya terdapat JVM.JRE berisi pustaka-pustaka yang diperlukan untuk menjalankan program JAVA tapi tidak memiliki alat seperti compiler atau debugger. Jika anda hanya ingin menjalankan program Java yang sudah dibuat sebelumnya, anda hanya perlu JRE (tanpa JDK).

JVM

@phanatagama
phanatagama / Docker.md
Created March 11, 2025 07:54
Getting Started with Docker

Getting Started with Docker

Quick tutorial for introduction to docker

  1. Create file with Dockerfile name in the root of your project (Example of Dockerfile is attached). Your directory structure should be like this:
└── your-app/
    ├── src/
    │   ├── component
    │   └── app.js
    ├── .env
 └── Dockerfile

Android Gradle Plugin (AGP)

Android Gradle Plugin (AGP) is android build tools that defined in the settings.gradle (new version)

plugins {
    id "dev.flutter.flutter-plugin-loader" version "1.0.0"
    id "com.android.application" version "7.3.1" apply false // this mean AGP version 7.3.1
    id "org.jetbrains.kotlin.android" version "2.1.0" apply false // this is mean the project use kotlin version 2.1.0 
    ...
}
@phanatagama
phanatagama / main.dart
Created September 14, 2023 18:51
deck card
// Copyright 2020 the Dart project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file.
import 'package:flutter/material.dart';
import 'package:flutter/physics.dart';
main() {
runApp(
MaterialApp(
@phanatagama
phanatagama / main.dart
Last active September 14, 2023 15:07
Stack Widget
import 'package:flutter/material.dart';
import 'dart:ui' as ui;
//Add this CustomPaint widget to the Widget Tree
const primaryColor = Color(0xFF40128B);
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
@phanatagama
phanatagama / QReader.py
Last active September 10, 2020 12:07
Decode QR Code Image
from PIL import Image
from pyzbar.pyzbar import decode
import sys
def decodeQR(file):
return decode(Image.open(file))[0][0].decode('utf-8')
def main():
try:
if len(sys.argv) > 1: