26 Haziran 2008 Perşembe

Linux Shell Scripting

Windowsta yazdığımız BAT dosyalarını yani toplu işlem yapma dosyalarının benzerini Linux için de yazabiliriz. Linux Shell Scripting denilen bu işlemde programlama diline yakın bir biçimde shell programlama yapabiliyorsunuz.

İlgili tutorial için : http://www.freeos.com/guides/lsst/index.html

MPI Api Kurulumu

MPi Apisinin Linux üzerinde kurulumu nasıl oluyor?
Bu apiyi, linux'e kurmak için epey uğraştım, sonunda başardım, okulda bazı arkadaşlar da benim gibi kuramayıp, okulun serverine uzaktan bağlanıp, kod derlemeye çalışmıştık.

İlk olarak buradan apiyi Linux işletim sistemine indiriyoruz. Daha sonra indirilen sıkıştırılmış dosyayı bir klasöre açıyoruz ve daha sonra terminal'den bu klasöre giriyoruz.

Terminal'e
"./configure CC=cc CXX=CC --without-fc -prefix=/directory/to/install/in" yazarak apinin configurasyonunu sağlıyoruz ( --without-fc FORTRAN uygulaması yazmayacağımızı belirtmek için ). Eğer hata çıkarsa, gcc nin yeni versiyonunun yüklenmesi gerekebilir. Bunu da "sudo apt-get install build-essential" dan yapabiliriz. Bu konfigurasyon işlemi sisteme bağlı olarak 5-10 dakika sürebilir, bu işlem bittikten sonra aynı klasörde terminale "make" daha sonra "make install" yazarak, apinin kurulmasını sağlıyoruz. Daha sonra terminale "mpicc" yazarak apinin yüklenip yüklenmediğini kontrol ediyoruz. Eğer şu şekilde bir hata alırsak :


root@fuat-laptop:/home/fuat/Desktop/lam-7.1.4# mpicc
The program 'mpicc' can be found in the following packages:
* lam4-dev
* libmpich1.0-dev
* libopenmpi-dev
* libmpich-mpd1.0-dev
* libmpich-shmem1.0-dev
Try: apt-get install
bash: mpicc: command not found


lam4-dev package'ını yüklememiz gerekbilir. Yüklemek için "sudo apt-get install lam4-dev" yazıyoruz terminal'e. Daha sonra mpicc yi tekrar deniyoruz ve "gcc no input files" hatası alırsak apinin doğru yüklendiğini görmüş oluyoruz.

Sırada mpirun var. Terminal'e mpirun yazıp mpirun uygulamasını kontrol ediyoruz, eğer yine bulunamazsa, "sudo apt-get install lam-runtime" yazarak bu package'in yüklenmesini sağlıyoruz.

Sıra geldi apiyi çalıştırmaya, "lamboot" yazıyoruz terminale, eğer şu şekild bir çıktı alırsak :



fuat@fuat-laptop:~/Desktop/lam-7.1.4/myexamples$ lamboot

LAM 7.1.2/MPI 2 C++/ROMIO - Indiana University



apimiz, başarıyla kurulmuştur...

25 Haziran 2008 Çarşamba

Linux'te Babylon Sözlük

Windows'tan aşina olduğumuz, yanımızdan ayıramadığımız bir parçadır Babylon. Şahsen, ingilizce kelime haznemi geliştirmede en faydası dokunan bir araç oldu bu uygulama. Peki bu araç sadece Windows'ta mı?

Sırf bu yüzden linux kullanmayanlar olduğunu biliyorum, şahsen benim de uzun süredir linux kullanmamamın sebeplerinden bir tanesi de buydu. Linux'te bu programı nasıl kullanacağız?

Babylon sadece Windows sürümleri için var fakat aynı işlemi gören bir Linux uygulaması da var : Stardict. Kelimelerin üstüne gelip kolayca farklı dilde olan anlamlarını görebilirsiniz.

Yapmamız gerekenler:

1 - İlk olarak Stardict adlı uygulamayı bilgisayarımıza kuruyoruz.
Ubuntu için : http://downloads.sourceforge.net/stardict/stardict_3.0.1-1_i386.deb

Diğer linux : http://linux.softpedia.com/progDownload/StarDict-Download-1162.html

2 - Daha sonra Babylon sözlüklerinin Stardicte kullanılması için Converter uygulaması kurmamız gerekiyor. Bu program .BGL uzantılı dosyaları, Stardict uygulamasının okuyabileceği .IFO uzantılı dosyaya çeviriyor. Programın adı : Dict Convert

http://linux.softpedia.com/get/Education/Dictconv-23446.shtml
adresinden programı indirebilirsiniz.

Programı indirdikten sonra zipli dosyayı bir klasöre açın ve daha sonra klasörün içine terminalden girdikten sonra :
"./configure" yazarak configurasyonu sağlayın. Eğer C++ Compiler hatası alırsanız terminale "sudo apt-get install build-essential" yazın ve ilgili paketlerin yüklenmesini sağlayın. Eğer libxml2 hatası alırsanız terminale "sudo apt-get install libxml2-dev" yazıp libxml2 paketinin yüklenmesini sağlayın. Daha sonra bu işlemi de sorunsuz hallederseniz, "make all install" yazarak programın kurulmasını sağlayın.

3 - Çevirme işleminin yapılması
http://www.babylon.com/category/30/Turkish.html adresinden türkçe sözlüklerden ilgilendiklerinizi indirin.
Daha sonra terminalde "dictconv babylonsozluk.bgl -o stardictsozluk.ifo" yazıp çevirme işlemini gerçekleştirin. Daha sonra bu komutu yazdığınız klasöre olusacak 3 dosyayı stardictsozluk.ifo,
stardictsozluk.idx, stardictsozluk.dict; stardict'in kurulduğu dizindeki dic klasörünün içine kopyalayın. Eğer nereye kurulduğunu bilmiyorsanız, "updatedb" yazın terminale, daha sonra "locate stardict" yazın ve stardict klasörünün nerede olduğunu öğrenmiş olun.

19 Haziran 2008 Perşembe

MPI ile Paralel Programlama

Message Passing Interface kısaca MPI, C programlama dili ile paralel programlamayı sağlayan bir C apisidir. Bu apiyi uygulamalarımızda kullanarak programlarımızı birçok işlemci üzerinde çalıştırmayı sağlayabiliriz.

Apinin bize sağladığı en önemli özellik processler arası haberleşmeyi sağlama imkanını sunması. Bu sayede zaten paralel programlama işlemini kusursuz yapmış oluyoruz. Genel kullanım alanları biyolojik modeller, uzay problemleri, dna modelleme gibi çok yoğun işlemleri gerektiren durumlarda kullanılıyor.

Bu apiyi kullanabilmek için en önemli şart, programımızı aynı işlemleri yapacak parçalara bölebilmek. Örneğin SMS Server'ınız var, 100 adet mesajı sıra ile okuyup, her sms'e bir cevap üreteceksiniz. Bunun için normal programlama ( seri programlama diyebiliriz aslında ) ile ne yaparız, 1 den 100 e kadar iterasyon şeklinde sms okuyup, cevaplandırırız. Fakat paralel programlama da ise örneğin 4 process kullansak, her birine 25 sms veririz. Her biri bir sms okur aynı anda, yani aynı anda 4 sms okur ( tam aynı anda olmaz aslında çünkü I/O cihazına aynı anda sadece bir process ulaşabilir ) gibi bir durum oluşur.

Fakat bilgisayar mimarisi ve işletim sistemleri konularından da bildiğimiz üzere bu işlemde 4 prcess kullanacağımız zaman 4 kat hızlanma gerçekleşmez. Çünkü programın bir kısmı yine seri olarak yapılacaktır ( zorunludur diyebiliriz). Bunun için Amdahl's Law incelenebilir.

En çok kullanılan durumlardan bir tanesi de matris üzerinde işlem yapma olayıdır. Örneğin matris çarpımı, matris toplamı veya 2 arrayin toplamı gibi işlemler paralel programlama ile çok daha hızlı bir şekilde yapılabilir.

Vereceğim linkte Game Of Life probleminin paralel programlama ile çözülmüş örneği var. Rar dosyası içerisinde Bilgisayar Mimarisi dersi için yapmış olduğum Game Of Life oyunun kodu ve raporu bulunmakta.

Yakın zamanda metodların kullanımı ile ilgili yazı da yazacağım.

Not : Program Linux üzerinde çalışmaktadır. Ve MPI apisi kurulu olmalıdır.
MPI Apisini indirip kurmak için : http://www.lam-mpi.org/using/docs/

Dosyayı indir

6 Haziran 2008 Cuma

JSP - Oracle - Array Gonderme

Bazı durumlarda JSP sayfamızdan Oracledaki procedurumuze array gondermek isteyebiliriz. Bunun icin ilk olarak yapmamız gereken Oracle'da bir array type tanımlamak.

CREATE OR REPLACE TYPE INTEGERARRAYTYPE_TY AS TABLE OF INTEGER

Daha sonra Procedurumuzun parametre kismina bu array tipinde bir degisken yazacagiz:


CREATE OR REPLACE FUNCTION INSERT_LINE(vLineCode IN VARCHAR, arrStations IN INTEGERARRAYTYPE_TY)

Daha sonra JSP sayfamızdan Array ile ilgili işlemleri yapmamız gerekiyor.
İlk olarak jsp sayfamızda ilgili sınıfları import edelim:


<%@page language="java" import="oracle.sql.ARRAY"%>
<%@page language="java" import="oracle.sql.ArrayDescriptor">


Daha sonra arrayimizi olusturup, import ettigimiz sinifa ait nesneleri olusturalim.


Integer arrStations[] = new Integer[3];
arrStations[0]= 0;
arrStations[1]= 1;
arrStations[2]= 2;

ArrayDescriptor desc1 = ArrayDescriptor.createDescriptor("INTEGERARRAYTYPE_TY",Conn);
ARRAY input1 = new ARRAY(desc1, Conn, arrStations);


ArrayDescriptor nesnesi olustururken, createDescriptor metodunu kullaniyoruz. Bu metod 2 parametre aliyor. İlki bizim Oracle da olusturdugumuz integer array tipi, digeri ise jspden oracle'a baglanirken kullandigimiz Connection sınıfından türetilmis Conn nesnesi.

Conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE",
"IETT","****");

Buraya kadar olan islemlerde arrayimiz jsp sayfamizda olustu. Sirada, bunu gonderme islemi var.



CallableStatement cstmt = null;
String sql = "{call ? := INSERT_LINE(?,?)}";
try
{
cstmt = Conn.prepareCall(sql);
cstmt.setString(2,strLineCode_tr);
cstmt.setArray(3,input1);
cstmt.registerOutParameter(1,Types.INTEGER);
int b = cstmt.executeUpdate();
int sonuc = cstmt.getInt(1);

}
catch(Exception e) {}
finally {}


CallableStatement kullaniyoruz burada. Bu sinifin setArray fonksiyonunu cstmt nesnesinden cagiriyoruz. Bu metod 2 parametre aliyor. Ilki parametre sirasi, insert_line oracle fonksiyonunun 2.parametresi oluyor bu array. Return degeri ilk parametre oldugu icin dogal olarak sirasi 3 oluyor. setArray metodunun 2.parametresi ise ARRAY sınıfından türetilen nesne oluyor. Bu da yukarıda önceden ürettiğimiz ARRAY sınıfına ait input1 nesnesi.

Bu sekilde arrayimizi oracleda bir fonksiyona gondermis olduk. Biraz zahmetli bir ise benziyor. Eger daha performansli ve kolay bir yol bulursam yine paylasacagim.

1 Haziran 2008 Pazar

Google Map Api - Ders 8 - Bir koordinata Odaklan

Bu özellik zaten önceden bahsettiğim özelliklerden bir kaç fonksiyonu kullanılarak yapılabilir. 2 Textfield'a kullanıcıdan enlem ve boylam değerleri istenilerek haritada istenilen koordinata odaklanılabilir. Hareket halindeki nesne takibinde bu özellik işe yarayacaktır.

Kullanılan 2 fonskyionumuz var:


map.setCenter(new GLatLng(enlem,boylam));
map.setZoom(zoomSeviyesi);


İlgili Örnek için :

http://afsungur.googlepages.com/map_ornek_10.html