01.05.07
Magic Square Dengan Algen
Masalah Magic Square:
That is the number from 1 to n^2 (n!=2) are to be arranged within a n*n grid, in such a way that the all sums of all rows, all sums of all columns and both sums of the diagonals yield the same value S.
Contoh Solusi magic square 4 x 4
11 13 16 56 7 1 3 2 8 9 12 14 4 15 10
Berikut contoh applet untuk menyelesaikan masalah magic square dengan Algen yang diambil dari http://ls11-www.cs.uni-dortmund.de/people/kursawe/Demos/EvoNet/magic_problem.html.
Pada applet dilakukan sedikit modifikasi pada input banyak kotak dan keluaran solusi. Applet baru di test dengan baik pada komputer yang terinstall java 5 ke atas
http://www.kleq.web.ugm.ac.id/images/program/magicsquare.html
Untuk download kode program pada link berikut
http://www.kleq.web.ugm.ac.id/images/program.tar.gz
catatan: untuk paket evolution penulis tidak mendapatkan kode java(*.java) sehingga yang disertakan cuma bytecode (*.class)..
01.04.07
Exception handling Pada Ruby
Struktur umum Exception Handling pada Ruby:
begin
#kode yang dapat menimbulkan eksepsi
rescue ....
# penanganan eksepsi
rescue
# penganan eksepsi
else
#dieksekusi jika eksespsi tidak dapat ditangkap oleh blok rescue sebelumnya
ensure
#semua eksepsi yang terlempar pasti akan masuk juga ke blok ini
end
opFile = File.open(opName, "w")
begin
while data = socket.read(512)
opFile.write(data)
end
rescue SystemCallError
$stderr.print "IO failed: " + $!
opFile.close
File.delete(opName)
end
Kode yang beresiko melempar eksepsi harus diletakkan antara begin dan end.Setiap ada eksepsi yang dilempar, maka objek eksepsi tesebut akan direference oleh variabel global “$!”. tapi misal jika kita ingin menagkap objek eksepsi tersebut dengan lokal variabel maka bisa dengan meletakkan lokal variabel tersebut pada akhir statemen rescue.
opFile = File.open(opName, "w")
begin
while data = socket.read(512)
opFile.write(data)
end
rescue SystemCallError => test
$stderr.print "IO failed: " + test
opFile.close
File.delete(opName)
end
Multiple Rescue
Pada ruby, dalam satu blok begin..end kita bisa membuat beberapa blok rescue
begin
eval string
rescue SyntaxError, NameError => boom
print "String doesn't compile: " + boom
rescue StandardError => bang
print "Error running script: " + bang
end
Else dan Ensure
Else dieksekusi jika eksepsi yang terlempar tidak ditangkap oleh blok rescue yang ada diatasnya.
f = File.open("testfile")
begin
# .. process
rescue
# .. handle error
else
puts "Congratulations-- no errors!"
Blok ensure selalu dieksekusi jika ada eksepsi yang terelempar.
f = File.open("testfile")
begin
# .. process
rescue
# .. handle error
else
puts "Congratulations-- no errors!"
ensure
f.close unless f.nil?
End
retry
retry digunakan untuk mengulang suatu blok penganan eksepsi
f = File.open("testfile")
begin
f.write(1)
rescue SystemCallError
retry
end
Melempar eksepsi
Ruby menyediakan tiga cara pelemparan eksepsi:
raise
raise “bad mp3 encoding”
raise InterfaceException, “Keyboard failure”
raise InterfaceException, “Keyboard failure”, caller
Membuat kelas eksepsi sendiri
Kelas eksepsi harus merupkan turunan dari kelas Exception(atau kelas turunannya)
class RetryException < RuntimeError
attr :okToRetry
def initialize(okToRetry)
@okToRetry = okToRetry
end
end
def readData(socket)
data = socket.read(512)
if data.nil?
raise RetryException.new(true), "transient read error"
end
# .. normal processing
end
Contoh Penggunaan
begin
stuff = readData(socket)
# .. process stuff
rescue RetryException => detail
retry if detail.okToRetry
raise
end
01.03.07
Catatan Mudik bagian 1
Setelah sekian lama ga sempat ngeblog akhirnya hari ini kesampaian juga, padahal niatnya mo ngupdate blog seminggu sekali tapi akhirnya cuma jadi niat susah terlaksana. Kali ini mo cerita tentang perjalanan panjang mudik lebaran kemarin, memang sudah lama tapi sampai sekarang masih sering terbayang bayang.
Mudik lebaran tahun 2006 memang sangat istimewa untukku, ini pertama kalinya aku mudik seorang diri. Dua tahun sebelumnya aku selalu mudik sama teman teman. Awalnya ada perasaan was was juga apalagi aku rencananya naik pesawatnya dari Surabaya yang berarti harus singgah di terminal Bis Bungorasi Surabaya yang memang sudah terkenal rawan kejahatan. Ada satu lagi yang istimewa, ini pertama kalinya aku mudik bawain keluarga ku oleh oleh, tidak banyak sih cuma 4 kotak makanan plus satu kaos itupun kaosnya bukan beli tapi kaos Indosat hadiah seminar.
Asal muasalnya aku mudik sendiri karena aku mudiknya jauh sebelum libur resmi kuliah, klo misal taatin jadwal berarti di Makassar nya aku cuma bisa sekitar dua minggu, nggak cukup dan lagi kesempatan mudik cuma setahun sekali. Jadi kuputuskan mengorbankan kuliah (g tau sudah berapa kali kukorbankan yang namanya kuliah, sebagai catatan yang kukorbankan adalah kuliah formal soalnya kadang aku merasa kuliah tu ga ada gunanya tiga tahun kuliah ilmu lebih banyak kudapat dari Internet dengan bantuan Mbah Google).
Singkat cerita tiket pesawat berhasil kudapat dengan harga cukup murah, karena blum masuk angkutan lebaran. Terbangnya tanggal 8 agustus jam 17.45 dari bandara Juanda Surabaya. Supaya bisa sampai d bandara tepat waktu aku berangkat dari Jogja sehari sebelumnya. Dari Joga rencananya mo silaturahim dulu k tempat bulik di Nganjuk Jawa Timur sekalian ambil buku pesanan adikku.
Perjalanan mudik kumulai sekitar pukul 08.30 dengan lebih dulu berdoa pada RABB Semesta Alam biar selamat dan pamitan sama bapak kos n teman teman sekos. Karena agak terburu-buru kunci kamar kos hampir ketinggalan. Dari kos aku naik bis kota k terminal Giwangan. Dilanjutkan dengan naik Patas k Nganjuk. Jogja Nganjuk makan waktu sekitar 5 jam, Insyaallah sampai sebelum buka puasa.
Bersambung…..




