Memakai VIM di Windows 7

Suatu hari, saya ingin melakukan perubahan konfigurasi domain GlasshFish yang ter-install di Windows 7.  Seperti kebanyakan aplikasi multiplatform lain, konfigurasi GlassFish tersimpan dalam sebuah file yang bisa di-edit oleh administrator-nya. Kebanyakan aplikasi multiplatform tidak menyimpan konfigurasi di registry, sehingga pengguna tidak dapat mengedit melalui tools GUI seperti regedit.  Hal ini masuk akal, karena registry hanya berlaku di Windows.  Cara yang paling efektif dan efisien memang dengan menuliskannya ke dalam sebuah file, karena seluruh platform lain seperti Linux, MacOS, & UNIX, dapat membaca dan menulis isi file.

Mengedit file” terdengar sangat sederhana, tetapi bagi saya, hal ini menjadi sedikit merepotkan di Windows 7, terutama bila ingin langsung mengedit sebuah file secara langsung tanpa meninggalkan Command Prompt.  Selama ini, saya tidak pernah menemukan masalah dalam mengedit file saat berada di console UNIX dan turunannya, karena hampir semua sistem operasi tersebut menyertakan editor teks VI atau VIM. Sejujurnya, saya sedikit kebingungan bila memakai VI, tetapi tidak sulit untuk men-upgrade-nya menjadi VIM (Vi IMproved).

Seandainya, saya sedang berada di Command Prompt Windows 7 (misalnya, untuk memanggil tools asadmin bawaan GlashFish), lalu saya ingin mengedit file konfigurasi domain.  Hal pertama yang saya pikirkan adalah notepad.exe, sebuah editor sederhana bawaan Windows dari berbagai generasi.  Di Command Prompt, saya bisa mengetikkan seperti berikut ini:

C:\>notepad domain.xml

Akan muncul program Notepad beserta isi file domain.xml seperti berikut ini:

Tampilan Notepad

Kenapa setiap baris jadi saling sambung menyambung seperti itu? Di platform UNIX dan turunannya (Linux, MacOS X, dan sebagainya), pemisah baris hanya satu karakter, yaitu karakter LF (Line Feed) yang diwakili karakter ASCII 10 (simbol ‘\n’).  Sementara itu, di platform Windows, pemisah baris terdiri atas dua karakter, yaitu karakter CF (Carriage Return) yang diwakili karakter ASCII 13 (simbol ‘\r’) baru diikuti dengan LF (Line Feed).  Notepad tidak menemukan karakter ‘\r\n’ sehingga tidak akan ada pemisah baris.

Masih ada sebuah solusi, yaitu editor dalam Command Prompt yang bernama edit.exe.  Sungguh tidak disangka editor yang populer di zaman DOS seperti ini masih ada di generasi Windows 7.  Untuk memakai edit.exe, saya memberikan perintah seperti berikut ini:

C:\>edit domain.xml

Akan muncul tampilan seperti berikut ini:

Tampilan Edit.exe

Sekarang file sudah dapat dibaca dan ditampilkan dengan rapi.  Akan tetapi, edit.exe memiliki banyak kelemahan dalam mengedit file.  Salah satunya adalah harus sering menggeser layar (tidak ada fitur word-wrap) dan tidak ada syntax highlighting. Bagaimana bisa fitur editor di Windows kalah dari editor VIM bawaan sistem operasi gratis seperti Linux?

Saya akhirnya memutuskan untuk menginstall VIM versi Windows di Windows 7 saya.  VIM dapat didownload di situs resmi-nya.  Untuk platform Windows, sudah tersedia installer yang dapat melakukan proses instalasi secara otomatis.

Setelah meng-install VIM, saya menambahkan direktori instalasi VIM di environment variables Path sehingga saya dapat langsung memanggil editor tersebut di Command Prompt.  Caranya adalah dengan membuka tab Advanced di System Properties.  Kemudian klik pada tombol Environment Variables… Pada dialog yang muncul, cari Path di bagian System Variables, kemudian klik Edit…  Saya menambahkan C:\Program Files\Vim\vim73 di bagian paling akhir (pisahkan dengan direktori sebelumnya dengan menggunakan tanda “;“).

Karena saya terbiasa memanggil VIM dengan mengetik vi di Linux, maka saya menambahkan symbolic link vi yang merujuk ke vim.exe. Caranya adalah dengan membuka Command Prompt sebagai superuser (tahan Ctrl+Shift) pada saat men-klik shortcut Command Prompt, lalu berikan perintah seperti berikut ini:

C:\>cd "C:\Program Files\Vim\vim73"
C:\Program Files\Vim\vim73>mklink vi.exe vim.exe
symbolic link created for vi.exe <<===>> vim.exe

Sekarang, saya dapat mengedit file konfigurasi GlassFish tersebut dengan memberikan perintah seperti berikut ini:

C:>vi domain.xml

Akan muncul tampilan seperti berikut:

Tampilan VIM

Kali ini, saya akan mendapatkan tampilan yang familiar seperti di Linux.  Tidak seperti di edit.exe, VIM secara otomatis melakukan word-wrap dan memberikan syntax highlighting (pewarnaan) sehingga lebih mudah mencari bagian yang akan di-edit.  Pertama kali memakai VIM memang bisa jadi rumit (tidak ada menu, perintah diberikan dengan mengetikkan huruf seperti :wq untuk save dan keluar).  Akan tetapi bila sudah terbiasa, VIM bisa menjadi sebuah editor yang sangat powerful.  Misalnya dengan memberikan perintah :set nu! dan :set wrap!, saya dapat mengaktifkan line number dan word wrap sehingga tampilan VIM terlihat seperti:

Tampilan VIM line number & wrap on

VIM memiliki banyak fitur menyenangkan lainnya, dan tentu saja, jauh lebih powerful dibanding edit.exe dan Notepad.exe bawaan Windows terutama bagi programmer.   Selain itu, VIM juga lebih ringan dan gratis bila dibanding editor berbasis GUI (misalnya editor komersial UltraEdit).  Dengan adanya VIM di Windows, akhirnya saya bisa sedikit lebih betah memakai console di Windows (entah mengapa masih merasa tidak seperti di Linux).

Iklan

Memakai nasm Di Linux

Pada tulisan sebelumnya yang berjudul Assembly di Linux Dengan GAS, saya memperlihatkan penggunaan GNU Assembler di Linux.  GNU Assembler (GAS) hampir tersedia di kebanyakan instalasi Linux, sehingga programmer tinggal memakainya saja.  Tapi untuk memakai GAS, seseorang harus mempelajari assembly dengan syntax AT&T.  Bagi yang terbiasa dengan syntax Intel, pada awalnya mungkin akan sering mengalami sindrom “operand tertukar” (hal ini karena letak operand di syntax AT&T terbalik dengan yang ada di dokumentasi Intel).  Sebagai contoh, perhatikan syntax Intel berikut:

mov al, bl

Baris di atas akan memintahkan isi register BL ke register AL.  Untuk melakukan hal yang sama pada syntax AT&T, programmer harus memberikan perintah seperti:

movb %bl, %al

Urutan operand yang terbalik seperti ini bisa jadi membingungkan bagi programmer yang sudah terbiasa memakai syntax Intel.

Salah satu solusinya adalah dengan meng-install Netwide Assembler (NASM) yang sangat populer di Linux.  Source NASM yang terbaru pada tulisan ini dibuat dapat di-download di situs resmi NASM.  Setelah men-download dan men-extract source NASM, kerjakan script configure.  Berikan perintah make dan make install untuk meng-install NASM pada lokasi default.

Untuk melihat dukungan format NASM, berikan perintah seperti berikut:

$ nasm -hf
...
valid output formats for -f are (`*' denotes default):
* bin       flat-form binary files (e.g. DOS .COM, .SYS)
ith       Intel hex
srec      Motorola S-records
aout      Linux a.out object files
aoutb     NetBSD/FreeBSD a.out object files
coff      COFF (i386) object files (e.g. DJGPP for DOS)
elf32     ELF32 (i386) object files (e.g. Linux)
elf64     ELF64 (x86_64) object files (e.g. Linux)
as86      Linux as86 (bin86 version 0.3) object files
obj       MS-DOS 16-bit/32-bit OMF object files
win32     Microsoft Win32 (i386) object files
win64     Microsoft Win64 (x86-64) object files
rdf       Relocatable Dynamic Object File Format v2.0
ieee      IEEE-695 (LADsoft variant) object file format
macho32   NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (i386) object files
macho64   NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (x86_64) object files
dbg       Trace of all info passed to output stage
elf       ELF (short name for ELF32)
macho     MACHO (short name for MACHO32)
win       WIN (short name for WIN32)

Pada Linux, format yang dipakai adalah elf.  Perhatikan bahwa NASM mendukung format bin yang akan menghasilkan flat-form binary file (mirip seperti file COM di zaman DOS).  Format bin seperti ini dapat dipakai untuk menghasilkan kode untuk bootloader dan berbagai keperluan lain dalam membuat sebuah sistem operasi baru.

Berikut ini adalah program yang sama seperti pada tulisan Assembly di Linux Dengan GAS, hanya saja kali ini memakai Intel syntax dan ditujukan untuk NASM:

section .data
output_vendor:
db  `Vendor ID Prosesor adalah 'xxxxxxxxxxxx'\n`
output_vendor_length    equ     $-output_vendor

output_brand:
db  `Prosesor Brand String adalah 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'\n`
output_brand_length    equ    $-output_brand

output_no_brand:
db  `Tidak ada informasi Processor Brand String\n`
output_no_brand_length    equ    $-output_no_brand

section .text
global _start
_start:
mov    eax, 0
cpuid
mov    edi, output_vendor
mov    [edi+27], ebx
mov    [edi+31], edx
mov    [edi+35], ecx
mov    eax, 4
mov    ebx, 1
mov    ecx, output_vendor
mov    edx, output_vendor_length
int    0x80

mov    eax, 0x80000000
cpuid
cmp    eax, 0x80000004
jl    no_brand

mov    eax, 0x80000002
cpuid
mov    edi, output_brand
mov    [edi+30], eax
mov    [edi+34], ebx
mov    [edi+38], ecx
mov    [edi+42], edx

mov    eax, 0x80000003
cpuid
mov    [edi+46], eax
mov    [edi+50], ebx
mov    [edi+54], ecx
mov    [edi+58], edx

mov    eax, 0x80000004
cpuid
mov    [edi+62], eax
mov    [edi+66], ebx
mov    [edi+70], ecx
mov    [edi+74], edx
mov    [edi+77], byte 0x20

mov    eax, 4
mov    ebx, 1
mov    ecx, output_brand
mov    edx, output_brand_length
int    0x80
jmp    selesai

no_brand:
mov    eax, 4
mov    ebx, 1
mov    ecx, output_no_brand
mov    edx, output_no_brand_length
int     0x80

selesai:
mov    eax, 1
mov     ebx, 0
int    0x80

Untuk menjalankan program tersebut, berikan perintah seperti berikut ini:

$ nasm -f elf cpuinfo.asm
$ ld -o cpuinfo cpuinfo.o
$ ./cpuinfo
Vendor ID Prosesor adalah 'GenuineIntel'
Prosesor Brand String adalah 'Pentium(R) Dual-Core CPU       T4400  @ 2.20GHz '

Nilai option “-f elf” menunjukkan bahwa NASM akan menghasilkan output dalam format ELF yang dipakai oleh Linux.  Pembuat program assembler yang terbiasa menggunakan IA-32 pun dapat tetap memakai Intel syntax di platform Linux.

Linux Startup: Mengawali Tahun Baru 2010

Selamat tahun baru 2010!! Untuk merayakan tahun baru ini, aku pun menyempatkan diri untuk menulis blog setelah sekian lama tidak online. Maklum saja, aku masih harus berpisah dengan notebook. Tapi aku mendapat pelajaran baru: belajar untuk lepas dari kesibukan dan rutinitas-ku, sehingga aku bisa melihat begitu banyak karunia yang begitu berharga di sekelilingku. Sesuatu yang mungkin aku anggap sepele sebelumnya, seperti keluarga yang baik dan adik kecil yang lucu 🙂

Dan kembali ke laptop, aku akan melanjutkan tulisan sebelumnya dengan proses startup di Linux. Pada tulisan tersebut, aku mematikan services dengan menghapus symbolic link-nya secara manual. Kali ini, aku akan memakai tools bawaan Linux, yang tentunya lebih disarankan ketimbang memakai cara manual.

Untuk melihat daftar services yang dijalankan saat proses startup, aku dapat mengetik:


chkconfig

Untuk melihat apakah services tersebut dijalankan pada setiap run-level, aku dapat menambahkan argument “-l”. Misalnya, untuk melihat run-level apa saja yang menjalankan “cron”, aku dapat mengetik seperti ini:


chkconfig -l cron

Yang hasilnya akan seperti:

cron 0:off 1:off 2:on 3:on 4:off 5:on 6:off

Jika aku hanya ingin “cron” dijalankan pada run-level 5, aku dapat memberikan perintah seperti ini:


chkconfig -s cron 5

Untuk membuat “cron” kembali dijalankan pada run-level 2, 3, dan 5, aku memberikan perintah seperti ini:


chkconfig -s cron 235

Untuk melihat services yang sudah berjalan di sistem pada saat ini, aku dapat memberikan perintah:


service -s

Untuk memeriksa status service tertentu saja, misalnya service “cron”, aku dapat memberikan perintah:


service cron status

Aku juga dapat menjalankan, mematikan dan me-restart service, masing-masing dengan argumen start, stop, dan restart.

Startup Di Linux

Untuk sementara selama beberapa bulan ini, aku harus berpisah dengan notebook kesayanganku.  Hari-hari akan terasa sangat berat untuk dilalui tanpa sebuah komputer.  Untung saja masih ada game PSP yang belum aku tamat-kan.  Dan juga ada notebook kantor yang sesekali dapat aku bawa pulang.  Aku tidak terlalu bangga dengan Intel Pentium M dan memori 768 MB di tahun 2009 ini.  Tapi ini lebih baik daripada tidak ada notebook sama sekali.

Notebook tersebut berisi sistem operasi OpenSUSE 11.  Sebagai pengguna Windows, aku harus membiasakan diri dengan Linux/Unix.  Ini adalah tuntutan pekerjaan.  Aku menggunakan gcc dan Eclipse sebagai GUI editor.  Aku memakai libtool untuk membuat shared library dan dynamic library secara otomatis.  Aku melakukan IPC dengan shared memory.  Aku membuat program berbasis GUI dengan XLib…  Semua ini berbeda dengan Windows dan Visual C++ nya…

Mmmh..di hari minggu ini seharusnya aku tidak memikirkan kerjaan.  Lebih baik aku meng-otak-atik sistem operasi Linux di notebook yang aku bawa pulang kemarin.  Aku melihat ada beberapa daemon yang berjalan secara otomatis saat sistem operasi berjalan, seperti mail server dan ssh daemon. Aku tidak membutuhkan mereka, jadi aku bisa mematikannya untuk menghemat memori.  Di Windows, aku dapat menggunakan tool msconfig atau meng-edit registry.  Tapi bagaimana dengan Linux?

Di distro openSUSE, program-program yang dijalankan otomatis memiliki symbolic link yang terletak di direktori /etc/init.d/rcX.d, dimana X bisa berupa angka yang menunjukkan run level, seperti rc0.d, rc1.d, rc2.d, dan seterusnya.  Contoh file symbolic link-nya seperti S11postfix.  Huruf awal “S” menunjukkan program ini akan dikerjakan saat startup sistem operasi.  Jika huruf awal-nya “K”, program tersebut akan dikerjakan saat sistem operasi di-shutdown.  Angka 00-99 setelah huruf “S” atau “K” menunjukkan nilai prioritas.  File yang nilai angka prioritas-nya lebih kecil akan dikerjakan lebih dulu sebelum file yang nilai angka prioritas-nya  lebih besar.

Aku segera menghapus symbol link seperti postfix, sshd dan avahi-daemon.  Aku tidak membutuhkan program-program itu, karena mereka hanya membuka port yang memungkinkan seseorang melakukan koneksi ke sistem operasi.