Bitirme Projesi veya Bitiren Proje :)
07 October 08, Tuesday @ 23:09
Son sınıf olmanın verdigi heyecan, mezun olup olamama endişesi, derslerle nasıl baş edeceğimin korkusu bir yana bitirme projesi geldi çattı. Hatta başladı :)
Projeyi sevgili Bedir Tekinerdoğan hocamızla beraber Service-Based Configuration Management System for Adapting Virtual Machines olarak adlandırdık.
Amaç şirket içerisinde kurulu olan servislerin bağımlılıklarını tespit edip, yönetmeyi kolaylaştırmak. Servisler Xen makinalar üzerine kurulu oldugu,olacağı, için de öncelikle sanal makinayı konfigure etmeyi otomatize etmek gerekir diye düşündük. Sırayla gidersek yapmayı planladığımız işler şu şekilde olacak:
1. Öncelikle Xen kurulumunu konsoldan yapmaktansa, kullanımı kolay bir arayüz oluşturmayı istiyoruz. Sadece kurulum icin gerekli parametreleri girip arka planda ne olduguna karışmaksızın bir sanal makina kurabilsek işimiz biraz da olsa rahatlayacaktır. Bu arayüzden kurulan sanal makinanın ne amaçla kullanılacagını da belirtebiliriz diye düşündük.
Servis ihtiyacı arttıkça kurulan sanal makinaların sayısı artıyor. Ve biz her seferinde her bir kurulum için zaman harcıyoruz. Düşününce bir servisin kurulumunu ortalama 30dakika da bir insan kullanarak yapsak, sayı arttıkça harcanan zaman dogru orantılı bir şekilde artacak. Kurulum işlemini elle yapmak bir süre sonra vakit kaybı olmaya başlıyor. Eger kurulumu yapabilecel bir uygulamamız olursa harcanan zamanı da azaltabiliriz. Nitekim Bora Hoca 'nın her zaman söylediği gibi zamanın geri dönüşü olmaz :)
2. Kurulan ve kullanılan servis sayısı arttıkça servislerin yönetimi de zorlaşıyor. Her birinin birbirine bağımlılıkları ortaya çıkıyor ve git gide kompleks bir hal alıyor. Bu bağımlılıkları düzgün yönetebilmenin şu andaki tek çözümü sistem yöneticisinin hepsini ezbere biliyor olmasından başka bir şey değil. Halbuki elimizde bizim önceden tanımladığımız bağımlılıklar olsa ve yeni bir servis kurulduğunda veya olan bir servis kaldırılığında ne yapması gerektiğini bilen de bir uygulama olsa o zaman hem sistem yöneticisini bu işten kurtarmış oluruz hem de insan kaynaklı hatayı minimuma indirmiş oluruz. Elimizden gelidiği kadarıyla bu bağımlılıkları yönetebilecek bir uygulama geliştirmeyi planlıyoruz. Sadece yeni kurulan veya kullanımından vazgeçilen servisler için değil kullanımda olan servisler içinde bu bağımılılıkları tanımalayacağız. Servislerden birinin herhangi bir parametresi değiştiğinde o servise bağlı olan diğer servislerde değişen parametre bilgisinin de değişmesini sağlayacağız.
Ben ve proje grubu arkadaşlarım bu iş için gerçekten çok heyecanlıyız aslında. Fikir için sistem yöneticimiz Erdem 'e ve Bora Hoca'ya minnettarız.
Doğru ve uygun çözümü üretmek içinde bizden yardımını, bilgisini ve danışmanlığını esirgemeyen Bedir Hoca'yı da unutmamak gerekir.
Projemizin internet sitesine buradan ulaşabilirsiniz.
Ben gelişme kaydettikçe blogumdan da paylaşacağım.
Hadi bakalım hayırlı olsun :)
Tags:
Bitirme Projesi
,
Comments:
0 (
Add your comment )
Sanal Makine Kurulumu (Basitçe)
24 July 08, Thursday @ 15:13
Üçüncü denememden sonra tek başıma bir sanal makine kurabildim. Bu sebeple yazıma başlamadan önce Erdem'e teşekkürü bir borç bilirim. Bildiklerini sabırla bana anlattığı ve öğrenmemi beklediği için:)
Kuruluma hemen girmeden önce birazcık LVM'den bahsetmenin gerekli olduğunu düşündüm.
LVM(Logical Volume Managment)
LVM sabit disklerin yönetilmesini kolaylaştıran, disk bölümlemesini ve yönetilmesini alışılmışın dışına taşıyan bir araç. LVM ile birlikte sistem yöneticilerinin bellek yönetimi işleri daha kolay bir hal almaktadır. Biraz soyut ama düzgün bir hiyerarşik yapıya sahiptir. Genel olarak büyük sistemlerde bellek yönetimini kolaylaştırmak için ihtiyaç duyulan bir araç olmasına karşın, bir ya da iki diskin kullanıldığı küçük sistemlerde de kolayca kullanılabilir.
Bu aracı kullanarak diskin herhangi bir birimin boyutunu değiştirmek için bağlı olduğu bölümün(volume group) boyutunu arttırmak yeterli olacaktır. Diske yeni bir bölüm eklemek için ise diski bastan formatlamak ve yeniden birimlendirmekle uğraşmak yerine yeni bir bölüm oluşturmak yeterli olacaktır. Bu sayede zamandan kazanç sağlamakla birlikte, sistem yönetimininde daha esnek, kolay ve rahat bir hal aldığı ortadadır.
Basitçe terimlerden ve yapılabilecek işlemlerden bahsetmek iyi olur diye düşünüyorum.
-Bölüm Grubu(Volume Group)
En üst düzey bölümdür. Mantıksal bölümleri(logical volume) ve fiziksel bölümleri(physical volume) bir arada tutar.
-Fiziksel Bölüm(Physical Volume)
Genel olarak bir sabit disktir.
-Mantıksal Bölüm (Logical Volume)
Tipik olarak bir disk birimidir. Dosya sistemi barındırabilir.
Yapılabilecek işlemler ise kısaca şu şekildedir.
-Fiziksel bölüm oluşturmak için:
$ pvcreate /dev/hdb
-Birim oluşturmak için:
$ pvcreate /dev/hdb1
-Bölüm Grubu oluşturmak için:
$ vgcreate bölüm_grubu_adı /dev/hda1
-Bölüm grubunu aktif hale getirmek için
$ vgchange -a y bölüm_grubu_adı
-Bölüm grubunu kaldırmak için
$ vgchange -a n bölüm_grubu_adı
$ vgremove bölüm_grubu_adı
-Bölüm grubuna yeni fiziksel bölüm ekleme
$ vgextend bölüm_grubu_adı /dev/hdc1
-Bölüm grubundan var olan bir fiziksel bölüm kaldırma
$ pvdisplay /dev/hda1
$ vgreduce bölüm_grubu_adı /dev/hda1
-Yeni bir mantıksal bölüm oluşturma
$lvcreate -Lboyutu -nbolum_adı bolumgrubun_adı
-Var olan mantıksal bölümü kaldırma
$umount /dev/bolumgrubu/bolum
(Daha açık olması için : $umount /dev/my_volume_group/home_volume)
$lvremove /dev/bolumgrubu/bolum
-Matıksal bölümün boyutunu arttırmak
$ lvextend -Lboyut /dev/bolumgrubu/bolum
-Mantıksal bölümün boyutunu belirli bir miktar arttırmak
$ lvextend +Lboyut /dev/bolumgrubu/bolum
Yukarıda belirtilen komutlar yapılabilecek en temel işlemler için kullanılmaktadır. Daha ayrıntılı bilgiye için LWM HOWTO sayfasından ulaşabilirsiniz.
Sanal Makine Kurulumu
İlk adım olarak kuracağımız sanal makinenin işletim sistemine karar veriyoruz.
Ben bir Pardus 2007 bir de Debian kurma şerefine eriştim. Bazı ayarlar farklı şekillerde yapılmakta. Bu sebeple belirtmek de fayda var.
Yapılan işlemleri sırası ile anlatacak olursak;
Elimizdeki imaj dosyasını seçtiğimiz bir dizine bağlıyoruz.
$ mount imaj /mount/dizin1
2 adet mantıksal bölüm oluşturuyoruz. Bunlardan birini ext3 diğerini de swap formatlıyoruz.
$ lvcreate –size boyutu –-name bölüm_adı1 bölümgrubu_adı
$ lvcreate –size boyutu –-name bölüm_adı2 bölümgrubu_adı
$ mkfs.ext3 bölüm_adı1
$ mkswap bölüm_adı2
Diskleri seçilen başka bir dizine bağlıyoruz.
$mount bölümlerin_yolu /mount/dizin2
dizin1'deki tüm dosyaları dizin2'ye kopyalıyoruz
dizin1'i ayırıyoruz.
Bundan sonra yapılacak olan işlemler Pardus ve Debian için aynı sırayı takip etmemekte. O yüzden ayrı ayrı yazacağım.
Debian ise:
Sanal makine konfigürasyonundaki disk isimleri /etc/fstab dosyasındaki disk isimleri ile aynı olmalıdır. O yüzden bu dosyadaki disk isimlerini kontrol ediyoruz.
/etc/network/interfaces dosyasından ağ ayarlarını kontrol ediyoruz.
/etc/hostname dosyasında hostname'i değiştiriyoruz.
/etc/resolv.conf dosyasından isim sunucusunu değiştiriyoruz.
/etc/hosts dosyasında localhost adresini tanımlıyoruz.
/lib/modules altındaki tüm modülleri yeni oluşturacağımız makinedeki /lib/modules dizinine kopyalıyoruz.
dizin2'yi ayırıyoruz(diğer bir değişle unmount ediyoruz).
Pardus ise:
Sanal makine konfigürasyonundaki disk isimleri /etc/fstab dosyasındaki disk isimleri ile aynı olmalıdır. O yüzden bu dosyadaki disk isimlerini kontrol ediyoruz.
Ağ, hostname ve dns ayarlarını makineyi açtıktan sonra yapmamız gerekmektedir.
/etc/hosts dosyası oluşturulur.
/lib/modules altındaki tüm modülleri yeni oluşturacağımız makinedeki /lib/modules dizinine kopyalıyoruz.
dizin2'yi ayırıyoruz(diğer bir değişle unmount ediyoruz).
Kuracağımız sanal makinenin konfigürasyon dosyasını oluşturuyoruz. Burada verilen IP adresini, disk isimlerini, ağ kartı adresini verirken herhangi bir çakışma olmaması için dikkatli olmak gerekli yoksa yeni bir makine oluşturmak için biraz hata ayıklamak gerekebilir.
Ben Xen ile çalıştığım için makineyi ayağa kaldırmak için sırayla şunları yaptım:
xm new konfigürasyon_dosyası
xm start makina_adı
makinanın ayağa kalkıp kalkmadığını sağlama almak için de
xm console makina_adı komutuyla konsola bağlanıp kontrol edebiliriz.
veya "xm list" komutuyla makinenin çalışıp çalışmadığını görebiliriz.
Kurduğumuz makine Pardus ise konsol'dan yapmamız gereken son şey yukarıda yapamadığımız ağ ayarlarını yapmak kalıyor.
$ network create
Tags:
Sanal Makine
,
Comments:
0 (
Add your comment )
equals() metodunu test etme
04 February 08, Monday @ 17:40
Yazdığınız herhangi bir metot gibi equals() metodunuzu da test etmeniz mümkün. Bunun için uzun süre uğraşmanız gerekecek. Sizi bu uğraştan ve zaman kaybından kurtarmak için geliştirilmiş JUnit yazdığınız kodu debug etmek için çok kullanışlı bir araç.
Junit yazdığınız kodları tekrar tekrar test edebileceğiniz bir çalışma ortamıdır. Testleri yazarken kullanabileceğiniz sınıflar RecursiveTestSuite, EventCatcher, OrderedTestSuite, EqualsTester ve BaseTestCase.
Benim ilgimi çeken EqualsTester sınıfı. Bu sınıf ile yazdığınız equals() metodunun doğru çalışıp çalışmadığını kontrol etme şansına sahip olursunuz. Metodun, dört önemli özelliğe sahip olup olmadığını ve aynı zamanda “equal” olan nesnelerin hash kodlarının aynılığını kontrol etmektedir.
EqualsTester sınıfının koduna buradan erişebilirsiniz.
Bunun yanı sıra, yazdığınız başka metotlar ve sınıfların testlerini JUnit ile gerçekleştirmek için detaylı bilgiyi Junit Cookbook'da bulabilrsiniz.
Tags:
Programlama dilleri
,
Comments:
0 (
Add your comment )
Java da equals() metodu
04 February 08, Monday @ 14:23
İlk olarak söylenmesi gereken şey “equals()” metodu ile “==” metodunun aynı şeyler olmadığı. “==” metodu referansların aynı nesneye işaret edip etmediğini karşılaştırır. Aslında “equals()” metodu da temelde aynı işlevi görür fakat “==” metodundan daha üstün donanıma sahip olarak geliştirebilir.
Java'nın Object sınıfına aittir ve aynı sınıfa ait “hashCode()” methodu ile doğrudan alakalıdır. “equals()” methodu dört önemli özelliğe sahiptir.
Reflexive: Bir “x” referansı verilfdiğinde x.equals(x) doğru(true) dönmelidir.
Symmetric: Verilen “x” ve “y” referansları için; x.equals(y)'nin doğru dönmesi için y.equals(x) dogru olmalıdır.
Transitive: Verilen “x”, “y” ve “z” referansları için, x.equals(y) true ve y.equlas(z) true dönüyorsa, x.equals(z)'de true döner.
Consistent : Verilen referansların eşilği, referanslar değiştirilmedikçe aynı kalmalı. Diğer bir değişle x.equlas(y) true dönüyorsa, ya “x” ya “y” yada iki referans birden değişmeden metot yeniden uygulandığında dönen değer yine true olmalıdır.
Bunların yanı sıra önemli olan iki özellik daha vardır. Eğer bir “x” referansı boş(null) bir referans ile karşılaştırılacaksa metot false dönmelidir. İkinci özellik ise eğer verilen iki nesne eşit ise(Örnek: x.equals(y) true dönüyorsa) ikisininde hash kodu aynı olmalıdır. Bu açıdan equals() ve hashCode() metotları birbiri ile bağlantılıdır. Bu sebeple eğer ki metotlardan biri farklı bir amaç için yeniden yazılacaksa diğeri de gözden geçirilmelidir.
Yukarıda bahsedilenler Object sınıfına ait olan equals() metoduna ait özelliklerdi. Kendi equals() metodunuzu yazacağınız zaman yukarıda belirtilen özelliklere bağlı kalmanız gerektiği gibi dikkat edilmesi geren birkaç nokta daha var. Bunları madde madde açıklamak daha sağlıklı olur.
Öncelikle, verilen değişkenin o nesneye işaret edip etmediğini kontrol etmek amacıyla “==” metodunun uygulanması. Eğer işaret ediyorsa true dönmeli.
Nesnenin boş(null) olup olmadığı kontrol edilmeli.
Verilen nesnenin eşitlik metodunda kullanmak için uygunluğu test edilmeli. Metodun uygulanacağı referansların aynı sınıfa ait olup olmadığı,aynı sınıfa ait nesneler değillerde ait oldukları sınıfların yazılan “equals()” metodunu destekleyip desteklemediği kontrol edilmeli. Yukarıdaki kontrollerden geçerse true, geçemez ise false dönmeli.
“false” döndüğü takdirde, nesnelerin türlerini eşitlemek (type casting) gerekir. Burada eşitlemeden kasıt, aynı türe dahil etmek ya da metodu destekleyen sınıfların türüne değiştirmektir.
Örneğin,
x referansı int, y referansı float türünde olsun. Yazılan equals() metodu int türünü destekliyor ise y referansını int türüne çevirmek gerekir.
Sınıfa ait olan nesneyi (this.object) ve argümanın eşitliğini kontrol etmek gerekir. Eğer eşitlerse, true dönmelidir.
Yazdığınız “equals()” metodunun arguman türünü(type) değiştirmemelisiniz. Argüman olarak bir Object sınıfı nesnesi almalıdır. Eğer değiştirilirse, metodu üzerine yazmak(override) yerine, aşırı yüklemiş(overload) olursunuz. Derlerken herhangi bir hata ile karşılaşmazsınız ama, yazdığınız kodun doğru çalışmayacağını görürsünüz. Böyle olmasını sebebi ise şudur: sizin Java ile yazacağınız her hangi yeni bir sınıf zaten Object sınıfından miras alır. Yani aslında sizin kendi sınıfınıza ait yarattığınız bir nesne aynı zamanda Object sınıfına ait bir nesne gibi davranabilir. Bu sebeple argüman türünü değiştirmeniz gerekmez.
Yazdığınız equals() metodunun tüm gereklilikleri yerine getirip getirmediğini kontrol ettikten sonra hash kodunu değiştirmelisiniz.
Not: Yazdığınız kodu başka kullanıcıların anlaması için açıklama (comment) koymayı unutmazsanız iyi olur. :)
Kısaca özetlersek,
“equal” olan nesnelerin hash kodları aynı olmalıdır.
“deep comparison” (derin karşılaştırma :) ) yapmalıdır.
Boş (null) bir parametre ile karşılaştırıldığında false dönmelidir.
Yukarıda bahsedilen dört önemli özelliğe (symmetric, reflexive, transitive, consistent) sahip olmalıdır.
Not: Bir sonraki girdim de yazılan bir equals() metodunun nasıl test edileceğinden bahsedeceğim. :)
Tags:
Programlama dilleri
,
Comments:
0 (
Add your comment )
biraz da gülelim:)
25 January 08, Friday @ 17:53
küçük bir çocuk kardeşi için nasıl endişelenir bir bakın :)
http://www.youtube.com/watch?v=-fVDGu82FeQ
Tags:
Programlama dilleri
Yedekleme Araçları
25 January 08, Friday @ 17:50
Web tabanlı yedekleme araçlarını biraz inceledim. Bir çok uygulama arasından 5 tanesini seçerek bir doküman yazma çabası içerisindeyim. Henüz performans ve güvenlik testlerine girmediler ama kullanımları ile ilgili biraz bilgi vermek istedim.
Carbonite Inc. şirketine ait Carbonite. (http://www.carbonite.com/) Windows XP ve Vista'de çalışabilmekte. Kurulumdan sonra verdiğiniz yedekleme programına göre (yedekleme periyotları, yedeklenecek dosyalar) sadık bir şekilde çalışmaya devam eder. Ancak, yedeklediğiniz dosyaları restore ederken, biraz sıkıntı yaşayabilirsiniz,eğer ki kendi bilgisayarınız dışında bir yere geri yükleyecekseniz tabi :) Çünkü, dosyalarınızı geri alabilmeniz için programı tekrar indirip kurmanız lazım. Ücret bilgileri internet sayfasında detaylı bir şekilde bulunmaktadır.
Xdrive AOL şirketine ait bir yazılım. Xdrive kullanmak için http://www.xdrive.com/ adresinden üye olmak gerekli. Daha sonra Xdrive'ınıza heme giriş yapabiliyorsunuz. Yapacağınız her bir işlem için yeni bir pop-up açılıyor. Bu sebeple hem bilgisayarınız hem de internet bağlantınız yavaşlıyor. Restore için ya Xdrive masaüstü programını indirebilirsiniz lokal bir bilgisayara geri yükleme için. İkinci seçenek de internet üzerinden bağlanarak yedekleme yaptığınız gibi geri yükleme yapmaktır. Windows 2000, XP, Vista, Mac OS X işletim sistemlerinde kullanabilrsiniz. Ücret ile ilgili bilgileri http://www.xdrive.com/additional_storage.jsp adresinde bulabilirsiniz.
FilesAnywhere kullanabilmek için, Windows Vista, Windows XP, Windows 2003, Windows Mobile, Windows 2000, Windows NT, Windows 95/98/ME, Linux, Mac, RIM Blackberry, Palm OS işletim sistemlerinden birine ve, Internet Explorer 5.5 veya üzeri bir sürümü, Mozilla Firefox,Netscape,AOL Web Browser, Safari veya Opera internet tarayıcılarından birine sahip olmanız gerekmektedir. Yani sadece işletim sistemine değil, internet tarayıcısı da önemli :)
Tamamen internet ortamında yedekleme ve restore işlemleri hallediliyor. Sanki kullanımı en kolay olan uygulama bu:) Ayrıca avantajlı da.. Ofisten de evden de, nereden isterseniz dosyalarınıza erişebilme imkanı sunmakta. Ücretlendirme ve detaylı bilgi http://www.filesanywhere.com/ sayfasında bulunmakta.
IBackup sanki bir Carbonite gibi ama değil. IBackup için önce üye olmak sonra da programını indirmek lazım. Windows Vista, XP, 98, Me, NT/2000, Windows 2000 (Servers), Windows 2003 Server, Windows 2003 Web Edition ve Linux/Unix ortamlarında kullanabilirsiniz. Yanı sıra Internet Explorer 5.0 veya daha yüksek sürümü ya da Mozilla Firefox 2.0 sürümü bulunmalıdır. Kısmen de bir FilesAnywhere gibi davranmakta :) IBackup ile ilgili detaylı bilgiler ve kurulum demosu http://www.ibackup.com/ adresinde hizemete sunulmakta.
Son olarak, Mozy. Hakkında en çok yorum yapılan uygulama dolaysıyla da en çok kullanılmış veya kullanılmak istenmiş yedekleme aracı bu. Mozy Microsoft ürünleri olan işletim sistemlerinde çokça tercih edilen bir uygulama. Carbonite gibi çalışıyor programını indirmek ve kurmak lazım. Yedekleme ve geri yükleme işlemleri program arayüzü yardımı ile yapılmakta. Windows Vista, XP, 2000,Power PC ve Intel Macintoshlarda çalışabilmekte. Tercih edilmesinin en büyük sebebi ücreti gibi geldi bana. Aylık 4.95$ alınmakta ve sınırsız bellek kullanımı sunmakta. http://mozy.com/home sitesinden detaylı bilgilere ulaşabilirsiniz.
İncelerken en çok dikkatimi çeken, Linux ortamlarında çok fazla kullanılabilecek uygulama olmamasıydı. Yanı sıra, kullanılabilir olanların da kullanım talimatları yoktu, IBackup haricinde.
Mac Os 'da Linux ile kısmen de olsa aynı kaderi paylaşmakta. Gerçi, Mac Os kendine ait backup seçeneği olduğunu savunmakta. Halbuki, benim bulabildiğim bilgiler doğrultusunda, yedekleme işlemi ya harici bir sabit diske, ya iPod'a,özellikle “çok” önemli dosyları(!),iDisk'e ya da en klasik yöntem olarak CD veye DVD'ye yazmaktan ibaret. Yalnız iyi haber, Mac Os kullanıcıları için Mac Backups diye ücretli ve web tabanlı bir uygulama yok değil :) Detaylı bilgi http://www.macbackups.com/index.htm adresinde.
Tags:
Yedekleme Araçları
,
Comments:
0 (
Add your comment )
Perl
05 December 07, Wednesday @ 15:26
Merhaba,
Gecen hafta bir ödev için tavsiye edilen bir Perl tutoriali okudum. Gercekten cok keyifli okunan bir dokuman. Yanı sıra örneklerle Perl ile nasıl kod yazılır iyice anlatılmış. Dokumandan gozume çarpan ve çok hoşuma giden bir kaç alıntı:
" A loop, by its nature, continues. If that didn't make sense, start reading this sentence again."
"...You are throwing a huge party, someone is allergic to vodka, and this person has drunk from the punch bowl despite being assured by someone holding two empty bottles of Absolut that he was just using the bottles to convey yet more orange juice into said punch bowl. So you need a doctor, and so you write a Perl script to find one from the list of attendees, wanting the doctor's name to be the last item printed:"
Bu dokumana asağıdaki adresten ulaşabilirsiniz.
http://www.physics.rutgers.edu/%7Ekotliar/perltut.html
Tags:
Programlama dilleri
,
Comments:
0 (
Add your comment )
7 result(s) in 1 page(s)
Previous Page
- 1 / 1 -
Next Page