Pages

Thursday, June 12, 2025

Subrutin dalam program seumpama mesin dalam kilang

 * Penulisan ini disunting daripada nota asal berkaitan pengaturcaraan yang saya tulis dan kongsikan kepada pelajar saya di UPM, CCS3100 Penyelesaian Masalah dan Konsep Pengaturcaraan, Jun 2025 *


Membina subrutin atau metod

Membina subrutin dan metod dalam program seumpama mereka bentuk sebuah kilang. Sebagai contoh, sebuah kilang untuk penghasilan kertas.

Penghasilan kertas memerlukan proses*, 

  1. mengumpulkan kayu,
  2. memecahkan dan mericih kayu kepada kepingan kecil,
  3. melembutkan kepingan kepada pulpa kayu,
  4. menekan pulpa menjadi lembaran kertas,
  5. mengeringkan lembaran kertas, dan
  6. membungkus kertas untuk penghantaran.

(*ini hanya gambaran kasar, saya bukan pakar bidang pembuatan kertas)

Sekarang, bayangkan anda (pelajar) sebagai seorang jurutera yang ditugaskan untuk mereka bentuk sebuah kilang untuk menghasilkan kertas. Apa yang anda akan lakukan?

Tentunya anda akan mereka bentuk jalur paip proses, untuk melakukan proses (1) hingga proses (6) seperti berikut:

Setiap proses dalam jalur paip akan dilaksanakan oleh suatu seksyen atau suatu mesin.

Setiap seksyen / mesin akan menerima input daripada seksyen / mesin sebelumnya, dan menghasilkan output untuk seksyen / mesin seterusnya. Seksyen / mesin akhir untuk proses (6) akan menghasilkan output akhir, iaitu kertas.

Subrutin / metod juga seperti seksyen / mesin dalam kilang. Ia akan melakukan tugas atau proses spesifik untuk program utama. Metod akan menghasilkan output untuk proses seterusnya atau produk akhir.

Sebagai pengatur cara, anda mereka bentuk dan menyusun 'mesin-mesin' (metod) di dalam program supaya mesin tersebut dapat bekerjasama untuk memproses input awal hingga menghasilkan output akhir.

Untuk membina kilang, adakala anda hanya memasang terus mesin-mesin sedia ada untuk kilang. Adakala anda perlu mengubah suai mesin sedia ada sebagai mesin custom, atau membina mesin baharu untuk kilang tersebut.

Samalah juga dengan program. Adakala anda hanya perlu guna (panggil) metod sedia ada untuk program anda. Adakalanya anda perlu mengubah suai metod sedia ada sebagai metod custom, atau membina membina baharu untuk program.


Perkongsian merentas metod menggunakan pemboleh ubah global

Pemboleh ubah global atau sejagat seumpama membenarkan perkongsian produk untuk pemasangan merentas jalur pair dalam sebuah kilang.

Mesin dalam jalur paip sentiasa memerlukan input, sama ada input dari luar, atau input daripada mesin sebelumnya (dalam jalur paip).

Mesin dalam jalur paip juga perlu menghasilkan output, sama ada output untuk mesin seterusnya dalam jalur paip, atau output sebagai produk akhir.

Berkongsi produk yang sama merentas jalur paip memudahkan pemprosesan.

Bayangkan enjin kereta yang melalui siri proses pemasangan untuk memasukkan wayar, gear, komponen-komponen kecil, dsb. seperti berikut (* sekali lagi, hanya gambaran kasar *):

Setiap proses dalam jalur paip bebas untuk mencapai enjin yang sama, untuk mengubah suai atau mengambil enjin tersebut untuk pemprosesan berbeza.

Ini akan membolehkan hasil daripada pemprosesan semasa dikongsi untuk pemprosesan seterusnya sehinggalah produk dapat disiapkan.

Metod juga boleh berkongsi pemboleh ubah (global) untuk memudahkan pemprosesan bagi suatu program. Hal ini sama seperti berkongsi enjin merentas proses dalam jalur paip pemasangan enjin.

Walau bagaimanapun, ini bukanlah reka bentuk terbaik untuk metod, walaupun mudah untuk direka bentuk berbanding penggunaan parameter dan nilai pulangan.


Parameter dan nilai pulangan untuk metod seumpama input dan ouput untuk mesin

Mesin sentiasa perlukan input, sama ada input daripada luar, atau input daripada mesin sebelumnya. Mesin juga perlu hasilkan output, sama ada output untuk mesin seterusnya dalam jalur paip, atau output sebagai produk akhir.

Metod juga perlu menerima input daripada luar program (cth: pengguna) atau metod sebelumnya yang berada dalam 'jalur paip'.

Parameter ialah input yang diterima oleh metod daripada  metod lain (sebelumnya). Parameter akan membolehkan suatu metod menjadi lebih fleksibel, yang mana ia dapat melakukan process yang sama untuk pelbagai jenis nilai (sebagai inputnya).

Metod juga perlu menghasilkan output ke luar program (cth: pengguna, sebagai produk akhir) atau kepada metod seterusnya yang berada dalam 'jalur paip'.

Nilai pulangan ialah output yang dihasilkan oleh metod untuk metod lain (seterusnya). Nilai pulangan membolehkan suatu metod menyampaikan hasil kepada metod lain di dalam program yang sama.

Pemboleh ubah sejagat atau global mudah untuk diimplimentasi, tetapi susah untuk diubah suai sekiranya terdapat pepijat dalam program.

Tetapi dengan menggunakan parameter dan nilai pulangan, dapat memastikan tiada pemboleh ubah yang dikongsi sebagai global atau sejagat, sekaligus menjadikan suatu metod terasing dan mudah untuk diubah suai.


Lain kali, apabila anda membina program Java, fikirkan seolah anda sedang membina kilang!


Monday, September 09, 2024

Penulisan Majalah #8 - Dewan Kosmik - 07/2024


Membasmi Pepijat Dan Mencegah Ralat Perisian

Penulis: Mohd Yunus Sharum

Majalah Dewan Kosmik, edisi 07/2024, pp 46-49

https://jendeladbp.my/ujana/dewan-kosmik-julai-2024/



Penulisan Majalah #7 - Dewan Kosmik - 03/2024


Teknik Pengaturcaraan Untuk Perisian Rentas Platform

Penulis: Mohd Yunus Sharum

Majalah Dewan Kosmik, edisi 03/2024, pp 52-55





Penulisan Majalah #6 - Dewan Kosmik 10/2023


Teknologi Pengkompilan Merentas Platform Untuk Pembangun Perisian

Penulis: Mohd Yunus Sharum

Majalah Dewan Kosmik, edisi 10/2023, pp 14-17





Penulisan Majalah #5 - Dewan Kosmik - 07/2023


Perisian Dan Kecerdasan Buatan Menyokong Automasi Kerja

Penulis: Mohd Yunus Sharum

Artikel Fokus, Majalah Dewan Kosmik, edisi 07/2023, pp 4-9





Penulisan Majalah #4 - Dewan Kosmik - 01/2023


Evolusi Teknologi Pengaturcaraan Komputer

Penulis: Mohd Yunus Sharum

Majalah Dewan Kosmik, edisi 01/2023, pp 54-57

https://jendeladbp.my/ujana/dewan-kosmik-januari-2023/



Penulisan Majalah #3 - Dewan Kosmik - 11/2022


Pembangunan Aplikasi Penilaian Ergonomik

Penulis: Muhammad Dazriq Iqramie Mohd Zuki (BSK-SK UPM), Mohd Yunus Sharum

Majalah Dewan Kosmik, edisi 11/2022, pp 34-36





Penulisan Majalah #2 - Dewan Kosmik - 07/2022


Sistem Pengoperasian Yang Tidak Pernah Letih

Penulis: Mohd Yunus Sharum

Majalah Dewan Kosmik, edisi 07/2022, pp 46-49



Penulisan Majalah #1 - Dewan Kosmik (atas talian) - April 2022


Isu Privasi Dan Keselamatan Data Pengguna Dalam Teknologi Metaverse

Penulis: Mohd Yunus Sharum

Majalah Dewan Kosmik (versi atas talian), edisi April 2022

https://dewankosmik.jendeladbp.my/2022/04/21/2779/


Saturday, September 07, 2024

Menggunakan JavaFX dalam IDE Eclipse

* Kiriman ini telah dikemaskini pada 8 Sept 2024.

NOTA: Bagi melaksanakan penerangan di bawah, diandaikan Java JDK dan IDE Eclipse sudah dipasang. Jika belum, pemasangnya boleh dimuat turun dari laman web Eclipse : 

Logo IDE Eclipse (sumber: www.eclipse.org)

JavaFX ialah pustaka antara muka pengguna (GUI, atau graphical user interface) untuk aplikasi yang dibina menggunakan bahasa Java. JavaFX membolehkan aplikasi Java dibina dengan GUI yang sesuai untuk aplikasi terkini yang amnya memerlukan fleksibiliti merentas peranti paparan yang bersifat pelbagai ragam atau bentuk.

Logo JavaFX (sumber: Internet)


Membina GUI dengan JavaFX memerlukan pustaka JavaFX. Pustaka ini dipasang berasingan daripada kit pembangunan Java (JDK, atau Java Development Kit) kerana JavaFX tidak digabungkan sebagai pustaka standard JDK. Hal ini berbeza jika dibandingkan dengan pustaka GUI Java lain iaitu Swing dan AWT yang mana digabungkan dan dipasang bersama JDK.

IDE Eclipse boleh menyokong penggunaan pustaka JavaFX tetapi memerlukan konfigurasi tambahan selepas pustaka JavaFX dipasang. Jika tidak dibuat, Eclipse tidak dapat menggabungkan proses pembinaan atur cara Java bersama JavaFX. Maka penggunaan kod JavaFX dalam atur cara akan menyebabkan ralat sintaks.

Pemasangan JavaFX memerlukan EMPAT langkah am berikut:
  1. Memasang plugin e(fx) Eclipse 
    • e(fx) ialah plugin yang membolehkan projek berkaitan JavaFX dibina / diurus oleh Eclipse.
  2. Memuat turun dan memasang pustaka JavaFX 
    • JavaFX ialah pustaka yang diperlukan untuk membina aplikasi Java denga GUI JavaFX.
  3. Membina komponen pustaka JDK dengan JavaFX dalam Eclipse
    • komponen ini diperlukan oleh pengkompil JDK semasa pembinaan / pengkompilan Java di dalam Eclipse.
  4. Membina komponen JRE (mesin maya) dengan JavaFX dalam Eclipse
    • komponen ini diperlukan untuk melaksanakan aplikasi Java dengan JavaFX dari dalam Eclipse (pengujian).

Berikut adalah langkah-langkah pemasangan JavaFX untuk digunakan dalam IDE Eclipse. 

Langkah 1: Memasang plugin e(fx) Eclipse

  1. Buka Eclipse dan pilih 'Help' kemudian 'Install New Software' daripada bar menu.
  2. Tekan bebutang 'Add'.
  3. Isikan nama yang sesuai untuk mengambarkan sumber pemasangan plugin (cth: 'efx nightly build') pada kotak input 'Name'.
  4. Isikan URL https://download.eclipse.org/efxclipse/updates-nightly/site/ pada kotak input 'Location'.
  5. Tekan bebutang 'Add'. 
  6. Senarai pustaka akan dipaparkan. Pilih semua item 'e(fx) ...' yang disenaraikan dan tekan bebutang 'Finish'.
  7. Pustaka e(fx) akan dimuat turun dan dipasang. Pemasangan ini mungkin memerlukan masa dan tunggu saja sehingga selesai (lihat status pemasangan di penjuru kanan, bawah).

Langkah 2: Memuat turun / memasang pustaka JavaFX

  1. Muat turun pemasang JavaFX (*.zip, pakej SDK) daripada laman web JavaFX cth: https://jdk.java.net/javafx22/ (ketika artikel ini ditulis versi 22 adalah yang terkini)
  2. Ekstrak fail pustaka ke dalam direktori yang akan digunakan untuk pembangunan (cth: c:\users\USER\javafx-sdk\). 
Apabila diekstrak, direktori c:\users\USER\javafx-sdk\javafx-sdk-22.0.2 akan diwujudkan (bergantung kepada pustaka yang dimuat turun) dan turut mengandungi subdirektori 'lib'. Subdirektori ini mengandungi fail-fail pustaka yang diperlukan untuk pembinaan dan pelaksanaan aplikasi JavaFX.


Langkah 3 : Membina komponen pustaka JDK dengan JavaFX dalam Eclipse

  1. Buka IDE Eclipse.
  2. Pilih 'Window' kemudian 'Preferences' di bar menu.
  3. Dalam tetingkap yang terpapar, lihat senarai di sebelah kiri. Pilih 'Java' kemudian 'Build Path' dan seterusnya 'User Libraries'.
  4. Tekan bebutang 'New' dan tuliskan nama untuk pustaka baharu (cth: 'Pustaka JavaFx 22'). Tekan bebutang 'OK'.
  5. Pilih nama pustaka baharu daripada senarai yang dipaparkan ('Pustaka JavaFx 22'). Kemudian tekan bebutang 'Add External JARs...'.
  6. Cari dan dapatkan semula direktori yang mengandungi pustaka JavaFX yang dipasang dalam Langkah 2 (c:\users\USER\javafx-sdk\javafx-sdk-22.0.2). Buka subdirektori 'lib'.
  7. Pilih semua fail dengan sambungan *.jar. Kemudian tekan bebutang 'Open'.
  8. Tekan bebutang 'Apply and Close'. Pustaka JavaFX yang diperlukan sepatutnya sudah terbina dengan nama 'Pustaka JavaFx 22'.
NOTA: Penetapan ini bersifat global dan akan digunakan bagi sebarang projek yang dibina dalam ruang kerja Eclipse yang sama. Jika anda ingin menggunakan pustaka JDK tanpa JavaFX, ulang langkah 3.1 hingga 3.3, dan pilih pustaka JDK asal.


Langkah 4: Membina komponen JRE (mesin maya) dengan JavaFX dalam Eclipse

  1. Pilih 'Window' kemudian 'Preferences' daripada bar menu.
  2. Dalam tetingkap yang terpapar, lihat senarai di sebelah kiri. pilih 'Java' kemudian 'Installed JREs'. 
  3. Pilih nama pustaka JRE yang dipaparkan. Pustaka sedia ada ini akan dijadikan salinan untuk JRE dengan JavaFX. (NOTA: Sepatutnya terdapat sekurang-kurangnya satu JRE asas disenaraikan, yang dipasang bersama pakej Eclipse dengan JDK)
  4. Tekan bebutang 'Duplicate'.
  5. Dalam tetingkap yang terpapar, tukarkan kandungan kotak input 'VM Name' kepada nama yang sesuai untuk menamakan JRE VM baharu. Contoh JRE JavaFx.
  6. Di dalam kotak input 'Default VM Arguments' tuliskan teks berikut:
    --module-path c:\users\USER\javafx-sdk\javafx-sdk-22.0.2\lib --add-modules javafx.controls,javafx.fxml 
    (NOTA: Teks merah c:\users\USER\javafx-sdk\javafx-sdk-22.0.2 ialah direktori di mana JavaFX dipasang semasa Langkah 2. Pastikan ia sama dengan lokasi JavaFX yang anda pasang. Jika tidak ralat akan berlaku semasa penggunaan JRE)
  7. Tekan bebutang 'Add External JARs'. 
  8. Pilih semua fail dengan sambungan *.jar. Kemudian tekan bebutang 'Open'.
  9. Tekan bebutang 'Finish'. Mesin maya JRE dengan JavaFX yang diperlukan sepatutnya sudah terbina dengan nama 'JRE JavaFx'.


Selepas ini apa yang perlu dilakukan?

Selepas JDK dengan JavaFX dan JRE dengan JavaFX sudah disediakan, projek JavaFX sudah boleh dibina. 
  1. Pada bar menu, pilih 'File', 'New' kemudian 'Other'. 
  2. Daripada senarai yang terpapar, pilih 'JavaFX Project'.
  3. Tekan bebutang 'Next'.
  4. Isikan nama projek yang sesuai pada kotak input 'Project name'.
  5. Pada bahagian / seksyen 'JRE' di bawahnya, pada bulet 'Use a specific project JRE', pilih JRE yang dibina daripada Langkah 4 - 'JRE JavaFx'.
  6. Pada bahagian / seksyen, pastikan 'Create module-info.java file' tidak ditanda. 
    • Fail ini ialah fail konfigurasi projek. Sekiranya diperlukan kelak, ia masih boleh dibuat secara manual selepas projek dibina.
  7. Tekan bebutang 'Finish'. Projek untuk pembangunan Java dengan JavaFX akan dibentuk.

Itu saja. Seterusnya atur cara berkaitan JavaFX sudah boleh dibina, dikompil dan diuji. Selamat mencuba.


Wednesday, July 20, 2022

GNU - Sistem Pengoperasian Bebas Hakmilik

Amnya GNU merupakan pakej perisian yang diuruskan oleh Free Software Foundation (FSF) - https://www.fsf.org/. FSF merupakan sebuah yayasan yang diasaskan oleh Richard Stallman, yang mana merupakan seorang pengatur cara komputer dan aktivis. Stallman dianggap ikon dalam kalangan mereka yang memperjuangkan idealisme perisian bebas (free software) dan berasaskan kod sumber terbuka (open source). 

Nama GNU merupakan akronim kepada 'GNU's not Unix', dan disebut dengan sebutan /gnu/. Mungkin kerana persamaan sebutan, GNU mengetengahkan haiwan gnu sebagai maskot rasminya. Lukisan di bawah ini merupakan lambang maskot GNU yang dihasilkan oleh Etienne Suvasa.


Berbanding sistem pengoperasian lain, GNU dianggap unik kerana GNU bukan semata-mata sistem pengoperasian atau perisian tetapi turut dianggap projek dan manifestasi kepada idealisme 'semua perisian adalah bebas untuk semua orang'.

Pakej GNU (https://directory.fsf.org) merupakan koleksi perisian lengkap dan bebas hak milik. Asalnya koleksi ini bertujuan menyediakan sistem pengoperasian selain menawarkan pelbagai perisian utiliti dan aplikasi yang biasa ditemui dalam kebanyakan sistem (spesifiknya, yang berasaskan Unix). 

Sehingga kini, selain sistem pengoperasian, pakej GNU turut menaungi lebih dari 16,000 projek perisian merangkumi perisian sistem, utiliti dan aplikasi termasuk pemproses perkataan, penyunting grafik, pengkompil dan lain-lain. Pendek kata, dengan memilih pelbagai perisian percuma GNU dan memasangnya ke dalam sebuah komputer, komputer tersebut boleh beroperasi sepenuhnya dan memenuhi kebanyakan keperluan asas pengguna, selain perisian itu bebas untuk dikongsi dan dikemas kini.

Sesiapa saja bebas menggunakan, menyalin, mengedar dan menyunting perisian dalam pakej GNU, selagi pengguna mematuhi syarat dan terma dalam Lesen Awam Umum (General Public License) atau GPL, yang digelar sebagai copyleft. Syarat ini memastikan perisian GNU kekal bebas walaupun selepas disunting.

Walau bagaimanapun GNU masih dikenali sebagai pakej sistem pengoperasian. Sistem pengoperasian GNU menggunakan kernel libre Linux, dan turut dikenali sebagai GNU/Linux. Ini kerana GNU belum mempunyai kernel sendiri. Pakej ini boleh dimuat turun dari https://www.gnu.org/gnu/gnu.html. Secara keseluruhan, sistem pengoperasian GNU/Linux nampak sama saja dengan pakej Linux dan sistem berasaskan Unix.

Selain menggunakan kernel Linux, GNU ada menaungi projek pembangunan kernelnya sendiri yang dinamakan Hurd. Hurd ialah kernel yang dibangunkan menggunakan rekabentuk mikrokernel dan sistem pengoperasian Mach. Tetapi disebabkan Hurd masih dianggap dalam peringkat pembangunan, maka GNU menggunakan kernel Linux. Pada masa depan Hurd dijangka akan dapat digunakan dan menggantikan kernel Linux sebagai kernel GNU.


.



Thursday, February 13, 2020

Cara untuk berjaya di peringkat Master atau PhD


Saya ni bukanlah pakar sangat dalam penyelidikan. Tapi saya ada la sikit ilmu dan pengalaman yang boleh saya kongsikan berkaitan hal ini. Kalau rasa berguna, ambillah. Saya tak jaminlah pasti berjaya, cuma kalau ada panduan lebih baik daripada tak ada.

Harapan saya ialah dengan sedikit perkongsian ini, dapat membantu anda atau sesiapa yang berminat untuk sambung belajar ke peringkat Master atau PhD (saya gabungkan sebagai pascasiswazah). Setidaknya tidaklah sampai tercari-cari atau main 'terjun' saja tanpa persediaan bila mendaftar.

Pengajian pascasiswazah amnya ada dua bentuk - kerja kursus (sama konsepnya macam pengajian diploma atau bacelor) dan penyelidikan. Ada juga program pascasiswazah yang gabung 2-dalam-1 (buat tesis penyelidikan tapi kena ambil kelas). Panduan yang saya nak kongsi ni lebih kepada 'strategi' untuk program jenis penyelidikan. Untuk Master paling ideal ialah 3 tahun, PhD 4 tahun.

Konvokesysen untuk pelajar PhD UPM. Gambar hiasan.
Kredit foto : http://sgs.upm.edu.my
Bila kita buat penyelidikan, fokus dan niat kita apa? Fokus kita ialah untuk selesaikan masalah, isi kekurangan yang wujud. Masalah di mana, konteks apa? Masalah dalam sesuatu bidang. Misalnya dalam bidang sains komputer. Nak selesaikan semua? Tidak. Kita akan fokuskan pada 1 sub bidang. Misalnya dalam sains komputer ada bidang keselamatan perisian. Sub bidang ini pun masih luas. Kena fokus lagi supaya cukup dan sesuai dengan masa yang terhad.

Jadi kecilkan skop, misalnya keselamatan penimbal bagi sistem pengoperasian. Jangan pula terlalu kecil sebab skop penyelidikan pascasiswazah tidak boleh terlalu kecil dan tidak boleh terlalu besar. Macam mana nak tahu? Biasanya penyelia boleh nilaikan atau berdasarkan kajian literatur (baca kajian orang lain, akan tahu). Ini disebut latar belakang kajian.

(Trivia - TAHUKAH ANDA? Belajar peringkat Master dan PhD bukan untuk dapat status yang tinggi atau gelaran. Itu salah niat. Sebaliknya niat kita ialah untuk menyumbang kepada body of knowledge untuk kebaikan masyarakat. Juga, matlamat bidang akademik tidak sama dengan matlamat industri. Akademik matlamatnya ialah ilmu baharu, industri cari produk baharu atau untung) 

Skop saja belum cukup. Kita perlu kenal pasti secara spesifik masalah apa yang nak diselesaikan dalam skop tersebut. Masalah ini pula tidak boleh main agak saja. Berdasarkan pembacaan dan kajian literatur (secukupnya, bukan setakat 4-5 makalah), kita pilih masalah. Daripada pembacaan, kita tentukan masalah apa yang orang dah selesaikan dan masalah apa yang belum selesai. Mesti pilih masalah yang belum selesai dan sebaiknya ramai penyelidik yang ingin selesaikan.

Misalnya, masalah keselamatan penimbal dalam sistem pengoperasian dah lama diselesaikan. Kalau kita pilih tajuk ini, pasti akan gagal sebab dah bukan dianggap masalah. Tapi mungkin masalah yang berlaku, prestasi penimbal yang selamat itu perlahan. Jika ditambah kaedah baru atau unik, dan bertambah laju, maka baru boleh dianggap penemuan baru. Maka masalah kajian yang ingin diselesaikan ialah meningkatkan prestasi penimbal selamat dalam sistem pengoperasian. Ini disebut sebagai pernyataan masalah.

Daripada pernyataan masalah, kita bina objektif kajian. Masalah yang dikenal pasti, prestasi penimbal perlahan. Objektifnya, untuk selesaikan masalah ini dengan pertingkatkan kelajuan penimbal. Dengan cara apa? Mungkin (sebab kita tak pasti tapi rasa macam boleh) dengan cara gunakan algoritma X (contoh). Ini disebut hipotesis. Maka objektif kajian dinyatakan sebagai meningkatkan prestasi penimbal selamat dalam sistem pengoperasian menggunakan algoritma X. (pernyataan hipotesisnya berbentuk dakwaan atau andaian iaitu algoritma X dapat  meningkatkan kelajuan penimbal selamat dalam sistem pengoperasian.)

Andaikan kita pilih objektif di atas. Di akhir tempoh penyelidikan, kita perlu capai objektif. Bermakna kita kena buktikan (kalau sains komputer, dengan bukti empirikal atau matematik) bahawa algoritma X dapat meningkatkan prestasi penimbal selamat dalam sistem pengoperasian. Maka bila kita buat objektif, pastikan kita tahu macam mana yang dikatakan prestasi meningkat. 

Amnya, cara pembuktian empirikal dengan eksperimen perlu ikut langkah berikut:
  1. Kenal pasti tujuan dan kaedah eksperimen (objektif kita ukur prestasi penimbal)
  2. Kenal pasti unit ukuran dan 'benchmark' yang telah dicapai oleh orang lain (cth. prestasi penimbal diukur dalam ukuran 'bait dihantar per saat', dan kelajuan yang dah orang capai ialah 1 Megabait dihantar per saat. Objektif kita perlu lebih laju, maka mesti capai lebih laju daripada 1 Megabait per saat. Julat beza juga mesti signifikan, misalnya > 5%. )
  3. Dapatkan ukuran data dan hasil eksperimen, yang boleh sokong objektif. Misalnya, kita nak ukur kelajuan maka data itulah yang kita kumpul. 
  4. Kemudian buat kesimpulan berdasarkan data, bukan ikut logik akal saja (apatah lagi menipu dengan memanipulasi data, jangan!). Kalau hasil data menunjukkan memang laju bertambah, maka kita dah buktikan kelajuan bertambah, maka tercapailah objektif. Kalau tak tercapai, kita boleh ulang eksperimen (mungkin sebelum tu salah cara) atau cuba tambah baik (algoritma X tak berjaya, guna algoritma Y pula) sampai kita dapat capai 'laju bertambah'. (kalau algoritma Y yang berkesan, kita tulis semula objektif)
  5. Wajib tahu alasan bagi pemilihan kaedah, unit ukuran dan 'benchmark', dan alasan kesimpulan eksperimen atau kajian yang kita buat. Sebab bila sampai waktu viva (pertahankan hasil kajian), kalau tak boleh bagi alasan, bye-bye, atau lanjutkan pengajian.

Sekiranya ekperimen kita (disokong oleh data dari hasil eksperimen) menunjukkan memang laju penimbal bertambah dengan algoritma X, maka kita simpulkan hipotesis kita benar. Maka tercapailah objektif. Lepas tu dah bolehlah tulis dan hantar tesis, lalui pemeriksaan viva dan lulus viva itu dan seterusnya kita boleh dapat Master atau PhD. Beza Master atau PhD ialah masalah yang kita selesaikan itu masalah fundamental (PhD) atau hampir fundamental (Master). Misalnya kalau objektif tambah prestasi penimbal dengan algoritma X itu belum fundamental maka layak dapat Master saja. Tapi kalau masalah tu memang fundamental (algoritma X tak pernah digunakan untuk tambah kelajuan penimbal) maka layak dapat PhD sebab sumbangan dianggap besar dan baharu.

Diharap dengan penerangan ini, dapat memberi gambaran macam mana nak mulakan usaha mengejar Master atau PhD.

Kalau suka penulisan ini atau dirasakan berguna, silalah bagi komen dan pandangan. Juga sampaikanlah pada orang lain. Kalau banyak respons saya sambung lagi dengan info yang lebih berguna (inshaAllah), yg saya tahu. 

(Kadang-kadang bergantung pada nasib. Ada universiti yang mudah lepas, dan ada yg sangat cerewet nak lepas begitu saja. Biasalah,sistem ciptaan manusia. Tapi sebagai penyelidik yang beretika kita buat sebaik dan sejujur mungkin, dan selebihnya kita doalah supaya Allah bagi kita rezeki)

Tuesday, February 11, 2020

Morfotaktik dan kaedah pengimbuhan Bahasa Melayu

Jangan pelik. Walaupun minat dan aktiviti penyelidikan saya tertumpu kepada bidang sains komputer, saya juga turut mengkaji bidang linguistik yang mengkhusus kepada morfologi. Cuma tidaklah ke tahap pakar. Adalah tulis satu atau dua makalah. Antaranya boleh baca di sini dan di sini [1]

Dalam penulisan ini saya nak bercerita hal berkaitan pembentukan perkataan dalam bahasa Melayu iaitu pengimbuhan. Tetapi bukan menerangkan kaedah pengimbuhan, sebab sudah ramai yang menulis tentang pengimbuhan (cuba Google). Tapi dalam penulisan ini saya menumpukan kepada menjelaskan konsep yang kurang diperkatakan orang iaitu morfotaktik.

Morfotaktik ialah suatu konsep dalam linguistik, yang merujuk kepada peraturan yang terpakai (atau diguna pakai) dalam proses pembentukan perkataan yang melibatkan imbuhan. Istilah ini jarang kita dengar kerana selalunya digunakan dalam kalangan ahli morfologi (pengkaji perkataan) saja.

Dalam bahasa Melayu ada beberapa jenis proses dan kaedah pembentukan perkataan. Antara yang dominan ialah pengimbuhan. Satu lagi yang dominan ialah penggandaan. Disebabkan ini, maka bahasa Melayu digolongkan sebagai bahasa aglutinatif. Maka pembentukan perkataannya juga turut melibatkan morfotaktik. 

(Trivia - Tahukah anda? Bahasa aglutinatif adalah famili bahasa yang turut merangkumi  bahasa Melayu, Turki dan Jerman. Bahasa Inggeris pula tergolong dalam bahasa inflektif, seperti bahasa Arab dan Hebrew. Bahasa isolatif ialah bahasa yang perkataannya berasaskan suku kata seperti bahasa Jepun dan Cina. Famili bahasa ini dibentuk berdasarkan proses dan bentuk perkataan yang dominan dalam bahasa-bahasa tersebut)

Amnya bahasa Melayu mengandungi 4 proses pengimbuhan iaitu:
(bahagian yang ditebalkan ialah imbuhannya)
  • Awalan - cth: membaca, penulis, mendengar 
  • Akhiran - cth: tulisan, keratan, punyai
  • Apitan - cth: membezakan, perkataan 
  • Sisipan - cth: gerigi, cerucuk, telunjuk

Pengimbuhan ialah proses mencantumkan kata akar dengan imbuhan untuk membentuk perkataan. Proses pengimbuhan ini pula berlaku mengikut peraturan tertentu (morfotaktik). Ini bermakna pengimbuhan tidak berlaku secara bebas atau sembrono, dan tidak boleh dilakukan sesuka hati. Misalnya imbuhan -an tidak boleh dicantumkan sebelum kata akar. Tempatnya hanya selepas kata akar. Misalnya anggaran, sisipan, makanan dsb. Begitu juga awalan (imbuhan sebelum akar) dan apitan (imbuhan wujud di kiri dan kanan akar) yang berlaku mengikut peraturan masing-masing.

Proses morfotaktik bagi sisipan (imbuhan terselit di celah kata akar) masih kurang jelas asas pembentukannya. Cuma yang boleh dikatakan mengenai pengimbuhan sisipan dalam bahasa Melayu ialah imbuhan hanya wujud (tersisip) selepas konsonan pertama kata akar. Misalnya imbuhan sisipan -er-, -el-, -em-. Namun secara amnya dipercayai proses sisipan juga ada morfotaktik yang tertentu.

(Trivia - Tahukah anda? Kata akar dan imbuhan ialah golongan morfem. Morfem ialah unit dalam perkataan yang mempunyai makna yang tertentu. Ini bermakna bukan kata akar saja yang ada makna, tetapi juga imbuhan. Misalnya imbuhan me- ialah morfem yang memberi maksud 'perbuatan' atau kata kerja. Ini bermakna apa saja yang dicantumkan dengan me- akan jadi perbuatan cth. membaca, mentakrif dsb.)

Siapakah yang mencipta morfotaktik bahasa Melayu? Morfotaktik bahasa Melayu bukan dicipta oleh sesiapa. Ianya terkandung dalam bahasa Melayu sejak dahulu. Ahli bahasa (spesifiknya ahli morfologi) mentakrifkan peraturan ini berdasarkan ciri dan sifat yang sudah wujud dalam bahasa, kemudian mengkelaskan ciri tersebut kepada pengkelasan seperti yang ada sekarang.

Kalau di Malaysia, pihak Dewan Bahasa dan Pustaka ada menerbitkan buku Tatabahasa Dewan. Walaupun bukan khusus tentang morfotaktik (ianya lebih kepada memerihalkan nahu bahasa Melayu), buku ini harus dijadikan rujukan untuk memahami peraturan morfotaktik yang mendasari proses pengimbuhan dalam bahasa Melayu. Antara rujukan lain yang patut dibaca ialah buku Morfologi (terbitan PTS) karangan Prof Emeritus Dr. Abdullah Hassan.

---


NOTA KAKI

[1] Terima kasih  kepada mentor saya, Prof Madya Dr. Zaitul Azma Zainon Hamzah, FBMK, UPM yang banyak mendorong minat dan mengajar saya dalam bidang linguistik dan morfologi. Ironinya waktu saya bersekolah menengah dulu, subjek Bahasa Melayulah yang paling saya tak suka (walaupun cikgunya sangat baik dan berdedikasi). Saya sangat malas buat kerja sekolah Bahasa Melayu hingga didenda jalan itik di koridor! Kenangan... :)


Sunday, February 09, 2020

'Tolong bagi saya A'




(sumber foto: internet) 
Realiti masyarakat hari ini, 'dapat A' itu dianggap seolah-olah sebagai suatu matlamat pendidikan. Ada ketikanya saya melihat pelajar hari ini seolah-olah terlalu 'mendewakan' A. Begitu juga dengan mak bapaknya. Daripada UPSR, PT3, SPM, dan entah apa lagi, semua sibuk membilang A. Bahkan pelajar TASKI pun ada mak bapak yang susah hati kalau anak tak dapat A. Walaupun sudah ada kesedaran, namun budaya ini masih berterusan. 

Di universiti pun tak kurang taksubnya. Pelajar bersungguh-sungguh merayu supaya diberi A. Kalau tidak dapat A seolah-olah tak belajar apa-apa. Bahkan, saya yakin dan pasti, sekarang ini ada yang dah menganggap masa depannya gelap kalau tak dapat A. (saya tak mahu kaitkan dengan kes pelajar bunuh diri, sebab boleh jadi itu disebabkan faktor lain) 

Baguskah ada mentaliti macam ni, mengagungkan A? Sebagai pendidik, saya melihat ini satu perkembangan yang tidak baik. Bahkan dah jadi beban pula. Kadang-kadang hasil kerja pelajar yang mahukan A ini tidak capai tahap sepatutnya tapi masih minta A. 

Saya tak nafikan, bersungguh-sungguh ingin mendapat gred A ada aspek positifnya. Gred A ialah yang terbaik. Maka secara tak langsung, orang yang bersungguh mahukan A menandakan orang itu mahukan kecemerlangan. 

Saya bukan maksudkan yang kita tak boleh ada kesungguhan nak dapat gred A. Boleh. Bagus. Saya pun mahu. Bahkan dengan ada matlamat ini boleh dorong seseorang jadi rajin. Dan saya sama sekali tak suruh dapat F. Tapi janganlah taksub, sampai gred A itu dijadikan matlamat mutlak ataupun penanda aras mutlak kecemerlangan.

Secara falsafahnya, saya melihat mentaliti 'mendewakan A' ini hanya akan membentuk masyarakat yang materialistik. Kalau dulu materialistik hanya terhad pada wang atau harta. Tapi sekarang A pun dianggap suatu status kemuliaan (kebijaksanaan)! Kesannya ialah, golongan yang tidak dapat A pula akan dianggap lemah, tidak bijak dsb. Ini yang kita tak nak. 

Jika anda ada mentaliti "A = kejayaan, kejayaan = A", anda silap. Kita belajar atau dapatkan ilmu ialah supaya kita dapat menilai serta membezakan benda yang baik dengan yang buruk. Kalau dalam Islam, ilmu membimbing akal untuk mengawal nafsu. 

Dalam sesuatu konteks ilmu, jika seseorang itu masih gagal membezakan baik dengan buruk, maka itu tandanya dia belum dapat mengaplikasi ilmunya. Itupun jika dia faham apa yang dipelajarinya (hakikatnya kemampuan menilai itulah yang menunjukkan dia faham atau tidak). Tidak ada guna dapat gred A, tapi masih tak mampu menilai antara baik dengan buruk.

Gred A itu hanya gambaran tahap kemampuan. Bahkan kita sebenarnya tak perlu kecewa jika tak dapat gred A pun, kalau pada masa yang sama kita sudah ada keupayaan menilai itu. Berbanggalah.

Satu perkara lagi yang harus difahami, hasil pembelajaran tak terhad pada konteks ilmu itu saja. Misalnya kita belajar sains komputer, tak bermakna kita wajib mahir sains komputer. Ilmu yang Allah SWT jadikan itu sangat luas. Apa yang kita dapat fahami sepanjang kita belajar sains komputer itu juga suatu ilmu. Apatah lagi kalau dapat aplikasikan.

Sebagai contoh, kemahiran insaniah dan sikap seperti rajin dan belajar bersungguh-sungguh juga suatu hasil pembelajaran. Ada masanya juga, waktu kita belajar tentang sains komputer terselit fakta dan ilmu berkenaan matematik, bahasa, logik dsb. Ini juga suatu hasil pembelajaran. Cuma berbanding sains komputer, ilmu dan kemahiran 'sampingan' itu tidak melalui proses penilaian (tidak ada grednya). Maka, kalau kita dapat yang 'sampingan' itu, berbanggalah.

Saya berharap anda di luar sana, janganlah terlalu 'mendewakan A'. Bagus jika ingin mencapai kecemerlangan dan tunjukkannya dengan jumlah A yang kita dapat. Tetapi jangan sampai taksub sangat. Dapat A itu rezeki. Ada masa dapat, ada masa tak dapat. Berbanggalah dengan apa yang kita capai setelah berusaha, dan bersyukurlah.

Lepas ini kalau ada yang merayu pada saya supaya dia diberi A, saya beri F+.

(Isu ini mungkin dah basi. Tapi sebab ia masih berlaku maka saya mahu beri pandangan saya. Saya juga tak setuju kalau kita jadikan tugas mendidik untuk menghukum - baca di sini )

* kredit foto: VectorStock.com

Wednesday, January 22, 2020

Eksperimen simulasi Penjadualan Proses menggunakan aplikasi ALExSIM (USAS)

Alhamdulillah, saya berjaya juga menyiapkan projek terbaru iaitu pensimulasi algoritma penjadualan proses yang dinamakan ALExSIM (USAS), atau ringkasnya USAS. 

Aplikasi ini dalam tempoh percubaan dan boleh diperolehi dari laman khas ALExSIM (USAS). Di bawah ini adalah contoh antaramuka daripada aplikasi tersebut.


Contoh antaramuka ALExSIM (USAS)

Aplikasi USAS ini sebenarnya bukanlah unik atau yang pertama seumpamanya. Terdapat beberapa aplikasi pensimulasi penjadualan proses seperti USAS yang telahpun ada. Walau bagaimanapun saya tetap bina USAS sebagai usaha menambahkan pilihan alat aplikasi sedia ada. Saya dapat motivasi membina USAS daripada aktiviti pengaturcaraan yang pernah saya bincangkan sebelum ini (berkenaan menggunakan JFreeChart dalam Java)

USAS juga dibina dengan harapan untuk memudahkan pelajar-pelajar saya dan sesiapa saja yang mempelajari kursus Sistem Pengoperasian untuk mendalami topik Penjadualan Proses (salah satu topik dalam kursus tersebut). Bahkan saya sendiri menggunakan USAS ini untuk bereksperimen dan menyediakan skema jawapan untuk soalan peperiksaan berkaitan topik ini.

Mudah-mudahan aplikasi ini ada manfaatnya.



Friday, November 01, 2019

Implimentasi pustaka Taburan Custom Nombor Rawak menggunakan Java

Menjana nombor rawak dengan Math.random()

Pustaka bahasa pengaturcaraan Java menyediakan fungsi/metod Math.random() untuk menjana nombor rawak dalam atur cara. Metod ini akan menjana nilai dalam julat 0 hingga 1, dan nilai ini boleh digunakan untuk menjana nombor tertentu dalam julat tertentu.

Misalnya kod atur cara berikut menjana 5 nombor rawak dalam julat 0 hingga 9 :

for(int i = 0; i < 5; i++) {
    System.out.println((int)(Math.random() * 10));
}



Manakala dengan menambah 1, seperti berikut, boleh mendapatkan 5 nombor dalam julat 1 hingga 10 :

for(int i = 0; i < 5; i++) {
     System.out.println((int)(Math.random() * 10 + 1)); 
}

Kita juga boleh menjana nombor rawak dalam julat 'min' dan 'max' yang kita sendiri tetapkan. Misalnya contoh berikut menjana nombor rawak dalam lingkungan 5 hingga 9:

int min = 5;
int max = 9;
for(int i = 0; i < 5; i++) {
    System.out.println((int)(Math.random() * (max-min+1)) + min)); 
}

Menjana nombor rawak dengan taburan custom

Kebarangkalian bagi nombor dalam julat di atas untuk muncul/dipilih, secara amnya ialah sama rata, iaitu 1/N bagi setiap nombor (Misalnya julat 1 hingga 10, N=10, maka 1/10 = 0.1 bagi 1, 1/10 = 0.1 bagi 2, dan seterusnya sehingga 10).

Tapi bagaimana kita boleh menjana nombor rawak dalam julat 1 hingga 10 dengan pemberat tertentu, misalnya 50% percubaan (kebarangkalian 0.5, atau 1/2) mendapat nombor 4? Atau menetapkan 20% balingan dadu akan kena pada nombor 6? Bagaimana kita hendak menggunakan Math.random() untuk menjana nombor rawak berdasarkan pemberat/kebarangkalian yang ditetapkan? Pustaka Java yang asas ini tidak menyediakannya.

Saya cuba mencari implimentasi sedia ada, dan terjumpa perbincangan mengenainya di sini -> https://stackoverflow.com/questions/16435639/generating-random-integers-within-range-with-a-probability-distribution

Daripada perbincangan tersebut, saya mendapat idea untuk mengimplimentasi suatu kelas pustaka sendiri (dinamakan CustomProbabilityRandom), yang membolehkan seseorang pengatur cara menjana nombor rawak mengikut kebarangkalian tertentu. (Lihat senarai kod atur cara dalam fail CustomProbabilityRandom.java di bawah. Turut disertakan contoh aplikasi untuk cara menggunakan pustaka, iaitu fail ExampleCustomDistribution.java).

Dengan menggunakan kelas ini, agak mudah untuk menetapkan taburan kebarangkalian bagi suatu senarai item-item (nombor rawak yang dijana mewakili index bagi item dalam senarai).

Sebenarnya implimentasi ini tidaklah benar-benar menghasilkan nombor rawak mengikut taburan yang ditetapkan, tetapi hanya boleh menghampiri taburan tersebut. Namun diharap dengan implimentasi ini akan memudahkan anda membina aplikasi yang melibatkan nombor rawak dengan lebih fleksibel. Untuk mengkompil kod atur cara aplikasi dalam ExampleCustomDistribution.java, anda perlu kompil bersama-sama dengan fail pustaka CustomProbabilityRandom.java.

Selamat mencuba.




Fail 'CustomProbabilityRandom.java' (pustaka)





Fail 'ExampleCustomDistribution.java' (aplikasi)





Wednesday, November 28, 2018

Kenali gaya pembelajaran anda

Pernah tak anda terfikir, apakah gaya pembelajaran yang anda suka? 

Amnya setiap orang ada gaya pembelajaran yang tersendiri. Misalnya ada orang suka belajar dengan menghadiri kelas dan mendengar kuliah atau penyampaian dari guru, ada juga lebih suka membaca sendiri, ada yang suka belajar melalui laman web secara dalam talian, dsb. Dari segi bentuk bahan pembelajaran pula ada yang suka mendengar, ada yang suka melihat gambar (visual), dan ada pula yang lebih suka melihat perkataan. Pendek kata, gaya pembelajaran boleh jadi berbeza dan pelbagai mengikut individu. Tujuan mengenal pasti gaya pembelajaran ialah untuk membolehkan kita belajar secara efektif (lebih mudah atau cepat faham, melaksanakan sesi pembelajaran yang lebih lama tanpa bosan dsb.).

Bagaimana anda menilai gaya pembelajaran anda?

Mungkin anda ada cara yang tersendiri untuk menilai gaya pembelajaran yang disukai. Namun ada beberapa kaedah formal yang dibentuk untuk membolehkan seseorang memahami gaya pembelajarannya. Antara model yang dibentuk untuk mengenal gaya pembelajaran ini termasuklah model ILS (index of learning style) oleh Felder dan Silvermann. Secara teorinya model gaya pembelajaran ini masih boleh dipertikaikan kesahihannya, dan jangan percaya 100%. Namun sedikit-sebanyak boleh digunakan sebagai gambaran gaya pembelajaran yang kita sukai.

Model ILS Felder dan Silvermann

Model oleh Felder dan Silvermann ini mengenal pasti gaya pembelajaran berdasarkan 8 ciri yang dipadankan menjadi 4 pasangan - 
  • visual vs verbal, 
  • aktif vs reflektif, 
  • sensing vs intuitif, 
  • global vs berjujukan. 

Penerangan bagi setiap ciri boleh dirujuk dari dokumen ini. [muat turun rujukan tentang ILS. hakcipta pemunya asal]

Model ILS diaplikasi dengan mengira indeks bagi 4 pasangan ciri (1 ciri dipilih daripada setiap pasangan), dan daripada indeks ini akan menggambarkan gaya pembelajaran seseorang. Indeks ini berjulat 1-11, dan nilai indeks yang lebih dari 5 dianggap menggambarkan ciri yang sesuai untuk seseorang itu (misalnya jika indeks visual dapat 7, seseorang itu dianggap 'suka' cara visual, dan jika 11 sangat 'suka'). 

Cara indeks dikira ialah dengan menjawap 44 soalan khusus berkaitan ILS (ILS questionnaire), dan akan menghasilkan 4 nilai indeks (dan padanan ciri).

Di mana boleh dapatkan soalan ILS untuk dicuba?

Set soalan standard untuk mengenal pasti ILS ini boleh diperolehi secara dalam talian di laman web ini -> https://www.webtools.ncsu.edu/learningstyles/. (Set soalan ILS mempunyai hakcipta yang dimiliki oleh Felder dan Silvermann)

Walau bagaimanapun anda boleh muat turun aplikasi yang hampir sama yang saya bangunkan, di sini [ Muat turun aplikasi ILS Questionnaire ]. Hakcipta soalan-soalan masih hakmilik pemilik asal.

Pastikan scan dahulu fail yang dimuat turun dengan anti-virus, sebagai langkah keselamatan. Kemudian ikuti langkah-langkah berikut:
  1. Ekstrak (unzip) folder 
  2. Buka dokumen index.html menggunakan pelayar (browser) internet seperti Chrome, Mozilla Firefox dll, tanpa perlukan internet. 
Contoh pelaksanaan aplikasi ini seperti yang ditunjukkan di bawah:


Paparan aplikasi ILS questionnaire

Aplikasi ini dibina berdasarkan soalan-soalan yang sama daripada laman web asal ILS dan anda boleh gunakan secara percuma. Juga boleh dijawab dalam dwi bahasa - English atau Bahasa Melayu!

Selain untuk kegunaan sendiri, para guru dan pendidik juga boleh galakkan murid-murid dan pelajar anda menggunakan aplikasi ini (mungkin perlu dibantu). Hasilnya nanti boleh digunakan untuk memperbaiki cara penyampaian kepada mereka dalam kelas dan kuliah.

Lepas ni bolehlah kenali gaya pembelajaran anda. Selamat mencuba.