20110628

[Sed] Merubah kata pada kolom tertentu

Sed atau dikenal sebagai Stream Editor adalah alat sederhana yang sangat membantu dalam menulis, khususnya programmer. Singkatnya Sed dapat merubah beberapa kata/huruf/kalimat/angka/apapun secara otomasi dengan beberapa perintah saja, tanpa harus merubah file aslinya, artikel yang ber-prefix-kan [Sed] akan menjelaskan trik sederhana penggunaan Sed.

Asumsikan mempunyai file baca.txt dengan isi:

naga itu memakan naga kecil ini
naga itu memakan naga kecil ini
naga itu memakan naga kecil ini

Kita dapat merubah kata naga yang kedua (setelah kata 'memakan') dengan perintah ini:

sed -e 's/naga/kucing/2' baca.txt > kucing.txt

-e, adalah opsi untuk memasukan ekspresi, dalam contoh ini 's/naga/kucing/2' sebagai ekspresi.
Angka 2 pada string tersebut menandakan, akan mengganti kata 'naga' pada kemunculan kedua, hasil olahan tersebut dimasukan ke file kucing.txt.

Jika ingin mengganti pada baris pertama saja, tinggal tambahkan angka satu:

sed -e '1s/naga/kucing/g' baca.txt > kucing.txt

Kita melihat ada huruf 'g' pada string, ini membuat semua kata 'naga' di baris pertama akan diganti, jika tidak menggunakan 'g' maka hanya kata 'naga' pertama kali bertemu yang akan dirubah.

Jika ingin merubah baris satu dan dua saja, maka gunakan ini:

sed -e '1,2s/naga/kucing/g' baca.txt > kucing.txt

1,2, berarti dari baris satu sampai dua yang akan dirubah.

nb: Masih banyak kekurangan, dan beberapa penjelasan ini tidak Best Practices masih butuh, koreksi dari para ahli :D

20110613

Copy-Paste ke dalam Clipboard pada Vim

Jika terdapat 2 terminal emulator dan masing-masing terminal menggunakan Vim, maka tiap sesi Vim ini berbeda, dan untuk Copy-Paste seperti biasa tidak akan berjalan, gunakan perintah ini untuk menyalinnya ke dalam Clipboard, namun terlebih dahulu pilih bagian yang ingin di salin menggunakan Visual Mode:

"+y

Setelahnya, pindah ke sesi Vim satunya, dan jalankan:

"+p

Maka Vim akan mengambil konten dari Clipboard dan menyalinnya di sesi Vim tersebut.

20110602

[Error] ! Undefined control sequence pada pdftex

Sebenarnya ini sangat memalukan, karena tidak ada yang salah dari sumber dokumen tex berikut:

\documentclass[a4paper,10pt]{article}
\usepackage[bahasa]{babel}

\begin{document}

\section*{C}

\begin{itemize}
 \item[1.] Common Coding Practices
 \item[2.] Indentation and Code Formats
 \item[3.] Clarity and Simplicity
 \item[4.] Elements of Programs
 \item[5.] Basic Programs Structure
 \item[6.] Simple Expressions
 \item[7.] Variables and Storages
 \item[8.] Integers
 \item[9.] printf Function
 \item[10.] Floating Point
 \item[11.] Characters
\end{itemize}

\end{document}

Penggunaan pdftex malah menghasilkan pesan kesalahan seperti ini:

! Undefined control sequence.
l.1 \documentclass
                  [a4paper, 10pt] {article}

Ternyata, salah menggunakan pdftex untuk menghasilkan dengan syntax seperti ini dan solusinya adalah mengganti perintah menjadi pdflatex

:D

20110525

[Error] xcompmgr menghilangkan semua window pada Openbox

xcompmgr sepertinya bentrok dengan conky, karena dalam Archlinux dengan window manager Openbox (tidak tahu apakah ini terjadi di distro dan window manager lain), terjadi keanehan dalam prilaku xcompmgr, kita tahu xcompmgr sebagai compositing manager sederhana yang ringan namun berbeda dengan compiz yang mempunyai fitur banyak.

Instalasi xcompmgr berjalan aman, namun terjadi permasalah pada saat menjalankannya:

Pertama, saya membuka urxvt lalu menjalankan

$ xcompmgr -c

Satu detik setelah eksekusi, window urxvt menghilang, begitu juga dengan firefox yang saya jalankan di workspace lain, meskipun dengan alt-tab window tersebut muncul kembali, namun dengan seketika menghilang kembali, tidak ada pesan error satu pun yang keluar, setelah pencarian singkat menemukan thread ini di forum archlinux, dia menyarankan merubah satu konfigurasi conky:

own_window no

Menjadi:

own_window yes

Setelah merubahnya, semuanya berjalan normal, hanya saja jika klik-kanan pada daerah conky, menu Openbox tidak muncul

20110524

Fstab - Informasi statis tentang filesystem

/etc/fstab - menyimpan konfigurasi serta informasi tentang semua harddisk yang tersedia beserta partisi dan filesystem-nya, prilaku bagaimana tiap partisi itu di inisialisasi juga menjadi tugasnya, utilitas seperti fsck, mount, dan umount sangat bergantung pada /etc/fstab.

Contoh isi dari /etc/fstab:

# <file system>                           <dir>       <type>    <options>          <dump> <pass>
devpts                                    /dev/pts    devpts  defaults              0      0
shm                                       /dev/shm    tmpfs   nodev,nosuid          0      0

#/dev/cdrom                               /media/cd   auto    ro,user,noauto,unhide 0      0
#/dev/dvd                                 /media/dvd  auto    ro,user,noauto,unhide 0      0
#/dev/fd0                                 /media/fl   auto    user,noauto           0      0

UUID=004b497f-d56a-46ba-af1c-9f3ab0ce2020 / ext3 defaults 0 1
UUID=5a2e1a84-7073-40ec-b717-7936dc1a99ed swap swap defaults 0 0
UUID=1240b1b4-60e0-44e7-b412-2c8cc523d661 /media/sda3 ext3 user,rw,uid=1000,noatime 0 0

Untuk memodifikasi, setidaknya kita harus mengerti enam informasi yang dibutuhkan /etc/fstab, lihat pada baris terakhir:

UUID=1240b1b4-60e0-44e7-b412-2c8cc523d661 /media/sda3 ext3 user,rw,uid=1000,noatime

/etc/fstab terbagi menjadi 6 wilayah, yaitu:

<file system>  <dir>  <type>  <options>  <dump> <pass>

Pertama, wilayah filesystem digunakan untuk menentukan mana partisi yang digunakan, dalam contoh ini penulis menggunakan UUID untuk mengenali partisi.

Kedua, menenentukan dimana filesystem akan di mount, pada kasus ini berada di /media/sda3

Ketiga, deskripsikan secara jelas jenis filesystem-nya, dalam contoh ini menggunakan ext3, jika tidak yakin dapat menggunakan auto sistem mendeteksi filesystem-nya.

Keempat, user,rw,uid=1000,noatime 0 0 ini opsi yang digunakan, terdapat opsi lain, yaitu;

  • auto, filesystem akan di mounting secara otomatis pada startup atau pada saat perintah mount -a dijalankan.
  • noauto, filesystem tidak akan di mounting dengan otomatis.
  • exec, mengizinkan agar dapat menjalankan file executable.
  • noexec, tidak mengizinkan menjalankan file executable.
  • ro, mounting dengan read-only.
  • rw, mounting dengan read-write.
  • user, memungkinkan user selain root dapat mounting filesystem.
  • nouser, hanya root yang boleh mounting filesystem.
  • suid, membolehkan operasi suid dan sgid, untuk memperbolehkan menjalankan file binary dengan akses tinggi untuk menyelesaikan beberapa tugas.
  • nosuid, tidak memperbolehkan operasi suid dan sgid.
  • defaults, sama dengan rw,suid,dev,exec,auto,nouser,async
  • sync, menentukan bagaimana input/output diselesaikan pada filesystem, dengan opsi sync maka I/O akan diselesaikan secara sinkron, dalam artian jika USB Flashdrive ada di komputer, lalu pada saat menyalin suatu file, maka file itu secara fisik juga tersalin pada Flashdrive.
  • async, dengan opsi ini jika menyalin suatu file ke Flashdrive, maka perubahan fisik akan terjadi setelah perintah itu dijalankan namun dengan rentang waktu yang cukup lama, berarti meskipun menyalin file tersebut dan seketika Flashdrive tersebut dilepas dari komputer, maka tidak akan ada perubahan pada Flashdrive tersebut.

Kelima, berisi nilai 0 atau 1, jika nilai 0 maka utilitas dump tidak menganggap filesystem tersebut, dump digunakan untuk backup filesystem.

Keenam, nilai ini digunakan untuk memberitahu fsck agar mengecek integritas filesystem, dapat diisi dengan nilain 0, 1, dan 2, nilai satu digunakan untuk prioritas tertinggi, biasanya digunakan untuk partisi root, jika nilai 0, maka fsck tidak melakukan pengecekan.

[Baris Perintah] du - untuk mengetahui ukuran direktori

du - biasa digunakan untuk mencari ukuran sebuah direktori, walau sebenarnya du adalah perintah untuk mencari ukuran pada sebuah file, dan untuk mendapat ukuran direktori di lakukan secara rekursif pada seluruh file di direktori tersebut, lalu diberikan total dari akumulasi ukuran tiap file.

Penggunaannya sebagai berikut:

du [OPTION]... [FILE]...

dimana OPTION akan memudahkan kita dalam pencarian informasi, sedangkan FILE diisi dengan file yang inginkan, dapat digunakan lebih dari satu file.

$ du foo.txt bar.txt
10  foo.txt
20  bar.txt

Ini bentuk sederhana yang hanya mengeluarkan ukuran tanpa postfix seperti K, M, atau G. Untuk mendapatkan postfix tersebut digunakan opsi:

$ du -h foo.txt
10K    foo.txt

-h, --human-readable berarti formatnya dipermudah dengan menambahkan postfix.

$ du foobar/
34    foobar

Direktori foobar berisi file foo.txt dan bar.txt, nilai 34 di ambil dari akumulasi foo.txt, bar.txt dan direktori foobar/ (direktori mempunyai ukurannya sendiri yaitu 4 KB)

$ du -a foobar/
10    foobar/foo.txt
20    foobar/bar.txt
34    foobar/

-a, -all digunakan agar format output dari du juga menyisipkan ukuran tiap file, karena tanpa opsi -a hanya menampilkan ukuran tiap direktori serta sub-direktori saja.

$ du -sh foobar/
34K    foobar

-s, --summarize hanya menampilkan total keseluruhan direktori beserta file-nya tambahkan opsi -h untuk mendapatkan format yang mudah dibaca.

Jika menjalankan perintah du tanpa file input, maka dia akan memeriksa pada direktori yang sedang aktif saja.

Selain opsi-opsi diatas, terdapat opsi lain, seperti:

-S, --seperate-dirs ukuran sub-direktori tidak akan di ikutkan dalam akumulasi, jadi jika didalam foobar/ ada direktori barfoo/ dengan ukuran 4K, dan dengan opsi -S maka hasilnya akan tetap 34K.

--exclude=PATTERN opsi ini akan menyingkarkan file yang mempunyai bentuk sesuai dengan PATTERN, dan ini bukan regular expression, hanya shell pattern yang sederhana seperti tanda ? akan mencocokan pada satu karakter saja dan tanda * akan mencocokan pada string apapun, contoh;

Jika direktori foobar/ mempunyai file header.c dan main.c, lalu:

$ du -a --exclude="*.c" foobar/
10    foobar/foo.txt
20    foobar/bar.txt
34    foobar/

Maka yang tampak hanyalah foo.txt, bar.txt, dan foobar/, file header.c dan main.c dihilangkan karena mereka termasuk dalam PATTERN.

20110523

Alt-Tab Preview pada Openbox

Alt-Tab adalah shortcut yang biasanya digunakan untuk memilih window aktif pada desktop, Openbox menawarkan banyak opsi untuk meningkatkan produktifitas, salah satunya dengan meng-preview window selama kita memilih-milih window dengan Alt-Tab.

Dengan menambahkan opsi raise pada fitur NextWindow, berikut contoh penggunaannya:

<keybind key="A-Tab">
  <action name="NextWindow">
    <raise>yes</raise>
  </action>
</keybind>

Opsi ini juga dapat diterapkan pada PreviousWindow, dokumentasi tentang Action pada Openbox dapat dilihat disini Openbox Actions Documentation.

Mengatur Margin Openbox untuk penggunaan Conky

Penggunaan Conky untuk memonitor hardware ataupun waktu sudah menjadi keharusan, untuk pecinta simplisitas desktop biasanya menggunakan conky one-liner yang diletakkan di atas maupun di bawah, nah kadang conky one-liner ini meskipun sudah menggunakan atribut untuk membuatnya di atas namun window aplikasi tetap saja menimpa conky ataupun window tercampur dengan conky, ada solusi yang dapat digunakan di Openbox yaitu dengan mengatur margin, karena Openbox ini sudah kompatibel dengan EWMH.

Pertama, tambahkan di rc.xml baris berikut:

<margins>
  <top>14</top>
  <bottom>0</bottom>
  <left>0</left>
  <right>0</right>
</margins>

Atau lebih mudah dapat menggunakan utilitas obconf, nilai margin bisa anda rubah sendiri sesuai kebutuhan.

Kedua, tambahkan di .conkyrc baris berikut:

own_window yes
own_window_transparent no
own_window_type normal
own_window_hints undecorated,sticky,skip_taskbar,skip_pager

Reload conky, lalu liat hasilnya :D

20110520

Konversi PNG ke JPG dengan ImageMagick

Pindah ke folder yang terdapat file PNG Anda:

$ convert gambar.png gambar.jpg

Perintah tersebut akan mengkonversi satu file, namun jika banyak file
yang ingin di konversi gunakan script berikut:

$ for img in *.png; do
>   convert "$img" "$img.jpg"
> done

20110426

80 Karakter per baris pada Vim

Jika mempunyai file teks yang tidak mempunyai standar 80 karakter per baris, dapat di format dengan terlebih dahulu mengatur textwidth menjadi 80, masukan baris in ke .vimrc

set textwidth=80

lalu buka file teks tersebut, pindahkan kursor ke tempat dari mana Anda ingin memformatnya, lalu jalankan ini

VGgq

voila! file teks Anda sudah mengikuti standar 80 karakter :D

20110418

[Baca Kode] Memotong file mp3 dengan ffmpeg

ffmpeg -ss waktumulai -t jumlahdetik -i input.mp3 -acodec copy output.mp3

waktumulai = waktu pertama memulai pemotongan
jumlahdetik = berapa detik potongan ingin dilakukan