Professional Documents
Culture Documents
<<
JSP ile çerez ve
oturum
uygulamalar›
JSP uygulamalar›n›zda ziyaretçinizin durum bilgisini korumak
için çerez ve oturumlardan faydalanabilirsiniz.
S
unucu-tarafl› uygulamalarda ziyaretçinin durum bilgisini ko- r›na s›¤d›r›labilecek içerik ne olabilir?” derseniz: Web uygulamalar›-
rumak önemlidir. Bu sayede bir ziyaretçiyi di¤erinden ay›ra- n›z›n ziyaretçileri tan›yabilmelerini sa¤layabilecek birkaç ufak ama
bilmek, daha önce ziyarette bulunup bulunmad›¤›n› denetle- önemli bilgi; ziyaretçinin ad›, flifresi, web sitenizi kaç›nc› defa ziya-
mek, flifre ile girdi¤i bir sayfadan sonra ayn› oturumda di¤erlerine ret etti¤inin bilgisi ya da daha önceden sitenizle ilgili tercihleri gibi.
de sorunsuzca girebilmesini sa¤lamak ya da flifresini hat›rlamak Böylece web uygulamalar› daha önce kendisini ziyaret etmifl olan
mümkün oluyor. Tüm sunucu-tarafl› teknolojilerde oldu¤u gibi bir müflteri ya da ziyaretçiyi tan›y›p, onunla ilgili bilgileri ve tercihle-
JSP’de de bu ifllevi yerine getirmek için cookie (çerez) ve session’lar- ri kullan›c›n›n bilgisayar›ndaki cookie sayesinde hat›rlayabilmekte-
dan (oturum) faydalan›l›r. dir.
Web’de en s›k kullan›lan protokol olan HTTP’nin, ziyaretçilerin Cookie: Web’de durum bilgisini koruyabilmek amac›yla web uygu-
sayfalararas› seyahatinde durum bilgisinin kayd›n› tutan bir ifllevi lamalar› taraf›ndan ziyaretçi bilgisayar›nda oluflturulan küçük me-
bulunmamaktad›r. Ziyaretçi sunucudan bir istekte bulunur, sunucu tin dosyalar›d›r.
istenen sayfay› gönderir ve ba¤lant› kapan›r. Bir baflka ziyaretçi bir Cookie’lerden faydalan›rken izlenen prosedür flu flekildedir. Bir
baflka istekte bulunur, sunucu ona da istedi¤i sayfay› gönderir, bu ziyaretçi bir web sitesine ilk olarak geldi¤inde web uygulamas› ziya-
ifllem böylece devam eder. Sunucu aç›s›ndan bir ziyaretçinin bir di- retçinin bilgisayar›na kendisi taraf›ndan oluflturulmufl bir cookie
¤erinden fark› yoktur. Bu durumda önceden sayfam›z› ziyaret etmifl olup olmad›¤›na bakar. E¤er yoksa ziyaretçiden elde edece¤i bilgiler
bir müflterinin ziyaretini tekrarlamas› an›nda bunun tan›nmas›n› ve ›fl›¤›nda yeni bir cookie oluflturur. Ziyaretçi siteden ayr›ld›¤›nda bile
alg›lanmas›n› sa¤layacak durum bilgileri için baz› ek mekanizmalar› oluflturulan bu cookie bilgisayar›nda sakl› tutulur. Ziyaretçinin ayn›
uygulamalar›m›zda oluflturmam›z gerekir. Bu
tür mekanizmalar›n oluflturulmas›nda kulla-
n›lan en temel unsurlar cookie’ler, session’lar-
d›r.
Cookie’ler (Çerezler)
Web uygulamalar›n›n ziyaretçi bilgisayarlar›
üzerinde hiçbir tasarruflar› yoktur. Yani web
üzerinde çal›flan hiçbir uygulama (buna app-
let’ler de dahil) bilgisayar›n›z›n içindeki bilgi-
leri ve dosyalar› okuyamaz, silemez ya da ye-
nilerini kaydedemez. Bu web ile ilgili protokol-
lerde oluflturulmufl bir güvenlik önlemidir. Bu
duruma bir tek cookie’ler istisna teflkil ederler.
Cookie’ler web uygulamalar› taraf›ndan ziya-
retçi bilgisayar›nda oluflturulan küçük metin
dosyalar›d›rlar. Cookie’lerin oluflturulma ifl-
lemleri ziyaretçi aç›s›ndan perde arkas›nda
gerçekleflen bir olayd›r ve bundan genellikle
kullan›c›lar haberdar olmazlar. Cookie’lerin zi-
yaretçinin güvenli¤ini tehdit etmemeleri aç›-
s›ndan büyüklükleri bir kaç byte’la s›n›rland›-
r›lm›flt›r. “Peki bu kadar küçük metin dosyala-
Bilgisayardaki Cookie dosyalar›
✂
cookie_yaz.jsp ‹flleyece¤imiz her bir de¤er için new anahtar kelimesi ile farkl› bir
<html> cookie nesnesi oluflturduk.
<head>
<title>Cookie yaz</title> Cookie isim = new Cookie("Ad","Hakan");
</head>
Parantezler içinde virgülle ayr›lan iki terimden ilki parametrenin
<body bgcolor="#ffffff"> ismiyken ikincisi ise cookie’de bu parametre alt›nda kaydedilen de-
¤eri belirler.
<h2>Çerez yaz</h2> Bundan sonra cookie’mizin ömrünü belirleyen sat›rlar› girmemiz
gerekir. Bunu setMaxAge() metoduyla gerçeklefltiriyoruz. Parantez-
<% ler içindeki de¤er saniye cinsindendir.
response.addCookie(isim);
<h2>Çerez oku</h2>
<%
Cookie'yi silmek için <a href="cookie_sil.jsp">buraya</a> t›klay›n›z. sat›r› döngüde o an ulafl›lan cookie için bir nesne oluflturur. S›ra
aktif durumdaki cookie de¤erlerinin uygun metotlarla elde edilme-
</body> sinde.
</html>
String cookieIsmi = cookieAktif.getName();
✂
Daha sonra da iflledi¤imiz parametre isimlerine karfl›l›k gelen de- out.println("<a href='cookie_yaz.jsp'>buraya</a>
¤erleri yazd›rmakta. ‚t›klay›n.");
if ("Ad".equals(cookieIsmi)){ %>
out.println(cookieIsmi + " = " + cookieDegeri + "<br>");
} </body>
</html>
if ("Soyad".equals(cookieIsmi)){
out.println(cookieIsmi + " = " + cookieDegeri + "<br>"); Bir dosyada yer alan cookie de¤erlerini silmek amac›yla aynen co-
} okie yazd›r›rken yapt›¤›m›z gibi her bir de¤er için önce birer nesne
olufltural›m ve parametre de¤erlerini null (hiçlik) de¤eri ile s›f›rlaya-
Oluflturulmufl bir cookie’yi silme l›m.
S›ra geldi oluflturdu¤umuz bir cookie’yi ömrü dolmadan nas›l silece-
¤imize. Taktik basit asl›nda. Yapmam›z gereken cookie’nin ömrünü Cookie cookieSil = new Cookie("Ad", null);
belirleyen setMaxAge() metoduyla 0 de¤erini atamak.
Cookie’nin yeni ömrünü 0 olarak atayal›m
cookie_sil.jsp
<html> cookieSil.setMaxAge(0);
<head>
<title>Cookieler</title> ve addCookie() metoduyla response nesnesine gönderelim.
</head>
response.addCookie(cookieSil);
<body bgcolor="#ffffff">
<h2>Çerez sil </h2> Yukar›daki ifllemlerin yerine getirildi¤i cookie de¤eri yer ald›¤› co-
okie dosyas›ndan silinecektir. Bu ifllemler zincirini bir cookie dosya-
<% s›nda yer alan tüm cookie’ler için gerçeklefltirdi¤inizde ise cookie
dosyas›n›n, bulundu¤u klasör içerisinden yok oldu¤unu gözlemleye-
Cookie cookieSil = new Cookie("Ad", null); ceksiniz. Bu bak›mdan örne¤imizde yer alan
cookieSil.setMaxAge(0);
response.addCookie(cookieSil); //Bu ikinci blok ile birlikte tüm cookie dosyasi silinecek
Cookie cookieSil2 = new Cookie("Soyad", null);
//Bu ikinci blok ile birlikte tüm cookie dosyas› silinecek cookieSil2.setMaxAge(0);
Cookie cookieSil2 = new Cookie("Soyad", null); response.addCookie(cookieSil2);
cookieSil2.setMaxAge(0);
response.addCookie(cookieSil2); bloku ile birlikte dosyam›zdaki ikinci ve son de¤erle birlikte tüm
dosyan›n silindi¤ini görürsünüz.
out.println("Cookie'niz silindi.<br> Cookie'nizi
Session (Oturum)
Oturum bir kullan›c›n›n bir uygulamaya ba¤-
lanmas› ile bafllay›p ayr›lmas›yla sona eren sü-
rece verilen add›r. JSP’de bu süreç session nes-
nesiyle temsil edilir. Session’lar cookie’ler gibi
durum bilgisi kayd›n›n tutulmas›nda kullan›-
lan bir di¤er unsurdur. Session’lar›n temel he-
defi bir oturum süresince belli bir kullan›c›ya
özel bilgilerin uygulama içindeki farkl› sayfa-
larca paylafl›lmas›n› sa¤lamakt›r. Session nes-
nesi o kullan›c›ya ait farkl› bilgileri sunucuda
oluflturur ve bu bilgilerin kayd›n› sunucuda
tutar. Bu bilgileri o kullan›c›yla iliflkilendirmek
için de kullan›c› bilgisayar›na özel bir session
cookie’si oluflturur. Session cookie’si o kullan›-
c›ya ait olmak üzere rastgele üretilmifl bir
kimlik numaras› (SessionID) ihtiva eder. Böy-
lece kullan›c› bir sayfadan bir di¤erine gitti-
¤inde uygulama bu SessionID’den kullan›c›-
n›n bir önceki sayfadaki ile ayn› oldu¤unu an-
Cookie dosyam›z silindi.
oturum_baslat.jsp
<html>
<head>
<title>Oturum</title> Web uygulamam›z›n en bafl›nda yer alacak olan kodlar›m›z üret-
</head> ti¤i ID numaras› alt›nda bir oturum açm›fl oldu. Oturum için yeni bir
<body bgcolor="#ffffff"> session nesnesi oluflturman›z gerekir.
<% E¤er kullan›c› için önceden aç›lm›fl bir oturum söz konusu de¤ilse
HttpSession oturumNesne = request.getSession(true); buradaki getSession() metodu null de¤erini getirecektir.
oturumNesne.putValue("KullaniciAdi", "Kemal"); Session nesnemiz di¤er oturum içinde ziyaret edilecek di¤er say-
out.println("<b>" + oturumNesne.getValue("KullaniciAdi") falardan ulafl›labilecek, kullan›c›ya özgün bir de¤iflken de¤eri ata-
‚+ "</b> adina <b>"); mak için putValue() metodunu kullan›yor. fiimdilik test etmek için
sabit bir de¤er kullanabilirsiniz. De¤iflkenimizin ad› KullaniciAdi, de-
out.println("ID" + oturumNesne.getId() + "</b> ¤eri ise “Kemal” olsun.
‚No'lu bir oturum bafllat›lm›flt›r.<br>");
oturumNesne.putValue("KullaniciAdi", "Kemal");
out.println("Oturum ilgileri için
‚<a href='oturum_oku.jsp'>buraya</a> t›klay›n›z"); Son bölümde JSP sayfam›z tan›mlanm›fl olan de¤iflken de¤erine
%> ve session numaras›na ulafl›p sayfa içerisinde gösteriyor gerçi ama
önemli olan bu de¤erlere baflka bir sayfadan ulaflabilmek elbette.
</body> Bir sonraki sayfam›z bu sayfada tan›mlanan session de¤iflkenlerine
</html> ulaflacak.
oturumNesne.setMaxInactiveInterval(10); <%
HttpSession oturumNesne = request.getSession();
out.println("<br>Yeni ara verme süresi: " + ‚oturumNesne. p oturumNesne.invalidate();
getMaxInactiveInterval()); out.println("Oturumunuz sona erdi..");
%>
</body>
</html>
StudioWeb+’da bu ay:
JSP sayfalar›nda Türkçe karakterlerin
kullan›lmas›.
Numan Pekgöz
numanp@chip.com.tr
<< CHIP Workshop • 145
Linux
<<
Yaz›l›m yükleme ve
güncelleme
Yaz› dizimizin bu üçüncü bölümünde, önce Linux ortam›nda çeflitli yaz›l›m yükleme yöntemleri ve alter-
natiflerini, ard›ndan bu yöntemlerden MandrakeLinux'un da kulland›¤› RPM (RedHat Package Manag-
er) teknolojisini inceleyece¤iz.
L
inux, asl›nda sadece iflletim sisteminin sa, kullan›c›dan güncellenmesi istenip is- m› dünyas›nda en popüler paket yöneticisi-
çekirde¤ini oluflturdu¤u için, Linux da- tenmedi¤i sorulur. dir.
¤›t›m› üreticileri, y›llard›r kendi kullan›- DEB: Debian ve türevi Linux da¤›t›mlar›nda
c›lar›n›n ihtiyaçlar›na göre yaz›l›m paketle- 2 Paketin içindeki -varsa- ba¤›ml›l›k (de- kullan›lan bir paket yöneticisidir (dpkg).
rinin kurulmas›n› sa¤layacak düzenekler pendency) listesi kontrol edilir. Bu liste, bu TGZ: Standart s›k›flt›r›lm›fl bir arfliv dosyas›-
gelifltirmifllerdir ve bunu ço¤unlukla birbir- yaz›l›m paketinin gerek duydu¤u di¤er yaz›- d›r ve ba¤›ml›l›k (dependency) bilgisi içer-
lerinden ba¤›ms›z bir flekilde yapm›fllard›r. l›m paketlerinin listesini içermektedir. E¤er mez. Profesyonel da¤›t›mlarda hala kulla-
Bir “yaz›l›m paketi”, üç ana k›s›mdan eksik bir paket var ise paket yöneticisine n›lmaktad›r.
oluflmaktad›r. ba¤l› olarak ya durum kullan›c›ya bildirilir MandrakeLinux da, birçok di¤er Linux
ve ifllem durdurulur, ya da gerekli ba¤›ml›- da¤›t›m› gibi RPM sistemini kullanmaktad›r.
1 Yaz›l›m›n kendisi (çal›flabilir ikili (binary) l›klar otomatik olarak bulunarak yüklenir. Bunun yan›nda, ba¤›ml›l›klar›n (depen-
kodu) dency) otomatik olarak yüklenmesine ola-
3 Arflivin kendisi aç›larak dosyalar sistem- nak sa¤layan URPM sistemini de beraberin-
2 Yaz›l›m hakk›nda genel bilgi ve ba¤›ml›- de gerekli yerlere kopyalan›r. de getirmektedir.
l›klar (dependency) URPM, “RPM Cehennemi” (RPM Hell)
4 Yaz›l›m kurulumundan sonra sistemde olarak adland›r›lan problemden kurtulma-
3 Yaz›l›m kurulumundan sonra sistemde yap›lacak de¤ifliklikleri içeren bir betik m›z› sa¤lar. RPM cehennemi, bir yaz›l›m pa-
yap›lacak de¤ifliklikleri içeren bilgiler. (script) çal›fl›r. ketinin, bir ya da birden fazla yaz›l›m pake-
Bu üç k›s›m, yaz›l›m paketi yöneticisinin Bu ifllem tamamland›¤›nda, gerekli di- tine ihtiyaç duymas› (ba¤›ml› olmas›), bu
kulland›¤› biçime göre paketlenir, bir algo- zinlere, yaz›l›m›n gerekli bileflenleri yüklen- paketlerin de baflka paketlere ihtiyaç duy-
ritma kullan›larak (ZIP vb.) s›k›flt›r›l›r ve tek mifl olur. malar› neticesinde bir yaz›l›m yüklemek için
bir dosya haline getirilir. uzun bir u¤rafl gerektirmesi durumu olarak
Bir yaz›l›m paketini kurdu¤umuz zaman, Popüler Paket Yöneticileri nitelendirilebilir. URPM sayesinde, ba¤›ml›-
s›ras›yla flu ad›mlardan geçilir: Linux da¤›t›mlar›nda, yaz›l›m yüklemek için l›klar (dependency), paket yöneticisi yaz›l›-
herhangi bir standart, k›s›tlama ya da dü- m› taraf›ndan otomatik olarak yüklenecek-
1 Yaz›l›m›n ismine bak›l›r, e¤er paket sis- zenleme bulunmad›¤›n›, da¤›t›m› haz›rla- tir.
temde hali haz›rda kurulu ise ifllem bu afla- yanlar›n tercih ettikleri birbirinden ba¤›m- Bilgisayar›m›z› MandrakeLinux ile aça-
mada biter, e¤er daha eski bir sürümü var- s›z sistemler oldu¤unu belirtmifltik. fiimdi rak masaüstümüze eriflti¤imiz andan itiba-
bunlardan en popüler olan- ren (Resim 1) yeni bir paket yüklemek için
lar›na bir göz atal›m: haz›r›z demektir. ‹nternetten ya da baflka
RPM: RedHat Package Ma- bir kaynaktan edindi¤imiz MandrakeLinux
nager (RedHat Paket Yöne- için olan RPM paketini yükledi¤imiz yeri bu-
ticisi) program›n›n bafl harf- larak üzerine t›klayarak çal›flt›rmam›z yeter-
lerinden oluflmufltur. Red- li olacakt›r.
Hat taraf›ndan gelifltirilmifl Örne¤imizde, (Resim 2) sistemin bize ga-
olsa da, flu an Linux da¤›t›- im-0.81-1.norlug.i586.rpm dosyas›n› yükle-
Resim 1 Resim 2
✂
Resim 3 Resim 4
mek isteyip istemedi¤imizi sordu¤unu gö- için derlendi¤ini göstermektedir.) 5). Örne¤imizde ele ald›¤›m›z program olan
rüyoruz. Öncelikle burada bir süre durarak Bu bilgiler, yüklemek istedi¤imiz yaz›l›m GAIM (Gnome AOL Instant Messenger) ICQ,
RPM format›nda isimlendirme standard›n› paketlerini seçerken bize her zaman laz›m MSN, AIM, Yahoo gibi servislere tek bir
inceleyelim. olaca¤›ndan önemlidir. program› kullanarak ba¤lanmam›z› sa¤la-
Herhangi bir RPM dosyas› ile karfl›laflt›¤›- Yaz›l›m yükleme ifline geri döndü¤ümüz- yan bir “an›nda mesajlaflma” (instant mes-
m›zda, o dosyan›n flu flekilde isimlendirilmifl de, bu paketin baz› ba¤›ml›l›klara sahip ol- saging) yaz›l›m›d›r (Resim 6). Yak›n bir za-
oldu¤unu görece¤iz: isim-sürüm-reviz- du¤unu gözlemlemekteyiz (Resim 3). Mand- manda, Linux ortam›nda e¤lence ve sohbet
yon.mimari.rpm rakeLinux'un URPM sistemi, gerekli olan ba- servislerini incelerken, GAIM program›na da
Burada; ¤›ml›l›klar› listeleyerek, toplam boyutunu detayl› olarak de¤inece¤iz.
‹sim: Yaz›l›m›n k›sa ya da mümkünse tam da göstererek bizden bu paketleri yüklemek Görüldü¤ü gibi, RPM paketlerini kullana-
ismini içermektedir. (Örne¤imizde progra- için onay bekleyecektir. Bu onay› verdi¤i- rak sisteme yeni yaz›l›m yüklemek gayet ko-
m›n ismi “gaim”dir.) mizde, bizden bu paketleri içeren CD’leri lay ve h›zl›, hatta URPM sistemi sayesinde
Sürüm: Yaz›l›m›n sürümünü göstermekte- yerlefltirmemizi isteyebilir ya da bu paketle- otomatik.
dir. (Örne¤imizde 0.81 olarak görülmekte- ri internet üzerinden yükleyebilir.
dir.) E¤er paket yöneticisi, bize paketin imza- Yaz›l›m› derleyerek yüklemek
Revizyon: Yaz›l›m›n kaç›nc› kere paketlendi- lar›n›n geçersiz oldu¤undan bahsederse Bir yaz›l›m, programland›ktan sonra derle-
¤ini göstermektedir. Bazen yaz›l›mlar›n ayn› (Resim 4), bu, paketi haz›rlayan kifli ile, bi- nerek çal›flt›r›labilir hale getirilir. Derlenme-
sürümleri farkl› flekilde paketlenmekte ya zim ba¤›ml›l›k paketlerimiz aras›nda bir mifl haline, yaz›l›m hangi dilde yaz›lm›fl ise,
da baz› paketlenme hatalar› giderilmekte- fark oldu¤unu, iki paketin dijital imzalar›n›n o dilin kaynak kodu ad› verilir. Derlenmifl
dir. Burada sadece say› varsa da¤›t›c›n›n birbirini tutmad›¤›n› gösterir. Bunun nedeni programlar ise, her ne dilde yaz›lm›fl olursa
kendisi, paketleyen kiflinin ismi ya da takma basit bir paketleme fark›, onaylanmam›fl bir olsun afla¤› yukar› ayn› özellikleri tafl›rlar.
ad› varsa, üçüncü bir kifli taraf›ndan paket- kaynaktan al›nan bir paket ya da dijital im- Linux, do¤as› gere¤i GNU felsefesini de-
leme yap›lm›fl demektir. (Örne¤imizde zalar›n tafl›nmas›nda kullan›lan algoritma- vam ettiren aç›k kaynak kodlu bir yaz›l›m ol-
“1.norlug” olarak görülmektedir. Bu, bu sü- daki bir problem olabilir. Paketi edindi¤imiz du¤undan dolay›, onun için gelifltirilen yaz›-
rümün “norlug” taraf›ndan yap›lm›fl ilk pa- kayna¤›n güvenilir oldu¤una inan›yorsak, l›mlar›n da ço¤u aç›k kaynak koda sahiptir.
ketleme revizyonu demektir.) imzalar geçersiz olsa da paketi yük-
Mimari: Yaz›l›m›n hangi mimari için derlen- lemeye devam edebiliriz.
di¤ini ve paketlendi¤ini belirtir. (Örne¤imiz- Yükledi¤imiz program›, ismini
de i586 olarak gösterilmifltir. Bu, Pentium yazarak ya da menüde gerekli seçe-
ve üstü (veya uyumlu) ifllemci mimarileri ne¤i bularak çal›flt›rabiliriz (Resim
Resim 5 Resim 6
Resim 7 Resim 8
Bu yaz›l›mlar›n kaynak kodu gizli de¤ildir ve derleyici ve yaz›l›m gelifltirme araçlar›n› sim 9), bir terminal penceresi ile karfl›laflaca-
herkes taraf›ndan görülebilir, de¤ifltirilebilir kurdu¤umuz için, yaz›l›mlar› kaynak kodla- ¤›z. Bu pencerenin siyah görüntüsü ve be-
ve uyarlanabilir. r›n› derleyerek yükleyebilece¤iz. yaz yaz›lar› ilk bak›flta korkutucu gelse de,
Aç›k kaynak kodlu yaz›l›mlar, genellikle Örnek olarak yine bir mesajlaflma prog- bu bölümümüzde fazla detay›na inmeden
gelifltiriciler taraf›ndan sürekli (çok aktif ya- ram› olan KMess'i ele alal›m. KMess, KDE üç (evet üç) basit komutta bir yaz›l›m› derle-
z›l›mlar günde birkaç kere olmak üzere) masaüstü ortam› için bir “MSN Messenger” yerek yüklemeyi inceleyece¤iz.
güncellenmektedir. Bu yüzden, birçok aç›k program›d›r. http://kmess.sourceforge.net Birçok yaz›l›m, “GNU autoconf” sistemi
kaynak kodlu yaz›l›m gelifltiricisi, haz›r der- adresinden flu anki sürümü olan KMess ile derlenmeye haz›rland›¤› için, bize fazla
lenmifl paketler sunmamakta, ya da sun- 1.3'ü bilgisayar›m›za indirerek iflleme baflla- yap›lacak bir fley zaten kalm›yor. Bu nokta-
duklar› paketler güncel olmamaktad›r. Bu yabiliriz. da, derlemeye bafllamadan önce de¤inilme-
durumlarda yaz›l›m›, derleyerek yüklemek Daha önce de yapt›¤›m›z gibi, dosyam›z› si gereken en önemli olgulardan biri, derle-
gerekebilir. bafllang›ç (masaüstümüzdeki “ev” fleklinde- me iflleminin h›z›n›n ifllemcinize, belle¤inize
Ayn› fley, yaz›l›m›n üzerinde de¤ifliklik ki Bafllang›ç simgesine t›klanarak ulafl›labi- ve yaz›l›m›n büyüklü¤üne ba¤l› olmas›d›r.
yapmak istendi¤inde de geçerlidir. Aç›k kay- lir) dizinimizdeki Documents (Belgeler) dizi- Bu ifllem k›sa da uzun da sürebilir. Örne¤i-
nak kodlu yaz›l›mlar›n kaynak kodlar› üze- nine yüklüyoruz (Resim 7). Dizindeki kmess- mizdeki yaz›l›m, h›zl› bir ifllemcide 5-6 daki-
rinde (programc›l›k bilgimiz dahilinde) iste- 1.3.tar.gz dosyas›na sa¤ fare tuflu ile t›kla- ka gibi bir sürede derlenmifltir.
di¤imiz de¤iflikli¤i yaparak kendimize uyar- yarak menüye ulafl›yoruz ve oradan Eylem- Terminal penceresinde:
layabiliriz. Bunun için de, program› kaynak lerk›sm›ndan Buraya Aç seçene¤ini seçiyo-
kodunu derleyerek yüklemek gerekecektir. ruz (Resim 8). Böylece, arflivin bulundu¤u ./configure
Kaynak kodu derleyerek bilgisayar›n an- yerde kmess-1.3 ad› alt›nda bir dizin (klasör)
layaca¤›, çal›flt›r›labilir (executable) hale dö- olufluyor. Bu yeni aç›lan dizine sa¤ fare tuflu yazarak Enter tufluna bast›¤›m›z zaman,
nüfltüren yaz›l›mlara derleyici denir. Kurulu- ile t›klayarak Eylemler k›sm›ndan Terminali sistemimizde yüklü yaz›l›m bileflenleri tara-
mumuzda (yaz› dizimizin ilk bölümünde) Burada Aç seçene¤ini seçti¤imiz zaman (Re- nacak ve derleme ifllemi için gerekli olan or-
Resim 9 Resim 10
✂
Resim 12
Resim 13 Resim 14
T
üm 3B modelleme ve animasyon yaz›l›mlar› partikül (parça- Space warp: Partikülleri etkileyen güç alanlar›d›r, örne¤in rüzgar ve
c›k) sistemlerini kendi içerilerine dahil etmifllerdir ve partikül yerçekimi.
sistemleri 3B animasyon için önemli bir kavramd›r. Partikül Emitter: Partikülleri oluflturan kaynakt›r, partiküller emitter’dan 3
sistemlerinin kullan›m alanlar› çok genifltir ve hemen hemen her boyutlu uzaya yay›l›rlar.
yerde kullan›l›r. Özellikle film endüstrisinde ço¤u efektin kökenini Spread: Partiküllerin da¤›lma aç›lar›d›r.
partikül sistemleri oluflturur. Partikül sistemleri özellikle çeflitli do¤a Variation: Parametrenin rastgele de¤iflimidir. Örne¤in farkl› büyük-
olaylar›n› taklit etmek için vazgeçilmezdir. Bununla birlikte her 3B lüklerde veya farkl› h›zlarla ilerleyen parçac›klar istiyorsak variation
yaz›l›m›n partikül sistemi birbirinden farkl›d›r ve çal›flma prensipleri de¤erlerini art›r›r›z.
dahil farkl›l›k gösterir. Hatta partikül sistemleri kendi içerilerinde de Spin Time: Parçac›klar›n kendi eksenlerinde dönüfl zamanlar›d›r.
s›n›flara ayr›l›rlar ve her partikül çeflidi farkl› yerlerde kullan›l›r. Par- Deflector: Partiküllerin ilerleyifllerini etkileyen nesnelerdir, örnek
tikül sistemleri ile neler yapabiliriz? Duman, uçuflan yapraklar, bal›k olarak bir duvar› düflünebiliriz.
sürüleri, patlama efektleri, f›rt›na, göktafllar›, ya¤mur ve kar gibi ço- Bu al›flt›rmam›zda bir nesneyi patlatarak parçalar›na ay›raca¤›z
¤u do¤a olay› partikül sistemleri ile yap›l›r.
Yapaca¤›m›z efekte uygun olan parti-
kül sistemini seçeriz ve gerekli parametre-
lerini ayarlad›ktan sonra animasyonumu-
za dahil ederiz. Hatta partikülleri çeflitli
spacewarp’lara (güç alanlar›na) ba¤laya-
rak davran›fllar›n› etkileyebiliriz, deflec-
tor’larla (yans›t›c›lar) etkileflim içerisine
sokarak birbirleriyle çarp›flmalar›n› veya
sahnemizdeki nesnelerle çarp›flmalar›n›,
sürtünmelerini ve sekmelerini sa¤layabili-
riz. Örne¤in bir nesnenin k›r›l›p parçalara
ayr›ld›¤› bir olay› düflünelim. Parçalar yer-
çekiminin etkisiyle afla¤› do¤ru düflmeye
bafllarlar ve birbirleriyle çarp›flt›klar›nda
sekerler ve yere düfltüklerinde s›çrarlar;
hatta parçalar daha küçük parçalara bile
ayr›l›rlar. Baz› durumlarda ise tam tersi
olarak parçac›klar birbirleriyle tekrar birle-
flirler. Örne¤in sualt›ndaki hava kabarc›k-
lar› belli bir seviyede ve yak›nl›kta birbirle-
riyle birleflerek büyüme e¤ilimi gösterir-
ler. Ayn› durumu s›v›larda da gözlemleriz;
bir flelaleden veya bir hortumdan f›flk›ran
su önce küçük damlalara ayr›l›r, sonra tek-
rar birleflir. fiimdi partiküllerle ilgili bilme-
miz gereken önemli terimleri aç›klayal›m.
3ds max’teki partikül sistemleri “Bliz-
zard, P-array, PCloud, Super spray, Spray
ve Snow” dur.
✂
ve çeflitli space warp’larla etkileflime sokarak efektimizi daha ger- h›zlar›n› %20 oranda de¤iflken k›ld›k. Böylece hareketleri daha da
çekçi bir hale getirece¤iz. Bir PArray partikülü, bir Superspray kulla- gerçe¤e yaklaflacak.
naca¤›z, partiküllerin daha do¤ru hareket etmelerini sa¤lamak için
rüzgar ve yerçekimi ile etkileflime sokaca¤›z. Partikülleri dokuland›- 6 Particle timing bölümündeki Emit start’› “30”, Emit stop’u da
r›p nesnenin içerisine bir patlama dahil edece¤iz ve opacity (say- “45” olarak de¤ifltirelim. Display until de¤erini “200” olarak ayarla-
daml›k) kanal› ile maskeleme yapaca¤›z. yal›m. Life de¤erini “200” olarak de¤ifltirelim. Parçac›klar›m›z 30. ka-
Ben nesne olarak bir bilardo topunu seçtim. Sizler de bir küreden rede yay›lmaya bafllayacak ve 45. karede yay›lmalar› duracak. Tam
bafllayabilir, farkl› dokuland›rma yaparak küreyi bir gezegen veya “200” kare boyunca da görünür olacaklar. Buradaki Variation de¤e-
dünya haline getirebilirsiniz. Biraz sonra küremizi parçalara ay›rarak rini de “12” olarak de¤ifltirelim.
partikül sistemlerini yo¤un olarak kullanaca¤›z.
7 Particle Type bölümündeki Standart particle sekmesini kald›ra-
1 Max’i file-reset ile reset’leyerek bafllayal›m. Sahnemizin ortas›n- rak Object Fragments sekmesini seçelim. Böylece parçac›klar›m›z kü-
da bir “sphere” olufltural›m. De¤erlerini radius:53 ve segments:64 remizin parçalar›yla uyumlu hale gelmifl oldu. Küremiz “Front” gö-
olarak ayarlayal›m ve x:0 y:0 z:0 noktas›na alal›m. Parçalara ay›raca- rüfl penceresinde flekil-2’deki gibi görünmeli.
¤›m›z objemizi oluflturmufl olduk. Unutmamam›z gereken önemli
bir nokta, nesnemizin tek parçadan olufluyor olmas›d›r. Çünkü sah- 8 Modify panelini biraz daha afla¤› kayd›rarak Object Fragments
nede birden çok objeyi parçalamak isteseydik her birine ayr› ayr› Controls bölümünü bulal›m. All faces ayar›n› Number of Chunks;
partiküller oluflturmam›z gerekirdi. E¤er sphere’den baflka bir nesne Thickness de¤erini :”12,63” olarak de¤ifltirelim. Number of Chunks
kullan›yorsan›z bunun gruplu veya çok parçadan oluflan bir nesne alt›ndaki Minimum de¤erini “89” olarak ayarlayal›m. Bu ayarlardan
olmamas›na dikkat edin. sonra “perspektif” görüfl panelimizde “fiekil-3” tekine benzer bir gö-
rüntümüzün oluflmas› gerekir. Burada parçac›klar›n say›s›n› ve da-
2 Partikül sistemleri Modify panelindeki Create sekmesinin alt›n- ¤›lan parçalar›n kal›nl›klar›n› ayarlam›fl olduk. fiimdi partiküller ger-
da bulunur. Buradan istedi¤imiz partikül tipini seçtikten sonra her- çekten küremizin birer parças› gibi görünüyor olmal›.
hangi bir görüfl penceresinde imlecimizi sürükleyerek partikül siste-
mini sahnemize yerlefltiririz. fiimdi PArray partikül tipine t›klad›ktan 9 Modify panelini daha da afla¤› kayd›rarak Mat’l Mapping and So-
sonra, “top” görüfl penceresinde, küremizin hemen sa¤ yan›na imle- urce k›sm›na gelelim. Burada parçac›klar›m›z›n dokular›n› küremizle
cimizi sürükleyerek PArray partikülünü oluflturuyoruz. denkleyece¤iz. Icon sekmesindeki iflareti kald›rarak Picked Emitter’i
iflaretliyoruz ve Get Material From butonuna t›kl›yoruz. fiimdi parça-
3 PArray partikülü nesnemizden parçac›klar›n yay›lmas›n› sa¤la- c›klar›m›z dokular›n› küremizden alm›fl oldu, böylece parçalar ger-
yacak partiküldür. fiimdi PArray parametrelerini ayarlayal›m. PArray çekten küremizin bir parças›ym›fl gibi görünecek.
seçili durumdayken Modify paneline geçelim. En üstte yer alan Ob-
ject Based Emitter bölümündeki Pick object’e t›klad›ktan sonra küre- 10 Modify Panel’de Rotation and collision bölümündeki Spin time’›
mizi seçelim. fiimdi sahnemizde “+” flekliyle temsil edilen parçac›k- “43” olarak ayarlayal›m. Parçac›klar›m›z art›k havada dönmeye bafl-
lar› görmemiz gerek. Zaman çubu¤unu sa¤a ve sola kayd›rd›¤›m›z- layacaklar.
da parçac›klar›n küreden ç›kt›klar›n› görü-
rüz.
halen oldu¤u yerde duruyor. fiimdi küremize bir bir Visibility track 13 PArray’a sa¤ t›klayarak Properties bölümünü açal›m ve buradan
ekleyece¤iz. Visibility track görünürlük izidir ve bir nesneye eklendi- Motion blur’u (hareket bulan›kl›¤›) Image olarak ayarlayal›m ve 1,9
¤inde o nesneyi istedi¤imiz karede görünmez k›labiliriz. Biz de ay- de¤erini girelim. Böylece render ald›¤›m›zda parçalar hareket halin-
nen böyle yapaca¤›z ve parçac›klar›m›z›n yay›lmaya bafllad›¤› anda deyken bulan›k görünmeye bafllayacaklar.
(bunu 30. kare olarak daha önce ayarlam›flt›k) küremizi ortadan
kaybedece¤iz. Küremiz seçiliyken Curve editor’ü açal›m ve Dope she- 14 fiimdi 0. karede sahnemizde “front” görüfl penceresinde bir pla-
et moduna geçelim. Küremizin seçili olmas›na çok dikkat edelim ve ne olufltural›m. Parametrelerini L:194 W:264 olarak ayarlayal›m ve
Dope sheet’te Tracks bölümünden Visibility track bölümüne ve Add x:0 y:0 z:0 konumuna alal›m. Sa¤ t›klayarak Properties bölümünü
menüsüne t›klayal›m. Visibility track “sphere1” in hemen alt›nda ek- açal›m. Receive shadows ve Cast shadows iflaretlerini kald›ral›m. Ma-
lenmifl olmal›d›r. Dope Sheet’ te Visibility track seçiliyken 29. ve 30. terial editor’› açal›m. Herhangi bir slotu seçerek Diffuse kanal›na Bit-
karelere birer anahtar kare yerlefltirelim. De¤erleri 29. s›ras›yla “1” map atayal›m. Bitmap olarak 3dsmax klasörünün içerisinde Tutori-
ve “0” yapal›m. Dope Sheet’te anahtar kareleri Add keys butonu ile als\space\Hercules.avi’yi seçelim. Malzemeye geri dönerek opacity
oluflturuyoruz. fiekil-4. bölümünün yan›ndaki kanal kutusuna t›klayarak yine bitmap’i se-
✂
Nebi YIKARO⁄LU
nykaroglu@chip.com.tr