MEMS dan Semester Pertama di Aalto

Sebentar lagi saya akan menyelesaikan semester pertama di Aalto University dalam studi S2 saya di program Smart Systems Integrated Solutions (SSIs) bagian dari Erasmus+. Semester depan saya akan melanjutkan studi di University of South Eastern Norway. Kesamaan Aalto dan USN adalah posisinya sebagai anggota laboratorium mikro-nano di negaranya masing-masing, di mana anggotanya adalah kelompok industri dan universitas. Secara khusus, kami di Aalto University mendapatkan ilmu terkini dari pakar industri di bidang microelectromechanical systems (MEMS) dan dasar-dasar perekayasaan (engineering) untuk bidang teknik elektro, seperti elektronika berkelanjutan (Sustainable Electronics), rancangan untuk reliabilitas (Design for Reliability), material dan integrasi mikrosistem (Materials and Microsystems Integration), dan Translational Engineering Forum.

Produk elektronik terkini seperti telepon seluler pintar (smartphone) adalah akumulasi dari teknologi yang sudah dikembangkan, salah satunya adalah MEMS. Melalui sensor dan aktuator MEMS, kamera, mikrofon, accelerometer, dan gyroscope dapat diproduksi dengan skala besar dan ukuran yang kecil sehingga dapat diintegrasikan dalam satu produk. Saya mendapatkan informasi tentang MEMS saat kuliah di UI, oleh Dr. Agus Tamsir (Alm.) kepala laboratorium elektronika, saat mengambil kelas MEMS yang diampu beliau. Bidang ini sangat menarik dan membuka angan-angan saya untuk belajar lebih lanjut, beliau juga menyampaikan bahwa jarang sekali MEMS diajarkan di level S1, tetapi kami boleh melihat beberapa dasar dan konsep teoritis di balik MEMS. Hal ini sangat berguna untuk membantu transisi saya belajar MEMS di Aalto.

Belajar MEMS di Aalto, saya banyak mendengarkan langsung kuliah tamu dari pakar industri seperti dari Murata Finlandia, VTT, dan Vaisala. Ternyata pengembangan MEMS di Finlandia yang dipimpin oleh kelompok industri mikro-nano ini luar biasa, Namun, pelajaran di sini lebih komprehensif, wajar karena merupakan kelas di level S2, kami diberi tugas dan arahan untuk mencoba merancang desain MEMS accelerometer sederhana, probing exercise, yang di fasilitasi oleh Murata. Saat mempelajari dan merancang perangkat ini, kami pun dipersilakan mengontak langsung dosen tamu tersebut melalui e-mail. Menurut saya, kelas MEMS ini adalah salah satu kelas berkesan, di mana kita bisa belajar dari pemain besar di bidang MEMS, mendapat bimbingan langsung dari mereka, untuk membantu pemahaman konsep ini.

Akhir kata, menurut saya program SSIs terutama kelas di Aalto University sangat menarik. Kalau ada yang tertarik untuk belajar tentang smart systems, ataupun MEMS, saya sangat merekomendasikan program ini. Pengalaman belajar dari pakar, rekan mahasiswa yang telah dipilih secara ketat, dan beasiswa untuk studi di tiga negara merupakan pengalaman sekali seumur hidup.

Depression, Coping Mechanism, and Mental Health

This is a short story on my experience dealing with depression. Please take care of yourself if you’re feeling down before you implode, or explode.

I have a childhood trauma and problem that’s been holding me back for a long time. I have been choosing to ignore it for the past years. I was so good at hiding this, I have maintained a front of being a goody-two-shoes throughout. Persevering, suppressing my emotions, were the ideal solution to me at that time. While I hate to use the term toxic masculinity, I acknowledge that there were notion in traditional masculinity where showing emotion = showing weakness, and this is definitely not true.

One of the reasons that my depression doesn’t seem to affect me in larger part of my student life was because one of my coping mechanism is learning a new hobby, or studying subjects that I love. It may be weird to mention that I may find deriving formulas to be a good way to unwind, a good challenge as an escape from harsh reality. I am not necessarily good at this but I do see this as a fun thing to do, just like how I was very bad at Counter Strike (the online game), but kept on doing it until I was half-decent.

In a traditional Batak culture, I would’ve been the one who would receive all the attention, spoiled rotten, and all that you would expect from a patriarchal culture. However, that was not the case for me and I’ve felt like I wasn’t so loved, unless I’m sick. Although, I would say that I’m probably not necessarily smarter than my sister, but my coping mechanism and my timid personality did help me go through the childhood trauma way better. I could see my sister crumbling in her teenage years, but I had no such breakdown, or so I thought.

Growing up, I was more of like a black sheep, but in another perspective, I was somehow considered the exemplary sibling. Truth was, I’ve never felt loved as I mentioned, except my sick days. Long story short, I graduated from college, started working, I love what I do, but it would’ve been a lie if I said it was an easy work. I could learn a lot from my job and I was able to eventually got admitted to study abroad. Now, I admit, this doesn’t sound like a story of someone who claimed had suffered from depression.

The childhood trauma of not being loved, being abandoned, was actually never healed during my teenage years. I have considered myself to be a helpful person, but when depression starts seeping, I’ve felt so down that I was unable to do anything productive and in times, became destructive to myself, and maybe to others. I imploded from all the pressure that I had to go through, preparation to move to Finland, family drama, and finishing up my work before I leave. I imploded.

My sister was very helpful during my rock bottom, I was able to talk to a therapist, and I was able to pin-point my issue. I was glad in the end that I have addressed my mental health, I was stretching myself way too thin, trying to help everyone and do everything in my power, but I forgot to take care of myself. Fueled by the deep-rooted trauma, feeling unloved, unappreciated, it got the best of me. Although there are still circumstances that I still regret and despise to this day, I am glad that I was able to get help sooner than later.

I had a big responsibility in my head before I go, but I find it okay to admit that I weren’t up to it. However, I find some joy that while I was suffering under this depression, I find solace in learning something new: remote sensing and GIS. I don’t know if I will ever use this thing I did as a hobby that helped me through the depression phase. But, last week I received a notification that my paper, a result of my work throughout the process, was accepted and I can do a small revision for the figure, but otherwise it’s fine. This paper will forever be a monument of how I tried to overcome my depression and it’s okay to have your own coping mechanism.

I know that this will be an on-going process, I will learn to forgive and I think my time away from the problems have given me a chance to re-think and plenty to work with myself. Time will heal everything, and I am certain that living alone will be a good part of my healing process. First and foremost, I will make sure that I am in a good mental health, going forward with my study and research.

This blog post was not written as a motivation of some sort, but was to tell a story of how I am fighting back against my depression, feeling of inadequacies, and how I plan on going forward. If you feel down and it’s not going away, please seek help, it would be a very good idea.

Kondisi Polusi Udara di Indonesia

Di tengah PPKM, kondisi udara di Jakarta tidak lebih baik dari sebelumnya. Bergantinya musim dan berkurangnya hujan menyebabkan partikel-partikel pencemar udara terakumulasi. Sudah banyak studi yang menunjukkan bahwa PM2.5 berbahaya untuk kesehatan masyarakat, apalagi saat adanya pandemi COVID-19 yang menyerang sistem pernapasan. Ada juga studi yang mencoba menghubungkan konsentrasi PM2.5 di area urban berpopulasi tinggi sebagai salah satu mode penularan virus SARS-CoV-2.

Untuk memantau kondisi atmosfer, Uni Eropa melalui misi Copernicus mempunyai satelit Sentinel-5P untuk memantau kondisi atmosfer dan berbagai gas pencemar. Data Sentinel-5P ini juga dipakai oleh ECMWF untuk menghasilkan data model kondisi atmosfer, salah satunya data PM2.5. Model numerik untuk PM2.5 dapat dibuat menggunakan data Aerosol Optical Depth dan data stasiun pemantauan PM2.5.

Sebelumnya di sekitaran Jakarta ada tiga sensor PM2.5, satu milik BMKG di Kemayoran, dua dimiliki oleh Kedubes Amerika Serikat, sekarang Nafas Jakarta merupakan penyedia data PM2.5 terbesar di Jakarta. Inisiatif baik seperti ini, mungkin dapat direplikasi di daerah-daerah lainnya, mungkin di tempat yang rentan terhadap kebakaran lahan gambut di Sumatra maupun Kalimantan.

Gambar 1. ECMWF Copernicus Atmosphere Monitoring Service PM2.5 Data in Indonesia (https://indonesian-atmosphere.herokuapp.com)

Sementara inisiatif urun daya data polusi udara mulai berkembang, saya mencoba membuat sebuah aplikasi sederhana, mengambil data dari ECMWF CAMS dan menampilkan ke sebuah peta sederhana. Saya menambahkan data pembangkit listrik tenaga uap (batu bara) dan data PM2.5. Semoga percobaan singkat ini dapat bermanfaat dan bisa membuka diskursus atau diskusi lebih lanjut tentang polusi udara. Apakah mungkin kita membuat model CAMS untuk Indonesia dengan data PM2.5 di lapangan dan penginderaan jauh dari Sentinel-5P?

Khayalan Mikrocip Bluetooth di Vaksin COVID-19

Belakangan ini banyak hoax tentang adanya mikrocip Bluetooth atau 5G yang disisipkan di vaksin oleh Bill Gates atau pemerintah RRC. Berita ini jelas salah dan hanya bisa dipercaya oleh orang yang tidak mengetahui kondisi teknologi mikrocip, komunikasi radio, dan elektronik pada umumnya. Walaupun dunia komputer dan digital sudah berkembang pesat, namun masih ada batasan-batasan fisika yang belum ditemukan solusinya. Penting bagi semua orang untuk tahu mana ilmu teknik dan mana fiksi sains.

Sebuah perangkat elektronik yang mampu mengirimkan data, setidaknya butuh tiga komponen ini:

  1. Mikrokontroler atau mikroprosesor, sebagai “otak” dari sistem elektronik tersebut
  2. Pemancar/penerima gelombang radio, sebagai “mulut” dan “telinga” dari sistem untuk berkomunikasi dengan sistem lainnya.
  3. Baterai dan atau sumber daya lainnya, sebagai “asupan energi” dari sistem tersebut.
MtM Technology's M905 AoP module Employs Nordic's nRF52832 SoC
Gambar 1. Modul M905, System in Package Bluetooth dengan Antena

Teknologi yang sudah matang dan bisa menggabungkan berbagai mikrocip dalam satu komponen (contohnya mikrokontroler dan pemancar/penerima) adalah System in Package (SiP). Contoh modul SiP Bluetooth: M905 – Smallest Bluetooth low energy SiP(BLE) module with built-in antenna – MtM+ Technology. Ukurannya masih nampak, dan tidak mungkin bisa ditanamkan tanpa sepengetahuan Anda, terlebih lagi lewat jarum suntik.

Baterai masih belum mempunyai terobosan yang signifikan. Setelah penemuan baterai Lithium Ion, belum ada teknologi yang bisa meminiaturisasi baterai sampai tidak kasat oleh mata. Pengisian daya nirkabel (wireless charging) juga masih belum matang, walaupun banyak start-up yang menjanjikan bisa mengirimkan daya listrik melalui gelombang ultrasonik (UBeam), gelombang Wi-Fi (WiGL), dan lain-lain, ini masih jauh dari kenyataan.

Singkat cerita, fiksi sains yang marak di media populer janganlah menjadi acuan bahwa dunia sudah berkembang secara pesat. Cerita elektronika dalam bentuk cair yang dapat menerima daya secara nirkabel, mengirim dan menerima data dari Bluetooth / 5G melalui satelit yang dipasang oleh Bill Gates / elit global / pemerintahan RRC adalah omong kosong belaka. Kalaupun teknologi tersebut sudah mampu dibuat, apakah bisa diproduksi secara masif? Jika tidak, apa yang menyebabkan Anda yakin bahwa elit global sengaja membuat prototipe yang mungkin senilai milyaran dolar dan menyuntikkannya ke Anda?

Using Global Forecast System from THREDDS Data Server or Google Earth Engine with Python

Global Forecast System, as the name implies, is a global weather prediction model produced by the National Centers for Environmental Prediction. Among the many variables available to be used, the most common parameters are temperature, wind speed and direction, precipitation, and relative humidity. GFS provides weather forecast up to 384 hours after the model is run. This model is run 4 times a day, at 00 UTC, 06 UTC, 12 UTC, and 18 UTC. It usually takes around 5 hours for the model to complete.

GFS data can be downloaded directly from the FTP / HTTPS server provided by the National Oceanic and Atmospheric Administration, for free, since it’s funded by American taxpayers. However, manually downloading a whole (global) file just to work with a subset of data is not ideal, this is why I would recommend using one of the two options I will be explaining here, Google Earth Engine or THREDDS Data Server.

Google Earth Engine is the easiest to work with, you can either use the JavaScript Code Editor or use the Python API with Jupyter Lab environment to begin development. However, there’s an ingestion delay required to convert the GFS in GRIB-2 format to a raster image in the Google Earth Engine platform, if you need the data as soon as it’s generated, you might want to look somewhere else.

Thematic Real-time Environmental Distributed Data Services (THREDDS) Data Server is a way to distribute environmental data for research use. GFS data in its original GRIB-2 format can also be accessed through this THREDDS Data Server (TDS). The data is usually available in the TDS Catalog within 5 hours of the model generation time. TDS has a NetCDF subset service, that allows us to download a specific area of interest (using a rectangular bounding box), variables of interest, and specify the time range (or single time reference).

Both access can be done with Python, using these modules:

  1. earthengine-api (recommended install: geemap, eemont)
  2. siphon (TDS Catalog API)
  3. xarray (ndarray to work with NetCDF)
  4. netCDF4 (NetCDF backend on Python)

You can use Anaconda to create an environment with all these modules and the Jupyter Lab environment:

$ conda create -n geo python=3.9
$ conda activate geo
$ conda install -c conda-forge geemap eemont siphon xarray[complete] netCDF4

Once you’re done, you can use my Notebook example on my GitHub to begin how to access the Global Forecast System on Google Earth Engine:

https://github.com/josefmtd/GeospatialPython/tree/main/GlobalForecastSystem

Computing Weather Data with Python: NetCDF4 and Xarray

When I’m building a system that’s able to compute the daily Canadian Forest Fire Weather Indices, I began with the Google Earth Engine platform. It is capable of doing raster computation at a scale by harnessing the capabilities of the Google Cloud computing platform. Global datasets are updated daily on the Google Earth Engine platform.

In many cases, you can also download the files directly from the data source providers, like ECMWF with their ERA5 product or the GloH2O with their MSWX and MSWEP products. MSWX and MSWEP near real-time data is provided for free (time delay < 1 day) and ERA5T products can be accessible with a lag of 5 days. MSWX and MSWEP can be accessed through Google Drive link, while ERA5T data can be accessed through the Climate Data Store (CDS) API.

To prepare a development environment, I am using Python 3.9 that is provided by an Anaconda environment. I am using Miniconda as a Package Manager / Environment Manager.

$ conda create -n fwi-xarray python=3.9
$ conda activate fwi-xarray
$ conda install -c conda-forge jupyterlab numpy xarray[complete] netcdf4

Once I have my environment, I began writing code for Fine Fuel Moisture Code. I created a FineFuelMoistureCode class to help calculate the FFMC.

import xarray as xr
import numpy as np

class FineFuelMoistureCode:
    """
    Fine Fuel Moisture Code Calculation based on the
    Canadian Forest Fire Weather Index System using xarray
    """
    def __init__(self, temp, rhum, wind, rain, ffmc_prev):
        self.temp = temp
        self.rhum = rhum
        self.wind = wind
        self.rain = rain

        if type(ffmc_prev) == float or type(ffmc_prev) == int:
            self.ffmc_prev = rain.where(rain == ffmc_prev, \
                other = ffmc_prev)
        else:
            self.ffmc_prev = ffmc_prev

    def compute(self):
        """
        Computes the FFMC through Raining Phase 
        and Drying Phase
        
        Returns
        -------
        ffmc : xarray.DataArray
            today's FFMC
        """
        self.raining_phase()
        self.drying_phase()
        return self.ffmc
    
    def __moisture_content(self, ffmc):
        return 147.2 * (101.0 - ffmc) / (59.5 + ffmc)

    def __moisture_code(self, moisture):
        return 59.5 * (250.0 - moisture) / (147.2 + moisture)

    def __rain_normal(self, r_f, m_o):
        delta_m = (42.5 * np.exp(-100.0 / (251.0 - m_o)) * \
            (1 - np.exp(-6.93 / r_f))) * r_f
        return m_o + delta_m

    def __rain_compensation(self, r_f, m_o):    
        mr = self.__rain_normal(r_f, m_o)
        corrective = 0.0015 * (m_o - 150.0) ** 2 * r_f **0.5
        return mr + corrective

    def __no_rain(self, rain, m_o):
        return m_o + 0.0 * rain

    def raining_phase(self):
        """
        Moisture change due to rain from past 24 hours
        """
        # Moisture content before rain
        m_o = xr.apply_ufunc(self.__moisture_content, self.ffmc_prev)

        # Calculate effective rain due to canopy
        no_rain = self.rain.where(self.rain <= 0.5)
        effective_rain = xr.apply_ufunc(lambda x: x - 0.5, \
            self.rain.where(self.rain > 0.5))

        # Use corrective equation for high moisture content
        compensation = m_o.where(m_o > 150.0)
        normal = m_o.where(m_o <= 150.0)

        mo_rc = xr.apply_ufunc(self.__rain_compensation, \
            effective_rain, compensation)
        mo_r = xr.apply_ufunc(self.__rain_normal, \
            effective_rain, normal)
        mo = xr.apply_ufunc(self.__no_rain, no_rain, m_o)

        self.mr = mo_r.fillna(0) + mo_rc.fillna(0) + mo.fillna(0)
        self.mr.rename('moisture_after_rain')

    def __drying(self, mr, E_d, k_d):
        return E_d + (mr - E_d) / 10 ** k_d

    def __wetting(self, mr, E_w, k_w):
        return E_w - (E_w - mr) / 10 ** k_w

    def drying_phase(self):
        """
        Moisture change due to drying phase from noon to afternoon
        """        
        # Equilibrium moisture content for drying and wetting phase
        E_d = 0.942 * self.rhum ** 0.679 + \
            11.0 * np.exp((self.rhum - 100.0) / 10) + \
            0.18 * (21.1 - self.temp) * (1 - np.exp(-0.115 * self.rhum))
        E_w = 0.618 * self.rhum ** 0.753 + \
            10.0 * np.exp((self.rhum - 100.0) / 10) + \
            0.18 * (21.1 - self.temp) * (1 - np.exp(-0.115 * self.rhum))
        
        # Calculate the log drying/wetting rate
        k_1 = 0.424 * (1 - ((100.0 - self.rhum) / 100.0) ** 1.7) + \
            0.0694 * self.wind ** 0.5 * \
            (1 - ((100.0 - self.rhum) / 100.0) ** 8)
        k_0 = 0.424 * (1 - ((100.0 - self.rhum) / 100.0) ** 1.7) + \
            0.0694 * self.wind ** 0.5 * \
            (1 - (self.rhum/100) ** 8)
        k_d = k_0 * 0.581 * np.exp(0.0365 * self.temp)
        k_w = k_1 * 0.581 * np.exp(0.0365 * self.temp)

        # Wetting and drying conditions
        drying = self.mr.where(self.mr > E_d)
        wetting = self.mr.where(self.mr < E_w)
        no_change = self.mr.where((self.mr >= E_w) & (self.mr <= E_d))

        # Moisture content after drying
        m_d = xr.apply_ufunc(self.__drying, drying, E_d, k_d)
        m_w = xr.apply_ufunc(self.__wetting, wetting, E_w, k_w)
        m = m_d.fillna(0) + m_w.fillna(0) + no_change.fillna(0)
                                        
        # Calculate Fine Fuel Moisture Code
        self.ffmc = xr.apply_ufunc(self.__moisture_code, m)
        self.ffmc = self.ffmc.rename('fine_fuel_moisture_code')

By separating the raining phase and the drying phase, I was able to create a more readable code, at least for me. I’ll share another snippet from my final code once I have it all cleaned up and fixed. But, when I had finished coding, I found out that there’s already a submodule in xclim to calculate Fire Weather Indices!

# temp, rhum, wind, rain is a DataArray
# for daily weather measurements

ffmc_prev = 85.0
ffmc_calc = FineFuelMoistureCode(temp, rhum, wind, rain, ffmc_prev)
ffmc = ffmc_calc.compute()

However, I think that this code is much simpler for equatorial area and may be easier to implement for daily FWI calculation.

Open Weather Model Datasets

While building a Fire Weather Index calculation system as an input for the Indonesian Fire Danger Rating System (Ina-FDRS), I’ve been searching for an open dataset that can be used to calculate the daily fire weather indices. The previous version of the Ina-FDRS uses the ERA5 real-time dataset from the ECMWF. This real-time dataset is not free, however the ERA5T with a 5 days delay is available for free through the Climate Data Store (CDS) API. Some of the dataset in the ERA5 family is also available on Google Earth Engine.

Since ERA5 requires a license to obtain real-time data, the next step is to find another dataset. NOAA’s Global Forecast System is freely available, since it’s funded by US tax dollars. This dataset can also be accessed freely on Google Earth Engine and updated daily in the platform. The current Fire Weather Index calculator that I developed is using GFS data as an input alongside the rain data from GSMaP.

While browsing in a forum, I found a new dataset, Multi-Source Weather (MSWX), this model is an operational, high resolution (3-hourly 0.1 degree) with a global coverage from 1979 to 7 months from now. MSWX is divided into four sub-products which are:

  1. Historical record (MSWX – Past)
  2. Near real-time extension (MSWX – NRT)
  3. Medium-range forecast ensemble (MSWX – Mid)
  4. Seasonal forecast (MSWX – Long)

GloH2O, the organization behind MSWX, also provides a global precipitation product named Multi-Source Weighted-Ensemble Precipitation (MSWEP). This product uses rain gauge, satellite, and reanalysis data to obtain precipitation estimates globally.

Both datasets are released under the Creative Commons Attribution – Non Commercial 4.0 International (CC BY-NC 4.0). They’re free to use for non-commercial purposes, by sending a request form, we will receive a link to a Google Drive folder containing the MSWX.

Links:
MSWX – GloH2O
MSWEP – GloH2O

Data Gempa Bumi dari BMKG

Sebagai salah satu upaya peningkatan transparansi dan akuntabilitas pemerintah dan meningkatkan partisipasi masyarakat, BMKG ikut membuka inisiatif membuka beberapa data. Salah dua data yang sudah disediakan BMKG secara terbuka adalah data prakiraan cuaca dalam waktu 3 harian dan data gempa bumi yang terjadi di seluruh wilayah Indonesia yang dicatat oleh BMKG.

Ada tujuh jenis data melalui API endpoint BMKG, yaitu kejadian gempa terkini (format XML dan JSON), daftar 15 gempa bumi terakhir dengan magnitudo (M > 5.0) (format XML dan JSON), daftar 15 gempa bumi terakhir yang dapat dirasakan oleh masyarakat (format XML dan JSON), dan data shakemap dalam bentuk gambar JPG. Penggunaan API ini dapat dibaca di Data Gempabumi Terbuka BMKG.

Untuk menunjang pengembangan dashboard RECTO Tsunami, saya ingin mengimplementasikan data BMKG ini yang diperbaharui setiap menitnya oleh sistem. Untuk itu dengan bahasa pemrograman Python, saya buat sedikit script yang dapat memanggil data dari JSON API BMKG dan membuatnya dalam bentuk Pandas.DataFrame untuk diolah selanjutnya. Script ini sangat sederhana dan mudah dibuat, namun diharapkan bisa mempermudah akses data BMKG melalui sebuah modul Python sederhana. Instalasi dapat dilakukan dengan:

$ pip install bmkg-data

Setelah sudah berhasil melakukan instalasi, untuk mendapatkan data BMKG dalam bentuk tabel anda bisa menggunakan snippet code di bawah ini:

from bmkg_data import earthquake

# Get the last 15 events of felt earthquake
df_felt = earthquake.get_felt_earthquakes()

# Get the last 15 events of M > 5.0 earthquake
df_significant = earthquake.get_significant_earthquakes()

# Get the latest earthquake event
df_latest = earthquake.get_latest_earthquake()

Selamat mencoba dan menggunakan script sederhana ini.

Jangan Gunakan Aplikasi Oximeter di Android

Gambar 1. Forward WhatsApp tentang Oximeter

Pulse Oximeter adalah alat noninvasif yang mampu mengukur kadar saturasi oksigen dalam darah dan umumnya di pasang di jari. Di tengah pandemi COVID-19, alat ini umum digunakan untuk pemantauan kondisi saturasi oksigen, untuk mencegah terjadinya happy hypoxia, kondisi kekurangan oksigen tanpa gejala. Layaknya beberapa perangkat dan obat-obatan penunjang isolasi mandiri lainnya, pulse oximeter ini menjadi langka ditengah tajamnya kenaikan kasus COVID-19. Untuk itu banyak orang mencari alternatif lain untuk memantau kadar oksigen.

Pengukuran konsentrasi oksigen dalam darah (SpO2) sebenarnya adalah persentase hemoglobin yang mengandung oksigen dibandingkan keseluruhan hemoglobin. Pengukuran noninvasif oleh pulse oximeter memungkinkan karena adanya perbedaan penyerapan panjang gelombang cahaya dari hemoglobin yang mengandung oksigen dan yang tidak. Maka dari itu, umumnya pulse oximeter memiliki pemancar dan penerima cahaya di dua panjang gelombang (umumnya merah dan inframerah).

Aplikasi pulse oximeter yang tersedia di Google Play untuk HP Android, perlu dicurigai. Tanpa adanya sebuah sensor dan pemancar panjang gelombang (merah dan inframerah) ini, secara praktis tidak mungkin dilakukan pengukuran kandungan oksigen dalam darah. Maka dari itu, hindarilah penggunaan aplikasi Pulse Oximeter sebagai pengganti perangkat yang asli.

Disclaimer:
Saya adalah lulusan teknik elektro yang pernah mengambil kelas Instrumen Biomedik dan pernah bereksperimen mengukur detak jantung dan kadar oksigen darah menggunakan sensor inframerah yang dipasang di ujung jari. Kesimpulan dari artikel singkat ini juga dibahas di referensi yang saya cantumkan (dalam Bahasa Inggris).

Referensi:
Question: Should smartphone apps be used clinically as oximeters? Answer: No. – The Centre for Evidence-Based Medicine (cebm.net)

Aplikasi Geospasial di Awan

Arsitektur cloud native mengalami peningkatan popularitas di bidang IT, menghasilkan berbagai perkembangan perangkat dan praktik terbaik yang dikembangkan oleh perusahaan komputasi awan untuk membuat proses pengembangan yang murni berjalan di atas komputasi awan. Bidang informasi geospasial juga secara perlahan mulai bermigrasi untuk mengikuti tren komputasi awan, memindahkan algoritma yang biasanya terlalu berat untuk dijalankan di sebuah komputer dan melakukan visualisasi di atas aplikasi peta di halaman web. Artikel ini membahas evolusi aplikasi Geospasial di Awan (cloud native geospatial) dengan melihat arsitektur dan praktik terbaik yang muncul belakangan ini.

Sebelum mengeksplorasi lebih lanjut tentang Geospasial di Awan dan memberikan definisinya, ada empat asumsi yang menjadi dasar pengembangan ekosistem Geospasial di Awan:

  1. Semua data yang dibutuhkan oleh user ada di Awan, koleksi data ini jauh lebih besar dari data yang dapat dikumpulkan di sebuah komputer pribadi.
  2. Komputasi yang tidak terbatas untuk mengolah data besar ini tersedia di Awan dan algoritma yang mendasari pemrosesan data tersebut dapat dibagikan secara daring dan diubah-ubah secara kolaboratif.
  3. Sistem antrian dan notifikasi dapat dikembangkan agar data baru dapat diproses secara langsung, memberikan perkembangan terkini dan notifikasi kepada penggunanya.
  4. Data bisa divisualisasikan dengan peta melalui peladen web map tiles yang bisa menunjukkan data sumber maupun data dalam proses ataupun hasil akhir pemrosesan data.

Melalui empat asumsi dasar ini, proses pengolahan data geospasial yang sudah ada bisa berubah dengan adanya kapabilitas komputasi awan dan proses data yang sepenuhnya ada di Awan. Hasil dari asumsi ini adalah berbagai perkembangan teknologi untuk menunjang konsep microservices, bukan hanya dalam perspektif teknologi, namun juga dalam proses dan metodologi. Beberapa hasil evolusinya adalah munculnya paradigma-paradigma baru dalam pengolahan data geospasial.

Jika seluruh data sudah ada di Awan, tidak perlu lagi adanya duplikat data untuk mengolah dan memroses data. Sebelumnya kita perlu mengunduh data geospasial untuk menggunakan perangkat lunak untuk melakukan proses dan membuat visualisasi. Dengan komputasi awan, pemilik data dapat membayar untuk harga penyimpanan data sedangkan pengguna dapat membayar untuk akses data tanpa perlu memikirkan infrastruktur besar yang menjembataninya.

Paradigma yang berubah akibat data di Awan adalah algoritma yang dapat dikirim ke tempat data, dan bukan sebaliknya. Saat data ada di Awan, akan lebih realistis untuk membuat kontainer yang berisi algoritma pemrosesan untuk dijalankan di komputasi awan yang dekat dengan sumber data. Kontainer algoritma ini bisa dalam bentuk kontainer Docker atau sebuah fungsi seperti AWS Lambda / Google Cloud Functions. Komputasi ini dapat menggunakan sistem geospasial awan terkini seperti RasterFoundry atau Google Earth Engine, di mana pengguna dapat mengirimkan sebuah instruksi operasi pengolahan data.

Ketika data dan algoritmanya sudah bisa diimplementasikan dan dibagikan dengan sesama pengguna data, kolaborasi antar peneliti dapat muncul. Pengguna selanjutnya dapat menggunakan algoritma yang tersedia secara terbuka dan menerapkannya terhadap data yang tersedia tanpa perlu mendalami proses di belakang layar. Melalui bantuan layanan web map tiles, data-data ini bisa divisualisasikan pada setiap langkah dalam proses tersebut.

Akhir dari data hasil pengolahan GIS atau penginderaan jauh ini umumnya berupa sebuah peta statis yang seringkali berada di sebuah slide PowerPoint. Tujuan sebuah peta adalah untuk membantu memberikan informasi yang tepat guna, dengan Geospasial di Awan, pengguna yang membutuhkan informasi tertentu dapat berlangganan produk data untuk area yang diminati oleh pengguna tersebut tanpa harus membaca peta statis untuk mencari data yang dibutuhkan.

Realisasi Geospasial di Awan adalah penggunaan format data Cloud Optimized GeoTIFF yang dapat memanfaatkan fitur HTTP yaitu Byte Serving. Byte Serving adalah teknologi yang mendasari konsep streaming musik dan video tanpa harus mengunduh keseluruhan file audio atau video. Format COG mengikuti prinsip yang serupa sehingga pengguna dapat mengakses hanya bagian dari sebuah file raster yang dibutuhkan, sehingga konsep pengolahan data baru dapat dikembangkan.

Konsep utama dari COG relatif sederhana, dengan menaruh data penginderaan dan data penggambaran tersebut di Awan dan dapat diakses sebagai secara streaming. Melalui COG dan penyimpanan di Awan, perangkat lunak dapat dikembangkan untuk mengakses data ini di ekosistem Awan yang sama, sehingga pengolahan data dapat dilakukan tanpa perlu biaya unduh data dan penyimpanan data. Pengguna tidak perlu lagi menghabiskan waktu untuk mencari data, tapi hanya perlu mengakses data terkini yang tersedia dan menghasilkan analisis berdasarkan data tersebut.

Konsep kedua yang membantu sebuah aplikasi Geospasial di Awan adalah katalog aset spatiotemporal (SpatioTemporal Asset Catalog). Penyedia data penginderaan dan penggambaran tidak perlu lagi menyiapkan sistem katalog, namun bisa mengadopsi katalog STAC untuk mengidentifikasi seluruh data yang tersedia.

Konsep ketiga adalah adanya web tiling dinamis, menggunakan COG sebagai data masukan, perantara dan keluaran, sebuah server web map yang mengikuti standar Open Geospatial Consortium seperti WMTS ataupun XYZ tiles dapat digunakan untuk membantu visualisasi data. Layanan yang dapat membaca COG dan menghasilkan web map tile seperti rio-tiler dapat digunakan untuk mengembangkan prinsip visualisasi data ini.

Menggunakan ketiga teknologi ini dan berdasarkan sistem-sistem yang sudah dikembangkan menggunakan konsep Geospasial di Awan, pengguna dapat menghasilkan data peta yang dapat ditambahkan oleh informasi terkini dan bukan peta statis. Akhirnya, data geospasial bisa menjadi bagian dari kehidupan, membantu memperbaiki aplikasi yang sudah ada dan membantu membuat ekosistem interoperabilitas di mana berbagai organisasi dapat mengadopsi teknologi-teknologi ini untuk menyajikan data mereka. Selanjutnya, pengguna dapat fokus dengan hasil analisis yang dapat dibuat melalui data-data terkini yang terbuka untuk umum untuk aplikasi demi kemaslahatan bersama.

Artikel ini merupakan intisari dari seri artikel oleh Chris Holmes: Cloud Native Geospatial – Planet Stories – Medium.