Meng-custom Perintah/Command di Terminal Ubuntu

Beberapa waktu lalu saya mendapat kesempatan untuk ikut Grand Final Kode Indonesia di Jakarta. Kode Indonesia adalah sebuah kontes pemrograman yang diadakan oleh Kalibrr.

Berbeda dengan kontes pemrograman pada umumnya, pada kontes ini panitia tidak menyediakan komputer atau laptop untuk para finalis. Jadi para finalis dipersilakan untuk menggunakan komputernya masing-masing di Grand Final. Sebenarnya ini peraturan yang aneh karena ini membuat setiap peserta bisa jadi punya “starting-point” yang berbeda kan? misal kualitas komputer, file-file yang tersedia, dsb.

Tapi ya sudah, karena ini aturan panitia sendiri maka saya juga mencoba menyiapkan laptop saya. Hal sederhana yang saya pikirkan adalah:

Meng-custom perintah atau command di terminal Ubuntu: Coba buat perintah sederhana untuk meng-compile sekaligus menjalankan program C++!

Tujuan command tersebut tentu untuk mempersingkat proses compile. Karena saya sendiri biasa tidak menggunakan IDE yang bisa meng-compile program, maka cara saya biasanya untuk meng-compile file C++ adalah dengan menjalankan perintah (command) berikut:

$ g++ mycppfile.cpp -o outfile

Lalu setelah di-compile, dijalankan dengan perintah:

./outfile

Nah, misi sederhana saya saat itu adalah menyederhanakan kedua perintah di atas menjadi sebuah perintah sederhana. Setelah browsing-browsing, berikut ini rangkuman langkah-langkahnya:

  1. Buat sebuah script file, misalnya kita beri nama `customcpp.sh`
  2. Pada baris pertama, tuliskan `#!/bin/bash` lalu tuliskan perintah yang ingin dijalankan di bawahnya seperti di bawah. Pada perintah di bawah `CPPFILE` adalah variabel yang menyimpan argumen yang akan diinputkan saat pemanggilan. Nantinya akan menerima nama file yang akan di-compile.
    #!/bin/bash
    CPPFILE="$1"
    g++ ${CPPFILE}.cpp -o outfile
    ./outfile
  3. Simpan file tersebut, lalu pindahkan ke `/usr/local/bin`, pemindahannya bisa menggunakan command di bawah. SCRIPTNAME adalah nama perintah yang akan dipanggil ketika script di atas di jalankan.
    sudo mv ~/customcpp.sh /usr/local/bin/SCRIPTNAME
  4. Atur permission agar program bisa diakses
    sudo chown root: /usr/local/bin/SCRIPTNAME
    sudo chmod 755 /usr/local/bin/SCRIPTNAME

Dan… selesai!

Setelah selesai, sekarang untuk mengcompile sekaligus menjalankan program C++, saya cukup mengetikkan di terminal command berikut ini:

SCRIPTNAME mycppfile

ya.. setidaknya sedikit lebih cepat dari sebelumnya kan 😉

Sumber:

Parser Kalimat Sederhana untuk Bahasa Indonesia

Beberapa waktu lalu saya mendapat tugas kerja untuk membuat sebuah text summarizer (perangkum bacaan) menjadi sebuah kalimat sederhana. Istri saya yang lebih mendalami bidang NLP menyarankan untuk menggunakan teknik yang sederhana:

Temukan kalimat utama, dan jadikan kalimat tersebut sebagai rangkuman.

Saya setuju ide itu, selain tidak serumit jika mengunakan machine learning yang kompleks, rasanya cara itu sudah cukup cocok untuk kasus saya. Istri saya memberi tahu saya beberapa algoritma yang bisa digunakan dan sebuah peringatan bahwa bagian paling sulit adalah nanti bagaimana membuat parser kalimat (program yang dapat mengekstrak kalimat-kalimat yang menyusuk sebuah dokumen teks).

Saya buat parser ini menggunakan bahasa pemrograman Python, dengan bantuan beberapa package (`re` untuk regex, dsb.).

Continue reading

Menuliskan Huruf Arab di Latex

Catatan: Artikel ini khusus untuk pengguna template Latex MIPA UGM SKRIPSI

Jadi ketika saya menulis skripsi dan tesis beberapa waktu lalu saya perlu menuliskan beberapa huruf Arab di laporan saya. Saya menggunakan template Latex dari MIPA UGM (download di sini).

Template tersebut dibuat awalnya oleh Pak Drs. Pekik Nurwantoro, Ph.D. lalu dimodifikasi oleh teman saya, Yusuf Syaifudin. Dan saya modif lagi di repo github saya. Dan karena menggunakan template ini lah menulis huruf Arab jadi sedikit tricky dari biasanya.

Compiler

Problem pertama adalah selama ini saya meng-compile file Latex saya menggunakan perintah pdflatex yang ternyata bisa dibilang tidak support untuk menampilkan tulisan dengan huruf yang aneh-aneh (unicode). Karenanya salah satu opsi yang saya gunakan adalah pindah menggunakan xelatex.

Compiler ini sebenarnya tidak perlu diinstall lagi bagi pengguna texlive Ubuntu. Dan kalau di online editor, biasanya juga disediakan opsi untuk mengatur compiler yang digunakan.

Package

Masalah lain adalah template dari MIPA UGM sudah tertata rapi, ini membuatnya sulit untuk sekadar menambah pengaturan package agar bisa menuliskan huruf Arab tanpa merusak apapun. Saya sudah mencoba menggunakan babel atau polyglossia tetapi selalu berakhir compiler error 🙁

Lalu bagaimana solusinya? setelah beberapa kali mencoba solusi, saya temukan solusi yang menurut saya paling pas, berikut langkah-langkahnya:

1. Install XeTeX kalau anda belum memiliki xelatex. Di buntu bisa menggunakan perintah:

sudo apt-get install texlive-xetex

2. Download font yang menyediakan tampilan huruf Arab. Misalnya, yang saya gunakan adalah font Scheherazade.

3. Definisikan font tersebut ke dokumen kalian (di template MIPA UGM perinah ini dituliskan di ADDITIONAL_PACKAGE.tex)

 usepackage{fontspec}
 \newfontfamily\arabicfont[Script=Arabic]{Scheherazade}

4. Selanjutnya untuk setiap akan menuliskan huruf Arab, tinggal gunakan perintah \arabicfont:

This is english document {\arabicfont وَهَذِهِ فِقرَةٌ بِالعَرَبِيَة مَعَ كَلِمَة
اِنكلِيزِيَة } and this is also english text.

5. Lalu untuk meng-compile, kita gunakan Xelatex, dengan perintah

xelatex yourdoc.tex

6. Ketika proses compile selesai, maka akan muncul huruf Arab yang di posisi yang diinginkan. Tapi coba perhatikan, ada yang aneh dengan tulisan tersebut, yakni tulisan tidak dalam format RTL (right to left), atau tertulis dari kanan ke kiri, sehingga tulisannya jadi terbaca aneh. Lalu bagaimana caranya membuatnya format RTL?

7. Download file bidi.tex dari texdoc.net/texmf-dist/tex/xelatex/bidi/bidi.tex, jangan gunakan package bidi menggunakan perintah \usepackage{bidi} Saya tidak tahu pasti kenapa, tapi menggunakan package bidi seperti itu akan merusak template MIPA UGM. Dengan menggunakan bidi.tex langsung dari filenya kita memperoleh versi sederhana dari bidi yang lebih aman.

8. Inputkan file bidi tersebut setelah kita definisikan huruf Arab kita:

\usepackage{fontspec}
\newfontfamily\arabicfont[Script=Arabic]{Scheherazade}
\input{bidi.tex}

9. Untuk mengaktifkan RTL gunakan perintah \RL:

This is english document \RL{\arabicfont وَهَذِهِ فِقرَةٌ بِالعَرَبِيَة مَعَ كَلِمَة
اِنكلِيزِيَة } and this is the other english text.

10. Dan coba compile ulang, maka kali ini akan benar-benar berhasil:

Sekian! Semoga bermanfaat, jika ada yang ditanyakan atau ada usulan solusi lain silakan komentar di kolom yang tersedia! 🙂

Sumber:

Simple Tutorial Python, Boto3, and AWS S3

I’ve horrible experience to find “good” tutorial about how to use Boto3 in Amazon Web Service (AWS). Boto3, not like Boto2, has poor quality documentation. So I create this simple tutorial as reminder to myself and I hope it will help someone out there.

Boto3

The AWS SDK for Python. It simply to said, if you have a python apps and you want it to access AWS features, you need this.

Installation & Setup

Installation is very clear in python documentation and for configuration you can check in Boto3 documentation just using pip:

$ pip install boto3

after install boto3 you can use awscli to make it easier setup credentials, install it using pip too:

$ pip install awscli

set your configuration using command below. You can get your access key and secret key in IAM console:

$ aws configure

Create A Simple App

Let’s create a simple app using Boto3. We will create a simple app to access stored data in AWS S3. This app will write and read a json file stored in S3.

1. Prepare Your Bucket

First, you need to create a bucket in your S3. You can create bucket by visiting your S3 service and click Create Bucket button.

Capture

or using some code below:

import boto3
import json

data = {"HelloWorld": []}
s3 = boto3.resource('s3')
s3.create_bucket(Bucket='my-bucket')

If you confuse what is bucket and how it works, this one have nice explanation.

2. Write JSON File

Next part is how to write a file in S3. The code below will create a json file (if it doesn’t exist, or overwrite it otherwise) named `hello.json` and put it in your bucket.

import boto3
import json

data = {"HelloWorld": []}
s3 = boto3.resource('s3')
obj = s3.Object('my-bucket','hello.json')
obj.put(Body=json.dumps(data))

If you want to put it on specific path, you can change the line

obj = s3.Object('my-bucket','hello.json')

to

obj = s3.Object('my-bucket','my-path/hello.json')

Run it, and if you check your bucket now you will find your file in there.

3. Read JSON File

Last but not least, if you want to read your file, you can use `get()` function. The code below will read your `hello.json` file and show it on screen. File body/content will be read as string by default.

import boto3

data = {"HelloWorld": []}
s3 = boto3.resource('s3')
obj = s3.Object('my-bucket','hello.json')
data = obj.get()['Body'].read()
print data

I think that’s all, a simple tutorial using boto3 to read-write file in Amazon Web Service S3. Hope it helps 🙂

Membuat Long Table menggunakan Tabularx

Bagi yang pernah menggunakan Latex, pasti kebanyakan akan setuju bahwa bermain tabel di Latex adalah hal yang lumayan menantang. Karenanya saya sendiri ketika membuat tabel di Latex saya paling sering menggunakan package Tabularx. Kenapa? karena menurut saya Tabularx itu punya kelebihan dalam mudahnya mengontrol ukuran kolom dibanding Tabular biasa (fitur yang paling sering saya gunakan). Sayangnya, di balik kelebihan selalu ada kekurangan. Salah satunya adalah belum support untuk membuat long table.

Apa itu Long Table?

Long table adalah istilah untuk membuat tabel yang panjangnya lebih dari satu halaman. Beberapa karakteristik dari long table adalah:

  1. panjangnya lebih dari satu halaman,
  2. nomor tabelnya masih sama,
  3. kontennya masih berlanjut,
  4. bisa punya caption sendiri (biasanya berupa “lanjutan”),
  5. tidak terindeks di daftar isi.

Sebenarnya Long Table sendiri ada Package tersendiri, tapi karena saya tidak mau rumit-rumit mempelajari package baru, saya coba untuk meng-“hack” Tabularx sehingga bisa menjadi long table. Saya sebut ini “hack” karena kita akan tetap menggunakan Tabularx hanya saja kita akan buat agar hasilnya seakan-akan menggunakan long table. Idenya sederhana, kita buat dua tabel dengan bentuk yang mirip, lalu kita atur agar memenuhi kriteria long tabel.

Langkah-langkahnya:

  • Buat terlebih dahulu dua tabel dengan bentuk yang sama. Pastikan tabel kedua pada halaman selanjutnya. Hal ini bisa dengan menggunakan perintah `\newpage`.
\begin{table}[H]
\caption{Table 1}
\begin{tabularx}{6.25in}{}
...
\end{tabularx}
\end{table}

\newpage

\begin{table}[H]
\caption{Table 2}
\begin{tabularx}{6.25in}{}
...
\end{tabularx}
\end{table}
  • Selanjutnya, atur penomoran tabel kedua agar memiliki nomor yang sama dengan tabel pertama. Caranya dengan menambahkan `\addtocounter`  sebelum mendefinsikan tabel kedua, dan beri nilai -1 sehingga penomoran seharusnya dikurang satu.
...
\addtocounter{table}{-1}
\begin{table}[H]
\caption{Table 2}
...
  • Terakhir, pastikan tabel kedua tidak muncul di daftar isi dengan cara memberi kurung siku pada bagian `\caption`
...
\caption[]{Table 2}
...

Dan selesai… Jika dicompile maka akan tampak tabel akan tampil lebih dari satu halaman dengan kriteria long table yang telah disebutkan sebelumnya.

Tentu saja ini tidak sempurna, salah satu kekurangannya adalah kita masih belum bisa memenuhi poin ketiga dari kriteria Long Table, yakni konten tidak dapat berlanjut secara otomatis. Kita harus secara manual memisahkan mana bagian yang masuk tabel pertama, mana yang masuk tabel kedua. Ya setidaknya hasilnya sudah lumayan mirip dengan Long Table kan? 😉

image from: https://www.potterybarn.com/