Pengalaman mengerjakan skripsi selama kuliah - membuat sistem rekomendasi mengunakan NodeJS

Ari Nurcahya
6 min readSep 10, 2021

Akir tahun 2019, proposal skripsi saya di-acc oleh dosen saya, dan saya akhirnya mengikuti seminar proposal. waktu itu seneng banget lho udh mau lulus jadi bisa fokus kerja (waktu itu kuliah sambil kerja soalnya, bener bener fulltime kerja). dan saya sudah merasa lelah kuliah (ya walaupun sekarang saya kangen banget sama masa masa kuliah dulu). jadi pas udh diacc gila seneng banget. trus setelah ujian proposal saya istirahat sejenak dari penggarapan skripsi, karena jenuh banget dan saya juga enggak biasa menulis, apalagi menulis sebuah karya tulis ilmiah seperti skripsi. jangankan skripsi nulis artikel kayak ginipun dulu saya gk bisa sama sekali, jadi saya bener-bener jenuh sekali dan rehat sampe akhir kkn, dimana kkn mulai akhir Januari sampai akhir Februari. nah bulan maret saya mulai menggarap skripsi. tapi waktu itu juga awal pandemik, jadi saya ngerjain skripsi di rumah, ceritanya sih saya mudik. dan kebetulan kantor saya nerapin sistem WFH juga.

awal maret itu saya mulai mengarap program yang akan saya buat. saya kebetulan membuat sistem rekomendasi produk dengan metode content based filtering, dan saya hanya membuat REST api, jadi saya tidak membuat layer view pada aplikasi yang saya buat. kemudian awal maret itu juga saya memilih framework apa yang akan saya gunakan untuk membuat REST api, hingga akhirnya saya memutuskan menggunakan NestJS karena waktu itu ngeliat strukturnya rapih (dari sini juga saya mulai bisa membuat struktur projek di golang). mulai tuh buat fungsi fungsi untuk melakukan perhitungan content based filtering, mulai dari text preprocessing, trus tfidf, sampai vector space model. tapi disitu mulai nemu kendala dan berfikir kok kodingannya jadi aneh. akhirnya saya mulai misahin perhitungan nya menjadi library sendiri. kalo gk salah ini libary pertamanya https://www.npmjs.com/package/vector-space-model-similarity dan itu juga pertama kalinya saya nerapin yang namanya unit testing, kurang lebih library itu selesai saya kerjakan selama 1 bulan dengan pengerjaan se-mood nya saya, kadang seminggu gk saya kerjain. besoknya saya lanjut 2 jam full, paling lama sih 2 jam deh ngerjainnya, trus tau-tau kelar. akhirnya setelah library nya kelar saya coba tuh pake datasets saya, itu dataset dapet dari scraping data di tokopedia kalo gk salah dan itu minta bantuan senior saya di kantor, karena kebetulan dia insight banget sama namanya machine learning dan AI. Thanks banget mas kalo dulu gk minta tolong belum kelar mungkin skripsi saya, soalnya bingung ngescrap data di tokopedia, dan juga walaupun banyak tools scraper tokopedia di github, masih perlu penyesuaian dan itu kodingannya pake python waktu itu saya gk mau pake python gara gara harus belajar dulu, dan pengen buru2 lulus. makannya waktu itu saya milih pake NodeJS karena sudah terbiasa sama environmentnya, dan saya merasa keren karena satu satunya yang ngambil skripsi sistem cerdas dan pake NodeJS 😎 ya walaupun sekarang saya sadar, skripsi saya biasa biasa aja banget.

next, udah selesai tuh librarynya sekitar di bulan april, saya coba kan pake datasetnya yang datanya sekitar 900an produk list dengan tipe produk tani gitu, dan duarrrr ngebuat rekomendasinya itu sampe memory leak 😂 akhirnya saya naikin limit memory di nodejs jadi 4gb kalo gk salah, dan coba monitoring memory usage buat ngebuat rekomendasinya itu, dan ternyata makan memory sampe 3.9GB an, trus juga sekali cari rekomendasi produk itu sampe 30 menit gila, akhirnya chat dosen minta advise harus gimana. tapi waktu itu masih belum nemu solusi, akhirnya coba coba liat skripsi kating kan, akhirnya baru kepikiran rubah flow rekomendasinya.

jadi sebelumnya itu kan contoh gini, saya punya endpoint /products/recommendation/{product_id} yang mana dari product_id itu semisal product_id 1 itu bayem, maka akan dapet rekomendasi produk yang mirip2 sama bayem berdasarkan nama, jenis produk dan deskripsi product, nah response itu api bakalan list product yang mirip sama bayem. tapi masa iya sekali fetching data ke endpoint itu sampe 30 menit, berarti di realword, app kayak gitu user bakal nunggu 30 menit buat buka halaman produk detail dong, kurang lebih rekomendasinya kayak gini

nah itu contoh di tokopedia, saya cari produk Macbook Pro 2020, dan ada pilihan lainnya yang terkait.

atau seperti ini di tanihub, saya buka produk namanya seafoodking, dan saya dapet list produk terkait.

nah dengan REST api yang saya buat, bisa bisa nunggu selama 30 menitan kalo buka halaman produk detail kan ngefetch data produk lainnya yang sejenis tuh, akhirnya rombak flownya.

tapi sebelum saya rombak flow nya ya saya sampe stress berat, gk bisa tidur, sampe kebawa mimpi tiba tiba programnya jadi jalan cepet 😂. saya sampe mikir “kalo gk lulus kuliah gimana ya, ortu udah biayain mahal2. banting tulang, kerja seharian. berangkat kerja jam 5 pagi, sampe rumah jam 9 malem, kadang kalo jalanan macet sampe rumah jam 10 atau bahkan hampir jam 12, trus jam 4 pagi udah bangun lagi buat siap siap ke kantor, eh saya malah gk bisa lulus. apalagi saya ini satu satunya orang yang kuliah di keluarga saya saat ini, karena saya anak pertama, dan ortu juga gk ada yang kuliah, eh dikuliahin malah gk lulus”

sebelumnya kan setiap buka endpoint itu bakal ngebuat rekomendasi, nah akhirnya saya rombak, idenya sih setiap insert produk atau pakai cron perhari (ini cuman penjelasan saya ke dosen penguji sama pembimbing, implementasinya seperti ini nanti kalo beneran diterapin ke aplikasi nyata) buat generate rekomendasi per produk, output nya nanti bakal disimpen ke database gitu deh. jadi akhirnya saya rombak tuh libary, bahkan saya buat baru lagi kalo gk salah ini library nya => https://www.npmjs.com/package/content-based-filtering

jadi yang ini flownya saya buatkan endpoint buat generate rekomendasi dulu contoh endpointnya recommendation/generate, jadi endpoint itu bakal ngebuatin rekomendasi per produk. nah flow dalam handlersnya itu

  • ambil data produk
  • lempar data ke library
  • library nge return data rekomendasi
  • data rekomendasi itu disimpan ke database

nah karena data rekomendasi sudah disimpan ke database jadi ketika buka endpoint ini /products/recommendation/{product_id} tinggal cari data rekomendasi dari database by product_id nya, dan jelas gk bakal jadi masalah performance issue lagi, paling bakal lemot pas generate rekomendasinya di endpoint recommendation/generate. akhirnya kira kira saya ngerjain library itu selama 1 minggu dengan waktu pengerjaan sesuai mood saya, kalo gk mood bisa bisa berhari-hari gk saya kerjain. library udah kelar itu saya seneng banget 😎

tapi ada problem lagi walau gk besar, karena tadinya saya menggunakan mongodb buat nyimpen hasil rekomendasinya, karena datanya berformat json, nah si mongodb itu kalo gk salah inget maksimal cuman bisa nyimpen data sebesar 16MB buat sekali insert. dan data saya itu sekitar 70MB an. akhirnya dicoba tuh buat insert satu data lebih dari 16MB, tapi waktu itu bingung implementasinya (padahal harusnya lakuin insert bulk harusnya bisa deh, datanya displit, trus insertnya satu satu pakai perulangan. tapi sampe sekarang gk saya coba lagi sih, males juga) akhirnya gk jadi pake mongodb, dan langsung saya save as json file. dan bisa. sekitar bulan april akhir atau mei udah selesai programnya, dan seneng banget 😎😎

tapi ada masalah lain lagi, walaupun bukan progam sih 😂 jadi waktu itu dosen juga lagi sibuk, dan awalnya dosen expected ke saya untuk buat jurnal. dan ternyata saya kesulitan buat jurnal, apalagi jika menggunakan format jurnal kalau tidak salah syarat wajibnya tembus sinta, cuman lupa sinta berapanya. dan akhirnya program selesai akhir april atau sekiar awal mei. tetapi sampai bulan juli belum selesai jurnalnya. akhirnya saya coba untuk buat format skripsi saja. dan Alhamdulillahnya dosen setuju, akhirnya selang 1 mingguan saya menyelesaikan laporan skripsi saya

setelah itu saya berhasil menyelesaikan skripsi saya kira kira saya seminar bulan september, dan berhasil menyelesaikan revisi laporan selama 2 minggu hingga mendapatkan acc dari penguji 1, penguji 2. hingga akhirnya saya mengurus semua administrasi untuk Yudisium hingga akhirnya saya berhasil di-Yudisium dan status kemahasiswaan saya dinyatakan “Lulus”.

Ah kangen banget masa-masa kuliah dulu, trus pas ngurus ngurus berkas berkas untuk yudisium, pergi kesana kesini untuk ngurus ngurus. kalo bisa muda lagi saya mungkin pengen banget masa kuliah itu terulang :D

Akhir kata saya ucapkan terimakasih
Terimakasih buat Senior saya karena sudah bantu scraping datanya. Terimaaksih buat Dosen pembimbing karena sudah mau membimbing saya, dan Terimakasih terhadap dosen penguji. serta teman teman yang mau dicontekin buat referensi saya nulis skripsi 😁

Terimakasih sudah membaca.

--

--