01 May 2016

Mengenal Shell Script (Konversi TXT ke PDF)

Seperti skrip-skrip yang sudah banyak anda kenal, skrip biasanya digunakan untuk memepercepat, mempermudah pekerjaan, automatisasi atau yang lain.

Skrip yang paling sering kita lihat mungkin bash script, java script, atau skrip dari bahasa-bahasa interpreter terkenal lain seperti python, perl, lua dan lain-lain, di OS Windows kita juga sering lihat skrip semisal file konfigurasi folder yang biasa berekstensi *.ini, *.bat atau yang lain itu (--dulu, entah sekarang) :)

Yup, ga perlu muluk-muluk, kita pakai saja apa yang paling sering kita lihat, kali ini saya akan memakai 'bash' bisa juga 'sh' atau keluarganya :D
Di sini saya menggunakan Ubuntu 14.04 Desktop, bash dan LibreOffice sudah terpasang secara default.

Hasil ahir skrip yang digunakan praktik kali ini berfungsi untuk merubah semua file *.txt dalam sebuah folder ke format PDF, dan menggabungkan semua file PDF tadi menjadi satu buah file.
Untuk mempermudah gambaran, kita juga akan menggunakan tool-tool lain, kebanyakan sudah terpasang secara default (core utils), yang belum terpasang mungkin:

  • unoconv tool yang menggunakan UNO bindings LibreOffice untuk mengkonversi format file (kali ini *.txt ke *.pdf)
  • pdftk tool ini kita gunakan untuk menggabungkan file-file *.pdf menjadi sebuah file PDF tunggal

install kedua tool ini dengan perintah:
sudo apt-get install unoconv pdftk


:: Awal

Langsung saja, langkah pertama kita membuat file skripnya tentu :)
Kita buat sebuah file kosong bernama "skrip.sh" dengan hak eksekusi (+x);

Misal dari terminal ketik:
> skrip.sh && chmod +x skrip.sh



Silakan buka dengan teks editor yang anda suka, sebagai contoh di sini saya menggunakan gedit;

Contoh skrip, ketik saja dalam file tadi:

#!/bin/bash
# Menunjukkan bahwa skrip yang kita tulis ini akan dieksekusi menggunakan bash

# Menulis kata
date > Hasil.log
# Perintah ini akan menulis tanggal pada sebuah file baru bernama "Hasil.log" (>); akan menimpa file lama jika file sudah ada

# Menyisipkan kata
echo >> Hasil.log
# Perintah ini akan menyisipkan baris baru --sama dengan
<printf "\n">, pada file "Hasil.log" 'yang sudah ada' (>>); atau membuat file baru jika belum ada

echo akan menuliskan sesuatu, tapi karna echo tidak diikuti apapun jadi hanya berupa baris kosong sama seperti fungsi printf, contoh printf di belakang.

Simpan dan coba jalankan skrip tadi dengan terminal:
./skrip.sh



Skrip ini akan menghasilkan sebuah file baru bernama "Hasil.log", coba buka file ini dan lihat apa yang ada di dalamnya :)

:: Loop

Apakah bash script juga bisa menggunakan loop seperti dalam bahasa pemrograman lain?

Hmm.. keknya bisa.

Di sini kita akan memanfaatkan unoconv untuk contoh looping dalam skrip ini, sebagai catatan unoconv bisa digunakan untuk membuat file *.pdf dari file *.txt yang ada secara masal dengan sebuah perintah saja: unoconv *.txt; dan file-file PDF-pun jadi.

Tapi ini adalah contoh looping; nanti bisa dipraktikkan untuk hal lain.
Misal loop dengan menggunakan for.

Contoh skrip:

# Looping
for file in *.txt; do unoconv -v -o TXT2PDF/"$file".pdf "$file"; done >> Hasil.log
# Konversi semua file berekstensi *.txt ke *.pdf dalam directory "TXT2PDF"


Dalam contoh ini, 'file' adalah variabel yang digunakan untuk mewakili nama-nama file *.txt; sekaligus digunakan untuk variabel nama hasil output perintah unoconv; untuk lebih jelas tentang opsi perintah unoconv, bisa dilihat dengan perintah: unoconv -h

Soal bentuk, kurang lebih sama dengan bahasa-bahasa pemrograman lain, kalau diumpamakan dengan bahasa pemrograman C misal, bagian yang ada setelah kata kunci for adalah bagian untuk membatasi cakupan ruang lingkup variabel, bagian ini diahiri dengan tanda titik koma; di C bagian ini adalah statement-statement yang ada dalam kurung itu.

Diikuti dengan kata kunci do yang berisi perintah yang dikerjakan, di C bagian ini adalah bagian setelah tanda kurung, baik itu statement yang kemudian diahiri dengan titik koma atau statement-statement yang dipisah dengan titik koma dalam kurung kurawal jika statement lebih dari satu.

:: Perintah lain

# Menambah perintah apapun yang anda suka, coba dengan perintah-perintah lain yang biasa anda eksekusi di terminal :)
pdftk TXT2PDF/*.pdf cat output Hasil.pdf
# Gabung semua file PDF yang ada dalam directory "TXT2PDF" menjadi "Hasil.pdf"

# Menghapus file sampah & contoh printf
printf "\nHapus:\n" >> Hasil.log
rm -rv TXT2PDF >> Hasil.log
# Hapus directory "TXT2PDF" dan isinya


# File *.log
# rm *.log


Hmm.. sebenarnya masih ada banyak yang lain, seperti operasi logika dll, tapi sepertinya terlalu panjang.. ini cuman perkenalan, tar malah jadi tutorial :D

Yah untuk sementara ini dulu, sekarang kita coba skrip ini dari terminal dengan perintah seperti tadi:
./skrip.sh



... Bisa ka?


Contoh skrip.sh:
https://goo.gl/0XsUOT


:: Selesai

Dan... sekian dulu, skrip-skrip sederhana seperti ini bisa dimanfaatkan untuk banyak hal, misal auto-shutdown atau perintah-perintah terjadwal lain, dengan cara sangat sederhana memanfaatkankan aplikasi bawaan seperti cron, insya Allah untuk contoh penggunaan cron besuk kalau ada waktu.

Sekali lagi, ini sekedar cara saya mengenal skrip bash, tentang cara yang lebih efektif atau software yang lebih handal tentu banyak, semisal untuk sekedar menggabungkan file *.txt menjadi satu buah file bisa dengan mudah dikerjakan dengan find dan cat contoh:

find *.txt -exec cat > hasil.txt {} \;

dan hasilnya bisa diedit bahkan dengan format yang lebih leluasa menggunakan LibreOffice; yup, sekali lagi, ini sekedar cara saya mengenal skrip :)
Tapi tetep, kalau terdapat kekeliruan, atau cara lain yang lebih efektif/menarik, masukan akan selalu ditunggu.

---
sumber: berbagai sumber.

17 January 2016

Terjemah Menu Tales of the World: Radiant Mythology 3


Uhh.. sepertinya judulnya kurang tepat, karna ini bakalan cuman sampel :D
Tapi biarlah, terlanjur bilang mau praktik dalam posting Mengenal Hex kemarin hahaha, malah kesulitan cari bahan yang mudah dipaham :p

Yah langsung saja, alat dan bahan, dalam praktik ini saya menggunakan:
  • Ubuntu 14.04 32-bit (OS)
  • PPSSPP 1.0.1 (Game Emulator)
  • replacer 1.0 (Tool)

Kenapa pakai PPSSPP? ini hanya untuk mendapatkan file yang akan kita gunakan dalam praktik kali ini, sebenarnya ada banyak cara lain, tapi ini salah satu cara paling mudah.
Bagaimana cara mendapatkan file game untuk PPSSPP bisa baca di sini.

Tentang replacer, tool ini digunakan untuk mempercepat proses find dan replace dari data yang sudah ada, ditulis oleh admin blog ini.

Langkah pertama mendapatkan file "EBOOT.BIN" yang akan diedit:
Nyalakan PPSSPP Settings > System > Developer tools > Dump decrypted EBOOT.BIN on game boot: diaktifkan.



Lalu load game TotW RM3nya, secara otomatis file "EBOOT.BIN" yang sudah didecrypt disimpan dalam folder [~/.config/ppsspp/PSP/SYSTEM/DUMP/] dengan nama "NPJH50353.BIN", file inilah yang akan kita pakai untuk praktik kali ini.

Dalam posting Mengenal Hex kemarin, sedikit digambarkan tentang pemetaan karakter. Terus? yup, kita akan memakai salah satu standar yang dipakai dalam encoding karakter Kanji dan Kana dengan menggunakan standar Extended Unix Code (EUC-JP) contoh tabel karakter bisa dilihat di sini.

Misal sebuah deretan nilai [a5 a2 a5 a4 a5 c6 a5 e0], jika dibaca menurut tabel:
 a5 a2 mewakili ア (a)
 a5 a4 mewakili イ (i)
 a5 c6 mewakili テ (te)
 a5 e0 mewakili ム (mu)

Jadi [a5 a2 a5 a4 a5 c6 a5 e0] kalau dibaca menurut tabel menjadi アイテム (aitemu = item) :)

Tapi bakalan repot sekali kalau harus membacanya secara manual seperti ini duh :D, anda bisa menggunakan hex editor yang mendukung encoding EUC-JP untuk mengenali karakter-karakter ini, tidak perlu melakukannya secara manual.

Di linux tidak banyak hex editor, hmm.. nah, di linux banyak sekali hex editor bahkan anda bisa menggunakan text editor bawaan untuk mengedit nilai hex, hanya saja tidak banyak yang user friendly, atau paling tidak saya yang tidak tahu banyak tentang hal ini :p, anda bisa mencari infonya di tempat lain.

Next:
Jika nilai yang ingin anda rubah sudah ada, find dan replace saja di editor yang anda pakai (PENTING: nilai yang digunakan untuk merubah tidak boleh melebihi nilai bit yang ditentukan oleh designer game, jika itu dilakukan pointer akan merujuk ke alamat bit yang tidak sesuai, yang menyebabkan crash saat menjalankan gamenya nanti).

Di sini saya hanya menggunakan LibreOffice Calc untuk membuat 2 buah tabel dalam 2 file.  File 1 berisi tabel dengan nilai yang akan dirubah dan file 2 berisi tabel dengan nilai yang digunakan untuk merubah.

File 1 dengan nama "asal.csv" dan file 2 dengan nama "ganti.csv" --menggunakan format sesuai dengan aturan replacer, karna bakalan lama kalau me-replace satu per satu, kita akan menggunakan tool ini untuk melakukannya.

Langkah selanjutnya:
  • File "NPJH50353.BIN" tadi kita rubah namanya menjadi "EBOOT.BIN" biar lebih mudah.
  • Ekstrak "replacer-v1.0.zip" yang bisa diunduh dari link di bawah.
  • Ekstrak juga "sampel-tabel-rm3.zip" jika anda belum punya tabel sendiri, atau sekedar pengen nge-test, juga bisa diunduh dari link yang sama.
  • Biar lebih mudah pindah semua file "EBOOT.BIN", "asal.csv", "ganti.csv" dan file eksekusi "replacer" ke dalam folder yang sama, misal folder "replacer-v1.0" tadi.
  • Masuk ke direktori tempat semua file tadi dengan terminal.
  • Dan jalankan dengan perintah "./replacer EBOOT.BIN" tanpa tanda kutip.
  • Dan selesai.

replacer-v1.0.zip dan sampel-tabel-rm3.zip
https://goo.gl/aAdV16


Tentang bagaimana cara menggunakan file "EBOOT.BIN" yang sudah dimodifikasi ini di PSP Console, atau cara memasangnya di file digital game, bisa dicari sendiri.

p.s.
Di sini saya tidak akan menyertakan file "EBOOT.BIN", don't ask why :)
Sekali lagi, ini hanyalah sampel mengenal data hex/bin untuk mempelajari cara kerja sebuah mesin ^^
Dan trahir, gomen terjemahan sampelnya messed up, cuman pakai google translate :p

---
sumber:
http://translate.google.com/
forum PPSSPP yang sudah lupa alamatnya :p
http://kohesi.blogspot.com/2016/01/mengenal-hex.html
replacer manual
http://ffhacktics.com

10 January 2016

Mengenal Hex

Hexadecimal atau sering disingkat hex, bilangan yang lebih mudah dibaca dibandingkan biner :)

Beda dengan bilangan biner yang yang kita musti ngitung jumlah digit untuk mengetahui sebuah nilai, hex bekerja seperti bilangan Arab biasa (bilangan yang kita pakai dalam kehidupan sehari-hari), yah, itu karna hex memang bilangan Arab (0-9) yang ditambah 5 angka (A-F), jadi:

Angka Arab:
0-9 yang kalau diteruskan 10 11 12 dst.

Hex:
0-9 diteruskan dengan A B C sampai F yang bernilai 15 desimal, dan diteruskan dengan 10 11 12 .. 19 1A dst.
(10 di sini bernilai 16 desimal, 11 bernilai 17, 19 bernilai 25, 1A bernilai 26 dst.)

Konversi Biner > Hex > Desimal > Oktal atau yang lain bisa lihat pakai kalkulator ilmiah :p

Hahaha seperti biasa, di sini tidak akan membahas lebih lanjut tentang teori :D

Lalu apa kegunaan bilangan-bilangan itu?
Dalam dunia komputer, yang nilai awal/dasarnya berupa angka, bilangan-bilangan itu digunakan untuk mewakili/memetakan karakter-karakter, tulisan yang kita baca di komputer itu, diolah oleh mesin dalam bentuk "nilai".

Gambarkan saja kalau kita membuat sebuah sistem pengolah teks misal:
Kita menjadikan nilai "1" sebagai karakter "a", nilai "2" sebagai karakter "b", dan nilai-nilai lain untuk mewakili spasi, baris baru dan sebagainya.
Sebagai catatan, nilai "1" yang saya maksudkan di sini adalah nilai "1" menurut mesin, bukan angka karakter "1" yang juga perlu kita petakan.

Yup, tapi jika itu dilakukan, sistem kita mungkin bisa membacanya, tapi bagaimana dengan sistem lain? hahaha, jadi repot..
Untuk mengatasi masalah ini, dibuatlah standarisasi yang dipakai untuk meng-encode data dari satu sistem ke sistem lain.

Standar yang paling sering kita pakai misal ASCII atau UTF-8 (bagi pengguna linux).
Posting berikutnya praktik mengedit file dalam bentuk hex;
dalam: Terjemah Menu Tales of the World: Radiant Mythology 3.

---
sumber: materi extra kelas 8

01 January 2016

Konversi Tanggal Unix Ke Excel?

Sekedar catatan, kadang lupa;
Biasanya dibutuhkan hanya untuk keperluan cetak, seperti tanggal dalam file hasil export dari aplikasi ini.

Di linux tanggal bisa dilihat dengan perintah:
date

atau dalam bentuk tanpa format:
date +%s



Untuk lebih jelasnya bisa lihat ini.

Dalam contoh di atas bernilai 1450926165 yang jika dikonversi ke format Excel menjadi 42362,4185763889




Contoh di atas menggunakan LibreOffice Calc dengan setting lokal Indonesia (decimal separator key (,) dan date acceptance patterns (D/M/Y;D/M))
misal:
=(((A1/60)/60)/24)+DATE(1970;1;1)+(7/24)

en kira-kira:
=(((A1/60)/60)/24)+DATE(1970,1,1)+(7/24)

Dalam kolom B, C, dan D memiliki nilai yang sama, hanya dalam format yang berbeda, di LibreOffice bisa diubah dengan CTRL+1 dalam tab Numbers.
Di Microsoft Office mungkin seperti ini.

Hanya saja dalam aplikasi ini tanggal dalam satuan millisecond yang 1s bernilai 1000ms.
jadi:
=(((A1/60000)/60)/24)+DATE(1970;1;1)+(7/24)



Mengenai bentuk, pengurangan/penambahan atau teori yang lain bisa dicari sendiri, CMIIW :p

---
sumber: berbagai sumber.