tcl and print
August 16, 2007
Quick post,
I got a lot of image file that has to be printed, of course I could fire my gimp and print it one by one, but since (again) I am in lazy mood, and beside that I am in linux, so I could use my command line power rigght? rigggght.
so I open my tcl (don’t ask why I choose tcl :P)
and do this
% set filelist [exec ls]
% foreach file $filelist { lpr $file }
sweet, no I just go browsing and wait for my file .
NOTE
only use if you in linux, and already installed cups, and tcl heheh
me and BeanShell
August 3, 2007
Recently I got an assignment to fool around with a java library, Since I
kind in bad mood, I was thinking a way to fool around with an easy
way, not using code, compile, see because it’s just too much work. So
I remember about java scripting, there are lot of scripting in java
today, here some of it bsh, groovy, jacl, jython, rhino and others.
So I’ve to pick up one from many, I started with bsh, since the
syntax resembling java syntax with some improvement (pre java 5.0). So
I started to download it [ in ubuntu bsh already in synaptix ], and
start to playing around with it.
my first problem is how to add a jar to bsh classpath, luckily in bsh
documentation, there is a command to add jar into classpath,
here’s my snippet
BeanShell 2.0b4 - by Pat Niemeyer (pat@pat.net)
bsh % addClassPath("lib/my.jar");
addClassPath("lib/my.jar");
bsh %
after that, I smoothly played around with the API. so bsh can be a
tool for black-box testing, and I quite satisfied using it. I know
that the other scripting can be use for it, but for now I keep with
bsh for black box testing.
doLearn(”Generics”,2)
July 30, 2007
Generic juga bisa diterapkan pada deklarasi sebuah kelas. contoh
klasiknya adalah sebagai berikut:
public class Pair<T,V>{
T key = null;
V value = null;
public Pair(T t, V v){
this.key = t;
this.value =v;
}
public V get(T t){
return value;
}
@Override
public String toString(){
return "key = "+key+" value ="+value;
}
public static void main(String[] args){
Pair<String,String> pString = new Pair<String,String>("Hello","world");
System.out.println(pString);
Pair<String,Integer>pStrInt = new Pair<String, Integer>("This",1);
System.out.println(pStrInt);
}
}
hasil dari eksekusi program diatas adalah
key = Hello value =world key = This value =1
tentu saja generic diatas, hanya salah satu contoh penerapan generic
pada sebuah kelas.
nah bagaimana cara mengartikan generic diatas?
seperti telah kita ketahui, bahwa generic tidak merubah bytecode hasil
dari kompilasi kelas pada java, sehingga untuk lebih mudahnya kita
dapat mengasumsikan bahwa sebelum proses kompilasi java merubah dari
kode java ke bytekode, terjadi perubahan dimana (contoh 1 dari
Pair) character generic ‘V’ diubah menjadi
String,sedangkan ‘T’ menjadi String. dan pada begitu juga pada code
Pair dimana ‘T’ menjadi String, dan ‘V’ menjadi
Integer.
dari sini bisa menimbulkan pertanyaan apakah
Pair<String,String>
dan
Pair<String,Integer>
adalah 2 kelas yang sama?, yap dua contoh itu adalah 2 kelas yang
sama, hal ini bisa dibuktikan dengan
Pair<String,String> pString = new Pair<String,String>("Hello","world");
Pair<String,Integer>pStrInt = new Pair<String, Integer>("This",1);
assert pString.getClass() == pStrInt.getClass();
Thread dan java
July 25, 2007
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().
TCL & uplevel
June 14, 2007
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.
TCL & upvar
June 13, 2007
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
TCL & Scopes
June 12, 2007
Tcl mempunyai 2 jenis variabel scope (atau mungkin bila diterjemahkan
menjadi lingkup :P).
-
- 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.
could not debug in eclipse 3.2
June 12, 2007
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.