Thursday, September 14, 2017

Sortir Data Dengan Kategori Sortir Lebih Dari Satu di Java

Adakalanya kita ingin melakukan sortir terhadap data itu bukan cuma pake satu kategori, bisa dua atau lebih. Misalnya kita sortir berdasarkan nama, kemudian diikuti golongan darah, kemudian jenis kelamin, dan seterusnya. Jadi andaikan ada dua orang dengan nama yang sama, maka kita kemudian menyortir berdasarkan golongan darahnya, dan seterusnya, dan seterusnya.

Hal ini bisa dengan mudah dilakukan di Java, perhatikan contoh kode berikut ini:
package com.fjr;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.print.attribute.standard.OutputDeviceAssigned;

import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.PdfReaderContentParser;
import com.itextpdf.text.pdf.parser.SimpleTextExtractionStrategy;
import com.itextpdf.text.pdf.parser.TextExtractionStrategy;

public class Test1 {
 
 Map map = new HashMap<>(); 
 
 class Daftar{
  private String nama;
  private String  noKartu; 
  private String number; 
  private String tanggal; 
  private String jam; 
  private String sesi; 

  public String getSesi() {
   return sesi;
  }
  public void setSesi(String sesi) {
   this.sesi = sesi;
  }
  public String getJam() {
   return jam;
  }
  public void setJam(String jam) {
   this.jam = jam;
  }
  public String getTanggal() {
   return tanggal;
  }
  public void setTanggal(String tanggal) {
   this.tanggal = tanggal;
  }
  public String getNumber() {
   return number;
  }
  public void setNumber(String number) {
   this.number = number;
  }
  public String getNama() {
   return nama;
  }
  public void setNama(String nama) {
   this.nama = nama;
  }
  public String getNoKartu() {
   return noKartu;
  }
  public void setNoKartu(String noKartu) {
   this.noKartu = noKartu;
  }
 
 }
 
 
 public Test1()  throws Exception{
  map.clear();
  
  map.put("Senin", 1);
  map.put("Selasa", 2);
  map.put("Rabu", 3);
  map.put("Kamis", 4);
  map.put("Jumat", 5);
  map.put("Sabtu", 6); 
  
        PdfReader reader = new PdfReader("E:/birokrasi/lamaran kerja/persiapan CPNS kemenhukam/pengumuman/SULTENG.pdf");
        PdfReaderContentParser parser = new PdfReaderContentParser(reader);
        PrintWriter out = new PrintWriter(new FileOutputStream("E:/birokrasi/lamaran kerja/persiapan CPNS kemenhukam/pengumuman/msi.txt"));
        TextExtractionStrategy strategy;

        PrintWriter out1 = new PrintWriter(new FileOutputStream("E:/birokrasi/lamaran kerja/persiapan CPNS kemenhukam/pengumuman/msss.txt"));

        
        ArrayList listName = new ArrayList<>(); 
        ArrayList listTemp = new ArrayList<>(); 
        for(int i = 1; i  <=  reader.getNumberOfPages(); i++) {
         strategy = parser.processContent(i , new SimpleTextExtractionStrategy()); 
         String result = strategy.getResultantText(); 
         out1.println(result+ "??"); 
         String rgx1 = "([0-9]{1,4})\\s([A-Za-z\\`\\'\\s\\.\\,]+)\\s?(([0-9]{14}))\\s?([A-Za-z]+,[0-9]{2}-[0-9]{2}-[0-9]{4})"
           + "\\s([0-9]{2}\\:[0-9]{2}\\s(s\\.d\\.)\\s[0-9]{2}\\:[0-9]{2})\\s([0-9]{1})" ; 
         Pattern p = Pattern.compile(rgx1); 
         Matcher m = p.matcher(result); 
         while(m.find()) {
          String number = m.group(1); 
          String name = m.group(2); 
          String noKartu = m.group(4);
          String tanggal = m.group(5);
          String jam = m.group(6); 
          String sesi = m.group(8); 
          
          Daftar d = new Daftar(); 
          
          d.setNama(name); 
          d.setNoKartu(noKartu);
          d.setNumber(number);
          d.setTanggal(tanggal);
          d.setJam(jam);
          d.setSesi(sesi);
          listName.add(d); 
          listTemp.add(d);
         }
        }
        
//        Collections.sort(listName ,(a,b)->{
//         
//          return a.getNama().compareTo(b.getNama()); 
//         }
//  ); 
        
        
        // sort by  date then session 
        Collections.sort(listName ,(a,b)->{
         String haria = a.getTanggal().substring(0, a.getTanggal().indexOf(",") );  
         String harib = b.getTanggal().substring(0, b.getTanggal().indexOf(",") ); 
         Integer jj = map.get(haria); 
         Integer kk = map.get(harib);
         int hasil = jj.compareTo(kk) ;
//         int hasil = jj.compareTo(harib ); 
         if(hasil == 0) {
          Integer a1 = Integer.parseInt(a.getSesi().substring(a.getSesi().length() - 1)) ;
          Integer b1 = Integer.parseInt(b.getSesi().substring(b.getSesi().length() - 1 )); 
          int hasil1 = a1.compareTo(b1 );
          if(hasil1  == 0) {
           return a.getNama().compareTo(b.getNama()); 
          }
          return hasil1 ; 
         }
      return hasil;
     }
  ); 
        
        PrintWriter out2 = new PrintWriter(new FileOutputStream("E:/birokrasi/lamaran kerja/persiapan CPNS kemenhukam/pengumuman/msss1.txt"));
        
        int prev = 0 ; 
        for(int kk  =0 ; kk < listTemp.size(); kk++) {
         Daftar p  = listTemp.get(kk ); 
         int m = Integer.parseInt(p.getNumber()); 
         String token = ""; 
         if( m - prev  > 1) {
          token = "==>"; 
         }
         prev = m; 
         out.print(p.getNumber() + "|");
         out.print(p.getNama());
         out.print("|");  
         out.print(p.getNoKartu() + "|" ); 
         out.print(p.getTanggal() + "|" + token);
         out.print(p.getJam()+"|"); 
         out.print("sesi:"+p.getSesi()); 
         
         out.println(); 
         
        }
        
        listName.forEach(p -> { 
          out2.print(p.getNama());
          out2.print("|"); 
          out2.print(p.getNoKartu()  + "|"); 
          out2.print(p.getTanggal() + "|");
          out2.print(p.getJam()+ "|"); 
          out2.print("sesi:"+p.getSesi()); 
          
          out2.println(); 
         
         }
        ); 
        
        out.flush();
        out.close();
        out1.flush();
        out1.close(); 
        out2.flush();
        out2.close(); 
        
        System.out.println("finish"); 
  

 }

 
 public static void main(String[] args)  throws Exception {
  new Test1(); 
 }
}
Kode di atas merupakan perluasan kode yang sudah diberikan pada posting sebelumnya, namun kali ini diurutkan berdasarkan hari ujiannya, kemudian disusul sesi ujiannya dalam satu hari tersebut.

Sunday, September 10, 2017

Sortir Data Pengumuman CPNS Kemenkumham Tahun 2017

Berikut ini saya akan berikan hasil pekerjaan rumah saya malam ini tentang pengolahan data dari dokument pdf. Kebetulan hari ini diberikan pengumuman lokasi ujian untuk tes CPNS Kementerian Hukum dan HAM tahun 2017 untuk provinsi Sulawesi Tengah.

Yang ingin saya tunjukkan adalah kita bisa melakukan sortir terhadap dokumen tersebut dengan menggunakan library dari bahasa pemrograman Java. Awalnya sih saya ingin melakukan olah data ini dengan menggunakan bahasa python, namun berhubung bahasa python yang dimaksud belum memiliki library yang cuku matang setara dengan Itext di java, maka saya urungkan niat saya itu, dan kemuudian menggunakan library Itext dari Java yang interface nya lebih simpel dan dinamis.

Dokumen yang akan diolah bida dilihat dilink berikut, atau bisa jadi pembaca sudah punya dokumen yang dimaksud. Jadi di situ diberikan lokasi dan waktu ujian untuk setiap peserta yang lulus seleksi administrasi.

Friday, September 8, 2017

Tutorial python untuk web scrapping (olah data dari web)

Dalam tutorial kali ini  saya akan memberikan petunjuk bagaimana menggunakan bahasa pemrograman python dalam melakukan web-scrapping (mengambil isi dari sebuah web-sites). Jadi kita mengambil informasi, semisal data-data pengumuman yang disematkan di web, tanpa perlu melakukan browsing manual web tersebut.

Untuk itu, pastikan di komputer Anda sudah terinstall interpreter python yang bisa diunduh di situs resminya. Jika sudah, maka di komputernya akan terlihat tempat instalasi python:

Wednesday, August 30, 2017

Edit Status Dengan Menggunakan JSP + Servlet

Berikut ini saya berikan video penggunaan teknologi JSP + Servlet dalam melakukan edit terhadap kontent dari status sosial media (facebook like).



Source code untuk proyek kali ini bisa diambil di link github berikut ini:
https://github.com/gunungloli666/sosmed-prototype-in-jsp

Friday, July 7, 2017

Membuat Konverter Bilangan Ke Kalimat dengan JSP + Servlet

Berikut ini adalah video penggunaan teknologi JSP + servlet dalam melakukan konverter antara bilangan desimal ke dalam bahasa Indonesia. Source code dapat dilihat pada keterangan video.

Menambahkan Ajax Search Box dengan JSP + Servlet

Berikut ini adalah video contoh bagaimana cara menambahkan Ajax Search Box (kotak pencarian berbasis Ajax) ke dalam web dengan menggunakan teknologi JSP + servlet.

Membuat Aplikasi Client Server dengan C#

Berikut ini adalah video tentang bagaimana membuat aplikasi Cleint Server dengan bahasa pemrograman C#. Teknik ini bisa digunakan untuk membuat hal-hal semisal aplikasi chat (bahkan yang berbasis mobile Android dan Iphone). Juga bisa digunakan untuk membuat aplikasi Gojek/Grab-Bike/Uber dan aplikasi aplikasi transprotasi online sejenis.


Adapun source code untuk projectnya bisa didownload di link berikut ini:
https://github.com/gunungloli666/simple--wpf-client-server-chat

Saturday, December 24, 2016

Teorema Fundamental Dalam Aritmatika

Teorema fundamental dalam aritmatika merupakan teorema paling dasar dalam aritmatika, dalam artian semua teorema-teorema lain diturunkan dari teorema ini (kira-kira seperti itu).

Ada dua pernyataan yang perlu diklarifikasi dalam Teorema Fundamental Aritmatika ini, pertama eksistensi, dan kedua keunikannya. Pernyataan lengkapnya adalah setiap bilangan bulat lebih dari $1$ adalah bilangan prima atau produk dari bilangan prima dan produk ini unik dalam artian untuk sebuah bilangan, maka hanya ada satu cara memfaktorkannya ke dalam bilangan prima.

Misalnya, 1200 hanya bisa dinyatakan ke dalam perkalian $1200 = 3 \times 2 \times 2 \times 2 \times 2 \times 5 \times 5 $.

Wednesday, December 21, 2016

Membuktikan bahwa ada Tak Terhingga Bilangan Prima dalam bentuk 4 n + 3

Teorema. Ada tak berhingga banyaknya bilangan prima dalam bentuk $4 n + 3$.

Sebenarnya ini merupakan teorema perluasan dari teorema Euclid bahwa ada tak berhingga jumlah bilangan prima.

Untuk membuktikan teorema ini, terdapat sebuah lemma yang harus diketahui, yakni

Lemma. Jika $a$ dan $b$ adalah dua buah bilangan bulat dalam bentuk $4n + 1$ maka produk atau hasil perkaliannya juga dalam bentuk $4 n + 1$.

Pertama kita harus ingat kembali ( maaf, postingan tentang ini nanti dibuat kemudian) bahwa setiap bilangan bulat itu berada pada dua keadaan yakni bilangan prima atau hasil perkalian dari bilangan prima (biasa disebut bilangan komposit). Misalnya $3$ itu bilangan prima, $4$ itu bilangan komposit $ 4 = 2 \cdot 2 $, $5$ itu bilangan prima, $6 = 2 \cdot 3$ bilangan komposit, $7$ bilangan prima, $8 = 2 \cdot 2 \cdot 2$ bilangan prima, $9 = 3 \cdot 3$, $10 = 2 \cdot 5$ bilangan komposit, $11$ bilangan prima, dst... dst...