13 Ağustos 2011 Cumartesi

DEITEL JAVA HOW TO PROGRAM

C ve C++ Deitel & Deitel kitabının ne kadar güzel olduğunu hepiniz biliyorsunuzdur.Deitel&Deitel ‘ın Java programlama dili içinde bir kitabı var.Kitapçılarda kolay kolay bulunmayan bir kitap olmakla beraber henüz bu kitabın Türkçeside yok.E- kitap formatınıda internetten bulmak zor olduğundan sizin için yüklemek istedim.Kitabın PDF formatını aşağıda ki linklerden herhangi  birinden  indirebilirsiniz.
İyi çalışmalar…



2 Ağustos 2011 Salı

LINUX'DA SİLİNEN DOSYALARI GERİ GETİRMEK




1-)İndirmemiz gereken sleuthkit ve foremost adında iki  paketimiz vardır.Ubuntu'da bu paketleri çekmek için terminale ;

sudo apt-get install sleuthkit
sudo apt-get install foremost

komutlarını yazmamız yeterli olacaktır.


2-)Öncelikle bilgisayarımızda ki disklerin yapısını incelememiz gerekiyor.Bunun için konsola df -h yazmamız gerek.Karşımıza şöyle bir yazı çıkacak.

mesut@mesut-laptop:~$ df -h
Dosyasistemi Boy Dolu Boş Kull% Bağlanılan yer
/dev/sda5 48G 5,7G 40G 13% /
none 1,5G 364K 1,5G 1% /dev
none 1,5G 812K 1,5G 1% /dev/shm
none 1,5G 104K 1,5G 1% /var/run
none 1,5G 0 1,5G 0% /var/lock
none 1,5G 0 1,5G 0% /lib/init/rw
/dev/sdb1 466G 119G 348G 26% /media/MESUT EMRE

Buradan da anlayacağımız üzere Linux sistemimiz dev/sda5 ' te kurulu.İlk olarak silinen dosyanın izlerinin diskteki konumunu belirleyelim. Bunun için debugfs isimli bir dosya sistemi hata ayıklayıcısı (debugger) kullanacağız. Ancak debugfs'i kullanabilmek için süper kullanıcı haklarını elde etmemiz gerekiyor:


debugfs /dev/sda5

komutunu veriyoruz.

3-)Şimdi yapmamız gereken silinen dosyanın bulunduğu dizine gitmek ve inode numarasını 
(silinen dosyalarla ilgili bilgileri ve diskteki blok grubunu saklar) tespit etmek.

debugfs 1.41.3 (12-Oct-2008)
debugfs:  cd /home/mesutemre/resimler
debugfs:  ls -d

Karşımıza şöyle bir şey çıktı.

252525  (12) .    333908  (4084) ..   <366591> (4052) resim.jpg

Hatırlarsanız silinen dosyamız /home/mesutemre/resimler adresindeidi.q tuşuna basarak debugfs'e 
geri dönelim. Burada yaptığımız bu dizine girerek ls -d komutunu vermek.Bu komut o dizindeki 
silinen verileri görüntülemeye yarar. Böylece silinmiş verinin inode numarasını tespit etmiş olduk. 
Şimdi yapmamız gereken bu verinin blok grubunu tespit etmek. Onun için


debugfs:  imap <numarası_inode_numarası>

Diyelim ki inode 252525 olsun.

Debugfs: imap<252525>

Inode 252525 is part of block group 45
        located at block 1474568, offset 0x0e00
Gördüğümüz gibi dosyamız 45 nolu blokta.

4-) Dosyamızı  geri getirmek için son bir bilgiye daha ihtiyacımız vardır. O da bir blok grubunda ki 
blok sayısı. Bunu bulmak için sats komutunu verdikten sonra q tuşuna basarak debugfs ' e geri 
dönelim.

debugfs: stats
        ***
        ***
Blocks per group:         125521
        ***
debugfs: q

5-)Sırada ki işlemimiz adresini tespit ettiğimiz blok grubunun içeriğini öğrenmek. İşte bunun için 
the sleuthkit ' i kullanacağız. Hatırlarsanız dosyamız 45 nolu grupta buluınuyor. Bu yüzden 45 nolu 
blokta ki bütün blokların içeriğini elde etmemiz gerekir. Bunun için 45. blokta ki ilk ve son blokların 
adresilerini öğrenmemiz yeterlidir. Gerisini sleuthkit bizim için hallediyor. İlk ve son bloğun adresini 
elde etmek için genelleştirilmiş bir formül vardır.

  b : blok sayısı (32768) => bir blokta 32768 tane blok var.

  n : grup no  (45)

Bu verilere göre ;  n x b   –    (n+1) x b -1     arasında blunuyor.

6-) Artık  45. bloğun içeriğini  diskten ayıklayabiliriz. Bunun için

root@ubuntu:~# dls /dev/sda6 1474560-1507327 > /media/disk-1/block.dat   komutunu vereceğiz. 
Birkaç saniye bekledikten sonra bu blok içeriği tamamen block.dat adında başka bir diske aktarılmış 
olduğnu göreceksiniz.

7-) Şimdi yapmamız gereken tek şey dosyayı bu bloğun içerisinden çekip almak. Bunun için foremost 
' u kullanacağız.

root@ubuntu:~# mkdir /media/disk-1/output
root@ubuntu:~# foremost -t jpg -i /media/disk-1/block.dat -o /media/disk-1/output/
bu komutu verdikten sonra ekrana
Processing: /media/disk-1/block.dat
benzeri bir çıktı gelecektir. Burada yaptığımız şey yeni bir klasör yaratıp (output) blok grubu içeriğindeki silinen dosyaları bu klasöre atmak. Gördüğümüz gibi foremost komutuna -t, -i ve –o gibi parametreler verdik. -t parametresi istediğimiz tipteki dosyların araştırılmasını sağlar. Bir jpg dosyası aradığımızdan -t yi jpg argümanı ile kullandık. -i parametresi içeriğini araştırmak istediğimiz veri dosyaları (block.dat) için kullanılan parametredir. -o parametresi ise silinen dosyaların geri geldikten sonra saklanacağı klasörü tanımlar, o yüzden de -o ile /media/disk-1/output argümanını kullandık.

8-)Hepsi bu kadar. Şimdi /media/disk-1/output klasörünü açalım. Eğer yaptığımız işler doğruysa burada bir jgp adlı klasör bulunmalıdır. Eğer -t parametresini kullanmasaydık foremost tüm dosya tiplerini araştıracak ve geri getirebildiği dosyaları, tip isimlerine sahip olan klasörlere atacaktı.jpg klasörünü açalım. Burada birden fazla dosya görebiliriz, bunun nedeni incelenen bloklarda birçok silinmiş dosya olması dolayısıyladır.

28 Haziran 2011 Salı

KALITIM (INHERITANCE)

En genel tanımıyla bir class dan yeni class lar türetmektir. Türetilen her class türediği class ın özelliklerini devralır. Peki neden bir class dan başka classlar türetiriz ki? Bunun cevabı son derece mükemmel. Tüm classlarda olan ortak özellikleri tek class da toplamak. Yani amaç ortak özellikleri tek bir çatı (class diyelim biz buna) altında toplamak.

ARABA
            TAKSİ
            -Fiat Albea
            -Volkswagen  Passat
            MİNİBÜS
            -Ford Transit
            -Hyundai  starex
            OTOBÜS
            -Mercedes Benz Travego
            -Man Fortuna

Dikkat edersek hepsi araba ve bir takım özellikleri aynı. Örneğin hepsinde gaz , fren , vites , teker vs. var. İşte biz bu ortak özellikleri olan nesnelere araba demişiz ve bu class ‘ ın adı da araba olmuş.
Gelelim kalıtım olayının Java classlarında nasıl uygulandığına  ;
Kalıtım classlarında türetmenin yapıldığı en üst class Temel sınıf (Base class) , türetilen classlara ise Türeyen class (derived class) denir. Aynı zamanda  kitaplarda şu isimleride görebilirsiniz. Base class a genelde Superclass  , derived calss a ise Subclass denir.
Türetme işi Java programlama dilinde extends anahtar sözcüğüyle yapılıyor. Şimdi bu anlattıklarımız üzere kodlarımızı yazalım.





public class Super {
    public static  void kimimben()
    {
        System.out.println("Ben super class ım ");
    }
}

Yukarıda temel class ımızı yazdık. Şimdi de bu classtan yeni bir class türetelim. Buraya dikkat ;

public  class tureyen  extends  Super {
    public static  void ben()
    {
        System.out.print("ben tureyen classım.Subclass");
    }
}
Tureyen classımızın adını yazdıktan sonra extend anahtar sözcüğünü kullanarak süper class yani ana classımızın adını yazdık. Bu ayrıntıya dikkat edelim.
Şimdi aklımıza şöyle bir soru takılailir. Acaba  subclass daki bir nesneyi kullanarak superclass daki bir nesneye erişmek mümkün mü? Evet mümkün. Kodları indirdiğiniz de bunun mümkün olduğunu derleyince görebilirsiniz.
Java dilinde Object  class ı tüm classların atasıdır. Bunu kdo yazarken bir nesneye erişmek için  . (nokta) koyduğunuz zaman görebilirsiniz.  Örneğin şöyle bir örnek verebiliriz. Kabul edelim ki Elips adında bir classımız olsun. Bu class Daire classından türetilmiş olmakla beraber Daire classı ise Grafik classından türetilmiştir.  Aşağıda ki resim bu olayı anlamak için yeterlidir.


super  tekniği

super()  tekniği sayesinde temel sınıfta tanımladığım ve ortak özellik olan şeyleri subclass da bir daha tanımlamama gerek kalmaz.
super () yapıcı metod içerisinde (constructor) mutlaka ilk satırda tanımlanmalıdır.
İndireceğiniz dosyada ki örneklerle super()  keywordunu iyi bir şekilde pekiştirebilirsiniz.
Java dilinde superclass üyelerinin  , subclass da yeniden bildirilmesine override denir. Yani superclass daki metod , subclass da geçersiz hale geliyor.


Şekilde ki okun aşağı inmesinin sebebi  erişim belirleyicileri arasındaki erişilebilirlik sınırlarının durumudur . Bu şekilde düşündüğümüzde  şunu söyleyebiliriz artık. Superclass da friendly erişim belirleyicisine sahip olan bir üye , subclass da ya protected ya da public olmalıdır.

Buraya tıklayarak konu ile alakalı kaynak kodları indirebilirsiniz.İyi çalışmalar...