19.10.05

Pratik Çalışma Belgesi

İTÜ Bilgisayar Mühendisliği için yapılan stajlarda pratik çalışma belgesi diye bi şey istiyolar. Fi tarihinde daktiloyla yazılmış bu belgenin efendi gibi bi versiyonu yoktu, Çetin arkadaşımızın yardımlarıyla artık var. Ben de sizlerle paylaşmayı görev bilirim:
  • Pratik Çalışma Belgesi (doc|pdf)

9.9.05

bu aralar

Şu sıralar ne yaptığımdan biraz bahsedeyim istedim.
Elveda melveda yazdık ama teknik sebeplerden ötürü diplomayı alamadım. "Ne halt yicem ben şimdi?" diye düşünürken bi iş teklifi aldım, proje bazlı. Takvimime cuk oturdu, kabul ettim. Hem de OpenCV ile görüntü işleme (image processing) yapıyorum; arabirim için de sürekli kaçtığım gui olayına bulaşmış oldum MFC ile gui yazıyorum.
Bi de başka bi blog daha açmayı düşünüyorum. Şimdi sölemiyim, sihri kaçmasın...

8.6.05

taşınma && fiti2

mezun olduğumdan dolayı daha fazla ödev vs. göremeyeceksiniz bu sitede.
bu yüzden çalışmalarımı başka bir yere kaydırma kararı aldım. burası açık kalmaya devam edecek tabi ki.
yeni çalışmaları ve başkasına ait çalışmaları bundan böyle pregeva alpha2'de bulabilirsiniz.
hatta yeni yerde ilk çalışmam olan fiti2'ye erişebilirsiniz.

4.6.05

Bilişim Etiği dönem ödevi

Bu dönem ödevinin konusu yazılımla gerçeklenen buluşlarla ilgili patentlerdir.
Bu ödev sayesinde Avrupa Birliğindeki yazılım patentleri üzerine, ve patent kavramına ilişkin oldukça fazla bilgiye sahip oldum. Hatta bayaa gaza geldim.
Bana göre de yazılım patentleri kötü şeyler. Çünkü, fikrin patentini alıyosunuz ve o fikri patent sahibinden başkası kullanamıyor.
Örneğin, online satış sitelerinde gördüğümüz "bunu alan bunu da aldı" yöntemi. Bu olayı ilk yapan Amazon. Patenti de Amazon'da. Başka bir şirketin bu yöntemi kullanmasına izin yok. (Türkiye'de kullanabilirsiniz çünkü Amerika ile bi patent anlaşmamız yok, şimdilik.)
Ben bilginin dünyaya ait olduğunu düşünenlerdenim, zaten o yüzden burada bilgimi paylaşma yoluna gidiyorum. Burada bilgi ile kastettiğim önemli, yazılımın satılması kabul edilebilir bir durum (korsan program kullanmayın demiyorum). Fakat parlak bir fikri başkasının da gerçeklemesini engellemek saçma. (akşamdan kalma olduğumdan gerekçelerini bugün yazamayacağım sanırım, kendinize iyi bakın.)

1.6.05

Gabor Çekirdekleri (Gabor Wavelets/Kernels)

Plaka Tanıma Sisteminde devamlı bahsediyoruz, yok Gabor filtresi, yok Gabor çekirdeği. bu konuya bir aydınlık getirmek istedim. Peki nedir bu Gabor çekirdeği? budur efendim:

gabor wavelet

18.5.05

Haberleşme Temelleri ve Sistemleri (Kablo Karakteristiği)

... Şunu bilin ki Prensim, kabaran okyanusların Atlantis'i ve onun görkemli kentlerini yutmasından sonra Dünyada o güne değin görülmemiş bir çağ başlamıştı. Aryas'yın oğullarının doğduğu bu çağda, Dünya üzerindeki imparatorluklar ve uygarlıklar, gökteki yıldızların mavi parıltıları kadar dağınık fakat belirgindi. İşte bu sıralarda Kimmeryalı Conan geldi. Çelik bilekli elinden kılıcını hiç bırakmayan bu karasaçlı, şahin gözlü yiğit tüm imparatorlukları sandallı ayağının altında çiğnemek istiyordu..
Bir Nemedya Efsanesinden

Bugün girdiğimiz Haberleşme Temelleri ve Sistemleri dersinin sınavlarında, Berk Üstündağ'ın hep sorduğu, kabus olan kablo karakteristiği sorusunda çözüme oldukça yaklaştım ve benden sonraki kuşaklara ışık tutmasını ümid ederek(hele hele) paylaşacağım.

Sorumuzun tanımı: Bir iletim hattının karakteristik değerleri L=300nH/m ve C=50pf/m olarak verilmiştir.
  1. Bu iletim hattının sonuna 300 Ohm giriş empedanslı bir alıcı devre bağlandığında yansımayı en aza indirecek sonlandırma direncini hesaplayınız.
  2. 100m ve 1000m uzunluğundaki hattın bant genişliklerini hesaplayınız.

Soru yaklaşık olarak yukarıdaki şekilde. Sorunun ilk şıkkı görece kolay. Fakat 3 senedir sorulan bu sorunun çözümünü bilen çıkmadı aramızda, hep muğlak cevaplar verdik sınavlarda.
İlk önce devreyi çizelim:
devre şeması
Burada 3 çevrim yapıp, 3 denklem üreteceğiz. şekilde 3 adet bölge görünüyor, o görünen 3 bölge içinde çevrim yapacağız.
İlk çevrimden çıkan denklem:
birinci formül

İkinci çevrim:
ikinci formül

Üçüncü çevrim:
üçüncü formül

transfer fonksiyonunu bulmak için 3. ve 1. denklemleri taraf tarafa bölersek, ve 2. denklemden i1 ya da i2 yalnız bırakılır. transfer fonksiyonunda 2. denklemden elde ettiğimiz değeri yerine koyunca denklem oldukça sadeleşecek:
dördüncü formül

daha da düzenli hale sokarsak:
beşinci formül

Berk'in tarif ettiği formül:
altıncı formül

Eh, bu biçime uyuyor gibi görünüyor. Fakat paydadaki 3. derece denklemi köklerine ayrımak hayli güç. sonunda şu forma sokmamız gerekecek:
yedinci formül

yapabilen beri gelsin. bode diyagramına falan hiç girmiyorum bile.

ne pis dersmiş be...

16.5.05

teşekkür || veda

okulun bölüm sayfasından beni tebrik etmişler.

ben de
sağladığı imkan için danışman hocam Binnur Kurt'a, harcadığı emek ve paylaştığı tecrübe için Fatih Kahraman'a , Bilgisayarla Görü ve Görüntü İşleme Laboratuvar'ını kurduğu için hocam Muhittin Gökmen'e, öğrenci işlerindeki isimlerini hala öğrenemediğim daima güleryüzlü iki meleğe, bana kattıkları için bölümüme, ve daha unuttuğum nicelerine
çok teşekkür ederim.
umarım sizlerle hayatın bi noktasında tekrar kesişiriz.

elveda... :(

7.5.05

Bilgisayar Mimarisi - Ödev 2

Bu ödevde cihazlararası veri iletişimi, papatya zinciri(daisy chain), kesme(interrupt), MC68000, DMA gibi olaylar gerçeklenmiştir.

SİU kurultay bildirisi (release)

geçenlerde SİU-2005 için hazırladığımız bildiriyi sunmuştum. bildirimiz kabul edilmiş. basıma hazırlanmış son versiyonunu paylaşacağım. basıma hazır versiyon:
  • Bakış Açısından Bağımsız Gürbüz Plaka Tanıma Sistemi
    View Independent Robust License Plate Recognition System (pdf)

21.3.05

OpenCV ile görüntü işlemeye giriş

bir önceki yazımda, OpenCV'nin Visual Studio 6.0 ile birlikte nasıl kullanılacağından bahsetmiştim. bu yazıda, yeni başlayanlar için OpenCV kullanarak nasıl kod yazılacağına dair bir örnek vereceğim.

yazdığım kod 4 adet işlemi gerçeklemektedir:
  1. Threshold I
    threshold: Türkçesi eşikleme. genellikle görüntü işlemedeki karşılığı, resmin belirli bir değerden(threshold value/eşik değeri) daha küçük değere sahip pixellerin siyaha, daha büyük değere sahip pixel değerleri beyaza boyanmasıdır.
    resmin sol üst köşesinden başlayıp, pixel pixel taranır. pixelin değeri eşik değerimizden küçükse 0, değilse 255 yapılır. ilgili kod:
    for(i=0;i<src->height;i++){
    for(j=0;j<src->width;j++){
    src_pixel_ptr = CV_MOVE_TO(pos_src,i,j,1);
    dst_pixel_ptr = CV_MOVE_TO(pos_dst,i,j,1);
    src_pixel_ptr[0]<thresh_val?
    dst_pixel_ptr[0]=0:dst_pixel_ptr[0]=255;
    }
    }

  2. Threshold II
    OpenCV'nin threshold fonksiyonu kullanarak gerçekleştirilen thresholding işlemi. kod:
    cvThreshold( src, dst, thresh_val, 255, CV_THRESH_BINARY);

    ne kadar da basit değil mi?
  3. Sharpen Filter
    3x3'lük bir sharpen kernelinin uygulanması işlemi. uygulanan kernel:
     0 -1  0
    -1 5 -1
    0 -1 0

    kod:
    // kernel icin gerekli alani ayir
    kernel = cvCreateMat(9,9,CV_32FC1);
    //kerneli in$a et
    cvSet2D( kernel, 0, 0, cvRealScalar(0) );
    cvSet2D( kernel, 0, 1, cvRealScalar(-1) );
    cvSet2D( kernel, 0, 2, cvRealScalar(0) );
    cvSet2D( kernel, 1, 0, cvRealScalar(-1) );
    cvSet2D( kernel, 1, 1, cvRealScalar(5) );
    cvSet2D( kernel, 1, 2, cvRealScalar(-1) );
    cvSet2D( kernel, 2, 0, cvRealScalar(0) );
    cvSet2D( kernel, 2, 1, cvRealScalar(-1) );
    cvSet2D( kernel, 2, 2, cvRealScalar(0) );
    // filtreyi/kerneli uygula
    cvFilter2D( src, dst, kernel, cvPoint(-1,-1) );

  4. 5x5 Median Filter
    Median Filter şu biçimde çalışır:
    1. nxn'lik bir pencere oluştur ve sol üst köşeden başla
    2. pencerenin içinde kalan değerleri sırala.
    3. pencerenin tam ortasındaki pixel'in değerine, sıralanmış değerlerin ortadakini ata.
    4. resimin sonuna gelinmemişse pencereyi kaydır ve 2'ye git.
    5. dur
    nxn boyutundaki pencerenin tam ortasındaki değerden bahsedebilmemiz için, n tek olmalıdır. kod:
    cvSmooth( src, dst, CV_MEDIAN, 5, 0, 0 );
gerekli dosyalar:
  • opencv_1.cpp - yukarıda bahsedilen işlemlerin gerçeklendiği C++ dosyası.
  • Lena'nın resmi ;)
    Lena, görüntü işlemede giriş resmi için yaygın olarak kullanılan bir bayandır. ilk olarak 1973'de kullanılmıştır. ünlü fotoğraf Playboy'un Kasım 1972'de yayınladığı dergiden alınmıştır. daha fazla bilgi için buraya.
    normal resim:


    gürültü eklenmiş resim:


19.3.05

Visual C++ 6.0 ile OpenCV kullanımı

OpenCV, görüntü işleme(aka. image processing) için Intel'in geliştirdiği bir kitaplık. Sonradan bunu kamusal alana(public) hibe ediyor; OpenCV, an itibariyle sourceforge'da geliştirilmekte.
Visual C++ ile birlikte OpenCV kullanmak yeni başlayanlar için gayet sancılı bir süreç olabiliyor. Sorunuz olursa çekinmeden sorun, ama tabi ki ilk önce RTFM!!
Bir adet de ayarları yapılmış, taslak workspace hediyesi.
Tüm bu işlere başlamadan önce tabi ki OpenCV'yi edinmek gerekiyor. gerekli dosyaları buradan edinebilirsiniz.

Visual C++ 6.0'ı açtıktan sonra File->New... diyerek yeni bir proje yaratalım.


Karşımıza gelen ekranda, Win32 Console Application seçilir; proje ismi de doldurulduktan sonra, bir sonraki adımda An empty project seçilir.


Workspace'imiz hazır. Şimdi sıra, OpenCV kitaplığının kullanılması için yapılması gereken ayarlara geldi.

Menüden Project->Settings... seçilir. Bu ekranda ayarları yaparken Settings for: All configurations'ın seçili olduğundan emin olun.
  1. C/C++sekmesi seçilir.
    Category->Preprocessor
    seçilir.
    Additional Include Directories şu şekilde ayarlanır:
    C:\Program Files\OpenCV\cv\include,C:\Program Files\OpenCV\cvaux\include,C:\Program Files\OpenCV\cxcore\include,C:\Program Files\OpenCV\otherlibs\highgui



    "C:\Program Files\OpenCV\" dizininin OpenCV'yi kurduğunuz dizin olduğunu söylememe gerek yok sanırım. (söyledim bile)

  2. Link sekmesi seçilir.
    Category->General seçilir.
    Object/library modules bölümüne şunlar eklenir:
    cv.lib highgui.lib cxcore.lib

    Category->Input seçilir.
    Object/library modules bölümüne şunlar eklenir(eklenmediyse):
    cv.lib highgui.lib cxcore.lib
    Additional library path bölümüne şu eklenir:
    C:\Program Files\OpenCV\lib




  3. Son olarak, File->New... seçip, Files sekmesinden yeni bir C++ Source File yaratılır. Bu sizin ana dosyanız olcak.



    yeni oluşturduğumuz dosyaya da OpenCV kitaplığını kullanmak için gerekli header dosyalarını yazmamız lazım:
    #include <cv.h>
    #include <highgui.h>
Viola! İşimiz bitti. artık görüntü işlemeye hazırız.

14.3.05

Bilgisayar Mimarisi - Ödev 1

uzun bir aradan sonra yeni dönemin açılıp, temponun artmasıyla beraber yeni şeyleri koymaya başlıyorum. bunlardan ilki Bilgisayar Mimarisi(aka. Computer System Architecture) ödevi.

tanım:
İçinde 8bitlik işaretsiz sayılar bulunan bir dizi bellekte DIZI adresinden başlayarak yer almaktadır. Dizinin eleman sayısı BOYUT simgeli bellek gözünde yer almaktadır ve eleman sayısı için 16 bitlik yer ayrılmıştır. Bu dizideki verileri önce tek sayılar ardından çift sayılar gelecek şekilde yeniden düzenlemek üzere 68000 simgesel dilinde bir program yazılacaktır. Program bellekte hiçir geçici alan kullanmayacak ve 68000?in en fazla 3 saklayıcısından yaralanacaktır. Tanıtılan programı en az sayıda komutla ve 68000?in adresleme kiplerini en etkin şekilde kullanarak yazınız.

örnek: Sırasıyla 1,12,65,43,59,78,98,34,55,13,23,44,56,67 sayılarından oluşan dizi yukarda istenilen program çalıştıktan sonra 1,67,65,43,59,23,13,55,34,98,78,44,56,12 şeklinde olacaktır.

uyarılar
  1. Tek sayıların ve çift sayıların kendi aralarındaki sıralamaları önemli değildir.
  2. Program DIZI adresinden başlayan ve başlangıçtaki dizinin bulunduğu bellek alanı hariç hiçbir bellek alanını kullanmayacaktır.
ödev doyası:
  • mimari_odev_1.x68 - ödevin gerçeklendiği x68 dosyası. verilen örnek için çalışma süresi 684 saat çevrimidir. Daha verimli bir versiyon ile karşılaşırsam buraya koymaya çalışırım.
motorola 68000 işlemcisi için kullanabileceğiniz bir simülatör programı: EASy68K

3.3.05

okulun sunucuları problemi

burada kullanımınıza açılmış dosyalar, üniversitemin sunucularında yer almaktadır. okulumun sunucuları da sanırım zaman zaman sorun yaşıyor, bu yüzden bazen dosyalara erişemeyebilirsiniz. olası bir sorun için şimdiden kusura bakmayın.

okulun sunucularının çalışır vaziyette olup olmadığını anlamanın kolay bir yolu var. yanda bir yerde profilimle ilgili bir kısım var; orada profil resmim görünüyorsa çalışıyor demektir, değilse dosyalara erişemezsiniz.

(:

18.1.05

SİU Kurultayı bildirisi

IEEE 13. Sinyal İşleme ve İletişim Uygulamaları Kurultayı (SİU-2005) için hazırladığımız bildiri:
  • Bakış Açısından Bağımsız Gürbüz Plaka Tanıma Sistemi
    View Independent Robust License Plate Recognition System (pdf)
Bu bildiride uğraştığımız Plaka Tanıma Sistemi(PTS)'nin nasıl çalıştığı az buçuk anlatılıyor. Merak edenleriniz için...

not: bissürü terimin türkçe karşılığını kullanmak zorundaydık, hatırladıklarımdan birkaçını yazayım buraya
  • gürbüz: robust
  • vektör nicemlemesi: vector quantization
  • OKTS: OCR
  • bölütleme: segmentation
  • ikili ayrışma ağacı: binary spliting tree
  • örüntü: texture
  • ilgin dönüşüm: affine transformation
  • benek: pixel (gürbüz benek!?)
  • imge bölgesi: blob

hayırlı bayramlar d:o)

11.1.05

Discrete Event Simulation - Ödev 2

bu ödevde basit bi manufacturing system, GPSS kullanılarak simüle edilecekti. ödev çok basit. eğer az çok GPSS biliyorsanız kolay gelecektir. daha fazla açıklama ihtiyacı duymuyorum.
Ödevin tanımı.
Ödev dosyaları:
esen kalın.

6.1.05

Systems Programming - Ödev 2

Bu ödevde Linux için device driver yazdık. yazdığımız device'ın hardware ile bir işlişkisi yok /dev/null gibi bi device. Bu ödevi son dakikada yaptım, o yüzden rapor falan uğraşamadım, ufacık bi README dosyası var ama zaten dosyaların ne işe yaradığını yazıyor orada da. Ama device çalışıyor, test ettim.
Ödevin tanımı.
Ödev dosyaları:
  • statistics.h - statistics device'ını yazarken kullanacağımız başlık dosyası.
  • main.c - statistics device'ın genel implemantasyonu(hele hele).
  • test.c - device çalışıyor mu test etmek için yaptığım yardımcı bi dosya.
  • yap - modülü derlemek için basit bi script.
  • stat_load - device ile ilgili ayarlamaları(modülün yüklenmesi, /dev/statistics'in yaratılması) yapan script.
  • README - burada yazanların yaklaşık aynısını içeren dosya.
Yanlız bu device driver 2.4.x sürüm kerneller için hazırlandı. yani 2.6.x'de derlemek, yüklemek için kasarsınız, ben de uğraşmadım zaten onun için.
Bi de aygıtın genel yapısına ilişkin şöyle bi resim var:

30 puanlık bonus kısmı tabi ki yapmadım.

5.1.05

Systems Programming - Ödev 1

Bu ödevde random number generator gerçekledik. Bunu yaparken C içinden assembler çağrısı falan yaptık.
Ödevin tanımı.
Ödev dosyaları:
  • LCG.asm - combinedLCG() ve initLCG() fonksiyonlarını gerçekleyen assembler dosyası.
  • lcgmain.c - LCG.asm'nin örnek kullanımı.
  • Rapor - Yapılan işlerin ayrıntılı açıklaması.
Bu ödevden 88 almıştım. En yüksek not da 90 idi(1 kişi). O yüzden bunu bayaa bi geçerli sayabilirsiniz. çalışıyo bayaa. takılan şeyleri sorun dediğim gibi. sayfanın bi yerlerinde mail adresim var (sağa bi bakın).

yazmak bunu gerçekten keyifliydi. hele bi gdb ile debug ederken sadece konsoldan böyle yazılar felan, insan kendini bi bok zannediyo.

Software Engineering

Software Engineering bölümün en sinir bozucu derslerinden birisi. Endüstri mühendisliği gibi organizasyona yönelik bir ders. Kuşkusuz büyük projeler çıkarmanın başka yolu yok gibi ama yine de eğitim böyle olmamalıydı dedirtiyor insana.
Paso atıyosunuz. Şu şöyle olacak, bu böyle olacak diye.
Biz grup olarak Rubik Cube oyananabilecek bi oyun yaptık(?!). Ufacık oyun için de hayvan gibi dökümantasyon çıkarttık. Dökümanlara güvenebilirsiniz kolpa gibi görünse de yüksek notlar aldırdı bize:
  • Report 1: Software Project Plan (doc)
  • Report 2: Software Requirements Specification (pdf)
  • Report 3: Software Design Specification (doc)
  • Report 4: Software Test Plan (pdf)
Burada yayınladığım raporlar İTÜ için örnek teşkil etmektedir. Yoksa hiç bi işe yaramayan şeylerdir. Zerre zevk almadan sırf dersi geçelim diye yaptık.
Bi de sunum var. Böyle matah bişeymiş gibi anlatmak için yaptığımız işi:
Merak edenleriniz için sxi Open Office formatıdır.

Buradan grup arkadaşlarıma da selam ederim, harcadıkları emekler için çokça teşekkürler.
onlar da mutlu olsun :)

Discrete Event Simulation - Ödev 1

Bu ödevde bi banka sistemini C, C++ ya da Java kullanarak simüle etmemiz istendiydi. muhtemelen ödevle amaçlanan genel discrete event simulation konseptini anlamamızdı. yoksa GPSS'de hemen yazılabilecek bişey.
Ödevin tanımı.
Ödevin kendisi.

benim çok uykum geldi şimdi bugünlük bu kadar ekliyorum, umarım üşenmem/unutmam daha başkalarını da eklerim.
"yaşamak güzel lan." - memin.


DES ödevi yaparken sabah saatin 5'i. oy oy oy

Artificial Intelligence - Ödev 2

Bu ödevde de tic-tac-toe oynayan bi yapay zeka yapmamız isteniyo. bunu yaparken de minimax algoritması ile yapacaz.
Ödevin tanımı.
Ödevin kendisi.

aslında ödev tanımı tam olarak karşılıyo ama daha geliştirilebilir.
benim düşüncelerim şunlar (aslında sırf bu maddlemeyi kullanmak için maddeliyom, merak işte):
  • Tüm olası durumların ağacını oluşturuyoz. Hiç gerek yok. bi iki adım ötesini oluştursak uygundur (3 yapalım şunu olsun). eee noluyo böylece örneğin 4x4 bi tahtada geçecek oyunu n ağacını oluşturmak için bile bugünün sağlam bi makinesi kasıyo da kasıyo. hoş değil.
  • bi de simetrik durumlar söz konusu. yani bunları da iptal etsek bayaa rahatlarız.
kucak dolusu sevgilerimle...

Artificial Intelligence - Ödev 1

Artificial Intelligence dersi için yaptığım ödevi sunuyorum ilk olarak.
Ödevin konusu kabaca şöyle hani küçükken oynadığımız küçük karelerden oluşan bi bulmaca(puzzle) vardı. ama bi karesi eksikti. kareleri yukarı-aşağı sağa-sola oynatarak karışık resmi düzgün hale getirmeye çalışırdık. hah, bu bulmacanın ismi 8 puzzle.
Ödevin tanımı.
Ödevin kendisi (çözümü yani).

bi de rar ile sıkıştırıyom, rar'ı bilmeyenleriniz buradan indirebilir.

ödevde 2 arama algoritması gerçeklendi. biri breadth first search diğeri A* (aka. A Star). zate açıklamalar var içinde. kafanıza takılan olursa bi sorun bana. çok kötü hissetmiyosam kendimi memnuniyetle yardım ederim.

Okul

Ben İstanbul Teknik Üniversitesi Bilgisayar Mühendisliğinde okuyorum. 4 sınıfım. 5 senem. bi sene uzattım yani. normalde imla kurallarına dikkat ederim ama artık cümlelerin ilk harflerini büyük yazmak istemiyorum böyle biraz rahat yerlerde. bundan size ne.
neyse, bu akşam şu yaptığım ödevleri falan internete koyayım diye düşündüm. benden sonraki dönemler falan faydalanır hiç olmazsa. tabi kim nereden bulacak da girecek bu siteye o da ayrı bi konu.
neyse efendim bi de bu blogger'a yeniyim gün geçtikçe ilgilenirsem yeni özelliklerini falan da bulurum heralde. bakarız işte.
mutlu olun.