Friday, July 10, 2026

Debian 13: installing mysql-workbench-community

Download apt configuration from https://dev.mysql.com/downloads/repo/apt/ , current version is mysql-apt-config_0.8.39-1_all.deb

here is configuration for non cluster only target to mysql workbench

  • MySql Server & Cluster: mysql 8.4 lts
  • MySql Connector: non/disable -> enable if you need MySql connector e.g. jConnector

# dpkg -i mysql-apt-config_0.8.39-1_all.deb 
Selecting previously unselected package mysql-apt-config.
(Reading database ... 232081 files and directories currently installed.)
Preparing to unpack mysql-apt-config_0.8.39-1_all.deb ...
Unpacking mysql-apt-config (0.8.39-1) ...
Setting up mysql-apt-config (0.8.39-1) ...

mysql-workbench-community is not available for Debian 13  

credit: online html escape https://www.freeformatter.com/html-escape.html#before-output 

Thursday, June 25, 2026

Menelpon keluar negeri berdasarkan operator dan NATO phonetic alphabet

Menelpon keluar negeri berdasarkan operator 

  1.  telkomsel/by.u
    1. 01017+[nomor_lengkap] tarif Rp. 350 per menit terbatas negara: Australia, Bangladesh, Brunei Darussalam, China, Hong Kong, India, Malaysia, Singapura, Korea Selatan, Thailand, dan Amerika Serikat/Kanada (tidak termasuk destinasi Hawaii)
    2. 007+[nomor_lengkap] tarif Rp. 4.550 per menit
  2. indosat im3
    1. 001+[nomor_lengkap] atau 008+[nomor_lengkap] tarif cek https://im3.id/portal/id/psinternationalcallandsms contoh australia Rp. 5.000 per menit.
    2. 01016+[nomor_lengkap] tarif cek https://im3.id/portal/id/psinternationalcallandsms contoh australia Rp. 1.500 per menit.
  3. xl (tidak diinformasikan secara resmi di xl.co.id
    • 01000+[nomor_lengkap] atau 01017 +[nomor_lengkap], memerlukan paket Nelpon Internasional XL
  4. three/3
    1. 001+[nomor_lengkap] atau 008+[nomor_lengkap], memerlukan paket Paket Nelpon Luar Negeri, contoh australia Rp. 7.350 per menit 
    2. 01016+[nomor_lengkap], memerlukan paket Paket Nelpon Luar Negeri, contoh australia Rp. 1.500 per menit.  
    3. paket yang tersedia https://tri.co.id/nelpon-luar-negeri
      1. Nelpon Luar Negeri     30     1 Hari     30 Menit
      2. Nelpon Luar Negeri     100     30 Hari     100 Menit 

 

NATO phonetic alphabet:

  1. A – Alfa
  2. B – Bravo
  3. C – Charlie
  4. D – Delta
  5. E – Echo
  6. F – Foxtrot
  7. G – Golf
  8. H – Hotel
  9. I – India
  10. J – Juliett
  11. K – Kilo
  12. L – Lima
  13. M – Mike
  14. N – November
  15. O – Oscar
  16. P – Papa
  17. Q – Quebec
  18. R – Romeo
  19. S – Sierra
  20. T – Tango
  21. U – Uniform
  22. V – Victor
  23. W – Whiskey
  24. X – X-ray
  25. Y – Yankee
  26. Z – Zulu  

 

ETLE dan stnk terblokir saat perpanjangan

Sebelum perpanjangan stnk coba cek dulu, apakah kendaraan di blok terkait etle (Electronic Traffic Law Enforcement). jangan sampai di samsat baru buka blokiran ya, lama banget. 

Siapkan 

  1. Nomor kendaraan
  2. Nomor kerangka kendaraan
  3. Nomor mesin kendaraan

Buka internet melalui browser lalu cari "ETLE PMJ" melalui mesin pencari. ini link-nya https://etle-pmj.id/ , namun bisa berubah tergantung kondisi.

Masuk menu cek data, dan masukan data yang telah disiapkan. bila kendaraan kamu terkena etle, pastikan itu memang kendaraan milik anda. bila benar anda bisa melakukan konfirmasi. bila tidak benar anda bisa menyanggahnya.

Bila kendaraan terkena etle saat konfirmasi anda akan diminta melengkapi data pribadi untuk dapat dihubungi. berikan data yang benar. Setelah itu anda akan menerima surat perintah bayar dengan nomor "BRIVA" yang berupa 15 angka. Lakukan deposit denda melalui bank bri atau aplikasi bri. Dari bank lain, jumlah tidak muncul. setelah pembayaran, blokir stnk terbuka. 

Note: pastikan anda telah membayar semua pelanggaran yang tertangkap etle.

Setelah dibayar, akan muncul konfirmasi dan anda akan menerima pesan tanggal sidang dan "No Blanko Tilang". 

melalui browser cari "ETLE kejaksaan" atau https://tilang.kejaksaan.go.id/be/ untuk mengecek sidang anda.

setelah tanggal sidang anda bisa melihat besaran denda tilang yang dibebankan ke anda. bisa kurang atau lebih bayar tergantung putusan sidang.  bila lebih bayar, ada 2 pilihan, pengambilan tunai atau transfer ke bank bri.

Wednesday, June 17, 2026

Android java: migrate build to gradle version catalog

create a new gradle catalog, project -> gradle -> new -> Version Catalog, it will prompt "lib" and press enter.

fill libs.version.toml with agp version


[versions]
agp = "9.2.1"
appcompat = "1.7.1"
material = "1.14.0"
constraintlayout = "2.2.1"
junit = "4.13.2"
androidx-junit = "1.3.0"
espresso-core = "3.7.0"
play-services-ads-lite = "25.0.0"

[libraries]
appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" }
material = { module = "com.google.android.material:material", version.ref = "material" }
constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "constraintlayout" }

junit4 = { module = "junit:junit", version.ref = "junit" }
androidx-junit = { module = "androidx.test.ext:junit", version.ref = "androidx-junit" }
espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "espresso-core" }

play-services-ads-lite = { module = "com.google.android.gms:play-services-ads-lite", version.ref = "play-services-ads-lite" }

[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }

agp in [version] and [plugin] must exist.

edit build.gradle.kts

change


dependencies {

    implementation("androidx.appcompat:appcompat:1.7.0")
    implementation("com.google.android.material:material:1.12.0")
    implementation("androidx.constraintlayout:constraintlayout:2.1.4")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.2.1")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1")
    implementation("com.google.android.gms:play-services-ads-lite:23.3.0")
}

 to


dependencies {

    implementation(libs.appcompat)
    implementation(libs.material)
    implementation(libs.constraintlayout)

    implementation(libs.play.services.ads.lite)

    testImplementation(libs.junit4)
    androidTestImplementation(libs.androidx.junit)
    androidTestImplementation(libs.espresso.core)
}

Synchronize project and change


plugins {
    id("com.android.application")
}

to


plugins {
    alias(libs.plugins.android.application)
} 



Wednesday, June 10, 2026

Java: reading config.conf file

example config.conf


# http and https ports configuration
http_port = 48001
https_port = 48001

# printer port
printer_port=/dev/rfcomm0
# printer size
printer_size=80mm

java code


    // configuration file config.conf
    static final String linux_file_path = "/etc/dddtescpos/config.conf";
    static final String file_path = "./config.conf";

    public static String printer_port = null;
    public static String printer_size = null;
    
    public static int http_port = -1;
    public static int https_port = -1;
    
    public static void readConfig() {
        Path configFile = Paths.get(linux_file_path);
        
        if (Files.notExists(configFile)) {
            configFile = Paths.get(file_path);
        }
        
        // comment in config file will # or !
        Properties props = new Properties();

        try (InputStream input = Files.newInputStream(configFile)) {
            props.load(input);
        
            printer_port = props.getProperty("printer_port");
            printer_size = props.getProperty("printer_size");
            if (printer_size == null || printer_size.isBlank()) {
                printer_size = "80mm";   // default
            } else {
                printer_size = printer_size.trim().toLowerCase();

                if (!printer_size.equals("58mm")
                        && !printer_size.equals("80mm")) {
                    printer_size = "80mm";   // default for invalid value
                }
            }


            String tmpPort = props.getProperty("http_port","48001");
            try {
                int intTmpPort = Integer.parseInt(tmpPort); 
                if (intTmpPort<48000 || intTmpPort>65535)
                    intTmpPort = 48001;
                    http_port = intTmpPort;
            } catch (NumberFormatException ex) {
                http_port = 48001;
            }
            tmpPort = props.getProperty("https_port","48002");
            try {
                int intTmpPort = Integer.parseInt(tmpPort); 
                if (intTmpPort<48000 || intTmpPort>65535)
                    intTmpPort = 48002;
                https_port = intTmpPort;
            } catch (NumberFormatException ex) {
                https_port = 48002;
            }
            // if ports hava equal value, set default
            if (http_port == https_port) {
                http_port = 48001;
                https_port = 48002;
            }
        } catch (IOException ex) {
            System.out.println("No Configuration file found");
            http_port = 48001;
            https_port = 48002;            
        }
        
    }