Tide Analysis
Penjelas pasang surut untuk delapan pelabuhan Indonesia dari data mentah, yang menolak kalau datanya terlalu pendek

- pelabuhan Indonesia mencakup keempat tipe pasang surut
- 8
- rekaman per jam tiap pelabuhan, Januari sampai Agustus 2026
- 212 hari
- galat amplitudo saat derau 15 cm
- < 1 cm
- library pasang surut, aljabar linear, atau grafik
- 0
Di halaman ini
Masalahnya
Pelajar dan pembaca yang ingin memahami pasang surut kebanyakan menemukan alat yang hanya mencari jawaban di tabel. Sebagian besar alat prediksi pasang surut mengambil konstanta yang sudah diterbitkan, yaitu angka yang menggambarkan tarikan Bulan dan Matahari terhadap air di suatu pantai, lalu menjumlahkannya menjadi kurva. Cara itu cepat, tetapi tidak membuktikan apa pun soal fisikanya dan tidak bisa dipakai di tempat yang konstantanya belum pernah diterbitkan.
Tide Analysis berangkat dari data muka laut per jam yang masih mentah dan menghitung sendiri konstanta itu, langsung di browser. Cara ini memperlihatkan hal yang disembunyikan alat berbasis tabel. Beberapa siklus pasang surut sangat berdekatan, sehingga butuh sekitar enam bulan data untuk memisahkannya. Kalau data dua minggu diminta memisahkannya, jawaban yang benar adalah "tidak bisa". Situs ini bukan untuk navigasi, dan menyebut Pushidrosal sebagai sumber resmi yang harus dipakai.
Yang saya bangun
Matematikanya diuji dengan data yang jawabannya sudah diketahui
Saya menulis sendiri perhitungan astronomi, pencocokan kurva, dan mesin prediksinya, sebagai fungsi biasa yang bisa diuji tanpa browser. Sebelum solver-nya ada, saya membuat generator yang menyusun data pasang surut buatan dari konstanta dan derau yang saya tentukan. Solver harus menemukan kembali konstanta itu. Dengan derau 15 cm di setiap pembacaan, semua amplitudo tetap kembali dengan selisih kurang dari satu sentimeter. Kalau salah satu tes ini gagal, yang salah adalah matematikanya, bukan toleransinya.
Aplikasi mengaku kalau datanya terlalu pendek
Sebelum mencocokkan kurva, aplikasi memeriksa apakah datanya cukup panjang untuk memisahkan setiap pasangan siklus. Kalau tidak, aplikasi menolak dan menyebut dua siklus yang bertabrakan serta berapa hari data yang dibutuhkan. Setiap hasil juga melaporkan angka kestabilan, dan grafik selalu menampilkan selisih antara prediksi dan pengamatan, tempat cuaca dan gelombang badai terlihat. Interaksi utamanya memungkinkan Anda menggeser panjang data dari 15 hari sampai sekitar enam bulan dan melihat siklus-siklus mulai bisa dipisahkan.
Saya memilih sensor yang masih merekam
Satu stasiun pasang surut bisa melaporkan beberapa sensor, dan sensor dengan data paling lengkap justru bisa rusak. Satu sensor radar di Benoa diam di −0,281 m selama tujuh bulan, sementara alat ukur di sebelahnya mencatat pasang 2,3 m. Sensor lain di Semarang punya lonjakan 9 meter yang membuatnya tampak paling aktif. Aturan yang saya pakai akhirnya memilih sensor dengan rentang khas terbesar dan memperlakukan lonjakan sebagai celah data. Setiap kasus ini sekarang menjadi tes.
Hasil yang mengejutkan tetap disimpan sebagai tes
Kehilangan 70% data dalam potongan yang tersebar hampir tidak mengganggu hasil. Kehilangan 70% yang sama dalam satu blok merusaknya. Temuan itu saya simpan sebagai tes. Panel kestabilan mencocokkan setiap data dalam empat potongan terpisah, untuk menunjukkan apakah sebuah konstanta milik pelabuhannya atau hanya milik bulan-bulan itu. Di Benoa, pasang bulan utama bergeser 9% antar-potongan dan pasang matahari utama bergeser 56%.
Data hanya dirilis kalau lisensinya jelas
Sebuah pemeriksaan berjalan sebelum setiap build dan menggagalkannya kalau ada sumber data yang lisensinya belum jelas. Dua dari tiga sumber yang sudah saya sambungkan, UHSLC dan BIG, dirilis dalam keadaan mati, karena ketentuan atribusi untuk stasiun Indonesia tidak pernah terkonfirmasi.
Hasilnya
Tide Analysis sudah live dalam bahasa Indonesia dan Inggris, dan berjalan sepenuhnya di browser tanpa server. Aplikasi ini memuat delapan pelabuhan Indonesia dari jaringan muka laut IOC, masing-masing berupa rekaman per jam selama 212 hari, dari 1 Januari sampai 1 Agustus 2026. Kedelapannya mencakup keempat tipe pasang surut, masing-masing diklasifikasikan dari hasil hitung stasiun itu sendiri. Anda bisa membandingkan metode modern dengan metode Admiralty klasik, dan menyalakan atau mematikan siklus untuk melihat ritme pasang purnama dan perbani dua mingguan muncul. Satu contoh lengkap menelusuri satu konstanta dari stempel waktu sampai hasil akhirnya. Saya membangunnya dalam tiga hari, 12 sampai 14 Agustus 2026.
Di balik layarDetail teknis untuk engineer
lib/astroberisi kalkulator argumen Doodson dan koreksi nodal;lib/tideberisi least-squares fit, prediksi, dan metode Admiralty. Fungsi biasa di atas typed array, tanpa React, DOM, jam, atau jaringan.- Kriteria Rayleigh menjadi gerbang setiap fit. Penolakan berbentuk terstruktur dan diuji dua arah. K1/P1 dan S2/K2 butuh sekitar 183 hari; 15 hari memisahkan enam dari sepuluh konstituen standar dan 29 hari memisahkan delapan.
- Setiap solve mengembalikan condition number (κ) di tipe hasilnya. Korelasi konstituen, leakage di frekuensi yang ditolak, dan coverage mask dilaporkan bersamanya.
- Aturan sensor: robust scale terbesar, dengan lonjakan dibuang menjadi celah yang dideklarasikan. Dua stack overflow pada input seukuran data nyata diperbaiki setelah tes sintetis lolos.
records:validatemencocokkan setiap sumber dengan manifest lisensi sebelum build. IOC, UHSLC, dan BIG masing-masing punya adapter ke satu bentukRecordinternal. UHSLC awalnya direncanakan aktif, tetapi data Indonesianya diatribusikan lewat BIG.- Penjelajah konstituen menjumlahkan ulang konstanta yang sudah di-fit dan tidak melakukan fit ulang. Fit ulang langsung akan membuat M2 menyerap tetangganya dan menyembunyikan beat pasang purnama-perbani antara M2 dan S2.
- Nilai ± setiap konstanta adalah satu standard error dengan asumsi derau per jam yang independen, padahal residu pasang surut melanggarnya. Di Benoa, ± untuk S2 sekitar 1% sementara pergeserannya antar-potongan 56%. M4 bergeser 81%.
- Tipe pasang surut memakai rasio Formzahl, dari 0,204 di Sabang sampai 3,486 di Kolinamil, pelabuhan Jakarta. Kolinamil kehilangan 740 jam data dan hanya mencakup 202,5 dari 212 hari, tetapi celahnya tersebar sehingga fit-nya tetap bersih. Grafiknya SVG buatan sendiri, tanpa library grafik, aljabar linear, atau pasang surut. Dua dependensi runtime (Next.js, React).
- Static export ke GitHub Pages, dengan gerbang tes dan pemeriksaan lisensi. 377 tes di 24 berkas. Sekitar 12.500 baris TypeScript, 88 commit.
Tangkapan layar
Sedang merekrut, atau membangun hal serupa?
Saya terbuka untuk posisi full-time dan proyek freelance tertentu.