Posted on July 25, 2007 by bayuadji
Apa itu Thread?
Kalo ditanya apakah itu thread? susah untuk menjawab, yang jelas
thread itu adalah sebuah konsep abstrak untuk proses yang dilakukan
oleh komputer untuk menyelesaikan sebuah tugas.
Apa perbedaan antara Thread dan Process
Didalam konsep OS, ada 2 buah istilah yang digunakan untuk sebuah
proses menyelesaikan tugas, Thread dan Process.
Thread adalah Lightweight sedangkan Process adalah HeavyWeight, Satu
atau lebih thread bisa dipunyai oleh process. antara 1 Thread dan
thread lainya sama2 menggunakan Heap yang sama, sedangkan 1 Process
dan process yang lain menggunakan Heap yang berbeda. Bisa dianalogikan
process itu dengan applikasi, dalam sebuah OS satu aplikasi dan
aplikasi yang lain akan mempunyai heap yang berbeda, sedangkan dalam 1
applikasi dapat mempunyai 1 atau lebih thread.
Kenapa harus menggunakan Thread?
Paling tidak ada 2 hal yang membuat sebuah program untuk menggunakan
Thread (dalam hal ini java):
- Membuat GUI lebih responsive
- Menggunakan resources menjadi lebih efektif.
Bagaimana cara membuat Thread pada Java
- Extending Thread
Thread t = new Thread(){
public void run(){
System.out.println("Thread started");
}
}
- Implementing Runnable
Thread t = new Thread(new Runnable(){
public void run(){
System.out.println("Thread started");
}
})
cara diatas hanya untuk menyingkat pengetikan saja, mungkin cara yang
lain adalah
class NewThread extends Thread{...
dan
class NewThread implements Runnable{...
Setelah membuat object dari thread, maka untuk menjalan thread, harus
dengan perintah t.start().
Filed under: dive into java | 3 Comments »
Posted on June 14, 2007 by bayuadji
perintah uplevel digunakan untuk menjalankan perintah2 yang berada di
stack frame yang berbeda, stack frame telah dijelaskan di
http://inthegarage.wordpress.com/2007/06/13/tcl-upvar/,
Mungkin lebih baik langsung pada contoh
proc a {} {
set x 10
set y 20
b
}
proc b {} {
uplevel 1 {set x 20; puts "nilai dari x : $x"}
uplevel 1 {incr x 20}
uplevel 1 {puts $x}
}
dan hasilnya adalah sebagai berikut
%a
nilai dari x : 20
40
% 3
contoh lain dari penggunaan uplevel adalah untuk mengkustomisasi
struktur, misalnya adalah perintah loop yang tidak terdapat pada tcl,
misalnya syntax dari loop adalah loop 1 0 {..}, maka implementasinya
adalah
proc loop {from to body} {
for {set var $from} {$var < $to} {incr var} {uplevel 1 $body}
}
perintah uplevel pada loop untuk menjalankan perintah pada body, yang
mempunyai 1 level lebih tinggi daripada perintah loop.
Filed under: Software Dev, tcl/tk | Leave a Comment »
Posted on June 13, 2007 by bayuadji
berdasarkan tcl manual, perintah upvar berguna untuk membuat link
(?hubungan?) ke variabel yang berada pada stack yang berbeda. Syntax
dari perintah upvar sendiri adalah sebagai berikut :
upvar ?level? otherVar myVar ?otherVar myVar ...?
Berdasarkan definisi diatas akan menimbulkan pertanyaan lain, apakah
yang dimaksud dengan lingkup stack (stack frame) yang berbeda?
untuk mengetahui lebih jelasnya, misalkan kita membuat method a, dan
didalam method a tersebut kita memanggil method b, ketika method a
dibuat, maka tcl akan membuat stack frame untuk method a dimana
seluruh local variabel akan disimpan, dan ketika memanggil method b
maka tcl akan membuat lagi stack frame untuk method b, sehingga method
a dan b mempunyai stack frame yang berbeda, dan juga method a dan b
mempunyai level yang berbeda dimana method a mempunyai level 1 (bila
diasumsikan method a dipanggil dari lingkup global), sedangkan method
b mempunyai level 2.
Untuk mengetahui level dari method/procedure dapat digunakan perintah
info level.
Karena method a dan b mempunyai stack frame yang berbeda maka method b
tidak dapat mengaksed variabel yang berada pada method a, nah perintah
upvar dapat membuat method b untuk mengakses variabel yang terdapat
pada method a.
proc top {} {
set x 10
bottom
puts "setelah memanggil bottom $x"
}
proc bottom {} {
upvar 1 x localx
incr localx 20
}
setelah kita panggil top
% top 20
setelah memanggil bottom 30
%
selain itu perintah upvar berguna untuk mengimplementasikan
call-by-name procedure, contohnya adalah sebagai berikut.
proc top {topArg} {
set localArg [expr $topArg+1]
puts "before calling bottom is : $localArg"
bottom localArg
puts "after calling is : $localArg"
}
proc bottom {bottomArg} {
upvar $bottomArg arg
puts "bottom is passed $bottomArg with value $arg"
incr arg
}
hasilnya bila kita panggil top 30
top 30
before calling bottom is : 31
bottom is passed localArg with value 31
after calling is : 32
Filed under: Software Dev, tcl/tk | 5 Comments »
Posted on June 12, 2007 by bayuadji
Tcl mempunyai 2 jenis variabel scope (atau mungkin bila diterjemahkan
menjadi lingkup
).
-
- global
- global variabel dapat diakses diseluruh script, akan tetapi sebuah
prosedur/method dapat melakukan overshadow global variabel dengan
mendefinisikan variable lokal dengan nama yang sama.
-
- lokal
- lokal variabel hanya dapat diakses dalam lingkup sebuah fungsi.
bila didalam fungsi/method ingin menggunakan variabel global, maka
kita menggunakan peringah global, berikut ini adalah contoh dari
program yang menggunakan lokal dan global variabel.
set a 10
set b 20
puts "$a $b"
proc test_scope {} {
global a
set a "me good"
set b "but I feel not good"
puts "$a $b"
}
test_scope
puts "Nilai dari a sekarang : $a"
puts "Nilai dari b sekarang : $b"
hasilnya adalah sebagai berikut.
% source scope.tcl
10 20
me good but I feel not good
Nilai dari a sekarang : me good
Nilai dari b sekarang : 20
%
dapat dilihat pada fungsi test_scope, bahwa global variabel a, dapat
digunakan apabila kita menggunakan perintah global terlebih dahulu.
Filed under: Software Dev, tcl/tk | Leave a Comment »
Posted on June 12, 2007 by bayuadji
Recently I couldn’t debug my application using eclipse 3.2, it will throw “Could not connect to VM”. And in the console there is a log
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=JVMTI_ERROR_INTERNAL(113)
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_LOAD(509) ["debugInit.c",L476]
JDWP exit error JVMTI_ERROR_INTERNAL(113): No transports initialized
I am using Ubuntu 7.04, after a googling session, it seems that there are a lot of people have the same problem.
I found the solution in java forum, and add 127.0.0.1 localhost in my /etc/hosts solve the problem.
Filed under: Software Dev | Leave a Comment »
Posted on June 6, 2007 by bayuadji
Ok, Sekarang yang akan dibahas adalah proc. Proc adalah perintah yang
digunakan untuk mendefiniskan method. Syntax yang digunakan adalah
sebagai berikut
proc name { arguments } {
body_method
}
contoh diatas membuat procedure/method dengan nama ‘name’. Tcl
mempunyai global environment untuk menyimpan nama2 procedure, sehingga
bisa dipastikan hanya terdapat 1 buah procedure dengan nama
‘name’. Apabila procedure dengan nama ‘name’ telah terdefinisikan,
maka procedure itu akan digantikan dengan procedure ‘name’ yang baru.
contoh dari procedure
proc add { a b } {
return [expr $a +$b]
}
argument pada procedure dapat mempunyai default, contoh dari
mendefinisikan procedure yang argument-nya mempunyai nilai default
proc add { {a 10} {b 20} } {
expr a + b
}
dari contoh diatas, argument b akan mempunyai nilai 20 bila tidak didefinisikan.
Filed under: Software Dev, tcl/tk | Leave a Comment »
Posted on June 5, 2007 by bayuadji
tcl array adalah sebuah tipe data yang menyimpan kumpulan dari
variable, yang membadakan tcl array dengan java aray ataupun c array
adalah tcl array menggunakan string sebagai index penanda, yang
berbeda dengan java array yang menggunakan numerik sebagai penanda
index dari anggota variable array. Tcl array lebih cocok dibandingkan
dengan hashmap pada java dibanding dengan array pada java.
Syntax
index pada array dibatasi dengan menggunakan kurung tutup ‘(‘, index
berupa string apa saja.
elemet array dibuat dengan syntax:
set arr(index) value
sedangkan untuk mengetahui nilai dari sebuah array
$arr(index)
Perintah
beberapa perintah untuk array.
-
- array exist arr
- Mengembalikan 1 jika arr adalah sebuah array variable.
-
- array get arr ?pattern?
- Mengembalikan variable list yang terdiri dari index dan value, jika
index sesuai dengan pattern, jika pattern tidak didefinisikan maka
list akan berisi seluruh index dan value.
-
- array names arr ?patern?
- Mengembalikan variable list dari nama2 index yang sesuai dengan pattern.
-
- array set arr list
- Membuat array dari sebuah list.
-
- array size arr
- Mengembalikan banyak anggota dari array.
-
- array nextelement arr id
- Mengembalikan next element dari id index.
-
- array anymore arr id
- Mengembalikan nilai 1 jika masih ada element dalam pencarian.
-
- array donesearch arr id
- Menyelesaikan pencarian berdasarkan nilai id.
Contoh2 Sederhana
Ini ada beberapa contoh sederhana dalam penggunaan array
% set Liverpool_Player(Steven.Gerrard) 8
8
% set Liverpool_Player(Steve.Finnan) 3
3
% set Liverpool_Player(Xabi.Alonso) 14
14
% array names Liverpool_Player
Xabi.Alonso Steven.Gerrard Steve.Finnan
% info exist Liverpool_Player(Xabi.Alonso)
1
% info exist Liverpool_Player(Michael.Owen)
0
satu pertanyaan yang muncul dari contoh diatas adalah bagaimana bila
didalam variabel string index terdapat spasi (whitespace),
% set Liverpool_Player(Daniel Agger) 5
wrong # args: should be "set varName ?newValue?"
%
maka tcl akan mengindikasikan telah terjadi error,
untuk mengatasi hal diatas ada beberapa alternatif
-
- Tambahkan ‘\’ sebelum karakter spasi
set Liverpool_Player(Daniel\ Agger) 5
-
- Beri Tanda kurung pada nama array dan index
set {Liverpool_Player(Daniel Agger)} 5
-
- Buat veriable string untuk index dan gunakan variabel itu sebagai index
set DanielAgger "Daniel Agger"
set Liverpool_Player($DanielAgger) 5
Filed under: Software Dev, tcl/tk | Leave a Comment »
Posted on June 4, 2007 by bayuadji
TCL punya 2 struktur data, yang pertama adalah list yang kedua adalah
array, pada beberapa bahasa pemrograman kedua sturktur hampir
berkaitan, contohnya pada pemrograman java, list pada pemrograman java
implementasinya adalah vector atau array list yang mana didalam class
vector/array list menggunakan array. Akan tetapi pada tcl, list dan
array adalah 2 hal yang berbeda, kali ini yang akan dibicarakan adalah
list.
Tcl list adalah sebuah struktur dara yang berisi urutan dari
variable2, list mempunyai elemen yang dipisahkan oleh white space.
Membuat List
set x {1 2}
set li [list 1 2 3]
Untuk mengelompokan beberapa variable menjadi sebuah group didalam ist
dapat menggunakan tanda kutip
se l2 [list 1 "a b" 2]
List juga dapat dibuat dengan menggunakan perintah lappend
lappend new 1 2
==> 1 2
lappend new 3 "4 5"
==> 1 2 3 4 5
lappend tidak hanya dapat menambah element pada akhir list akan tetapi
juga dapat membuat variabel list baru.
selain lappend terdapat juga perintah concat
set x {4 5 6}
set y {2 3}
set z 1
concat $x $y $z
==> 4 5 6 2 3 1
ada hal lain tentang tanda petik dua (“), tanda petik dua pada kasus2
sederhana mempunyai efek yang sama seperti perintah concat, akan
tetapi concat akan menghilangkan white space pada akhir sebuah
argumen.
Perintah2 untuk List
-
- llength
- Perintah ini digunakan untuk mengetahui panjang dari sebuah list.
llength {}
==> 0
llength [list 1 2 3]
==>3
-
- lindex
- perintah lindex digunakan untuk mengetahui nilai dari sebuah elemen
pada list, argumen dari perintah ini adalah posisi dari nilai yang
ingin diketahui
set x {1 2 3}
lindex $x 1
==>2
-
- lrange
-
lrange {1 2 3}0 1
==> 1 2
-
- linsert
- what can I say about this command? it insert a new element into list
linsert {1 2}0 new stuff
--> new stuff 1 2
-
- lreplace
-
set x [list 1 2 3]
lreplace $x 1 2 B C
-> 1 B C
-
- lsearch
- Mencari sebuah element di list. Apabila nilai tidak ditemukan maka
lsearch akan mengembalikan nilai -1.
lsearch {1 2 3} 1
-->0
lsearch {1 2 3} 2
-->1
-
- lsort
- Melakukan sorting dari list.
lsort [list 3 4 1 2]
--> 1 2 3 4
-
- split
- Memecah list.
set x "123"
split $x 2
==> 1 3
-
- join
- Menggabungkan list
join [list 1 2 3] :
--> 1:2:3
Filed under: Software Dev, tcl/tk | Leave a Comment »