You are on page 1of 15

Web Programcl

<<

JSP ile erez ve oturum uygulamalar


JSP uygulamalarnzda ziyaretinizin durum bilgisini korumak iin erez ve oturumlardan faydalanabilirsiniz.

unucu-tarafl uygulamalarda ziyaretinin durum bilgisini korumak nemlidir. Bu sayede bir ziyaretiyi dierinden ayrabilmek, daha nce ziyarette bulunup bulunmadn denetlemek, ifre ile girdii bir sayfadan sonra ayn oturumda dierlerine de sorunsuzca girebilmesini salamak ya da ifresini hatrlamak mmkn oluyor. Tm sunucu-tarafl teknolojilerde olduu gibi JSPde de bu ilevi yerine getirmek iin cookie (erez) ve sessionlardan (oturum) faydalanlr. Webde en sk kullanlan protokol olan HTTPnin, ziyaretilerin sayfalararas seyahatinde durum bilgisinin kaydn tutan bir ilevi bulunmamaktadr. Ziyareti sunucudan bir istekte bulunur, sunucu istenen sayfay gnderir ve balant kapanr. Bir baka ziyareti bir baka istekte bulunur, sunucu ona da istedii sayfay gnderir, bu ilem bylece devam eder. Sunucu asndan bir ziyaretinin bir dierinden fark yoktur. Bu durumda nceden sayfamz ziyaret etmi bir mterinin ziyaretini tekrarlamas annda bunun tannmasn ve alglanmasn salayacak durum bilgileri iin baz ek mekanizmalar uygulamalarmzda oluturmamz gerekir. Bu tr mekanizmalarn oluturulmasnda kullanlan en temel unsurlar cookieler, sessionlardr.

rna sdrlabilecek ierik ne olabilir? derseniz: Web uygulamalarnzn ziyaretileri tanyabilmelerini salayabilecek birka ufak ama nemli bilgi; ziyaretinin ad, ifresi, web sitenizi kanc defa ziyaret ettiinin bilgisi ya da daha nceden sitenizle ilgili tercihleri gibi. Bylece web uygulamalar daha nce kendisini ziyaret etmi olan bir mteri ya da ziyaretiyi tanyp, onunla ilgili bilgileri ve tercihleri kullancnn bilgisayarndaki cookie sayesinde hatrlayabilmektedir. Cookie: Webde durum bilgisini koruyabilmek amacyla web uygulamalar tarafndan ziyareti bilgisayarnda oluturulan kk metin dosyalardr. Cookielerden faydalanrken izlenen prosedr u ekildedir. Bir ziyareti bir web sitesine ilk olarak geldiinde web uygulamas ziyaretinin bilgisayarna kendisi tarafndan oluturulmu bir cookie olup olmadna bakar. Eer yoksa ziyaretiden elde edecei bilgiler nda yeni bir cookie oluturur. Ziyareti siteden ayrldnda bile oluturulan bu cookie bilgisayarnda sakl tutulur. Ziyaretinin ayn

Cookieler (erezler)
Web uygulamalarnn ziyareti bilgisayarlar zerinde hibir tasarruflar yoktur. Yani web zerinde alan hibir uygulama (buna appletler de dahil) bilgisayarnzn iindeki bilgileri ve dosyalar okuyamaz, silemez ya da yenilerini kaydedemez. Bu web ile ilgili protokollerde oluturulmu bir gvenlik nlemidir. Bu duruma bir tek cookieler istisna tekil ederler. Cookieler web uygulamalar tarafndan ziyareti bilgisayarnda oluturulan kk metin dosyalardrlar. Cookielerin oluturulma ilemleri ziyareti asndan perde arkasnda gerekleen bir olaydr ve bundan genellikle kullanclar haberdar olmazlar. Cookielerin ziyaretinin gvenliini tehdit etmemeleri asndan byklkleri bir ka bytela snrlandrlmtr. Peki bu kadar kk metin dosyala-

Bilgisayardaki Cookie dosyalar 140 CHIP Workshop > >

>>

Web Programcl

siteye gerekletirecei daha sonraki ziyaretlerde ise uygulama daha nceden oluturulmu olan cookieden hemen ziyaretiyi alglayarak ona ait bilgi ve tercihleri uygulamaya yanstr.

Cookie isim = new Cookie("Ad","Hakan"); //isim.setMaxAge(6000); response.addCookie(isim);

Cookie terimi nereden geliyor?


Trkemizde kelime karl kurabiye ya da erez olan cookieler ilk olarak Netscape firmas tarafndan ortaya atld. Netscape iin ilk cookie spesifikasyonunu oluturan Lou Montulli, cookie teriminin nereden geldiini yle aklyor: Cookie terimi Bilgisayar bilimi evrelerinde bir arac unsur tarafndan korunan ve kullancya effaf olmayan bilgi paralarn tanmlamakta kullanlr. Bu anlamda bu tanmlama bu kk dosyalarn kullanm amacna ok uyuyor. Cookieler sayesinde ziyaretinizin login bilgilerini tekrardan sormadan hatrlayabilir, ziyaretinin sitenize kanc defa uradnn bilgisini kaytl tutabilir, web sitenizde (ders gibi) bir dizi blmleri srasyla takip ediyorsa en son hangi blmde kaldn hatrlatabilir ya da sitenizin arka plan rengini daha nce nasl istediyse ayn ekilde sunabilirsiniz. Gelelim cookielerle ilgili snrlamalara. Cookieler sadece kendisini oluturan web uygulamalar (daha dorusu ayn alanad [domain] altnda yer alan uygulamalar) tarafndan okunup silinebilirler. Dolays ile bir web uygulamas bir baka uygulama tarafndan oluturulmu cookie bilgilerine ulaamaz. Bunun da bir gvenlik nlemi olduunu belirtmeye gerek yok sanrm. Ancak bedava denilen yazlmlarla birlikte bilgisayarnza isteyerek ya da istemeyerek yerletirdiiniz spyware ad verilen casus yazlmlarn bilgisayarnzdaki cookielere ulaabileceklerini aklnzdan karmayn. Her tarayc cookieleri desteklemez ve destekleyen tarayclarda da bilgisayarna cookie yazlmasn istemeyen ya da yazlm tm cookieleri silmek isteyen kullanclara bu imkan tanyan seenekler mevcuttur. Bu adan bakldnda hayati ilevlerde sadece cookielere bel balayan uygulamalar retmek pek de akllca olmaz. Cookieleri sadece ek ilevsellik katan unsurlar olarak ele almak daha aklc bir yaklamdr. Cookielerin oluturulmas srasnda, oluturulacak her cookienin mrnn belirtilmesi gerekir. mr dolan cookie kullanc sisteminden kendiliinden silinir. Oluturulma esnasnda mr belirtilmemi bir cookie ise ziyareti taraycs ak olduu srece yaar ve tarayc kapand anda yok olur.
Cookie soyisim = new Cookie("Soyad","Pek"); soyisim.setMaxAge(6000); response.addCookie(soyisim); out.println("Cookie oluturuldu.<br>"); out.println("Cookie'nizi okumak iin <a href='cookie_oku.jsp'>buraya</a> tklayn."); %> </body> </html> </html>

Sayfamzn kts yukardaki gibi olacaktr. Cookiemizi okumak iin linkle verilen sayfamz birazdan oluturacaz.

Bir cookie oluturma


Cookieleri farkl web teknolojileriyle oluturmak mmkndr. JSP de bu teknolojilerden bir tanesidir. Daha nceki StudioWeb saylarmzda JavaScript ile cookie oluturmay grmtk hatrlarsanz. Aada yer alan rnek cookielerin JSP ile nasl oluturulabileceini gsterecek. rneimizde ziyareti bilgisayarna cookie yoluyla iki deer kaydedeceiz. cookie_yaz.jsp
<html> <head> <title>Cookie yaz</title> </head> <body bgcolor="#ffffff"> <h2>erez yaz</h2> <% Cookie isim = new Cookie("Ad","Hakan");

Oluturduumuz cookie dosyamz!

leyeceimiz her bir deer iin new anahtar kelimesi ile farkl bir cookie nesnesi oluturduk.

Parantezler iinde virglle ayrlan iki terimden ilki parametrenin ismiyken ikincisi ise cookiede bu parametre altnda kaydedilen deeri belirler. Bundan sonra cookiemizin mrn belirleyen satrlar girmemiz gerekir. Bunu setMaxAge() metoduyla gerekletiriyoruz. Parantezler iindeki deer saniye cinsindendir.

< CHIP Workshop 141 <

Web Programcl

<<

isim.setMaxAge(6000); addCookie() metodu ile oluturduumuz deerleri response nesnesine aktaryoruz. response.addCookie(isim);

nce sayfamz altralm ve biraz nce cookie yoluyla ilediimiz bilgilere ulaalm.

Burada cookieye kaydedeceimiz deerlerden ilki iin bu satrlar yorum taksnn arkasna yerletiriliyor. Bylece mr belirtilen bir cookie ile belirtilmeyen bir cookie arasndaki fark birazdan daha iyi gzlemleyebileceiz. Ama nce cookiemizi okuyabilecek bir JSP sayfas yapmalyz.

Oluturulmu bir cookieyi okuma


Bu sayfamz biraz nce oluturduumuz cookieyi okuyabilecek. cookie_oku.jsp
<html> <head> <title>Cookieler</title> </head> <body bgcolor="#ffffff"> <h2>erez oku</h2> <% Cookie[] cookieler = request.getCookies(); for (int i = 0; i < cookieler.length; i++) { Cookie cookieAktif = cookieler[i]; String cookieIsmi = cookieAktif.getName(); String cookieDegeri = cookieAktif.getValue(); if ("Ad".equals(cookieIsmi)){ out.println(cookieIsmi + " = " + cookieDegeri + "<br>"); } if ("Soyad".equals(cookieIsmi)){ out.println(cookieIsmi + " = " p + cookieDegeri + "<br>"); } } %> <br><br> Cookie'yi silmek iin <a href="cookie_sil.jsp">buraya</a> tklaynz. </body> </html> String cookieIsmi = cookieAktif.getName(); for (int i = 0; i < cookieler.length; i++) { } Cookie[] cookieler = request.getCookies();

imdi tarayc pencerenizi kapatn. Ve cookie_oku.jsp sayfanz tekrar an. Karlaacanz manzara muhtemelen aadaki gibi olacaktr.

Bunun anlam u: mr belirtilmeyen cookielerin mrleri tarayc kapandnda sona erer. Burada ilk cookie deikenimizin mr belirtilmemiti. Dolaysyla oturumla beraber bu deer yok oldu. Gelelim okuma ileminin nasl gerekletiine.

satr ziyareti bilgisayarnda kaytl ve ulalabilecek tm cookieleri cookieler isimli bir diziye kaydeder. Daha sonra oluturulacak bir dng ile dizide yer alan cookie deerlerine teker teker ulayoruz.

Dng bloumuzdaki
Cookie cookieAktif = cookieler[i];

satr dngde o an ulalan cookie iin bir nesne oluturur. Sra aktif durumdaki cookie deerlerinin uygun metotlarla elde edilmesinde.

142 CHIP Workshop > >

>>
}

Web Programcl

String cookieDegeri = cookieAktif.getValue();

tekrar oluturmak iin "); out.println("<a href='cookie_yaz.jsp'>buraya</a> tklayn."); %> </body> </html>

Daha sonra da ilediimiz parametre isimlerine karlk gelen deerleri yazdrmakta.


if ("Ad".equals(cookieIsmi)){ out.println(cookieIsmi + " = " + cookieDegeri + "<br>");

if ("Soyad".equals(cookieIsmi)){ out.println(cookieIsmi + " = " + cookieDegeri + "<br>"); }

Oluturulmu bir cookieyi silme


Sra geldi oluturduumuz bir cookieyi mr dolmadan nasl sileceimize. Taktik basit aslnda. Yapmamz gereken cookienin mrn belirleyen setMaxAge() metoduyla 0 deerini atamak. cookie_sil.jsp
<html> <head> <title>Cookieler</title> </head>

Bir dosyada yer alan cookie deerlerini silmek amacyla aynen cookie yazdrrken yaptmz gibi her bir deer iin nce birer nesne oluturalm ve parametre deerlerini null (hilik) deeri ile sfrlayalm.
Cookie cookieSil = new Cookie("Ad", null);

Cookienin yeni mrn 0 olarak atayalm


cookieSil.setMaxAge(0); ve addCookie() metoduyla response nesnesine gnderelim. response.addCookie(cookieSil); <body bgcolor="#ffffff"> <h2>erez sil </h2> <% Cookie cookieSil = new Cookie("Ad", null); cookieSil.setMaxAge(0); response.addCookie(cookieSil); //Bu ikinci blok ile birlikte tm cookie dosyas silinecek Cookie cookieSil2 = new Cookie("Soyad", null); cookieSil2.setMaxAge(0); response.addCookie(cookieSil2); out.println("Cookie'niz silindi.<br> Cookie'nizi //Bu ikinci blok ile birlikte tm cookie dosyasi silinecek Cookie cookieSil2 = new Cookie("Soyad", null); cookieSil2.setMaxAge(0); response.addCookie(cookieSil2);

Yukardaki ilemlerin yerine getirildii cookie deeri yer ald cookie dosyasndan silinecektir. Bu ilemler zincirini bir cookie dosyasnda yer alan tm cookieler iin gerekletirdiinizde ise cookie dosyasnn, bulunduu klasr ierisinden yok olduunu gzlemleyeceksiniz. Bu bakmdan rneimizde yer alan

bloku ile birlikte dosyamzdaki ikinci ve son deerle birlikte tm dosyann silindiini grrsnz.

Session (Oturum)
Oturum bir kullancnn bir uygulamaya balanmas ile balayp ayrlmasyla sona eren srece verilen addr. JSPde bu sre session nesnesiyle temsil edilir. Sessionlar cookieler gibi durum bilgisi kaydnn tutulmasnda kullanlan bir dier unsurdur. Sessionlarn temel hedefi bir oturum sresince belli bir kullancya zel bilgilerin uygulama iindeki farkl sayfalarca paylalmasn salamaktr. Session nesnesi o kullancya ait farkl bilgileri sunucuda oluturur ve bu bilgilerin kaydn sunucuda tutar. Bu bilgileri o kullancyla ilikilendirmek iin de kullanc bilgisayarna zel bir session cookiesi oluturur. Session cookiesi o kullancya ait olmak zere rastgele retilmi bir kimlik numaras (SessionID) ihtiva eder. Bylece kullanc bir sayfadan bir dierine gittiinde uygulama bu SessionIDden kullancnn bir nceki sayfadaki ile ayn olduunu an-

Cookie dosyamz silindi. < CHIP Workshop 143 <

Web Programcl

<<

lar ve ona ait bilgileri kapsayan deikenlere ulam salar. Sessionlar kullanmann cookielere baml bir yaklam olmasndan dolay cookieler iin geerli olan tm kstlamalar sessionlar iin de aynen geerlidir. Ancak sessionlar kullanmak cookielere oranla daha kolay olup sessionlar iin bir mr belirtmeniz gerekmez.

Oturum ama ve bir session deikeni oluturma


rneimizde amacmz bir kullanc iin bir oturum amak ve oturumu sresince dier sayfalardan ulaabilecei bir deiken deeri oluturmak olacak. oturum_baslat.jsp
<html> <head> <title>Oturum</title> </head> <body bgcolor="#ffffff"> <h2>Oturum Ynetimi</h2> <% HttpSession oturumNesne = request.getSession(true); oturumNesne.putValue("KullaniciAdi", "Kemal"); out.println("<b>" + oturumNesne.getValue("KullaniciAdi") + "</b> adina <b>"); out.println("ID" + oturumNesne.getId() + "</b> No'lu bir oturum balatlmtr.<br>"); oturumNesne.putValue("KullaniciAdi", "Kemal"); out.println("Oturum ilgileri iin <a href='oturum_oku.jsp'>buraya</a> tklaynz"); %> </body> </html>

Web uygulamamzn en banda yer alacak olan kodlarmz rettii ID numaras altnda bir oturum am oldu. Oturum iin yeni bir session nesnesi oluturmanz gerekir.
HttpSession oturumNesne = request.getSession(true);

Eer kullanc iin nceden alm bir oturum sz konusu deilse buradaki getSession() metodu null deerini getirecektir. Session nesnemiz dier oturum iinde ziyaret edilecek dier sayfalardan ulalabilecek, kullancya zgn bir deiken deeri atamak iin putValue() metodunu kullanyor. imdilik test etmek iin sabit bir deer kullanabilirsiniz. Deikenimizin ad KullaniciAdi, deeri ise Kemal olsun.

Son blmde JSP sayfamz tanmlanm olan deiken deerine ve session numarasna ulap sayfa ierisinde gsteriyor geri ama nemli olan bu deerlere baka bir sayfadan ulaabilmek elbette. Bir sonraki sayfamz bu sayfada tanmlanan session deikenlerine ulaacak.

Oturum ama sayfamzn ekran kts 144 CHIP Workshop > >

>>
oturum_oku.jsp
<html> <head> <title>Oturum</title> </head> <body bgcolor="#ffffff">

Web Programcl

Session deikeni okuma


Diyelim ki aada yer verdiimiz rnek web uygulamamzda yer alan sayfalardan biri. imdi amacmz ilk sayfada belirlenen deikene ulamak olacak.

out.println("<br>Oturumu sona erdirmek iin <a href='oturumu_kapat.jsp'>buraya</a> tklaynz"); %> </body> </html>

<%@ page import="java.util.*"%>

<h2>Oturum Ynetimi</h2> <% HttpSession oturumNesne = request.getSession(); out.println("<br>Kullanici ismi: " + oturumNesne.getValue("KullaniciAdi")); Date olusturulmaTarihi = new Date(oturumNesne.getCreationTime()); Date erisimTarihi = new Date(oturumNesne.getLastAccessedTime()); out.println("<br>Oturumun ald tarih: " + olusturulmaTarihi); out.println("<br>Oturuma en son ulam tarihi: " + erisimTarihi); out.println("<br>Oturuma maximum ara verebileceiniz sre: " + oturumNesne.getMaxInactiveInterval()); oturumNesne.setMaxInactiveInterval(10); out.println("<br>Yeni ara verme sresi: " + oturumNesne. p getMaxInactiveInterval());

imdi bir nceki rneimiz ile oturumu atnz tarayc penceresi ierisinden bu sayfaya ulan. Bata bir nceki sayfada atadmz deer olmak zere oturum ile ilgili bilgilere ulayor olacaksnz. Grdnz zere session deikenlerini elde etmek cookie deerlerini elde etmekten daha kolay. Dilerseniz oturumun ald an getCreationTime() metodu ile oturuma son eriim ann ise getLastAccessedTime() metodu ile elde edebilirsiniz. Bu arada java.util paketini sayfanzn en stnde armay unutmayn. Oturuma ara verme sresi: Eer kullanc oturum esnasnda belli bir sre iin uygulama ile hi bir iletiim iine girmez ya da reaksiyon gstermezse oturum kendiliinden sona erer. Bu srenin olaan deeri getMaxInactiveInterval() metodu ile elde edebilir ya da setMaxInactiveInterval() metodu ile yeni bir deer atanabilir.

Session kapatma
Kullancnz sitenizden ayrlp tarayc penceresini kapatmasyla birlikte oturum sona erecektir. Ancak belirli artlar altnda oturumu kendiniz kapatabilir (Logout) ve session deikenlerini silebilirsiniz. oturumu_kapat.jsp
<html> <head> <title>Oturum</title> </head> <body bgcolor="#ffffff"> <h2>Oturum Ynetimi</h2> <% HttpSession oturumNesne = request.getSession(); oturumNesne.invalidate(); out.println("Oturumunuz sona erdi.."); %> </body> </html>

Oturumu sona erdirip oluturulan session deikenlerini silmek iin invalidate() metodunu armanz yeterli olacaktr. Not: Bu ayki atlyemizde kullandmz rneklerin kaynak kodlarn CDdeki StudioWeb+ blmnde bulabilirsiniz. StudioWeb+da bu ay: JSP sayfalarnda Trke karakterlerin kullanlmas. Numan Pekgz numanp@chip.com.tr
< CHIP Workshop 145 <

Linux

<<

Yazlm ykleme ve gncelleme


Yaz dizimizin bu nc blmnde, nce Linux ortamnda eitli yazlm ykleme yntemleri ve alternatiflerini, ardndan bu yntemlerden MandrakeLinux'un da kulland RPM (RedHat Package Manager) teknolojisini inceleyeceiz.

inux, aslnda sadece iletim sisteminin ekirdeini oluturduu iin, Linux datm reticileri, yllardr kendi kullanclarnn ihtiyalarna gre yazlm paketlerinin kurulmasn salayacak dzenekler gelitirmilerdir ve bunu ounlukla birbirlerinden bamsz bir ekilde yapmlardr. Bir yazlm paketi, ana ksmdan olumaktadr.

sa, kullancdan gncellenmesi istenip istenmedii sorulur.

1 Yazlmn kendisi (alabilir ikili (binary) kodu) 2 Yazlm hakknda genel bilgi ve bamllklar (dependency)

2 Paketin iindeki -varsa- bamllk (dependency) listesi kontrol edilir. Bu liste, bu yazlm paketinin gerek duyduu dier yazlm paketlerinin listesini iermektedir. Eer eksik bir paket var ise paket yneticisine bal olarak ya durum kullancya bildirilir ve ilem durdurulur, ya da gerekli bamllklar otomatik olarak bulunarak yklenir. 3 Arivin kendisi alarak dosyalar sistemde gerekli yerlere kopyalanr. 4 Yazlm kurulumundan sonra sistemde yaplacak deiiklikleri ieren bir betik (script) alr. Bu ilem tamamlandnda, gerekli dizinlere, yazlmn gerekli bileenleri yklenmi olur.
Popler Paket Yneticileri
Linux datmlarnda, yazlm yklemek iin herhangi bir standart, kstlama ya da dzenleme bulunmadn, datm hazrlayanlarn tercih ettikleri birbirinden bamsz sistemler olduunu belirtmitik. imdi bunlardan en popler olanlarna bir gz atalm: RPM: RedHat Package Manager (RedHat Paket Yneticisi) programnn ba harflerinden olumutur. RedHat tarafndan gelitirilmi olsa da, u an Linux dat-

3 Yazlm kurulumundan sonra sistemde


yaplacak deiiklikleri ieren bilgiler. Bu ksm, yazlm paketi yneticisinin kulland biime gre paketlenir, bir algoritma kullanlarak (ZIP vb.) sktrlr ve tek bir dosya haline getirilir. Bir yazlm paketini kurduumuz zaman, srasyla u admlardan geilir:

1 Yazlmn ismine baklr, eer paket sistemde hali hazrda kurulu ise ilem bu aamada biter, eer daha eski bir srm var-

m dnyasnda en popler paket yneticisidir. DEB: Debian ve trevi Linux datmlarnda kullanlan bir paket yneticisidir (dpkg). TGZ: Standart sktrlm bir ariv dosyasdr ve bamllk (dependency) bilgisi iermez. Profesyonel datmlarda hala kullanlmaktadr. MandrakeLinux da, birok dier Linux datm gibi RPM sistemini kullanmaktadr. Bunun yannda, bamllklarn (dependency) otomatik olarak yklenmesine olanak salayan URPM sistemini de beraberinde getirmektedir. URPM, RPM Cehennemi (RPM Hell) olarak adlandrlan problemden kurtulmamz salar. RPM cehennemi, bir yazlm paketinin, bir ya da birden fazla yazlm paketine ihtiya duymas (baml olmas), bu paketlerin de baka paketlere ihtiya duymalar neticesinde bir yazlm yklemek iin uzun bir ura gerektirmesi durumu olarak nitelendirilebilir. URPM sayesinde, bamllklar (dependency), paket yneticisi yazlm tarafndan otomatik olarak yklenecektir. Bilgisayarmz MandrakeLinux ile aarak masastmze eritiimiz andan itibaren (Resim 1) yeni bir paket yklemek iin hazrz demektir. nternetten ya da baka bir kaynaktan edindiimiz MandrakeLinux iin olan RPM paketini yklediimiz yeri bularak zerine tklayarak altrmamz yeterli olacaktr. rneimizde, (Resim 2) sistemin bize gaim-0.81-1.norlug.i586.rpm dosyasn ykle-

Resim 1

Resim 2 25 CHIP Workshop > >

>>
Resim 3

Linux

Resim 4

mek isteyip istemediimizi sorduunu gryoruz. ncelikle burada bir sre durarak RPM formatnda isimlendirme standardn inceleyelim. Herhangi bir RPM dosyas ile karlatmzda, o dosyann u ekilde isimlendirilmi olduunu greceiz: isim-srm-revizyon.mimari.rpm Burada; sim: Yazlmn ksa ya da mmknse tam ismini iermektedir. (rneimizde programn ismi gaimdir.) Srm: Yazlmn srmn gstermektedir. (rneimizde 0.81 olarak grlmektedir.) Revizyon: Yazlmn kanc kere paketlendiini gstermektedir. Bazen yazlmlarn ayn srmleri farkl ekilde paketlenmekte ya da baz paketlenme hatalar giderilmektedir. Burada sadece say varsa datcnn kendisi, paketleyen kiinin ismi ya da takma ad varsa, nc bir kii tarafndan paketleme yaplm demektir. (rneimizde 1.norlug olarak grlmektedir. Bu, bu srmn norlug tarafndan yaplm ilk paketleme revizyonu demektir.) Mimari: Yazlmn hangi mimari iin derlendiini ve paketlendiini belirtir. (rneimizde i586 olarak gsterilmitir. Bu, Pentium ve st (veya uyumlu) ilemci mimarileri

iin derlendiini gstermektedir.) Bu bilgiler, yklemek istediimiz yazlm paketlerini seerken bize her zaman lazm olacandan nemlidir. Yazlm ykleme iine geri dndmzde, bu paketin baz bamllklara sahip olduunu gzlemlemekteyiz (Resim 3). MandrakeLinux'un URPM sistemi, gerekli olan bamllklar listeleyerek, toplam boyutunu da gstererek bizden bu paketleri yklemek iin onay bekleyecektir. Bu onay verdiimizde, bizden bu paketleri ieren CDleri yerletirmemizi isteyebilir ya da bu paketleri internet zerinden ykleyebilir. Eer paket yneticisi, bize paketin imzalarnn geersiz olduundan bahsederse (Resim 4), bu, paketi hazrlayan kii ile, bizim bamllk paketlerimiz arasnda bir fark olduunu, iki paketin dijital imzalarnn birbirini tutmadn gsterir. Bunun nedeni basit bir paketleme fark, onaylanmam bir kaynaktan alnan bir paket ya da dijital imzalarn tanmasnda kullanlan algoritmadaki bir problem olabilir. Paketi edindiimiz kaynan gvenilir olduuna inanyorsak, imzalar geersiz olsa da paketi yklemeye devam edebiliriz. Yklediimiz program, ismini yazarak ya da mende gerekli seenei bularak altrabiliriz (Resim

5). rneimizde ele aldmz program olan GAIM (Gnome AOL Instant Messenger) ICQ, MSN, AIM, Yahoo gibi servislere tek bir program kullanarak balanmamz salayan bir annda mesajlama (instant messaging) yazlmdr (Resim 6). Yakn bir zamanda, Linux ortamnda elence ve sohbet servislerini incelerken, GAIM programna da detayl olarak deineceiz. Grld gibi, RPM paketlerini kullanarak sisteme yeni yazlm yklemek gayet kolay ve hzl, hatta URPM sistemi sayesinde otomatik.

Yazlm derleyerek yklemek


Bir yazlm, programlandktan sonra derlenerek altrlabilir hale getirilir. Derlenmemi haline, yazlm hangi dilde yazlm ise, o dilin kaynak kodu ad verilir. Derlenmi programlar ise, her ne dilde yazlm olursa olsun aa yukar ayn zellikleri tarlar. Linux, doas gerei GNU felsefesini devam ettiren ak kaynak kodlu bir yazlm olduundan dolay, onun iin gelitirilen yazlmlarn da ou ak kaynak koda sahiptir.

Resim 5 < CHIP Workshop 26 <

Resim 6

Linux

<<

Resim 7

Resim 8

Bu yazlmlarn kaynak kodu gizli deildir ve herkes tarafndan grlebilir, deitirilebilir ve uyarlanabilir. Ak kaynak kodlu yazlmlar, genellikle gelitiriciler tarafndan srekli (ok aktif yazlmlar gnde birka kere olmak zere) gncellenmektedir. Bu yzden, birok ak kaynak kodlu yazlm gelitiricisi, hazr derlenmi paketler sunmamakta, ya da sunduklar paketler gncel olmamaktadr. Bu durumlarda yazlm, derleyerek yklemek gerekebilir. Ayn ey, yazlmn zerinde deiiklik yapmak istendiinde de geerlidir. Ak kaynak kodlu yazlmlarn kaynak kodlar zerinde (programclk bilgimiz dahilinde) istediimiz deiiklii yaparak kendimize uyarlayabiliriz. Bunun iin de, program kaynak kodunu derleyerek yklemek gerekecektir. Kaynak kodu derleyerek bilgisayarn anlayaca, altrlabilir (executable) hale dntren yazlmlara derleyici denir. Kurulumumuzda (yaz dizimizin ilk blmnde)

derleyici ve yazlm gelitirme aralarn kurduumuz iin, yazlmlar kaynak kodlarn derleyerek ykleyebileceiz. rnek olarak yine bir mesajlama program olan KMess'i ele alalm. KMess, KDE masast ortam iin bir MSN Messenger programdr. http://kmess.sourceforge.net adresinden u anki srm olan KMess 1.3' bilgisayarmza indirerek ileme balayabiliriz. Daha nce de yaptmz gibi, dosyamz balang (masastmzdeki ev eklindeki Balang simgesine tklanarak ulalabilir) dizinimizdeki Documents (Belgeler) dizinine yklyoruz (Resim 7). Dizindeki kmess1.3.tar.gz dosyasna sa fare tuu ile tklayarak menye ulayoruz ve oradan Eylemlerksmndan Buraya A seeneini seiyoruz (Resim 8). Bylece, arivin bulunduu yerde kmess-1.3 ad altnda bir dizin (klasr) oluuyor. Bu yeni alan dizine sa fare tuu ile tklayarak Eylemler ksmndan Terminali Burada A seeneini setiimiz zaman (Re-

sim 9), bir terminal penceresi ile karlaacaz. Bu pencerenin siyah grnts ve beyaz yazlar ilk bakta korkutucu gelse de, bu blmmzde fazla detayna inmeden (evet ) basit komutta bir yazlm derleyerek yklemeyi inceleyeceiz. Birok yazlm, GNU autoconf sistemi ile derlenmeye hazrland iin, bize fazla yaplacak bir ey zaten kalmyor. Bu noktada, derlemeye balamadan nce deinilmesi gereken en nemli olgulardan biri, derleme ileminin hznn ilemcinize, belleinize ve yazlmn byklne bal olmasdr. Bu ilem ksa da uzun da srebilir. rneimizdeki yazlm, hzl bir ilemcide 5-6 dakika gibi bir srede derlenmitir. Terminal penceresinde:
./configure

yazarak Enter tuuna bastmz zaman, sistemimizde ykl yazlm bileenleri taranacak ve derleme ilemi iin gerekli olan or-

Resim 9

Resim 10 27 CHIP Workshop > >

>>

Linux

Resim 12

make install

Resim 11

yazarak yazlmn kurulumunu tamamlam oluyoruz.


exit

tamn mevcut olup olmadna baklacaktr. Bu ilem herhangi bir hataya sebep olmadan sona erdi ise (Resim 10):
make

yazarak yazlm derlemeye balayabiliriz. Sorunsuz biten (ama uzun sren) bir derleme ileminin ardndan, problemsiz bir biimde bu noktaya kadar gelmisek, program kurmaya hazrz demektir. Bir program sisteme kurmak iin, sistemde ynetici yetkisine sahip olmamz gerekmekte olduundan, burada MandrakeLinux'u kurarken belirttiimiz root ifresini kullanmamz gerekiyor.
su -

yazp Enter tuuna bastmzda, sistem bize root ifresini soracaktr. Bu ifreyi yazdmzda, kendi kullancmz terk ederek sistemde tam yetkili kullanc olan root kullancsna gemi oluyoruz. Bu durumdayken:

yazarak normal kullancmza dndmzde yazlmmz kurulmu demektir. Bu ekilde kurduumuz programlar, KDE mensne otomatik olarak eklenmedikleri iin, bu ilemi bizim yapmamz gerekmektedir. KDE mensne sa fare tuu ile tklayarak gelen mende Men Dzenleyici seeneini setiimizde, karmza MandrakeLinux'un men editr olan MenuDrake gelecektir. Burada, kurduumuz KMess programn mennn neresine eklemek istiyorsak oray seerek ie balayabiliriz (Resim 11) (Internet bal altnda Annda Mesajlama ksm, KMess iin uygun bir yerdir). Bu ilemi tamamladktan sonra sa stteki art iareti simgesine sahip Uygulama Ekle dmesine tkladmzda kan diyalog penceresinde bizden Balk (Mende kacak isim) ve Komut (program altrmak iin normalde yazacamz komut) istenecektir. Balk ksmna Kmess Komut ksmna da /usr/local/kde/bin/kmess yazdmzda (Resim

12), KMess menye eklenecek ve altrlmaya hazr olacaktr. Hatta daha sonra kon yazan yere tklayarak, mende duracak gzel bir simge de belirleyebiliriz (Resim 13). Gerekli deiikleri yapp disket eklindeki Kaydet tuuna bastmzda ise, men gncellenecek ve artk, sz konusu menden (Resim 14) KMess programn altrabileceiz. Yakn bir zamanda, Linux ortamnda elence ve sohbet servislerini incelerken, KMess programna da detayl olarak deineceiz. Bu yazmzda, ilk olarak RPM sistemini kullanan bir Linux datmnda yazlmlarn nasl yklendiini, daha sonra da ak kaynak kodlu bir yazlmn nasl derlenerek kurulabildiini, yzeysel olarak grdk. Eer farkl programlar ekip, Linux'ta denemek istiyorsanz, ak kaynak kodlu yazlmlar bulabileceiniz en byk iki kaynak site: http://freshmeat.net http://sourceforge.net Bu adreslerde bir ok yazlm, RPM ya da kaynak kodu formatnda bilgisayarmza ekip ykleyebiliriz. Yaz dizimizin bir sonraki blmnde ofis programlarna deineceiz. Yorum ve nerileriniz iin e-postalarnz bekliyoruz. Bol Linux'lu gnler dileklerimizle. Doa enol dsenol@masterz.com

Resim 13 < CHIP Workshop 28 <

Resim 14

3D

<<

3DS Maxte partikl (parack) sistemleri ile patlama efekti


Bu ayki yazmzda tm 3D modelleme ve animasyon yazlmlarnn nemli unsurlarndan biri olan ve zellikle film endstrisinde ska kullanlan partikl (parack) sistemlerine ve patlama efektlerine deineceiz.
m 3B modelleme ve animasyon yazlmlar partikl (parack) sistemlerini kendi ierilerine dahil etmilerdir ve partikl sistemleri 3B animasyon iin nemli bir kavramdr. Partikl sistemlerinin kullanm alanlar ok genitir ve hemen hemen her yerde kullanlr. zellikle film endstrisinde ou efektin kkenini partikl sistemleri oluturur. Partikl sistemleri zellikle eitli doa olaylarn taklit etmek iin vazgeilmezdir. Bununla birlikte her 3B yazlmn partikl sistemi birbirinden farkldr ve alma prensipleri dahil farkllk gsterir. Hatta partikl sistemleri kendi ierilerinde de snflara ayrlrlar ve her partikl eidi farkl yerlerde kullanlr. Partikl sistemleri ile neler yapabiliriz? Duman, uuan yapraklar, balk srleri, patlama efektleri, frtna, gktalar, yamur ve kar gibi ou doa olay partikl sistemleri ile yaplr. Yapacamz efekte uygun olan partikl sistemini seeriz ve gerekli parametrelerini ayarladktan sonra animasyonumuza dahil ederiz. Hatta partiklleri eitli spacewarplara (g alanlarna) balayarak davranlarn etkileyebiliriz, deflectorlarla (yanstclar) etkileim ierisine sokarak birbirleriyle arpmalarn veya sahnemizdeki nesnelerle arpmalarn, srtnmelerini ve sekmelerini salayabiliriz. rnein bir nesnenin krlp paralara ayrld bir olay dnelim. Paralar yerekiminin etkisiyle aa doru dmeye balarlar ve birbirleriyle arptklarnda sekerler ve yere dtklerinde srarlar; hatta paralar daha kk paralara bile ayrlrlar. Baz durumlarda ise tam tersi olarak paracklar birbirleriyle tekrar birleirler. rnein sualtndaki hava kabarcklar belli bir seviyede ve yaknlkta birbirleriyle birleerek byme eilimi gsterirler. Ayn durumu svlarda da gzlemleriz; bir elaleden veya bir hortumdan fkran su nce kk damlalara ayrlr, sonra tekrar birleir. imdi partikllerle ilgili bilmemiz gereken nemli terimleri aklayalm. 3ds maxteki partikl sistemleri Blizzard, P-array, PCloud, Super spray, Spray ve Snow dur.

Space warp: Partiklleri etkileyen g alanlardr, rnein rzgar ve yerekimi. Emitter: Partiklleri oluturan kaynaktr, partikller emitterdan 3 boyutlu uzaya yaylrlar. Spread: Partikllerin dalma alardr. Variation: Parametrenin rastgele deiimidir. rnein farkl byklklerde veya farkl hzlarla ilerleyen paracklar istiyorsak variation deerlerini artrrz. Spin Time: Paracklarn kendi eksenlerinde dn zamanlardr. Deflector: Partikllerin ilerleyilerini etkileyen nesnelerdir, rnek olarak bir duvar dnebiliriz. Bu altrmamzda bir nesneyi patlatarak paralarna ayracaz

9 CHIP Workshop > >

>>

3D

ve eitli space warplarla etkileime sokarak efektimizi daha gereki bir hale getireceiz. Bir PArray partikl, bir Superspray kullanacaz, partikllerin daha doru hareket etmelerini salamak iin rzgar ve yerekimi ile etkileime sokacaz. Partiklleri dokulandrp nesnenin ierisine bir patlama dahil edeceiz ve opacity (saydamlk) kanal ile maskeleme yapacaz. Ben nesne olarak bir bilardo topunu setim. Sizler de bir kreden balayabilir, farkl dokulandrma yaparak kreyi bir gezegen veya dnya haline getirebilirsiniz. Biraz sonra kremizi paralara ayrarak partikl sistemlerini youn olarak kullanacaz.

hzlarn %20 oranda deiken kldk. Bylece hareketleri daha da geree yaklaacak.

6 Particle timing blmndeki Emit start 30, Emit stopu da 45 olarak deitirelim. Display until deerini 200 olarak ayarlayalm. Life deerini 200 olarak deitirelim. Paracklarmz 30. karede yaylmaya balayacak ve 45. karede yaylmalar duracak. Tam 200 kare boyunca da grnr olacaklar. Buradaki Variation deerini de 12 olarak deitirelim. 7 Particle Type blmndeki Standart particle sekmesini kaldrarak Object Fragments sekmesini seelim. Bylece paracklarmz kremizin paralaryla uyumlu hale gelmi oldu. Kremiz Front gr penceresinde ekil-2deki gibi grnmeli. 8 Modify panelini biraz daha aa kaydrarak Object Fragments Controls blmn bulalm. All faces ayarn Number of Chunks; Thickness deerini :12,63 olarak deitirelim. Number of Chunks altndaki Minimum deerini 89 olarak ayarlayalm. Bu ayarlardan sonra perspektif gr panelimizde ekil-3 tekine benzer bir grntmzn olumas gerekir. Burada paracklarn saysn ve dalan paralarn kalnlklarn ayarlam olduk. imdi partikller gerekten kremizin birer paras gibi grnyor olmal. 9 Modify panelini daha da aa kaydrarak Matl Mapping and Source ksmna gelelim. Burada paracklarmzn dokularn kremizle denkleyeceiz. Icon sekmesindeki iareti kaldrarak Picked Emitteri iaretliyoruz ve Get Material From butonuna tklyoruz. imdi paracklarmz dokularn kremizden alm oldu, bylece paralar gerekten kremizin bir parasym gibi grnecek.
10 Modify Panelde Rotation and collision blmndeki Spin time

1 Maxi file-reset ile resetleyerek balayalm. Sahnemizin ortasnda bir sphere oluturalm. Deerlerini radius:53 ve segments:64 olarak ayarlayalm ve x:0 y:0 z:0 noktasna alalm. Paralara ayracamz objemizi oluturmu olduk. Unutmamamz gereken nemli bir nokta, nesnemizin tek paradan oluuyor olmasdr. nk sahnede birden ok objeyi paralamak isteseydik her birine ayr ayr partikller oluturmamz gerekirdi. Eer sphereden baka bir nesne kullanyorsanz bunun gruplu veya ok paradan oluan bir nesne olmamasna dikkat edin.

2 Partikl sistemleri Modify panelindeki Create sekmesinin altnda bulunur. Buradan istediimiz partikl tipini setikten sonra herhangi bir gr penceresinde imlecimizi srkleyerek partikl sistemini sahnemize yerletiririz. imdi PArray partikl tipine tkladktan sonra, top gr penceresinde, kremizin hemen sa yanna imlecimizi srkleyerek PArray partikln oluturuyoruz. 3 PArray partikl nesnemizden paracklarn yaylmasn salayacak partikldr. imdi PArray parametrelerini ayarlayalm. PArray seili durumdayken Modify paneline geelim. En stte yer alan Object Based Emitter blmndeki Pick objecte tkladktan sonra kremizi seelim. imdi sahnemizde + ekliyle temsil edilen paracklar grmemiz gerek. Zaman ubuunu saa ve sola kaydrdmzda paracklarn kreden ktklarn grrz. 4 PArrayin Modify panelini biraz aaya kaydrarak Viewport display blmndeki ticks ayarn mesh olarak deitirelim. Bu ayar deitirerek gr pencerelerindeki artlarn mesh olarak grnmesini saladk. Bu deiiklik paracklarda hibir deiiklie yol amaz sadece bizim onlar gerek boyutlaryla viewportlarda grmemizi salar. Nesnemizi paralara ayracamz iin bu nemli, nk paralarmzn boyutlarn ayarlarken paracklar birebir boyutlarla grmemiz gerek. 5 imdi Modify panelinin biraz daha altna inerek Particle generation sekmesini geniletelim. Bu blm partikl sistemimizin en nemli ayarlarnn yer ald blmdr. Particle Motion blmndeki Speed parametresini 3,4 olarak deitirelim. Variation parametresini de 20 olarak ayarlayalm. Bylece paracklarmzn
< CHIP Workshop 10 <

43 olarak ayarlayalm. Paracklarmz artk havada dnmeye balayacaklar.

3D

<<

12 imdi paracklarmzn hareketlerine eitli Space warplarla mdahale edeceiz. Sahnemize front penceresinde bir tane wind space warp ekleyelim. Windin konumunu kremizi kardan grecek ekilde birazda saa doru ayarlayalm. Parametrelerini strength:0,1 turbulence: 0,134 olarak deitirelim. Bind to space warp aracna tklayarak PArrayi, winde balayalm. Bylece paracklarmz wind ile etkileime sokarak arkaya doru savrulmalarn saladk, turbulance ile hareketlerini datarak paracklara daha gereki bir hareket vermi olduk Bu admdan sonra isterseniz sahneye bir de gravity space warp ekleyerek bu admdaki ayn ilemlerle paracklara yerekimi de verebilirsiniz. Eer gravity eklerseniz ayarlarn yapmay unutmayn, aksi takdirde paracklar yere doru hzla ve aniden ilerlemeye balarlar ve hareket gerekiliini yitirmi olur. 11 Paralarmz kremizden dar doru yaylyorlar fakat kremiz

halen olduu yerde duruyor. imdi kremize bir bir Visibility track ekleyeceiz. Visibility track grnrlk izidir ve bir nesneye eklendiinde o nesneyi istediimiz karede grnmez klabiliriz. Biz de aynen byle yapacaz ve paracklarmzn yaylmaya balad anda (bunu 30. kare olarak daha nce ayarlamtk) kremizi ortadan kaybedeceiz. Kremiz seiliyken Curve editor aalm ve Dope sheet moduna geelim. Kremizin seili olmasna ok dikkat edelim ve Dope sheette Tracks blmnden Visibility track blmne ve Add mensne tklayalm. Visibility track sphere1 in hemen altnda eklenmi olmaldr. Dope Sheet te Visibility track seiliyken 29. ve 30. karelere birer anahtar kare yerletirelim. Deerleri 29. srasyla 1 ve 0 yapalm. Dope Sheette anahtar kareleri Add keys butonu ile oluturuyoruz. ekil-4.

13 PArraya sa tklayarak Properties blmn aalm ve buradan

Motion bluru (hareket bulankl) Image olarak ayarlayalm ve 1,9 deerini girelim. Bylece render aldmzda paralar hareket halindeyken bulank grnmeye balayacaklar.
14 imdi 0. karede sahnemizde front gr penceresinde bir plane oluturalm. Parametrelerini L:194 W:264 olarak ayarlayalm ve x:0 y:0 z:0 konumuna alalm. Sa tklayarak Properties blmn aalm. Receive shadows ve Cast shadows iaretlerini kaldralm. Material editor aalm. Herhangi bir slotu seerek Diffuse kanalna Bitmap atayalm. Bitmap olarak 3dsmax klasrnn ierisinde Tutorials\space\Hercules.aviyi seelim. Malzemeye geri dnerek opacity blmnn yanndaki kanal kutusuna tklayarak yine bitmapi se-

11 CHIP Workshop > >

>>

3D

elim ve Hercules.avinin bulunduu klasrden HerculesM.aviyi seelim. Bu bir patlama grntsdr ve biz normal patlama grntsn HerculesM dosyas ile opacity kanaln kullanarak maskelemi olduk. Render aldmzda artk sadece patlama grnecek. imdide malzememizin Self illumination blmn color olarak ayarlayalm ve RGB deerlerini srasyla 0,35,124 olarak ayarlayalm. Patlamamzn rengini deitirmi olduk.
15

kutucua tklayarak Bitmapin ayarlarna girelim. Time blmn geniletelim ve Start blmn 24 End conditionu hold olarak ayarlayalm. Ayn ilemleri opacity kanalnda kullandmz HerculesM.avinin parametrelerinde de yapalm ve deerlerin birbirleriyle ayn olmasna dikkat edelim. imdi bu dokuyu az nce oluturmu olduumuz Planee uygulayalm.
16 Sahnemizin tam ortasnda bir Super

Diffuse kanalnn yanndaki kk

spray partikl oluturalm. Parametrelerini ayarlayalm. 1.Spread:158, 2.Spread:86, wievport display: mesh, use rate:18, speed:5,6 ,variation:50, emit start:28, emit stop:40, life:50, size:6,316, variation:50, standart particles:sphere. Material editorde yeni bir slotta diffuse deerleri srasyla RGB:150, 194,204 olan bir material oluturalm. Self illumination deerini 75 olarak ayarlayalm ve superspraye atayalm. SuperSpraye de sa tklayarak Properties blmne girelim ve Motion bluru image olarak ayarlayalm deerini 2 olarak ayarlayalm. OKe tklayalm.
19 Sizler de ayarlar deitirerek farkl 18 17

sonular elde edebilirsiniz, farkl partikl sistemlerini deneyebilirsiniz. Herkese iyi almalar.. Nebi YIKAROLU nykaroglu@chip.com.tr
< CHIP Workshop 12 <

You might also like