Wednesday, March 04, 2026

Dua tipe riset: Curiosity-driven vs. Mission oriented

Ketika membaca panduan membuat proposal yang dibuat oleh JSPS, saya menemukan pembagian tipe riset yang sangat menarik: curiosity-driven vs. mission-oriented. Pembagian ini menurut saya lebih jelas daripada pembagian yang lain (misalnya pure vs applied research). Lebih jauh, Ichiro Kanazawa menjelaskan keduanya sebagai berikut.
If we try to identify the types of researches (to be granted), it is not promising for us to find any resolution or settlement which can be accepted from any point of views. Under such a circumstance, I think that the categorization (originally in English) proposed by JSPS, i.e. "curiosity-driven researches" and "mission-oriented researches", are relatively plain and practical. But once we try to translate those two English categories into Japanese, those might be "researches driven by curiosities" and "researches to fulfill the clearly defined missions". Then the first one, which could be easily be transformed into "researches to gratify researchers' curiosities", might then easily be recognized as researches which researchers carry on as their pleasures. Contrary to this case, the second one could be easily accepted because of their clear targets. Therefore, I prefer not to recommend to translate those into Japanese. Based on this situation, I would really like to warn that we must to foster "curiosity-driven researches", and I am seriously worrying that, if not, no young people of our next generation will be born, who should take over not only sciences in Japan, but also society itself in Japan. This is my principle standpoint regarding the Grant-in-Aid.
- Ichiro Kanazawa


JSPS membagi pendanaannya juga berdasarkan dua tipe riset di atas: competitive research fund dan basic funds. Lihat gambar di bawah ini untuk detailnya.

researh and fund
Gambar 1. Dua tipe riset dan pendanaannya [1]

 Gambar tersebut menjelaskan jenis pendanaan riset berdasarkan dua sudut pandang:
  • Sumbu atas (horizontal): jenis riset

    • Kiri: Riset ilmiah berbasis ide kreatif peneliti (curiosity-driven research).

    • Kanan: Riset dan pengembangan (R&D) berbasis kebijakan/target pemerintah (mission-oriented research).

  • Sumbu kiri (vertikal): jenis pendanaan

    • Atas: Dana kompetitif (dipilih melalui open call dan review).

    • Bawah: Dana dasar (dana rutin untuk operasional dan pengelolaan institusi).

Dari kombinasi ini, ada empat kategori utama:


1️⃣ Dana Kompetitif + Riset Berbasis Ide Peneliti

👉 Research supported by Grants-in-Aid for Scientific Research (Kakenhi)

Ini adalah skema hibah kompetitif untuk riset yang lahir dari ide peneliti sendiri.

  • Peneliti mengusulkan topik bebas.

  • Proposal diseleksi melalui proses review.

  • Fokus pada pengembangan ilmu pengetahuan dasar.

Contoh di Jepang: Kakenhi (Grant-in-Aid for Scientific Research).


2️⃣ Dana Kompetitif + Riset Berbasis Misi Pemerintah

👉 Research funded by open call sesuai misi kementerian

  • Pemerintah atau kementerian menentukan tema atau target tertentu.

  • Peneliti mengajukan proposal sesuai tema tersebut.

  • Tetap melalui seleksi kompetitif.

Biasanya terkait isu strategis seperti AI, energi, kesehatan, dll.


3️⃣ Dana Dasar + Riset Berbasis Ide Peneliti

👉 Riset di universitas dan institut riset antar-universitas

  • Dibiayai dari dana operasional rutin universitas.

  • Tidak selalu melalui kompetisi proposal besar.

  • Mendukung kebebasan akademik dan riset jangka panjang.


4️⃣ Dana Dasar + Riset Berbasis Misi Pemerintah

👉 Proyek nasional yang dipimpin pemerintah

  • Proyek strategis tingkat nasional.

  • Dipromosikan dan dikelola oleh pemerintah atau badan R&D nasional.

  • Biasanya berskala besar dan jangka panjang.


Inti Pesan Gambar

Sistem pendanaan riset dibagi berdasarkan:

  1. Siapa yang menentukan arah riset?

    • Peneliti (bottom-up)

    • Pemerintah/kebijakan (top-down)

  2. Bagaimana dana diberikan?

    • Kompetitif (melalui seleksi proposal)

    • Dana dasar (alokasi rutin institusi)


Dengan memahami peta ini, kita bisa melihat posisi suatu riset:
Apakah itu murni ide akademik? Apakah mengikuti agenda nasional? Apakah didanai oleh hibah kompetitif atau dana institusi?

Untuk peneliti di Jepang, memahami struktur ini penting agar bisa menentukan strategi pendanaan yang tepat untuk risetnya. Berbeda dengan Ichiro Kanazawa-sensei di atas, saya justru mengusulkan riset  "mission-oriented", khususnya untuk negara berkembang. Karena riset mission-oriented, jelas luaran dan tujuannya.  

Referensi: 
[1] Application Procedures for Grants-in-Aid for Scientific Research, KAKENHI-FY2025, Research Activity Start-up.

Saturday, February 14, 2026

Numpy Tingkat Lanjut

Ada beberapa perintah untuk menaikkan skill pemrograman Python Numpy (dan Scipy) ke level lanjut. Jika Anda (termasuk saya) paham dan bisa menginterpretasikan output perintah tersebut, maka kita sudah siap naik ke level Numpy selanjutnya.

1. Blok Memory (np.nbytes)

Sering kali kita hanya fokus pada bentuk (shape) array, namun melupakan "berat"nya. Perintah `np.nbytes` menginformasikan berapa banyak memori RAM yang sebenarnya kita pakai. Seseorang yang paham bahwa mengubah tipe data (dtype) dari float64 ke float32 bisa memangkas konsumsi memori hingga 50%, yang berarti mempercepat proses komputasi secara drastis. Di sini, kita belajar bahwa array bukan sekadar wadah angka, tetapi blok memori yang harus dikelola secara efisien. Contoh:
import numpy as np

a = np.zeros((1000, 1000), dtype=np.float64)
print(a.nbytes)
# Karena float64 = 8 byte, maka total memori:
# 1000 x 1000 x 8 byte = 8.000.000 byte (~8 MB)
Konsep penting:
  • Ukuran memori = jumlah elemen × ukuran tipe data.
  • Mengganti float64 ke float32 langsung mengurangi memori setengahnya.
  • Pada skala besar (misalnya deep learning atau audio processing), ini sangat krusial.
Jika kita tidak sadar ukuran memori, kita akan mudah "membunuh" RAM sendiri.

2. Stride

Jika nbytes adalah beratnya, maka stride adalah cara kita melangkah di atas memori tersebut. Stride menentukan berapa byte yang harus "diloncati" komputer untuk menuju ke elemen berikutnya di setiap dimensi. Stride adalah jarak (dalam byte) yang harus dilompati untuk berpindah ke elemen berikutnya pada setiap dimensi. Konsep inilah yang menjawab misteri mengapa operasi transpose pada array besar bisa sangat cepat. Karena Numpy tidak benar-benar memindahkan data di memori; ia hanya mengubah pola langkah (stride) tersebut. Memahami stride berarti memahami bagaimana komputer "melihat" data array secara linear di dalam RAM. Contoh:
a = np.arange(12).reshape(3, 4)
print(a.strides)
# Jika dtype=int64 (8 byte), kemungkinan output:
# (32, 8)
Artinya:
  • Untuk pindah ke baris berikutnya → lompat 32 byte (4 kolom × 8 byte).
  • Untuk pindah ke kolom berikutnya → lompat 8 byte.
Ini penting karena:
  • Operasi transpose (a.T) sering tidak membuat copy data, hanya mengubah stride.
  • Pemahaman stride membantu kita tahu kapan NumPy membuat copy atau hanya view.
  • Dalam optimasi performa, akses memori yang kontigu jauh lebih cepat.
Stride adalah jembatan antara konsep matematis array dan realitas fisik memori.

3. Broadcasting

Broadcasting adalah seni "mengada-ada" secara efisien. Broadcasting memungkinkan operasi antara array dengan ukuran yang berbeda tanpa perlu menyalin data secara fisik untuk menyamakan ukurannya. Misalnya, menjumlahkan array (3,3) dengan vektor (3,) secara otomatis. Seorang programmer biasa mungkin akan melakukan looping atau padding manual, tetapi level "Dewa" membiarkan Numpy melakukan broadcasting internal yang jauh lebih cepat karena terjadi di level C. Kita hemat memori, kita hemat waktu. Contoh:
a = np.array([[1], [2], [3]])
b = np.array([10, 20, 30])

c = a + b
Secara mental:
  • `a` bentuk (3,1)
  • `b` bentuk (3,)
  • NumPy "membentangkan" dimensi agar cocok → hasil (3,3)
Tanpa broadcasting, kita harus membuat array besar secara manual. Dengan broadcasting:
  • Kode lebih ringkas
  • Lebih hemat memori
  • Lebih cepat
Kunci memahami broadcasting:
  • Dimensi dibandingkan dari kanan ke kiri
  • Ukuran cocok jika sama atau salah satunya 1
Kalau ini sudah bisa kita prediksi tanpa menjalankan kode, berarti otak kita sudah mulai "NumPy-native".

4. Fancy Indexing

Fancy indexing adalah indexing menggunakan array atau list indeks. Berbeda dengan slicing biasa yang menghasilkan view (tampilan tanpa menyalin data), Fancy Indexing selalu menghasilkan copy (data baru). Memahami perbedaan ini krusial agar kita tidak membludakkan memori secara tidak sengaja saat memproses data besar. Contoh:
a = np.array([10, 20, 30, 40])
idx = [0, 2]
print(a[idx])
# Output: [10 30]
Perbedaan penting:
  • Slice (a[1:3]) → biasanya view (tidak copy)
  • Fancy indexing → selalu membuat copy
Ini sangat penting untuk:
  • Mengontrol penggunaan memori
  • Menghindari bug akibat modifikasi data yang tidak disengaja
Misalnya:
b = a[idx]
b[0] = 999
Di sini, a tidak akan berubah karena b adalah copy. Kalau kita tidak memahami ini, kita bisa salah kaprah saat debugging.

5. Vectorization

Vectorization adalah teknik menghilangkan loop eksplisit (perulangan for di Python) dan menggantinya dengan operasi array tunggal. Loop Python lambat karena interpretasi per-baris, namun operasi vektor Numpy terjadi di level kompilasi C/Fortran yang sangat cepat. Ketika kita memahami Broadcasting, Stride, dan Memory, Vectorization menjadi senjata utama untuk membuat kode berjalan 10x hingga 100x lebih kencang. Perulangan for (lambat):
result = []
for x in a:
    result.append(x * 2)
Vektorisasi (cepat):
result = a * 2
Kenapa jauh lebih cepat?
  • Loop Python berjalan di level interpreter (lambat)
  • Operasi NumPy berjalan di C (cepat)
  • Akses memori lebih efisien
Vectorization bukan sekadar "gaya", tapi filosofi berpikir: Berpikir dalam bentuk operasi matriks, bukan iterasi elemen.

Pesan Penting

Perlu diingat, bagian terpenting adalah memahami konsep array dengan perintah di atas pada tataran level otak kita, bukan simulasi komputer. Artinya, kita bisa menebak output dari komputer (simulasi/Python Numpy) dengan otak kita dan memahaminya. Bukan asal mensimulasikan array, meskipun bisa menebak hasilnya. Inilah yang terpenting: ilmu sebelum beramal.

Referensi

  1. https://shihchinw.github.io/2019/03/performance-tips-of-numpy-ndarray.html
  2. https://pythonspeed.com/articles/numpy-memory-footprint/

Saturday, January 31, 2026

Interval walking di musim dingin

Interval Walking Training (IWT), atau yang dikenal sebagai teknik berjalan interval, merupakan cara sederhana namun sangat efektif untuk meningkatkan kesehatan: cukup bergantian antara jalan cepat (fast walking) dan jalan lambat (slow walking) dalam sesi sekitar 30 menit, misalnya 5 menit cepat lalu 5 menit lambat secara bergiliran. Berbeda dengan jalan biasa, metode asal Jepang ini telah dibuktikan secara ilmiah melalui berbagai studi besar—melibatkan ribuan partisipan—mampu mengontrol kadar gula darah pada penderita diabetes, menurunkan tekanan darah, mengurangi risiko stroke, serta memperbaiki kondisi hipertensi, gejala depresi, kualitas tidur, dan kekuatan fisik secara keseluruhan, termasuk peningkatan kapasitas aerobik serta kekuatan otot kaki yang lebih unggul dibandingkan jalan konstan. Kini, IWT semakin populer di seluruh dunia dan bahkan mulai diintegrasikan ke dalam program rehabilitasi jantung (cardiac rehabilitation) dengan pemantauan jarak jauh, menjadikannya solusi praktis, aman, dan mudah diikuti bagi siapa saja yang ingin hidup lebih sehat tanpa peralatan mahal atau gym. 

Bagaimana memanfaatkan IWT pada musim dingin? 

Secara tidak sengaja, saya "menemukan" metode IWT dengan memanfaatkan dinginnya musim dingin. Setiap hari ketika bekerja, saya butuh berjalan kaki ke tempat sholat, berpindah gedung. Nah, di saat keluar dari gedung dengan udara yang lebih dingin daripada di dalam gedung, saya mempercepat jalan saya, dengan harapan segera masuk ke gedung lain sekaligus menambah pergerakan agar badan lebih hangat. Ketika masuk gedung lain, saya memperlambat kecepatan jalan saya. Ini yang saya maksud dengan IWT di musim dingin. Singkatnya:

  • Indoor: jalan lambat
  • Outdoor: jalan cepat
Tidak hanya di musim dingin, IWT indoor (lambat)-outdoor (cepat) tersebut juga tidak sengaja saya praktekkan di musim yang lain. Mungkin sudah terbiasa. Suatu ketika teman saya berkata kalau di luar gedung jalan saya cepat sekali.

Wednesday, January 07, 2026

Fix Japanese garbled character

 To fix garbled Japanese characters, use the `nkf` command. You need to install it first since it is usually not available by default in most Linux platforms. Then, using the following command to convert its encoding (detected by default) to a readable one.   

$ nkf old_file.txt > new_file.txt 
An example of output is below.
Japanese garbled character and its fixing

Tuesday, January 06, 2026

Permasalahan smartwach (The problem with smartwatch)

Saya menyukai memakai jam, dengannya saya bisa tahu waktu. Utamanya waktu untuk sholat dan melakukan aktivitas lainnya. Dengan adanya smartwatch, tidak hanya waktu saja informasi yang saya dapatkan, melainkan lama tidur, detak jantung, dan jumlah langkah (step tracker). Informasi itu sangat bermanfaat. Misalnya, dalam sehari saya menargetkan tidur tujuh jam, jika kurang dari itu (informasi dari smartwatch), saya bisa menambah jam tidur saya. Sebaliknya, jika siang/sore saya sudah tidur 1-2 jam, maka malamnya saya bisa tidur lebih singkat. 

Begitu juga untuk langkah kaki, kalau saya menargetkan tiap harinya harus berjalan 7000 langkah, jika kurang saya bisa menambahnya. Bahkan, saya bisa merangkum data-data itu, seperti yang saya jelaskan di sini: 

https://bagustris.blogspot.com/2021/05/data-jalan-kaki-tidur-dan-detak-jantung.html

Tapi ada satu permasalahan besar pada smartwatch. Apa itu? Sangat tidak masuk akal bagi saya jika saya harus mengisi daya (charge) smartwatch tersebut tiap minggu. Karenanya, dua smartwatch yang saya pakai sebelumnya berdaya tahan lama, Xiaomi Band 4 dan Amazfit Band 7. Keduanya memiliki rentang hidup (lifetime) selama kurang lebih tiga-empat minggu (21-28 hari) untuk sekali isi daya dengan mode power saver. 

Saat ini saya tidak memakai smartwatch lagi, hanya Casio yang memiliki fitur step tracker yang bisa bertahan 10 tahun tanpa diisi daya, cukup mengganti baterainya. Saat itu saya sedang dalam perjalanan selama tiga minggu, dan saya mengandalkan smartwatch untuk bisa bertahan sepanjang waktu itu. Ternyata kapasitasnya menurun, baru dua minggu sudah mati, dan saya tidak membawa kabel pengisian dayanya. Saat itu juga saya beralih ke jam tangan yang tidak perlu diisi daya, tahan lama, memiliki fitur step tracker, dual time, dan fitur-fitur lainnya.  

Related Posts Plugin for WordPress, Blogger...