Friday, November 20, 2015

Penggunaan Regular Expression dalam Seleksi Tenaga Humas Kementrian Komunikasi dan Informatika

Tutorial Kali ini akan membahas salah satu kegunaan Regular Expression dalam melakukan Capturing Group. Jadi dengan teknik Capturing Group maka kita bisa mengekstrak elemen tertentu dari String yang match dengan Reguler Expression ketimbang mengambil secara keseluruhan. Dalam Bahasa Java, capturing group ini dihitung berdasarkan berapa jumlah kurung dari sebelah kanan pada Pattern Regex-nya. Misalkan kita memiliki Pattern seperti berikut ap(ple|a) dan diberikan sebuah string yang akan di-match apple, maka group(1) itu adalah akan menghasilkan string ple.

Nah, kebetulan kemarin diadakan seleksi tenaga Humas dari Kementrian Komunikasi dan Informatika yang konon gaji yang diberikan adalah sebesar 18 juta sebulan. Saya tertarik ikutan mendaftar walaupun ujung-ujungnya gagal di tahap seleksi berkas. Ternyata dalam tahap seleksi berkas ini peserta yang ikutan mendaftar sebanyak 1779 orang dari seluruh provinsi yang berada di NKRI. Nah, saya melihat ternyata ada ketidakseimbangan distribusi peserta antar provinsi yang terlihat dari jumlah peserta berdasarkan KTP nya. Di dalam nomor peserta yang akan mengikuti seleksi berkas tersebut, digunakan identitas berdasarkan KTP. Dan kita sudah tahu bagaimana aturan menentukan asal daerah seseorang berdasarkan nomor NIK pada KTP-nya.

Menurut pengalaman saya sendiri waktu melakukan pendaftaran online di situs Panselnas, memang agak sulit untuk bisa login. Di samping itu, bisa jadi informasi tentang lowongan ini tidak banyak diketahui oleh orang-orang. Bayangkan, untuk daerah Sulawesi Tengah saja hanya ada 7 orang peserta termasuk saya sendiri.

Jadi sama seperti tutorial yang saya sudah buat sebelumnya tentang bagaimana mengextract tex pada file pdf dan memfilternya dengan regex, maka tutorial kali ini lebih menekankan pada teknik Capturing Group nya. Dokument pdf yang akan diextract bisa dilihat di sini.

Saya menggunakan listing berikut untuk melakukan extraksi kontennya:

Pada baris ke 26 dalam listing di atas, Anda bisa melihat bagaimana Pattern "([0-9]{1,5})\\s(THP-[0-9]{2}-([0-9]{16}))\\s[0-9]{2}\\sOktober" + "\\s2015\\s[0-9]{2}:[0-9]{2}-[0-9]{2}:[0-9]{2}" mengandung sejumlah kurung '()' yang menandakan expresi Capturing Group. Jadi dengan kode yang tertera di dalam kurung tersebut kita bisa mengambil bagian tertentu pada String yang match dengan regex untuk kemudian di proses lebih lanjut. Misalkan dalam seleksi humas tersebut NIK peserta ditambahkan dengan awalan 'THP-' maka dengan teknik capturing group ini kita membuang awalan 'THP-' nya tersebut dan hanya mengambil NIK nya.

Hasil running script di atas bisa dilihat di link ini.

Thursday, November 5, 2015

Lika-liku hidup Mohammad Fajar, bagian 1

Entah kenapa saya merasa ada yang aneh dengan hidup saya. Sepertinya hidup di dunia bagi saya hampir mirip dengan tinggal neraka. Tidak ada ketenangan. Saya ga tau kenapa ya, kok orang-orang begitu tertarik menyindir-nyindir kekurangan saya. Dan kalo saya disindir, saya tersinggung.

If you want to change the world, change the world. Sistem saraf simpatik yang mengendalikan laju denyut jantung dan tekanan pembuluh darah itu sifatnya otonom, tidak bisa dikontrol oleh kesadaran kita. Sementara mulut manusia dalam berbicara mengeluarkan kata-kata itu bisa dikontrol oleh kesadaran. Sistem saraf otonom (baik simpatik dan parasimpatik) adalah produk evolusi manusia selama jutaan tahun. Sementara kebiasaan nyindir dan menghina orang lain adalah produk dari budaya atau kultur: kebiasaan di masyarakat yang bisa dirubah.

Kalo saya disindir, membran telinga saya mendengar getaran suara tertentu yang bisa dipahami oleh otak manusia. Kata-kata yang oleh otak saya ditafsirkan sebagai sebuah kebencian. Kata-kata kebencian ini oleh nenek moyang kita yang hidup ribuan tahun yang lalu, dianggap sebagai simbol bahaya. Akibatnya terdapat mekanisme tertentu dalam tubuh yang belangsung di bawah kesadaran kita yang membuat ancaman bahaya ini memicu saraf simpatik tadi mempercepat denyut jantung.

Analogi yang mudah adalah bisa ga saudara pembaca sekalian mengontrol kapan terjadi ejakulasi saat berhubungan seksual? Bisakah pembaca sekalian mengontrol agar kemaluan saudara tetap tegang tanpa ejakulasi selama berjam-jam bergesekan dengan vagina wanita? Saya rasa hampir semua pembaca akan mengatakan tidak bisa.

Nah itu dia kuncinya. Kita ga bisa mengendalikan laju denyut jantung kita. Kalo kita melakukan aktivitas berat, misalnya joging, secara otomatis denyut jantung kita akan berlangsung lebih cepat ketimbang biasanya. Dan itu di luar kendali kita.

Jadi kalo ada saudara-saudara pembaca di sini yang mengenal saya dan menganggap saya gampang emosi, gampang tersinggung, gampang marah, gampang kecewa, dll ya… silakan buka kembali buku pelajaran Ilmu Pengetahuan Alam kelas 4 SD yang membahasa sistem saraf otonom tadi.

Yang perlu saudara pahami adalah kultur atau kebiasaan manusia itu bisa dirubah. Sementara sistem kerja tubuh manusia itu sama sekali tidak bisa dirubah. Jika Anda percaya teori evolusi Darwin, maka itu perlu waktu jutaan tahun untuk merubah manusia menjadi malaikat atau sesuatu yang lain.

Sebenarnya saya ini kalo dibilang temperamen, ga juga temperamen-temperamen amat. Hanya saja yang jadi masalah adalah wajah saya. Ada yang salah dengan wajah saya. Dan ini membuat hidup saya menjadi sangat runyam. Kalo Anda dapati ada manusia yang diperlakukan seperti saya (dalam artian dihina dan disindir terus-terusan) dan masih hidup di alam bebas (belum masuk bui), maka itu adalah sebuah keajaiban. Saya ini sangat…. sangat…. sangat… sabar kalo menurut penilaian objektif saya.

Saking sabarnnya saya, saya hanya milih-milih melakukan tindak kekerasan terhadap orang lain. Sementara hinaan dan sindiran yang datang pada saya itu bertubi-tubi tiap hari. 

Tuesday, October 13, 2015

Perkembangan Embrio (janin) di Dalam Al-Quran

Salah satu topik fenomenal yang dijadikan senjata ampuh oleh para simpatisan Islam dalam membela kebenaran Islam adalah masalah perkembangan janin di dalam kandungan. Dikatakan bahwa Al-Quran surat Al-Mu’minun ayat 12-14 sangat detail membahas mengenai masalah ini.

Misalnya dikatakan bahwa mula-mulai bayi berada dalam fase sperma yang dipancarkan (nutfah), kemudian masuk fase segumpal darah (alaqah), kemudian masuk fase segumpal daging (mughdah), kemudian terbentuknya tulang (fase kelima), kemudian fase ke enam adalah tulang tadi kemudian dibungkus oleh daging, dan yang terakhir adalah mengubahnya ke dalam bentuk yang lain.

Tulisan kali ini kembali ingin meluruskan kesalahan/dosa yang sering dilakukan oleh pemikir pemikir muslim tersebut. Kesalahan utama mereka adalah menggunakan sains sebagai alat tafsir Al-Quran dan mengesampingkan peran Hadits. Padahal jaman dahulu para pemikir bahkan sampai dipenggal lehernya lantaran mengatakan Al-Quran itu sebagai makhluk. Alam semesta dan prinsip kerjanya (hukum-hukum yang mendasarinya) di mata para ulama salaf adalah makhluk. Sementara Al-Quran mendahului itu semua (Qadim). Ilmuan muslim modern bukan hanya mengulang bidah tersebut, namun lebih jauh lagi yakni dengan mencoba membuang peran Hadits sebagai penafsir utama isi Al-Quran karena ketakjuban mereka terhadap sains.

Terdapat beberapa wawasan umum yang bisa diketahui pembaca untuk melihat persoalan ini secara lebih objektif (dan membuang kefanatikan yang ada di kepala pembaca). 

Pertama, dalam beberapa Hadits sudah disebutkan bahwa fase perkembangan janin di dalam kandungan itu masing-masing berlangsung selama 40 hari. Artinya fase mula-mula yakni fase sperma tadi berlangsung selama 40 hari.  Padahal nyatanya dalam pengetahuan modern fase sperma itu tidak lebih dari 7 hari. Demikian pula pada hari ke 80, bentuk janin itu sudah mulai ‘terdefinisi’ secara jelas, dan tidak bisa lagi bisa dikatakan sebagai segumpal darah.

Kedua,  pernyataan Al-Quran bahwa tulang mendahului daging sama sekali bertentangan dengan fakta yang diketahui dalam pengetahuan modern di mana yang terjadi adalah tulang dan daging (otot) itu berkembang secara bersamaan (bukan yang satu mendahului yang lain) dan berasal dari substansi yang sama yang dikenal sebagai mesoderm.

Ketiga, tidak ada peran sel telur di sini. Dikatakan bahwa pasangan laki-laki dan perempuan semata-mata berasal dari sel sperma. Dan rahim hanya berperan sebagai penampung sperma tersebut. Tidak ada sebutan secara eksplisit bahwa sperma membuahi sel telur. Terdapat  usaha yang  sia-sia dalam menerjemahkan kalimat nutfa amsyaji sebagai air yang bercampur. Sementara terjemahan yang biasa digunakan untuk kata nutfah itu (yang bisa ditemukan pada ayat-ayat lain) adalah sperma (air mani).

Keempat, (dalam kaitannya dengan ayat Al-Quran yang lain) sperma itu bukan berasal dari tulang sulbi, tulang  rusuk, atau apalah istilahnya. Akan tetapi berasal dari testis. 

Soal kenapa Nabi Muhammad bisa memiliki pengetahuan tentang embriologi ini sebenarnya saya juga kurang begitu paham. Tapi kita bisa menggunakan beberapa analisis sejarah. Misalnya saja jauh sebelum Nabi Muhammad itu sudah terdapat beberapa pemikir-pemikir kuno yang merumuskan proses perkembangan janin ini. Dua di antaranya adalah Aristoteles dan Galen. Dan pemikiran-pemikiran mereka ini menyebar ke seantero mediterania termasuk di jazirah Arab. Dan budaya penyebaran informasi pada waktu itu yang hanya sebatas dari mulut ke mulut mengakibatkan apa yang sampai ke Nabi Muhammad hanya ringkasannya saja.

Referensi:
http://www.answering-islam.org/Quran/Science/embryo.html

Friday, October 9, 2015

Hubungan Golden Rasio dengan Kota Mekkah

Tulisan kali ini membahas mengenai Golden Ratio (Rasio Emas, atau sebut saja Golden Rasio aja lah). Jadi di beberapa situs muslim sering dijumpai tulisan yang membahas mengenai Golden Rasio ini yang disangkut pautkan dengan posisi Ka’bah sebagai arah kiblat umat Islam. Dan ini dijadikan alasan oleh para simpatisan Agama Islam untuk menjustifikasi kebenaran Islam: bahwa Al-Quran adalah kitab yang keluar langsung dari mulut pencipta alam semesta ini. Kenapa saya gunakan kata mulut di sini, adalah karena di Al-Quran sendiri sudah disebutkan bahwa Allah itu juga memiliki anggota tubuh seperti halnya manusia. Dan seperti halnya tulisan-tulisan saya yang lain, tulisan ini bermaksud meluruskan kekeliruan kekeliruan tersebut.

Apa itu Golden Rasio? Dan bagaimana Golden Rasio ini bisa begitu fenomenal, bahkan mencakup ke bidang-bidang lain yang sama sekali tidak ada sangkut pautnya. Sejarah valid mengenai Golden Rasio bermula ketika matematikawan besar asal Yunani (kuno) bernama Euclid mengajukan pertanyaan yakni, jika diberikan sebuah garis AE, tentukan titik B di mana rasio AE/AB = AB/BE (lihat gambar).

 2
Jawaban pertanyaan inilah yang menghasilkan nilai Golden Rasio itu (yakni panjang AE) yang besarnya adalah 1.618033. Soal apakah Euclid sendiri yang pertama-tama menemukan Golden Rasio ini ataukah Euclid hanya merangkum hasil pemikiran ilmuan sebelumnya tidak bisa ditentukan secara pasti. Konon terdapat beberapa catatan sejarah (yang masih diperdebatkan) bahwa konsep Golden Rasio ini sudah dikenal sejak abad ke 24 sebelum masehi. 

Dikatakan bahwa nilai Golden Rasio ini banyak dijumpai di alam. Contohnya terdapat hewan laut bernama Nautilus (yang saya kurang tau apa bahasa sundanya, untuk lebih jelasnya lihat gambar) yang bentuk cangkangnya itu tunduk pada aturan Golden Rasio.  Kemudian spiral galaksi bimasakti yang juga dikatakan tunduk pada aturan Golden Rasio. Kemudian juga cara pengaturan fret pada alat musik gitar yang juga dikatakan tunduk pada aturan Golden Rasio, dan masih banyak hal lainnya. 

Nautilus-Large 
Namun kebetulan saya seorang ilmuan, maka saya skeptis dan mempertanyakan hal-hal tersebut. Apa iya bentuk spiral dari galaksi tunduk pada aturan Golden Rasio? Apa iya bentuk cangkang Nautilus tunduk pada Golden Rasio? Apa iya jarak fret pada gitar tunduk pada aturan Golden Rasio?

Sebenarnya saya mendapati sebuah artikel ilmiah di internet yang ditulis oleh fisikawan yang isinya mengkritisi keistimewaan Golden Rasio ini.  Dalam tulisan tersebut kita diperintahkan bahwa untuk membuktikan bahwa hal-hal yang disebutkan tersebut tunduk pada aturan Golden Rasio atau tidak maka kita harus mengukurnya. Fisikawan itu diperintahkan untuk mengukur, bukan sekedar berasumsi. Kemarin saya waktu kuliah S1, semester pertama diajarkan mengenai konsep-konsep penting di dalam pengukuran antara lain nilai skala terkecil (NST), ketelitian pengukuran relatif (KTPR), angka berarti (AB), standar deviasi (SD), dan lain-lain tetek bengek. Sebenarnya saya lebih senang matematikanya ketimbang fisikanya sehingga saya tidak terlalu menghayati kegiatan pengukuran ini, walaupun belakangan saya baru tahu bahwa itu semua ada manfaatnya. Jadi di dalam pengukuran ini dikatakan bahwa pengukuran valid jika nilai eror itu berada di rentang plus minus 2 persen.

Ternyata setelah diukur oleh para ilmuan, nilai cangkang Nautilus itu berada pada jarak yang sangat jauh berbeda dengan nilai Golden Rasio (di luar rentang plus minus 2 persen). Nilai rasio cangkang Nautilus secara umum (dengan mengambil sebanyak mungkin sampel cangkang) berada pada rentang 1.23 hingga 1.43, yang tentunya sangat jauh dari nilai 1.61 nilai Golden Rasio. Ini berarti dugaan kita selama ini bahwa nilai rasio cangkang Nautilus tunduk pada Golden Rasio tidak lebih dari sekedar duga-duga. Ada nilai lain yang dikatakan hampir mendekati rasio cangkang Nautilus  yang disebut sebagai Silver Rasio (lha istilah apa lagi ini…) yang nilainya 1.411 (atau lebih tepatnya 1  + akar(2)). Anda bisa baca artikel tersebut untuk melihat elaborasi yang lebih lengkapnya. Saya hanya berharap nama Euclid tidak ketutup ama si penemu Silver Rasio ini lantaran persoalan cangkang Nautilus.

Untuk kasus lain, misalnya rasio fret pada gitar silakan pembaca melakukan pengukurannya sendiri. Saya hanya bisa pesan satu hal: gunakan metode pengukuran yang valid serta jangan lupa berkonsultasi pada pakar fisika terdekat. Kali aja pembaca bisa buat jurnal dari situ dan dapat dana hibah.

Kemudian soal apakah spiral Galaksi Bimasakti atau galaksi lainnya benar-benar tunduk pada Golden Rasio ini merupakan persoalan yang sangat sulit, rumit, dan tentunya sangat makan ongkos. Pertama-tama pembaca harus masuk ke universitas bergengsi dan mengambil jurusan astronomi. Gunanya adalah agar pembaca bisa mengakses alat-alat yang dibutuhkan dalam mengukur posisi bintang-bintang dengan ketelitian yang cukup dan kemudian memetakannya. Setelah itu pembaca baru kemudian melakukan sintesis apakah bentuk spiral galaksi itu tunduk pada Golden Rasio ataukah Silver Rasio. Ini demi menjaga nama Euclid jangan sampai ditindis oleh nama si penemu Silver Rasio tersebut, hehe.

Ok, kita kembali ke judul tulisan ini.

Jika pembaca benar-benar memahami maksud paragraf-paragraf sebelumnya, maka tulisannya saya cukupkan sampai di sini.

Tapi okelah, kita teruskan saja dalam membedah apakah benar-benar ada hubungan antara Euclid dan Kota Mekkah, atau lebih tepatnya apakah ada hubungan antara Golden Rasio dengan lokasi Ka’bah sebagai arah sujud umat Islam.

Pada banyak artikel di internet sudah disebutkan bahwa konon lokasi Ka’bah itu berada pada Golden Rasio jika dihubungkan dengan posisi kutub utara dan kutub selatan bumi.  Sebenarnya ini bisa dengan mudah dibantah oleh tulisan saya sebelumnya  bahwa posisi kota-kota di permukaan bumi itu tidak tetap, akan tetapi dinamis sepanjang tahun. Hal ini dikarenakan pergeseran lempeng bumi akibat pengaruh gaya tektonik. Yang dikatakan kecepatannya sekitar 2 cm per tahun.

Namun dalam tulisan kali ini saya menambah sanggahan-sanggahan terhadap asumsi-asumsi tersebut dengan hanya menggunakan pemahaman dasar fisika. Saya menggunakan substansi yang diberikan pada artikel di sebuah halaman web. Di halaman tersebut dikatakan bahwa memang kota Mekkah hampir mendekati lokasi Golden Rasio Euclid tersebut, namun tidak persis. Lokasi Kota Mekkah berada pada lintang (analog dengan lokasi pada sumbu y) 21 derajat, 25 menit dan 38.56 detik. Sementara lokasi Golden Rasio Euclid (dengan mengambil 15 digit belakang koma) untuk permukaan bumi berada pada lintang 21 derajat, 14 menit, dan 46.02 detik. Jika dibandingkan antara keduanya ternyata terdapat eror sekitar 0.1 persen. Eror ini menandakan bahwa posisi Kota Mekkah bukannya berada tepat pada Golden Rasio Euclid tadi, tapi berada sekitar 20 kilometer ke arah utara.

Itu baru lintang, belum bujurnya. Posisi pada bidang datar tidak bisa diwakilkan oleh satu angka saja, minimal dua angka (karena ternyata permukaan bumi tidak sepenuhnya bisa dikatakan bidang datar). Jika kita hanya mengambil posisi lintangnya saja, maka ada banyak kota di permukaan bumi yang berada pada  lintang Golden Rasio (atau mendekati lintang Golden Rasio). Harus ada posisi pada garis bujurnya (analog koordinat x pada bidang datar).

Dan ternyata  untuk  menentukan acuan Golden Rasio garis bujur ini tidak sesederhana garis lintang yang udah jelas-jelas berpatokan pada kutub permukaan bumi. It’s a matter convinience. Itu tergantung Anda mau nentuin titik nol nya di mana. Nah, kalo sudah begini maka tulisan saya yang berbaris-baris ini hanya non-sense aja, hahaha…

Jadi intinya adalah mau Anda ngatain Mekkah berada pada Golden Rasio, Paris berada pada Silver Rasio, atau New York berada pada Diamond Rasio, dll itu hak Anda sepenuhnya. Yang saya minta hanya satu, jangan lupakan konsep dasar yang biasa digunakan dalam pengukuran, antara lain KTPR (ketidakpastian relatif), NST (nilai skala terkecil), AB (angka berarti), dll.

Wednesday, September 2, 2015

Sesuaikan Posisi Slider Dengan Skala Zoom Image

Dalam video kali ini saya hanya ingin mendemonstrasikan bahwa dalam WPF itu kita bisa mengatur agar posisi slider proporsional dengan nilai zoom dari image. Pada aplikasi yang dibuat, terdapat sebuah slider dan beberapa buah image. Jadi hanya ada satu slider sementara image nya ada banyak. Persoalannya adalah bagaimana agar si slider tadi keep-track dengan skala image. Jadi Ketika slider tersebut di gerakan, perubahan skala pada image itu berubah secara kontinyu.

Bayangkan jika slidernya nilainya maksimal, sementara Image zoom-nya minimum, maka ketika kita menyentuh slider akan terjadi lompatan perubahan skala image yang tadinya dari sangat kecil menjadi sangat besar. Untuk menghindari ini, maka skala image dan slider nya mesti di sinkronkan.

Thursday, August 20, 2015

Menggantikan Recursive Call dengan Stack

Salah satu hal yang paling sering di-identikkan dengan recursive dalam dunia pemrograman adalah bagaimana membaca struktur dari directory. Secara umum struktur dari directory adalah pertama kita melakukan iterasi terhadap root directory. Dalam  root directory terebut kita kemudian membagi jenis item di dalamnya, apakah masuk ke dalam file atau directory. Jika masuk ke dalam kategori file, maka langsung set sebagai item pada Treeview. Jika masuk kategori folder, panggil kembali method-nya untuk melakukan  iterasi yang sama.

Masalahnya adalah teknik ini akan mengakibatkan akumulasi pemanggilan terhadap method pada memory stack. Dan akibatnya terjadi StackOverflow. Untuk mengatasinya kita menggunakan teknik lain yakni dengan menggunakan struktur data Stack. Dengan Stack ini pertama-tama kita iterasi semua folder pada root directory, masukkan ke dalam Stack. Item yang terakhir dimasukkan kemudian dikeluarkan dari stack (di-pop) untuk diperiksa isinya. Jika terdapat folder di dalamnya, maka masukkan folder tersebut ke dalam stack. Jika file yang ditemukan, langsung isi elemen dari TreeView dengan file tersebut.

Misalnya elemen stack tersebut adalah folder dengan urutan A|B|C|D. Jika kita sudah mem-pop folder A. Maka kita akan menggantikan posisinya dalam stack dengan sub-folder dari A dengan mem-push sub folder tersebut ke dalam stack. Sehingga urutan stack berubah  menjadi A3|A2|A1|B|C|D. Kemudian kita mem-pop A1 dan diperoleh sub-folder di dalamnya. Kita mem-push sub folder tersebut ke dalam stack dan struktur stack berubah menjadi A33|A32|A31|A2|A1|B|C|D. Karena A3 hanya terisi file, maka tinggal kita pop untuk dimasukkan sebagai item di Treeview,  demikian juga A32. Jadi Struktur stack berubah menjadi A31|A2|A1|B|C|D. Kita masuk pada A31, dan ternyata isinya ada sub folder lain, dan lantas kita push pada stack dan stack berubah menjadi A312|A311|A2|A1|B|C|D. Hal ini dilakukan seterusnya sehingga isi dari stack menjadi kosong dan semua folder dan sub folder beserta item di dalamnya masuk ke dalam Treeview.

Wednesday, August 19, 2015

Aplikasi 17 Agustus (Aplikasi pemutar musik 3D di javaFX)

Kebetulan kemarin tanggal 17 Agustus yang merupakan hari ulang tahun kemerdekaan Indonesia maka saya mencoba membuat sebuah aplikasi yang ada kaitannya dengan 17 Agustus. Dan kebetulan saya akhir-akhir ini lagi tertarik bermain-main dengan library JavaFX maka saya akhirnya membuat aplikasi ini dengan JavaFX.

Sebenarnya saya bukan fanatikus JavaFX. Aplikasi yang saya buat ini adalah aplikasi pemutar musik. Dan untuk membuat aplikasi pemutar musik, maka kita harus membuat codec. Sayangnya untuk membuat codec tersebut, kita harus paham digital signal processing, paham bahasa c++, belajar dikit format-format codec yang sudah ada, antara lain mp3, flac, dll. Dan di luar sana, sudah banyak aplikasi pemutar musik yang tersedia yang menggunakan codec-codec yang sudah umum di pasaran. JavaFX kemudian hanya merangkai codec-codec tersebut ke dalam library pemutar media buatan mereka. Jadi yang saya lakukan bisa dibilang hanya sebatas memanggil library tersebut atau sekedar "building a car" bukan me-"reinventing the wheel".

Pada program kali ini, saya hanya menunjukkan beberapa teknik baku dalam implementasi element UI, misalnya bagaimana drag n drop file ke listview. Atau bagaimana memodifikasi item-item yang terdapat pada listview.

Perhatikan video berikut:



Source code:
https://github.com/gunungloli666/3dEqualizer

Sekedar referensi:
https://en.wikipedia.org/wiki/Audio_coding_format
https://en.wikipedia.org/wiki/Codec

Tuesday, August 18, 2015

Tutorial Data Binding di JavaFX

Dalam tutorial kali ini saya akan memberikan  contoh bagaimana menggunakan konsep data binding di JavaFX. Sebenarnya ini terinspirasi dari sebuah kursus yang saya ikuti kemarin mengenai penggunaaan WPF (Windows Presentation Foundation) yang konsepnya juga hampir mirip dengan JavaFX.

Defenisi data binding sendiri adalah bagaimana perubahan yang dialami oleh sebuah element UI (misalnya button) langsung direfleksikan pada elemen UI yang lain (misalnya panel atau window). Jadi ketika kita merubah lebar button, maka lebar panel secara serta merta ikutan berubah. Dalam konsep  UI jadul, misalnya yang dijumpai pada Jawa Swing, hal ini amat rumit untuk diaplikasikan. Bisa sih, namun kode yang kita buat agak kotor. Kita mungkin bisa mendeteksi event click mouse yang dilakukan pada sebuah button atau event mouse drag. Namun bagaimana kalau sudah hal-hal semisal perubahan property lebar atau tinggi button tersebut, tentu cukup sulit untuk mendeteksinya. Salah satu cara kotor untuk menempuhnya antara lain dengan membuat sebuah thread yang secara periodik mengecek perubahan pada ukuran button tersebut untuk kemudian merefleksikannya pada panel.

Pada WPF, teknik data binding biasanya dilakukan secara langsung pada XAML. Namun kemudian saya menyadari bahwa cara ini kurang tepat. Hal ini karena  antara property-property yang di-binding biasanya tidak proporsional nilainya. Misalnya jika kita mem-binding lebar button dengan lebar panel (atau window), tentu itu kurang tepat karena secara umum lebar button jauh lebih kecil dari lebar panel. Jadi kita harus melakukan operasi aritmatika di situ. Misalnya dengan mengeset lebar button setengah atau seperempat dari lebar window.

Masalahnya adalah kita tidak bisa menyertakan operasi aritmatika ke dalam file XAML (atau sebut saja XML). Jadi mau tidak mau kita harus letakkan pengesetan tersebut pada code behind-nya. Dan ini sudah diantisipasi oleh JavaFX.

Jadi dalam JavaFX tersebut sebuah UI element (misalnya window) properti propertynya sudah mengantisipasi adanya event yang terjadi. Dalam Java Swing, sebuah window (atau dalam terminologinya disebut sebagai JFrame) hanya memiliki width atau height saja. Dalam JavaFX, sebuah window (atau dalam terminologinya disebut sebagai Stage) width dan height nya itu sudah berubah menjadi widthProperty dan heightProperty yang bisa diberikan listener jika terjadi sebuah event. Perhatikan video berikut.



Dalam video di atas, jelas bahwa lebar button tidak mungkin di binding secara langsung dengan lebar window, akan tetapi harus dikalikan sebuah rasio tertentu.

Video berikut ini sebuah contoh bagaimana di JavaFX terdapat objek khusus yakni objek text yang tidak dijumpai pada WPF.

package fjr.test.binding;

import javafx.application.Application;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class TestBindingButton extends Application{

 Stage prStage; 
 
 Button testButton; 
 
 @Override
 public void start( Stage primaryStage) throws Exception {
  
  AnchorPane pane = new AnchorPane();
  
  Scene sc  = new Scene(pane, 500, 400) ; 
  
  primaryStage.setScene(sc); 
  
  primaryStage.show();
  
  this.prStage = primaryStage; 
  
  getChildren(pane);
  
  primaryStage.widthProperty().addListener(new InvalidationListener() {
   
   @Override
   public void invalidated(Observable arg0) {
    testButton.setPrefWidth(prStage.getWidth()/3.0) ;
    testButton.setPrefHeight(prStage.getHeight()/10.0);
   }
  });
   
 }
 
 
 private void getChildren(Pane p){
  
  VBox box1 = new VBox(); 
  box1.setSpacing(5);
  box1.setTranslateX(10);
  box1.setTranslateY(10);
  
  
  final Button b1 = new Button("COBA"); 
  b1.setPrefWidth(prStage.getWidth()/3.0) ;
  b1.setPrefHeight(prStage.getHeight()/10.0);  
  box1.getChildren().add(b1); 
  
  
  final Button b2 = new Button("ACUAN"); 
  b2.setPrefWidth(prStage.getWidth()/3.0) ;
  b2.setPrefHeight(prStage.getHeight()/10.0);  
  box1.getChildren().add(b2); 
  
  this.testButton = b1; 
  
  p.getChildren().addAll(box1); 
 }
 
 public static void main(String[] args){
  launch(args);
 }
}
package fjr.test.binding;

//import java.awt.Button;
import java.util.Random;

import javafx.animation.Interpolator;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Orientation;
import javafx.geometry.VPos;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Slider;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.util.Duration;


public class TestBindingFont extends Application{
 
    private static final Random RANDOM = new Random();
    private static final Interpolator INTERPOLATOR = Interpolator.SPLINE(0.295,0.800,0.305,1.000);
    Pane p; 
    
    Font font = new Font (Font.getDefault().getFamily(), 60 ) ; 

 @Override
 public void start(Stage primaryStage) throws Exception {
  // TODO Auto-generated method stub
  
  final AnchorPane pane = new AnchorPane(); 
  Scene sc = new Scene(pane, 500,500 ); 
  
  primaryStage.setScene(sc);
  primaryStage.show(); 
  
  pane.setFocusTraversable(true); 
  pane.setOnMousePressed(new EventHandler() {
   @Override
   public void handle(MouseEvent me) {
    pane.requestFocus();
    me.consume();
   }
  });
  
  pane.setOnKeyPressed(new EventHandler() {
   @Override
   public void handle(KeyEvent ke) {
    createLetter(ke.getText()); 
    ke.consume();
   }
  });
  
  p = pane; 
  
  final Slider s = new Slider(); 
  s.setTranslateX(10); 
  s.setTranslateY(10); 
  s.setPrefWidth(150); 
  s.setOrientation(Orientation.HORIZONTAL);
  s.setMin(1); 
  s.setMax(10); 
  s.valueProperty().addListener(new InvalidationListener() {   
   @Override
   public void invalidated(Observable arg0) {
    double m = s.getValue(); 
    Font f2  = new Font(Font.getDefault().getFamily(), 60 * m); 
    font = f2; 
    for( Node  t : p.getChildren()){
     if(t instanceof Text){
      Text tt = (Text) t; 
      tt.setFont(f2);
     }
     
    }
   }
  });
  
  VBox box = new VBox(); 
  box.setSpacing(5); 
  
  pane.getChildren().add(box);
  box.getChildren().add(s); 
  
  Text t  = new Text("Ketikan sesuatu di Keyboard!!"); 
  t.setTranslateX(10);
  t.setTranslateY(20); 
  Font f = Font.font(Font.getDefault().getFamily(), FontWeight.BOLD , FontPosture.ITALIC , 20); 
  
  t.setFont(f); 
  
  box.getChildren().add(t);  
  
  t.setFill( new LinearGradient(0f,1f,1f,0f,true, CycleMethod.NO_CYCLE, 
      new Stop(0,Color.web("#f8bd55")),
                        new Stop(0.14f,Color.web("#c0fe56")),
                        new Stop(0.28f,Color.web("#5dfbc1")),
                        new Stop(0.43f,Color.web("#64c2f8")),
                        new Stop(0.57f,Color.web("#be4af7")),
                        new Stop(0.71f,Color.web("#ed5fc2")),
                        new Stop(0.85f,Color.web("#ef504c")),
                        new Stop(1,Color.web("#f2660f"))));

 }
 
  private void createLetter(String c) {

         final Text letter = new Text(c);
         letter.setFill(Color.BLACK);
         letter.setFont(font);
         letter.setTextOrigin(VPos.TOP);
         letter.setTranslateX((p.getWidth() - letter.getBoundsInLocal().getWidth()) / 2);
         letter.setTranslateY((p.getHeight() - letter.getBoundsInLocal().getHeight()) / 2);

         p.getChildren().add(letter);

         final Timeline timeline = new Timeline();
         timeline.getKeyFrames().add(
                 new KeyFrame(Duration.seconds(6), new EventHandler() {
                     @Override public void handle(ActionEvent event) {
                         p.getChildren().remove(letter);
                     }
                 },
                 new KeyValue(letter.translateXProperty(), getRandom(0.0f, p.getWidth() - 
                   letter.getBoundsInLocal().getWidth()),INTERPOLATOR),
                 new KeyValue(letter.translateYProperty(), getRandom(0.0f, p.getHeight() - 
                   letter.getBoundsInLocal().getHeight()),INTERPOLATOR),
                 new KeyValue(letter.opacityProperty(), 0f)
         ));
         timeline.play();
     }
 
  private static float getRandom(double min, double max) {
         return (float)(RANDOM.nextFloat() * (max - min) + min);
     }
  
 public static void main(String[] args){
  launch(args);
 }

}

Tuesday, August 4, 2015

Hubungan Antara Allah dengan Nomor Atom Besi

Apakah benar alam semesta ini ciptaan Tuhan adalah perdebatan yang tidak ada habisnya. Namun kita hanya bisa melakukan analisa tanpa bisa melakukan  verifikasi lebih jauh. Dalam diskusi mengenai ada atau tidaknya Tuhan ini, saya pernah menjumpai sebuah perdebatan antara muslim dan atheis. Si muslim kemudian mengajukan fakta bahwa ternyata nomor atom besi  jumlahnya sama dengan jumlah kata Allah di dalam Al-Quran. Ini kemudian dijadikan bukti bahwa tidak mungkin seorang badui di padang pasir arab mengadakan bualan semacam ini. Pasti ada the man behind the scene.

Bahasan mengenai mukjizat saintifik dalam Al-Quran pada banyak kasus tidak lebih dari sekedar kajian yang absurd. Hal yang mendasarinya adalah Al-Quran itu bukan kitab sains. Untuk membahas Al-Quran terlebih dahulu kita harus tahu sejarah dibalik penurunan Al-Quran. Kita tidak bisa secara apriori mengatakan bahwa semua “hal-hal aneh” yang terjadi selama penurunan Al-Quran adalah omong kosong (misalnya dengan menganggapnya sebagai bualan Ibnu Ishaq, Ibnu Haytam, Al-Tabari dll) lantaran adanya fakta-fakta sains yang kita temukan. Para ahli sejarah Islam sudah melakukan pengkajian secara komprehensif mengenai kejadian-kejadian yang melatarbelakangi penurunan Al-Quran (beberapa dari mereka adalah orang yang hafal seluruh isi Al-Quran). Hal yang paling maksimal yang bisa kita lakukan hanya sebatas mempelajari peninggalan mereka tersebut dan berprasangka baik terhadap mereka. 

Salah seorang muslim berkata bahwa Al-Quran memaparkan secara detail peristiwa Big Bang: bahwa bumi dan langit pada awalnya bersatu sebelum kemudian dipisahkan. Big Bang sendiri adalah salah satu model yang diajukan ilmuan untuk menjelaskan asal-usul alam semesta. Sementara model hanya bisa bekerja berdasarkan ada atau tidaknya data penunjang. Bisa jadi di kemudian hari diperoleh data-data lain (semisal bencana ultraviolet kedua) yang kemudian merontokkan atau mengkoreksi pemahaman fisis kita saat ini (termasuk model Big Bang tersebut). Sehingga alih-alih Big-Bang, dicari lah model baru dalam menjelaskan asal-usul alam semesta. Dan kemudian ayat Big-Bang itu direinterpretasi kembali dan menghasilkan makna lain dari yang kita imani saat ini.
Secara teologi kita sudah diajarkan, bahwa yang paling tahu tentang isi Al-Quran itu hanya Allah dan Nabi Muhammad. Dan berdasarkan Hadits yang diriwayatkan ke kita, tidak pernah sekalipun Al-Quran itu membahas persoalan Big Bang. Justru pada ayat yang lain, malah Al-Quran mengatakan bahwa antara langit dan bumi itu terdapat tiang-tiang penopang (mudah-mudahan ilmuan muslim masa depan bisa menjelaskan maksud ayat ini). Dan pada ayat yang lain dikatakan lagi bahwa  matahari berputar mengelilingi bumi yang kemudian diperkuat oleh penafsiran Nabi Muhammad mengenai alam semesta (bahwa matahari terbit di timur dan tenggelam di barat kemudian berjalan di bawah tanah untuk kembali lagi ke timur) yang dicatat oleh Shahih Bukhari dan diriwayatkan kepada kita. Nabi Muhammad sama sekali tidak pernah menyinggung soal Big Bang, namun anehnya  kita bisa berbicara sampai sejauh itu mengenai makna ayat-ayat tersebut.

Hal yang menjadi pertanyaan adalah kenapa angka 26 itu mesti dikaitkan dengan nomor atom besi? Nomor atom besi itu menandakan jumlah proton yang berada di dalam inti atom besi. Sementara proton (seperti halnya pada kasus Big Bang) merupakan satu dari sekian model yang diajukan para ilmuan untuk menjelaskan materi besi (dan kebetulan untuk saat ini itulah cara yang paling “benar”).  Pertanyaan selanjutnya adalah kenapa tidak atom besi sebagai sebuah kesatuan saja yang kita hubung-hubungkan dengan angka tersebut (bahwa materi besi tersusun oleh individu-individu atom besi)?

Kita tidak pernah melihat proton. Kita menyimpulkan bahwa besi disusun oleh proton lantaran ketika dilakukan sebuah eksperimen tertentu terhadap materi, terjadi sebuah fenomena tertentu yang teramati.  Fenomena ini kemudian ditafsirkan dengan membuat model yang mengatakan bahwa di dalam atom besi terdapat sebuah inti atom dan inti atom ini tersusun oleh partikel bermuatan positif bernama proton. Kita tidak pernah  melihat proton baik dengan mata fisis kita atau dengan mata batin kita. Karena ternyata mata kita juga disusun oleh proton (mana mungkin proton melihat proton…, bukannya itu sama saja dengan jeruk minum jeruk?).

Kemudian proton juga disusun oleh quark yakni dua top-quark dan satu down-quark, jadi total ada tiga. 3 x 26 = 78, lha… sudah ga sama dong dengan jumlah kata Allah di dalam surat tersebut. Kemudian besi sendiri memiliki beberapa isotop. Setahu saya ada 4 isotop besi di alam. Pertanyaanya adalah besi yang dimaksud di dalam Al-Quran ini isotop yang mana? Tolong pembaca yang paham bahasa arab bisa ga’ diterjemahkan bahwa “sebutan besi” di dalam Al-Quran itu merujuk pada isotop yang mana?

Besi itu unsur yang relatif reaktif yang sering dijumpai dalam bentuk Allotrof. Yang jadi pertanyaan besar untuk para sejarawan adalah apakah besi yang digunakan oleh masyarakat arab jaman Nabi Muhammad untuk membuat pedang, belanga dan berbagai macam keperluan  itu besi murni (dengan nama kimia Fe) atau jangan-jangan besi dengan sekian persen pengotor? Kalo dia mengandung pengotor (dan itu yang dicantumkan di dalam Al-Quran) tentu saja pekerjaan kita dalam menghubungkannya dengan angka 26 ini sangat absurd. Ketika terdapat pengotor, secara umum rumus kimianya sudah berbeda (jumlah proton penyusunnya sudah lebih dari 26).

Saya pernah melihat di internet beberapa pusaka peninggalan Nabi Muhammad, antara lain pedang beliau dan sampai saat ini masih bagus (belum berkarat). Jika demikian halnya maka itu sudah pasti bukan besi. Karena besi unsur yang reaktif. Bisa jadi besi yang dimaksud oleh Al-Quran ini adalah baja. Jika demikian tentu lain ceritanya. Karena baja  adalah gabungan antara besi yang ditambahkan karbon sekian persen untuk menambah kekuatannya. Dan  itu rumus kimianya berbeda dengan besi murni (demikian pula jumlah proton di dalamnya yang juga bukan 26). Itupun kita harus cari tahu apakah “sebutan besi” di dalam Al-Quran ini merujuk pada baja atau bukan.

Bahasa arab (juga bahasa Indonesia) sangat terbatas dalam mendeksripsikan materi yang ada di alam. Jika kita analogikan dengan air (H2O) yang tersusun oleh atom oksigen (O) dan atom hidrogen (H), apakah itu membuat kita mencocok-cocokan timbulnya kata air di dalam Al-Quran dengan jumlah nomor atom oksigen atau atau jumlah proton di dalam atom hidrogen? Bahkan sebutan kasar dalam bahasa Arab terhadap oksigen paling tinggi hanya sebatas udara (angin). Dan kita tahu udara merupakan campuran dari berbagai macam unsur selain oksigen: udara mengandung sekian persen oksigen, sekian persen hidrogen, dan sekian persen uap air.

Hal lain yang sering dikumandangkan oleh para pemikir muslim mengenai keajaiban Al-Quran adalah  jumlah kata laut (tentunya dalam bahasa arab) itu ada 32 dan kata tanah (juga dalam bahasa arab) itu ada 13. Jika dibandingkan kedua bilangan tersebut nilainya hampir sama dengan perbandingan daratan  dan lautan dewasa ini. Kata ‘tanah’ ini tentu perlu diperjelas apakah yang dimaksud adalah bumi (yang tersusun atas 7 lapis seperti yang disinggung oleh ayat yang lain) atau cuma daratan saja. Pembaca tentu lebih tahu struktur bahasa arab. Sebab jika kata tanah ini mengacu pada bumi maka rasionya sudah pasti tidak sama. Air itu hanya menyumbang sekian persen dari volume bumi. Jika yang dimaksud adalah daratan, itu pun perlu diperdebatkan lebih jauh.

Dalam geologi dikenal yang namanya gejala tektonik berupa pergeseran lempeng bumi. Akibat dari gejala ini maka  permukaan bumi mengalami perubahan sepanjang tahun. Akibatnya benua Australia dan Asia yang dulunya menyatu sekarang menjadi terpisah. Tentu rasio daratan dan lautan tidak tetap  sepanjang masa: daerah yang dulunya lautan berubah menjadi daratan demikian pula sebaliknya. Yang jadi pertanyaan adalah apakah rasio yang dimaksud oleh Al-Quran ini adalah rasionya ketika Al-Quran diturunkan, atau rasionya ketika ribuan tahun yang lalu saat sebagian besar permukaan bumi ditutupi oleh permukaan es pada zaman es. Pada zaman es tentu saja rasionya  tidak 30:70, akan tetapi ada sebagian besar daratan yang terbentuk lantaran adanya es. Dan bisa jadi ribuan tahun akan datang zaman es kembali terulang dan rasio daratan terhadap lautan menjadi lebih besar dari  30:70. Demikian pula dataran mengalami penaikan serta penurunan akibat gaya tektonik. Terbentuklah lembah, danau, gunung, palung, dll.

topografi antartika

Pada saat ini pun rasio 30:70 masih diperdebatkan. Pertama, sebagian besar daratan (‘tanah’ jika meminjam terminologi Al-Quran) benua Antartika itu berada di bawah permukaan laut. Ketebalan es di Antartika rata-rata mencapai 2 kilometer. Dengan mengingat bahwa es pada hakikatnya adalah air. Air tentu saja bukan daratan (pembaca bisa cari di google apa bahasa yang digunakan bangsa Arab pada zaman Nabi Muhammad untuk menyebut es). Jika terjadi pencairan besar-besaran es di Antartika (oleh satu dan lain faktor), maka rasio 30:70 ini bakal berkurang karena benua Antartika luasnya berkurang. Adapun benua-benua lainnya di permukaan bumi luasnya juga berkurang karena naiknya permukaan laut, sehingga rasio daratan terhadap lautan juga akan berkurang secara signifikan dari 30:70 tersebut. Akibatnya adalah “mukjizat” tersebut menjadi tidak valid lagi.

jumlah air di permukaan bumi

Ketika 5000 tahun dari sekarang di mana manusia sudah menciptakan peradaban baru. Mereka kemudian menemukan artifak-artifak kuno mengenai keajaiban Al-Quran. Bisa jadi luas daratan pada saat itu sudah jauh berkurang karena naiknya air laut. Mereka akan tahu bahwa mukjizat Al-quran itu hanya ‘cocoklogi’.


(Disadur dari berbagai sumber di internet)

Monday, August 3, 2015

Filsafat Observasi

Sebagai ilmuan tentunya kita punya preferensi dan orientasi dalam meninjau persoalan. Tapi saya percaya bahwa kebenaran itu tidaklah mutlak. Teori hanyalah hampiran terhadap realita yang sesungguhnya. Dahulu kala, sebelum manusia mendaratkan kakinya di bulan, deskripsi alam semesta digambarkan sebagai tinjauan geosentris, bahkan mungkin lebih jauh dari itu: bumi adalah dataran yang rata di mana-mana, dan matahari terbit di timur dan terbenam di barat, kemudian benda-benda langit lainnya berputar mengelilingi bumi. Dan memang benar bahwa jika kita melihat dengan mata fisis kita akan dijumpai hal seperti itu bahwa matahari terbit di timur dan tenggelam di barat. Manusia kemudian mengajukan kritik terhadap model ini. Mereka mempertanyakan lintasan planet-planet yang tidak beraturan. Waktu itu para ahli astronomi sudah mengetahui bahwa selain bintang-bintang terdapat benda langit lain yang bergantungan di atas yang pergerakannya berbeda dengan bintang-bintang secara umum. Mereka namakan ini sebagai “planet” yang secara literal diterjemahkan sebagai pengembara. Berbeda dengan bintang-bintang lainnya yang relatif tetap di tempat sepanjang tahun, ternyata planet-planet ini memiliki lintasan yang tidak regular. Dan ini yang menjadi masalah di kepala para ilmuan.

Soal asal-usul bagaimana manusia mulai mengajukan pertanyaan mengenai benda-benda langit, khususnya benda-benda yang memiliki peran langsung bagi kehidupan sehari-hari bisa dilihat pada bagaimana para petani saat ini mengatur jadwal menanam padi yang disesuaikan dengan pola musim hujan dan musim kemarau sepanjang tahun. Para petani mengamati pergantian musim tahun demi tahun dan mengamati terdapat sebuah aturan yang mendasari pergantian tersebut. Kemudian para petani mencoba mengambil keuntungan dengan adanya pola keteraturan tersebut yakni dengan mengatur waktu penanaman padi sesuai dengan waktu mulainya pergantian musim misalnya mulai menanam ketika mulai musim kemarau demi menghindari gagal panen ketika tiba musim hujan. 

Hal ini kemudian diperluas ke kasus-kasus yang lain. Bahwa selain pergantian musim hujan dan musim kemarau terdapat pula pergerakan planet-planet yang memiliki jadwal tertentu. Bahwa pergerakan ini dipercaya memiliki dampak bagi nasib umat manusia. Tahun demi tahun manusia mengajukan hasil penelitian, mengajukan berbagai macam hasil observasi (pengamatan) serta model-model yang menjelaskan data-data observasi tersebut. Untuk kasus pergerakan planet tadi memang sejak semula banyak para pemikir yang mencoba mencari tahu keteraturannya. Salah seorang pemikir terkenal yang bernama Apollonius kemudian merumuskan sebuah model yang dikenal sebagai  Epicycle dan Defferent demi menjelaskan pergerakan planet tersebut. Dalam model ini terdapat  sebuah lingkaran besar yang kosentris dengan bumi yang disebut dengan deferrent. Kemudian terdapat lingkaran kecil yang mengorbit melalui lingkaran besar ini yang disebut sebagai epicycle. Planet-planet kemudian dikatakan bergerak pada epicycle tersebut. Teori ini kemudian berhasil menjelaskan pergerakan 5 planet yang diketahui pada saat itu. Namun apa yang dilakukan oleh teori ini hanya sebatas penjelasan secara kinematis. Jika kita mencermati data-data pengamatan planet-planet di angkasa maka akan terdapat 3 variabel utama yang bisa diukur yakni posisi, kecepatan, dan percepatan. Kecepatan dan posisi merupakan variabel kinematis. Sementara percepatan sudah ada sangkut pautnya dengan gaya sehingga disebut variabel dinamika. Percepatan inilah yang sulit dijelaskan dengan konsep geocentris, khususnya dengan menggunakan model epicycle.

Model selanjutnya yang digagas oleh para saintis adalah model heliosentris. Model ini awalnya juga mendapat banyak tantangan. Salah satu hal yang dipertanyakan adalah jika memang model ini benar, maka seharusnya  dijumpai parallax bintang oleh pengamat yang berada di bumi seiring dengan perubahan posisi pengamatan pengamat di bumi. Namun karena tidak adanya parallax bintang yang teramati, maka dapat disimpulkan bahwa bumi stasioner atau tidak mengalami pergerakan. Pada akhirnya di abad ke-18 ilmuan dapat mengukur parallax bintang kendatipun sangat kecil yang konsekwensinya adalah jarak antara bumi dan bintang-bintang tersebut sangatlah jauh. Sehingga ini makin menguatkan konsep heliosentris. Aplikasi dari konsep heliosentris ini kemudian yang digunakan oleh para ilmuan dalam mendaratkan pesawat ruang angkasa di Mars dan di bulan yang sama sekali sulit dilakukan jika menggunakan tinjauan geosentris. 

Konsep heliosentris kemudian disempurnakan oleh Johannes Kepler  dengan mengganti lintasan planet yang semula diasumsikan berbentuk lingkaran menjadi berbentuk elips di mana matahari berada pada salah satu titik fokus dari elips tersebut. Salah satu Hukum Kepler menyatakan bahwa ketika planet bergerak maka luas area yang disapu oleh garis yang menghubungkan antara planet dengan matahari sama besarnya untuk kurun waktu yang sama. Oleh Newton kemudian dilakukan penjelasan bahwa ini disebabkan oleh gaya gravitasi yang diberikan oleh matahari terhadap planet-planet tersebut. Dan pergerakan planet ini merupakan konsekwensi logis dari gaya gravitasi.