Archive for the ‘Lesson’ Category

The corruption of the last syllable containing the vowel ‘a’ on Indonesian

Sunday, December 23rd, 2007 by Agro Rachmatullah

In spoken Indonesian, the vocal ‘a’ on the last syllable of many words change into ‘e’. When this colloquial corruption exists, using the correct version sounds very very stiff and formal. Here are some examples:

teman -> temen (friend)
Temenmu tadi juga kuliah di UGM? - Does your friend (which we met earlier) also study in UGM?

But not preman -> premen (even though it has the same last syllable as the previous example)

dalam -> dalem (inside)
Bukunya ada di dalem tas yang kecil itu. - The book is inside that small bag.

malam -> malem (night)
Gimana kalo ngerjainnya nanti malem aja? - How about doing it later tonight?

But not salam -> salem

tanam -> tanem (to plant), also its derived word tanaman -> taneman (plant)
Tadi aku ngeliat taneman aneh lo di kuburan! - I found a weird plant on the cemetery, you know!

enam -> enem (six)
Aku udah nyoba enem kali tapi masih belum bisa menang juga. - I’ve tried six times but still couldn’t win.

But not senam -> senem

senang -> seneng (to like)
Aku nggak gitu seneng lagu ini. - I don’t really like this song.

But not renang -> reneng

simpan - simpen (to keep something in a place)
Simpen di tempat yang aman lo! - Make sure you keep it in a safe place!

But not depan -> depen

malas -> males (lazy)
Kalau kamu males-malesan, mana bisa lulus? - If you act lazy, how can you pass?

But not kelas -> keles

Most of the words that I could think of ends with -n, -m, or -ng (which in Japanese is all represented by ん). Can you find other examples?

It is OK to use the corrupted vocabulary presented here when talking to someone higher (e.g., teacher). However, it is not used in formal writing or speech.

Plastik sebagai alat makan

Saturday, December 15th, 2007 by Agro Rachmatullah

Di halaman Wikipedia tentang daftar peralatan makan, kita bisa menemukan sendok sampai sumpit. Walaupun begitu, ada satu alat makan yang biasa kugunakan namun tidak terdaftar di situ: plastik!

Plastik untuk makan

Plastik menggabungkan kenyamanan makan menggunakan tangan dengan kepraktisan tidak perlu mencuci tangan maupun alat makan. Cara mendapatkannya juga sangat mudah, tinggal meminta “plastik minum” ke penjual makanan setelah kita membayar.

Inilah tata cara makan menggunakan plastik:

Mengeluarkan isi plastik

Pertama, turn the plastic inside out. Bahasa Indonesianya, buatlah agar permukaan dalam plastik menjadi permukaan luar. Alasannya, ada kemungkinan permukaan luar aslinya telah terkontaminasi berbagai debu dan kuman. Permukaan dalam aslinya mestinya tidak pernah terekspos lingkungan luar sehingga lebih higienis.

Langkah ini belum tentu selalu berhasil dengan mudah. Kadangkala, kita mendapatkan plastik gagal alias permukaan dalamnya saling merekat. Terus saja menggesek-gesek sampai berhasil melepas rekatannya atau sampai bosan.

Memasukkan tangan ke plastik

Setelah itu, masukkan tangan kamu ke dalam plastiknya. Langkah ini juga belum tentu langsung berhasil, sebab kadang-kadang penjual makanan tidak punya stok plastik yang cukup besar. Kalau plastiknya terlalu kecil, coba saja regangkan sambil berharap plastiknya tidak robek.

Makan dengan plastik. Itadakimasu!

Setelah semua persiapan tadi, tinggal acara utamanya yaitu makan! Jangan lupa membuang sampahnya pada tempatnya.

Sebagai alat makan yang sekali pakai buang, sepertinya kelemahan satu-satunya alat makan ini adalah sampah yang dihasilkan. Ya, alat makan ini tidak ramah lingkungan! Di saat ada orang-orang tertentu yang membawa kantong sendiri untuk berbelanja di swalayan (untuk mengurangi jumlah penggunan plastik yang ujung-ujungnya menjadi sampah), makan menggunakan teknik ini rasanya sedikit bersalah. Baikkah menyebarkan meme (baca: mim) “plastik makan” ini di Internet?

Seberapa luaskah penggunaan alat ini? Seringkali, waktu aku minta plastik kepada pedagang yang baru kukenal pun, ada yang menjawab “Oh, buat makan ya?” Mungkin penggunaannya tidak sesedikit yang kuduga. Tapi selama ini, pengguna lain yang pernah kulihat hanyalah beberapa temanku, dan pasti saat makan bareng aku. Dengan kata lain, saat aku yang pergi beli makanan, mereka nitip plastik juga karena sebelumnya telah melihat aku menggunakannya. Misalnya saat makan malam YIC di perpus sebelum melanjutkan bertanding lagi, atau bersama teman lain saat sedang Wifi-an di kampus.

Kalau kamu belum pernah mencobanya, ayo coba sekali-kali…

Panduan Yahoo! Jisho: Kamus Jepang Inggris dengan Banyak Contoh Kalimat

Saturday, December 8th, 2007 by Agro Rachmatullah

Saat aku sedang terhubung ke Internet, Yahoo! Jisho adalah situs kamus Jepang-Inggris yang selalu kukunjungi. Banyaknya contoh kalimat untuk tiap makna yang berbeda membuat kamus ini sangat berguna saat aku menemui kata baru. Alamatnya ada di http://dic.yahoo.co.jp. Artikel ini akan memandu kamu menggunakan situs tersebut sebagai kamus Jepang-Inggris. (Situs tersebut juga bisa digunakan sebagai kamus lain, misalnya Jepang-Jepang.)

Kamus Jepang Inggris Yahoo!

Situsnya berbahasa Jepang, namun jangan panik karena panduan ini akan menjelaskan semua bagian pada form pencarian tersebut.

Nomor 1 merupakan kotak teks untuk menulis kata yang ingin dicari. Kalau kata yang ingin dicari tersebut bersumber dari halaman web atau sejenisnya, cukup dicopy-paste ke tempat ini. Sebagai contoh, kamu bisa mencoba kata-kata berikut: わたし, アイドル, 好き. Kotak tersebut menerima hiragana, katakana, maupun kanji dari suatu kata. Contohnya, untuk mencari kata “kirei” kamu bisa memberikan きれい, キレイ , maupun 奇麗. Tentu saja kita tidak bisa memasukkan romaji, karena bahasa Jepang memang tidaklah ditulis menggunakan romaji.

Bagaimana kalau kamu ingin menuliskan katanya sendiri, tetapi di komputer kamu tidak ada IME? Kunjungi saja http://agro1986.googlepages.com/ime.htm (Uhuk, uhuk, promosi…).

Gama Web-based Japanese Input Method Editor (IME) with Ajax!!!

Pada aplikasi web tersebut, klik tombol “Turn IME On” lalu mulailah mengetik suatu kata di kotak teksnya, misalnya “sugoi”. Katanya akan langsung dirubah menjadi hiragana (sugoiiii). Tekan Enter setelah selesai mengetik katanya, lalu copy-paste hasilnya ke kotak teks Yahoo! Jisho. (Tips: Sebelum menekan Enter, tekan F7 untuk merubahnya ke katakana.)

Berikutnya, nomor 2 adalah metode pencocokan kata. Pilihannya, dari atas ke bawah, adalah:

  1. で始まる (INPUT de hajimaru): Dimulai dengan masukan. Sebagai contoh, jika masukan adalah かみ (kami), maka selain kata tersebut, kata seperti かみなり (kaminari) juga akan dicari.
  2. に一致する (INPUT ni icchi suru): Cocok persis dengan masukan. Jika memberi かみ (kami), maka hanya kata tersebut yang akan dicari.
  3. を含む (INPUT o fukumu): Berisi masukan. Dengan kata lain, masukan bisa berada di awal, tengah, maupun akhir kata. Dengan masukan かみ (kami), maka selain kata tersebut, kata seperti かみなり (kaminari), おかみさん (okamisan), dan あかみ (akami) juga akan dicari.
  4. で終わる (INPUT de owaru): Diakhiri masukan. Sebagai contoh, jika masukan adalah かみ (kami), maka selain kata tersebut, kata seperti あかみ (akami) juga akan dicari.
  5. を解説に含む (INPUT o kaisetsu ni fukumu): Berisi masukan pada penjelasannya. Sebagi contoh, jika masukan adalah かみ (kami), maka あな (ana, “lubang”) akan menjadi salah satu hasil pencarian karena halaman penjelasannya berisi contoh kalimat 「おおかみの穴」 (ookami no ana).

Pada umumnya, yang aku gunakan adalah pilihan kedua dari atas (に一致する, cocok persis).

Nomor 3 di screenshot pertama adalah pilihan kamus. Dari kiri ke kanan, pilihannya adalah:

  1. 国語 (kokugo): Kamus Jepang-Jepang. Memberikan penjelasan yang sangat mendetil mengenai tiap kata… dalam bahasa Jepang.
  2. 類語 (ruigo): Kamus sinonim. Berguna untuk mencari alternatif kata yang tidak umum untuk membuat teman-teman kamu terkagum-kagum.
  3. 英和 (eiwa): Kamus Inggris-Jepang. Ingatlah untuk memberikan masukan berupa bahasa Inggris.
  4. 和英 (waei): Kamus Jepang-Inggris. Topik yang dibahas di panduan ini.
  5. すべての辞書 (subete no jisho): Cari di semua kamus.

Kalau kamu seperti aku, yang menggunakan kamus ini saat menemukan kata baru waktu membaca, maka kamu akan memilih pilihan keempat.

Terakhir, pilih tombol yang ditandai dengan 4 pada screenshot pertama yaitu 検索 (kensaku, cari). Inilah contoh suatu hasil pencarian:

Hasil pencarian Yahoo! Dictionary

Jangan kaget kalau sekali lagi tidak ada romaji. Ayo belajar huruf Jepang yang sebenarnya! Di balik rintangan berupa sistem penulisan yang indah tersebut, kamu akan menemukan kamus ini sebagai kamus yang kaya akan contoh kalimat dan sangat berguna sebagai teman membaca kamu.

Kalau kamu menuliskan kana (hiragana ataupun katakana) sebagai masukannya, seluruh kata dengan bunyi tersebut akan dicari. Sebagi contoh, kalau kamu melakukan pencarian persis terhadap kata きく, maka kamu akan mendapatkan mulai dari 菊 (bunga Krisantemum) sampai 聞く (mendengar, bertanya).

Di lain pihak, kalau kamu menuliskan kanji sebagai masukan, maka seluruh bacaannya akan diberikan. Sebagai contoh, kalau kamu memberikan 間, maka berbagai bacaannya mulai dari あいだ (aida) sampai ま (ma) akan diperoleh.

Untuk pencarian yang mengembalikan banyak hasil tersebut, kamu bisa berganti hasil pencarian melalui kotak pilihan yang terletak di sebelah kanan:

Alternatif hasil pencarian Kamus Yahoo!

Masih banyak yang bisa dibahas dari penggunaan Yahoo! Dictionary ini, namun aku harap panduan ini sudah cukup untuk membuat kamu tertarik untuk mulai menggunakan situs tersebut. Semoga berguna!

Tutorial penggunaan SQLite dari .NET menggunakan bahasa C#

Monday, June 11th, 2007 by Agro Rachmatullah

Pada artikel sebelumnya, telah diperkenalkan SQLite yaitu mesin SQL yang kecil dan cepat. Kalau kamu memerlukan akses basis data pada program kamu, kemungkinan besar SQLite adalah pilihan terbaik sebab deployment-nya tidak rumit (SQLite akan menjadi bagian program kamu dan basis datanya disimpan pada 1 berkas).

SQLite memiliki binding untuk banyak bahasa, termasuk untuk bahasa-bahasa di lingkungan pemrograman .NET. Di artikel ini kita akan menggunakan C# (pada .NET 2.0) untuk membuat dan mengakses basis data SQLite.

(Tutorial ini spesifik Windows. Di lain waktu akan diposting cara yang bisa digunakan di Linux+Mono.)

Instalasi dan kompilasi

Ada banyak cara untuk menggunakan SQLite dari .NET, dan yang akan digunakan di tutorial ini adalah System.Data.SQLite.dll. Pertama-tama, unduh dan jalankan installer-nya. Setelah selesai, kamu akan menemukan berkas System.Data.SQLite.dll yang secara default ada di C:\Program Files\SQLite.NET\bin.

(Saat artikel ini ditulis, di halaman depan situs System.Data.SQLite terdapat pranala untuk mengunduh versi stabil dan alpha. Pembuatan artikel ini menggunakan versi stabilnya.)

Kalau kamu menggunakan IDE seperti SharpDevelop dan Visual C# Express, tambahkan referensi ke berkas tersebut pada proyek kamu (karena tidak di-install di GAC, kamu perlu mem-browse lokasinya. Kamu juga perlu menambahkan referensi ke System.Data.dll yang merupakan assembly bawaan .NET (ada di GAC). Ini contoh screenshot hasilnya pada SharpDevelop 2.1:

Mereferensi System.Data.SQLite.dll dari SharpDevelop

Kalau kamu melakukan kompilasi dari terminal, jangan lupa mereferensikan kedua assembly tersebut, misalnya:

csc /r:"C:\\Program Files\\SQLite.NET\\bin\\System.Data.SQLite.dll",System.Data.dll Test.cs

Dengan mereferensikan kedua assembly tersebut, kita bisa menggunakan kelas-kelas yang terdefinisi di dalamnya. Namun agar program kamu bisa berjalan, System.Data.SQLite.dll harus berada pada direktori yang sama dengan program kamu. IDE seperti SharpDevelop akan menyalin System.Data.SQLite.dll secara otomatis, namun pada kompilasi manual kamu harus menyalin berkasnya sendiri.

Cek lagi semua langkah yang diberikan di bagian ini kalau nanti menjumpai masalah saat mengkompilasi atau menjalankan program kamu.

Pengenalan ADO.NET

Dalam Framework .NET, ADO.NET adalah teknologi yang memungkinkan kita untuk berinteraksi dengan sumber data. Pada umumnya sumber data itu adalah basis data, namun bisa saja sumber datanya adalah berkas teks atau berkas spreadsheet.

Kelas yang digunakan pada ADO.NET tergantung sumber datanya. Misalnya, untuk berinteraksi dengan Microsoft SQL Server digunakan kelas seperti SqlConnection, SqlCommand, dan SqlDataReader. Untuk berinteraksi dengan basis data melalui ODBC, kelas-kelas yang digunakan misalnya OdbcConnection, OdbcCommand, dan OdbcDataReader. Walaupun nama kelasnya untuk tiap sumber data berbeda, cara penggunaanya sama karena kelas-kelas tersebut diturunkan dari kelas dasar yang sama di ADO.NET.

System.Data.SQLite.dll memberikan implementasi ADO.NET untuk mengakses basis data SQLite. Istilah teknisnya adalah "ADO.NET data provider". Kita akan mempelajari cara menggunakan kelas SQLiteConnection, SQLiteCommand, dan SQLiteDataReader untuk berinteraksi dengan basis data SQLite.

Membuat tabel dan mengisinya dengan data

Karena kelas-kelas pada System.Data.SQLite.dll terdapat di namespace System.Data.SQLite, kita akan menggunakan statement using di awal program:

using System.Data.SQLite;

Objek SQLiteConnection berfungsi untuk membuka suatu berkas basis data SQLite. Jika berkas yang ditentukan tidak ada, maka akan dibuat berkas baru. Kita menginstansiasi objek SQLiteConnection baru dengan memberinya string koneksi sebagai argumen. Di string tersebutlah kita tentukan nama berkasnya. Ini contohnya:

SQLiteConnection conn = new SQLiteConnection("Data Source=test.db3");

Setelah nanti koneksi dibuka dengan memanggil metode Open, kita bisa menggunakan objek SQLiteCommand untuk menjalankan perintah-perintah SQL. Secara umum urutan langkah saat menggunakan objek koneksi adalah:

  1. Meninstansiasi objek SQLiteConnection.
  2. Membuka koneksi dengan metode Open.
  3. Objek lain, misalnya objek SQLiteCommand, menggunakan koneksi tersebut.
  4. Menutup koneksi dengan metode Close.

Inilah contoh program di mana objek SQLiteCommand menggunakan koneksi yang sudah berjalan untuk membuat tabel:

using System;
using System.Data.SQLite;

class Test
{
   static void Main()
   {
      SQLiteConnection conn = null;
      try
      {
         conn = new SQLiteConnection("Data Source=test.db3");
         conn.Open();

         SQLiteCommand cmd =
            new SQLiteCommand("CREATE TABLE mahasiswa" +
               "(nim INTEGER PRIMARY KEY, " +
               "nama TEXT, prodi CHAR(2));",
               conn);
         cmd.ExecuteNonQuery();

         cmd.CommandText = "INSERT INTO mahasiswa(nama, prodi) " +
            "VALUES('Linus Torvalds', 'IK');";
         cmd.ExecuteNonQuery();

         cmd.CommandText = "INSERT INTO mahasiswa " +
            "VALUES(9374, 'Agro', 'IK');";
         cmd.ExecuteNonQuery();
      }
      finally
      {
         if(conn != null)
         {
            conn.Close();
         }
      }
   }
}

(string yang panjang sengaja dipecah agar tampil baik di situs ini)

Bisa dilihat bahwa setelah objek SQLiteConnection dibuat, yang pertama kali dilakukan adalah membuka koneksinya dengan metode Open. Melakukan operasi pada koneksi yang belum dibuka akan menghasilkan eksepsi.

Saat membuat objek SQLiteCommand, kita memberikan perintah SQL sebagai argumen pertama dan objek koneksi yang telah kita buat sebelumnya sebagai argumen kedua. Lalu kita menjalankan perintah SQL tersebut dengan memanggil metode ExecuteNonQuery. ExecuteNonQuery kita gunakan karena kita tidaklah mencari data pada basis data. Kalau operasi yang kita lakukan adalah pencarian data misalnya dengan perintah SQL SELECT, maka metode yang digunakan berbeda (akan dibahas belakangan).

Untuk menjalankan perintah SQL lain, kita tidak perlu membuat objek baru. Yang perlu dilakukan adalah mengubah perintahnya melalui properti CommandText dan memanggil ExecuteNonQuery kembali. Kita juga bisa merubah koneksi yang ingin digunakan melalui properti Connection jika diperlukan.

Perhatikan bahwa koneksi ditutup di blok finally. Ini adalah agar koneksi tetap ditutup walaupun terjadi eksepsi di blok try. Sebagai contoh, kalau program tersebut dijalankan untuk yang kedua kalinya maka akan terjadi eksepsi saat tabel akan dibuat. Ini karena tabel mahasiswa sudah ada (dibuat saat program pertama kali dijalankan). Walaupun terjadi eksepsi, blok finally tetap akan dijalankan sehingga koneksi bisa ditutup.

Sebelum koneksi ditutup, dicek apakah variabel conn bernilai null. Ini karena bisa saja eksepsi terjadi saat objek koneksi diinstansiasi (misal string koneksi ngawur), dan pada kasus tersebut variabel conn akan bernilai null (nilai awalnya). Mencoba memanggil Close pada variabel yang bernilai null akan melempar eksepsi yang lain lagi dan kita tidak ingin hal itu terjadi.

Melakukan query dengan perintah SELECT

Untuk melakukan query, kita akan berkenalan dengan dua metode baru pada kelas SQLiteCommand yaitu ExecuteScalar dan ExecuteReader. ExecuteScalar digunakan kalau hasil query-nya berupa sebuah nilai, misalnya jumlah baris yang ada di tabel. ExecuteReader digunakan kalau haisl query-nya berupa baris-baris pada basis data kita.

ExecuteReader akan mengembalikan suatu objek SQLiteDataReader. Dari objek tersebut kita bisa mengambil nilai kolom pada baris-baris hasil query. Contoh programnya yang diikuti penjelasannya adalah sebagai berikut:

using System;
using System.Data.SQLite;

class Test
{
   static void Main()
   {
      SQLiteConnection conn = null;
      SQLiteDataReader rdr = null;
      try
      {
         conn =
            new SQLiteConnection("Data Source=test.db3");
         conn.Open();

         SQLiteCommand cmd =
            new SQLiteCommand("SELECT COUNT(*) FROM mahasiswa;",
               conn);

         long jumlah = (long)cmd.ExecuteScalar();
         Console.WriteLine("Jumlah: " + jumlah);

         cmd.CommandText = "SELECT * FROM mahasiswa;";
         rdr = cmd.ExecuteReader();

         while(rdr.Read())
         {
            Console.WriteLine("===");
            Console.WriteLine("NIM: " + rdr[0]);
            Console.WriteLine(”Nama: ” + rdr["nama"]);
         }
      }
      finally
      {
         if(rdr != null)
         {
            rdr.Close();
         }
         if(conn != null)
         {
            conn.Close();
         }
      }
   }
}

Ini contoh outputnya:

Jumlah: 2
===
NIM: 1
Nama: Linus Torvalds
===
NIM: 9374
Nama: Agro

Pada query pertama di contoh tersebut (SELECT COUNT(*) FROM mahasiswa;), hasil query-nya adalah sebuah angka yang menunjukkan jumlah baris pada tabel mahasiswa. Karena hasil querynya berupa nilai tunggal, maka kita cukup memanggil ExecuteScalar. Dalam kasus ini, hasil kembaliannya adalah integer 64 bit (tipe long pada C#) yang dibungkus sebagai Object. Oleh karena itu, kita perlu menggunakan cast untuk menyimpannya sebagai variabel long.

Query berikutnya (SELECT * FROM mahasiswa;) mengembalikan baris-baris pada tabel mahasiswa, oleh karenanya digunakan metode ExecuteReader. Metode tersebut mengembalikan objek SQLiteDataReader yang disimpan di variabel rdr.

Nilai pada baris-baris hasil dibaca dalam perulangan while. Di sini digunakan metode Read pada SQLiteDataReader yang berfungsi untuk membaca baris berikutnya dan mengembalikan true jika berhasil. Jika semua baris sudah dibaca, metode tersebut akan mengembalikan false sehingga eksekusi program bisa keluar dari perulangan.

Untuk mengambil nilai kolom tertentu, kita bisa menggunakan indeksnya (misal rdr[0] untuk kolom pertama) maupun nama kolomnya (misal rdr["nama"]). Agar kodenya mudah dibaca disarankan untuk menggunakan nama kolomnya.

Sebagaimana koneksi, reader juga perlu ditutup kalau sudah selesai digunakan. Digunakan teknik yang sama seperti cara menutup koneksi, yaitu pada blok finally.

Penutup

SQLite adalah mesin SQL yang menyediakan binding untuk banyak bahasa, salah satunya untuk bahasa-bahasa .NET. Di tutorial ini telah dibahas penggunaan kelas-kelas pada System.Data.SQLite.dll yang merupakan penyedia data ADO.NET. Dengan pendekatan ini, yang perlu dilakukan saat mendistribusikan program hanyalah menyertakan System.Data.SQLite.dll, tanpa perlu meng-install server SQL di komputer klien.

SQLite, mesin SQL yang kecil dan cepat

Tuesday, May 29th, 2007 by Agro Rachmatullah

Waktu dulu aku mengambil mata kuliah basis data, aku menginstall server SQL kelas berat yaitu MySQL. Padahal, yang dulu ingin kulakukan hanyalah mengenal dan bermain-main dengan perintah SQL.

Berkas zip MySQL 3 yang waktu itu kusalin dari teman ukurannya sekitar 12 MB. Installer Windows MySQL 5 “Essential” ukurannya sekitar 22 MB. Adakah alternatifnya?

Mari berkenalan dengan SQLite, sebuah mesin SQL yang kecil dan cepat. Program dengan lisensi public domain ini sudah mencapai versi 3 saat artikel ini ditulis. Pada dasarnya, SQLite adalah pustaka bahasa C untuk dilink oleh program yang membutuhkannya (sqlite3.dll untuk Windows dan sqlite-3.x.x.so untuk Linux). Tersedia juga binding untuk banyak bahasa lain (misalnya System.Data.SQLite.dll untuk .NET). Contoh program yang menggunakan SQLite adalah Firefox 3 untuk basis data bookmarknya dan Banshee (pemutar musik C#) untuk basis data lagunya. Jadi dia bukanlah program server yang berjalan sendiri dan menunggu koneksi dari program lain sebagaimana MySQL.

Seluruh database (definisi, tabel, indeks, dan data) pada SQLite disimpan dalam satu berkas. Berkas ini cross platform.

Tapi kembali ke permasalahan semula. Kita ingin bermain-main dengan perintah SQL, bukannya membuat program yang menggunakan basis data. Untuk keperluan ini, di halaman download SQLite disediakan program konsol yang bisa membuat dan membaca berkas basis data SQLite. Program konsol itu sendiri merupakan contoh program yang memanfaatkan pustaka SQLite (tapi pada program ini SQLitenya dicompile bersama, tidak berada di file pustaka terpisah). Ukurannya sangat kecil, misalnya sqlite3-3.3.17.bin.gz untuk Linux berukuran 173.46 KiB dan sqlite-3_3_17.zip berukuran 174.64 KiB!

Tutorial Program Konsol SQLite

PS: Diasumsikan pembaca sudah mengerti perintah-perintah SQL dasar sehingga tidak ada penjelasan panjang lebar tentangnya. Walaupun begitu, mungkin artikel ini juga bisa dimanfaatkan sebagai tutorial kotor tentang perintah SQL.

Programnya dijalankan dengan memberikan satu argumen berupa nama berkas basis data yang diinginkan. Jika berkasnya tidak ada, maka berkas baru akan dibuat. Ekstensi berkasnya bisa sembarang. Kita akan menggunakan db3 untuk menandakan bahwa itu adalah berkas database yang dibuat SQLite versi 3. Contohnya adalah:

$ sqlite3 test.db3

(Untuk pengguna Linux, ganti nama sqlite3-3.3.17.bin atau buat symbolic link seperlunya)

Setelah mengetikkan perintah tersebut kita akan dibawa ke konsol SQL!

SQLite version 3.3.17
Enter ".help" for instructions
sqlite>

Untuk melihat tabel-tabel yang ada pada basis data yang sedang digunakan, masukkan perintah .table:

sqlite> .table
sqlite>

Perintah yang diawali titik (seperti .table) adalah perintah khusus program konsol ini. Tentu saja, kalau basis datanya baru dibuat tidak akan ada tabel apa-apa.

Kita bisa membuat tabel baru dengan perintah SQL CREATE, misalnya:

sqlite> CREATE TABLE mahasiswa(
   ...> nim INTEGER PRIMARY KEY,
   ...> nama TEXT,
   ...> prodi CHAR(2));
sqlite> .table
mahasiswa
sqlite>

Perintah untuk membuatnya adalah “CREATE TABLE mahasiswa(nim INTEGER PRIMARY KEY, nama TEXT, prodi CHAR(2));“. Walaupun begitu, pada contoh penulisan perintahnya dipecah menjadi 3 baris. Perintah SQL diakhiri dengan titik koma, jadi selama kita belum menuliskan titik koma program tersebut masih menunggu input di baris berikutnya (ditandai dengan prompt...>“). Dengan perintah .table, bisa dilihat bahwa tabelnya memang sudah tercipta.

Berikutnya adalah memasukkan data pada tabel tersebut dengan perintah SQL INSERT dan menampilkan isi tabel dengan perintah SQL SELECT:

sqlite> INSERT INTO mahasiswa(nama, prodi) VALUES('Linus Torvalds', 'IK');
sqlite> INSERT INTO mahasiswa(nama, prodi) VALUES('Richard Stallman', 'FI');
sqlite> INSERT INTO mahasiswa VALUES(9374, 'Agro', 'IK');
sqlite> INSERT INTO mahasiswa VALUES(9374, 'Wijaya', 'IK');
SQL error: PRIMARY KEY must be unique
sqlite> INSERT INTO mahasiswa(nama, prodi) VALUES('Ace Ventura', 'KH');
sqlite> SELECT * FROM mahasiswa;
1|Linus Torvalds|IK
2|Richard Stallman|FI
9374|Agro|IK
9375|Ace Ventura|KH
sqlite>

Bisa dilihat bahwa kalau kunci primer nim tidak ditentukan, maka nilainya akan ditentukan secara otomatis dimulai dari 1. Terlihat jelas juga bahwa tidak mungkin memasukkan dua baris dengan kunci primer yang sama.

Contoh perintah SELECT lain yang hanya menampilkan mahasiswa ilmu komputer (IK):

sqlite> SELECT nama,nim FROM mahasiswa WHERE prodi='IK';
Linus Torvalds|1
Agro|9374
sqlite>

Karena Richard Stallman ingin pindah dari prodi filsafat (FI) ke ilmu komputer, mari kita bantu dia dengan perintah SQL UPDATE:

sqlite> UPDATE mahasiswa SET prodi='IK' WHERE nim=2;
sqlite> SELECT * FROM mahasiswa;
1|Linus Torvalds|IK
2|Richard Stallman|IK
9374|Agro|IK
9375|Ace Ventura|KH
sqlite>

Sayangnya di ilmu komputer ada aturan bahwa rambut tidak boleh gondrong. Richard Stallman, orang yang keras kepala, lebih memilih dikeluarkan daripada harus mencukur rambutnya. Terpaksa perintah SQL DELETE dipakai:

sqlite> DELETE FROM mahasiswa WHERE nim=2;
sqlite> SELECT * FROM mahasiswa;
1|Linus Torvalds|IK
9374|Agro|IK
9375|Ace Ventura|KH
sqlite>

PS: Rambut Agro belum cukup gondrong untuk ditindak.

Dan terakhir, karena mahasiswanya tidak ada yang mampu membayar kuliah (terlalu mahal!), jadinya tidak ada yang membayar kuliah. Universitasnya pun bangkrut sehingga tabel mahasiswa tidak ada gunanya lagi. Perintah SQL DROP digunakan untuk menghapus tabel:

sqlite> DROP TABLE mahasiswa;
sqlite> .table
sqlite>

Untuk keluar dari program, gunakan perintah .q, .quit, atau .exit. Bisa dicek bahwa berkas test.db3 (atau nama lain yang dipilih) telah tercipta.

Bagaimana, keren kan? Setelah mengetahui tentang SQLite, kamu bisa merekomendasikan program ini pada teman-temanmu yang mengambil basis data.

Untuk tutorial mengenai hal-hal yang lebih kompleks (misal trigger), kunjungi tutorial di freshmeat. Untuk daftar perintah-perintah SQL yang didukung SQLite, kunjungi halaman di situs resminya. Ada benchmark (agak kuno) untuk melihat bahwa SQLite tidaklah lambat. Untuk penggunaan SQLite pada .NET (C#), mungkin kapan-kapan aku bakal bikin tutorialnya :)…

Kanji mnemonic: plant, fence, and bridge

Sunday, March 18th, 2007 by Agro Rachmatullah

We will learn 3 shapes this time!

First is the plant shape. Observe the blue shapes in these kanji:

草 is the kanji for grass (kusa), 花 is the kanji for flower (hana), and 菜 is the kanji for vegetables (na). I call the blue shape the “plant” shape. Here’s an image of two plants:

For decoration, I made the flowers bloom :). Note that you can see the roots underground. The superimposed image should make it clear why it is called the plant shape:

Of course the discussion wouldn’t be complete without the stroke order:

OK, the plant shape… I’ll guarantee that you will meet it often (and many times in a plant-related kanji). The other two shapes are less common but I bring it here because they are similar to the plant shape.

Next is the bridge shape. See the blue shapes in the following kanji:

算 is the kanji for calculation (san), 鼻 is the kanji for nose (hana), and 械 is the kanji for machine (kai). This shape is devilish because it is so similar to the previous one. Having a completely different mnemonic is a must if you don’t want things mixed up. Look at the image below:

It is a nice bridge that allows you to cross the river! The image fits well with the shape:

Hence it is called the “bridge” shape. Remember, the key point is the bend on the left vertical stroke. Plant roots don’t bend sideways because, well… probably because gravity. Or is it because they can “smell” more water below and try to dig downwards as far as they could? Whatever, here’s the stroke order:

Now for the last one, the fence shape. Take a good look at the blue shapes below:

黄 means yellow (ki), 散 means to scatter (chi.ru), and 昔 means olden days (mukashi). It’s the plant shape with an extra stroke! But I use a different mnemonic, not related to plants, so that those two aren’t mixed up. Look at my drawing below:

Why, it’s a nice fence that protects the garden… Focus on the two vertical woods, and superimpose the kanji shape:

It fits perfectly! Therefore I call it the “fence” shape. The stroke order:

I hope with those mnemonics, your kanji quest can be made easier. Happy kanji hunting!

The sound of kana ん (n)

Tuesday, March 13th, 2007 by Agro Rachmatullah

In Japanese, the kana ん (n) is considered a sound that can stand by itself. It sounds somewhat like “uhm”.

In normal speaking the ん sticks to the preceding kana. For example, りんご (ringo, apple) is pronounced “rin-go”, not “ri-n-go” (ri-”uhm”-go). Note that because ん is considered one mora (beat), “rin” (composed of 2 mora, “ri” and “n”) should sound longer than “go” (only 1 mora). The elongation is done by holding the “n” sound for a while.

However, in songs ん is oftenly detached and voiced by itself! This is very funny considering that the same thing doesn’t happen in Bahasa Indonesia and English. Consider Indonesian words like “jantan”, “makan”, and “jalan”. In songs (and conversation), they are always pronounced as “jan-tan”, “ma-kan”, and “ja-lan”. The same thing holds in English (e.g., “wo-man”, “ten”, “a-gain”, “A-me-ri-can”). ‘n’ never gets its own note.

An Indonesian or English song where the ‘n’ is forcibly separated would sound wacko. Try to imagine it… However enter the Japanese music world and a lone ‘n’ doesn’t seem weird at all… Two examples:

Anshinkan (Berryz Koubou): Nee itsu datte anshin shitai no yo (a-n-shi-n)
Aozora ga Itsumade mo Tsuzuku You na Mirai de Are! (Morning Musume): So donna toki mo jibun jishin shinjite GO (do-n-na, ji-bu-n, ji-shi-n, shi-n-ji-te)

Of course ん can also stick to the preceding sound like in normal speaking, so it all depends on the songwriter. In these following examples the ん isn’t separated:

Sakura Mankai (Morning Musume Sakura Gumi): aa sakura mankai, nee sakura mankai mune no naka (man-ka-i)
Lemon Iro to Milk Tea (Morning Musume): onnaji kuukan kuukan eiga no naka kansei kansei (on-na-ji, kuu-kan, kan-sei)

I’ve said that in speaking (conversation, speech, anything other than songs) the ん is normally attached. That is almost always the case. However, I’ve actually encountered the isolated case several times! Here’s one example from a casual talk:

Sugaya Risako: ma… zenbu… kawaiin desu kedo, atashi ga ichiban… (i-chi-ba-n)

Of course, you can deliberately separate the ん if you want to give a slow motion effect. However I don’t consider that normal speaking. Nevertheless, this is what Sayumi does on her radio show:

Michishige Sayumi: Mooningu Musume Michishige Sayumi no “Konya mo Usa-chan peace…” (ko-n-ya)

To finish, I offer the audio file that contains all the above examples:

n-sound.ogg (duration 1:01, 515 KB): MediaFire mirror; 3000mb mirror; Indonesian mirror

(Audio made using the open source audio editor Audacity. To play the audio file in Windows you might need to install the codecs from Illiminable.)

Nanka: audio example

Saturday, March 10th, 2007 by Agro Rachmatullah

Takahashi Ai in Hong Kong

No, I’m not talking about the fruit

In the Japanese language, なんか (nanka) is a filler that has no particular meaning. In casual speech, some people use it just about anywhere. It serves the same purpose as “like” in sentences such as “His brother is, like, very tall!”

Some examples from guidetojapanese.org:

今日は、なんか忙しいみたいよ。
Ima wa, nanka isogashii mitai yo.
-I guess he’s like busy today.

お母さんが、なんか明日まで戻らないんだってよ。
Okaasan ga, nanka ashita made tomaranain datte yo.
-Mom said she’s not coming back until like tomorrow.

Another example I picked from the novel “Wagahai wa Neko de aru“:

私は唐人の名なんかむずかしくて覚えられませんわ。
Watashi wa toujin no na nanka muzukashikute oboeraremasen wa.
- For me, Chinese names are like hard and I can’t remember them.
(My own translation, flame on for mistakes :))

OK, now to the main point of this post. Some time ago, I watched Morning Musume’s trip to Hong Kong. In the end of the trip every member gave their impressions, and Takahashi Ai spoke using nanka like all the time! Here’s the audio for your hearing pleasure:

takahashi-nanka.ogg (442 KB, 48 seconds): Mirror 1 (3000mb.com server); Mirror 2 (Indonesian server)

I won’t give any transcription nor translation. The point in hearing it is to get a feel about how it is slipped in (besides, uhm, I’m not skillful enough to comprehend her talk yet). Try to spot all 6 occurences.

Kanji Mnemonic: Hockey player

Wednesday, February 21st, 2007 by Agro Rachmatullah

This time there’s a scanner around so I can show off my Picasso-like drawing ability…

First of all, observe the kanji in these words:

  • 指 (ゆび): finger
  • 摘む (つむ): to pick
  • 抱く (だく): to hug

Notice that the left shape of all the kanji is same! It’s a shape that occurs in hundreds of kanji, so it is wothy of a name. I call it the hockey player.

This is what a hockey player looks like:

Hockey player

If we change the camera a bit, here’s what he looks like from above:

Hockey player from above

Can you see it already? The next picture should make it clear:

Hockey player and the kanji shape

Therefore, the shape is called the hockey player. QED.

As a closing, here’s the stroke order, taken from Wikimedia Commons:

Hockey player stroke order

PS: Be careful not to confuse this shape with devil’s hand. (they look kind of similar)