Okul
7th Mar 2010 | Posted in: Okul 0

Bu dönem içeriğinin yarısında Java’da çizim, threading vs. konuları göreceğimiz Yazılım Mühendisliği dersinin ilk projesinde Java ile Türk Bayrağı çizdik. Bunun için Java’nın Graphics2D kütüphanelerini kullandım. Projeye başlamadan önce acaba bu işi kod ile yapan var mıdır diye düşünüp arasam da pek bir sonuca ulaşamadım. Ben de oturdum Türk Bayrağı’nın ölçünlerini analiz ederek Analitik Geometri bilgileriyle her bir öğenin (ay, yıldız) koordinatlarını hesapladım.

Bayrağın koordinatları G ile ifade edilen genişlik miktarına orantılı olarak hesaplanıyor. Ancak dikkat etmek gerekiyor ki bu genişlik dikey eksende belirlendiği için bazı durumlarda ekran onu yükseklik olarak kabul edebiliyor. Hilal şeklinde ay yapabilmek için iç içe geçmiş iki daire yapmak gerekti.

Beyaz Büyük dairenin merkezi (G/2, G/2), yarı çapı G/4
Kırmızı Küçük dairenin merkezi (0.5625*G, G/2), yarı çapı G/5

Sıra geldi yıldız yapmaya. Burası oldukça zorladı. Verilen özelliklere bakılırsa bir daire çizip bunu 72 derecelik beş parçaya ayırmak gerekiyordu. Sonra her bir noktayı kendisine uzak olan 2 diğer nokta ile birleştirip şekli doldurunca yıldız oluşuyor. Bunun için polar koordinat sisteminden kartezyen koordinat sistemine dönüşüm yapmam gerekti. Açıların sinüs ve kosinüs hesaplarını yaparak yıldızın noktalarının koordinatlarını hesapladım.

Eğer yıldızı çevreleyen dikdörtgen (0,0) noktasında başlamış olsaydı (yani sol üst köşeden başlayacak şekilde sadece yıldız çiziyor olsaydık), yıldızın sivri uçlarının koordinatları şöyle olacaktı (yarıçap r = G/8)

(0 , r); (1.80901*r, 0.4123*r); (0.691*r, 1.951*r); (0.691*r, 0.049*r); (1.80901*r, 1.5877*r); (0, r)

İlk ve son koordinat aynı, çizim yaparken bu sırada yaparsanız ve doldur derseniz elinize dolu bir yıldız çıkıyor.

Ancak bu verdiğim yerel koordinatlara bir de yıldızı çevreleyen dikdörtgenin konumunu eklemek gerekiyordu. Böylelikle yıldızı hilalin hemen sağına getirebilirdim. Bunun için yukarıda hesapladığım her bir koordinatın x bileşenine (0.35 + 1/3.0)*G, y bileşenine 3*G/8 eklemem gerekti. Bunları ekledikten sonra elimde gerçek ölçünlere uygun bir Türk bayrağı vardı. Ancak bayrağın en solunda bulunan beyaz kısmı dahil etmedim. Öyle bir şey olsa yukarıdaki tüm koordinatlara belli bir x değeri eklememiz gerekirdi.

Yazdığım kodları buradan indirebilirsiniz. Bir de şunu fark ettim, hemen hiçkimse bunca zamandır yıldızın eğik durduğunu fark etmemiş. :) Genişliği ortadan ikiye bölen çizgiyi hayal edin. O çizgi, yıldızın en soldaki sol açısının açıortayı durumunda.

18th Şub 2010 | Posted in: Okul 2

İlk Java dersinde -içeriği ne kadar basit olursa olsun- doğrudan bir Sınıf yazıp, ondan bir nesne üretip örnek çözmek çok da akıllıca bir fikir değilmiş. İkinci derste bunun farkına varıp C’de kod yazar gibi, bir static main metodunun içerisine yazdım tüm kodları. Basit toplama örnekleri, dizide arama örnekleri yaptım. Bu sefer de sıkıldılar. Çok benzer geldi. Çok farklılık göremediler.

Üçüncü derste ise Nesne Yönelimli Programlama kavramına tekrar giriş yaptım. Bu sefer kafamda kurduğum birçok benzetmeyi de kullandığım için çok iyi anladılar. En azından öyle gördüm :) . Dersten sonra da anlattıklarımı hazırladığım Google Docs belgesine ekledim. Hatta daha da güzelleştirerek, hikaye biçiminde anlatarak. Hikayemizin baş kahramanı Emre, yeni icat edilen bir Radyo’dan kendisine almakta, fazla kurcalayıp bozmakta, gerekli güvenlik önlemlerini (private vs.) almayan firma bu sebeple güvenlik açıklarını kapatıp yeni ürünü Emre’ye teslim etmekte. Umarım faydalı bir yazı olmuştur. Prosedürel C/C++ programlamayla uğraşmış olanlar için Java’ya ve Object Oriented kavramına güzel bir başlangıç noktası olabilir.

Buradan aşağısı konuyla alakasız, ilginç olaylar dizisi:

Üçüncü dersimizden önce 45 dakika kadar (bitişiğinde okulun jenaratörleri olduğu için UPS odası olarak da anılan) asistan odasındaydım. O sırada Amerikalı olduğunu sandığım, benim yaşlarda birisi geldi ve dedi ki: “UPS, tüm ülkelere diğer firmalar kadar hızlı gönderiyor mu?”. Afalladım. İlk başta acaba bir Türk geldi de dalga mı geçiyor diye düşündüm. “Bilmiyorum” dedim. “E, o zaman burada işin ne?” dedi, beni UPS kargo memuru sanarak. Dedim “burası benim odam değil, arkadaşımın. Hem burası kargo firması UPS’in ofisi değil, jenaratör odası.”. “Haaa, siz ona UPS mi diyorsunuuuuz?” dedi. Yuh diyecektim. UPS zaten İngilizce. Demek ki kargo firması UPS o kadar popüler ki UPS kelimesinin anlamını unutmuşlar.

Java dersinin ardından da akşam Veri Madenciliği ve Veri Ambarlama dersi vardı. Sınıfa girerken hoca “sizi bir yerden tanıyorum ben” dedi. Şaşırdım, ben hocayı tanımıyordum. Dedim “belki Işık’tan tanıyorsunuzdur”. “Evet, evet öyleydi” dedi. Tenefüsten sonra da buldu. 2008 sonbaharında Linux seminerlerini vermek için IT 101 derslerine girmiştim. O derslerden birisini de bu hocamız veriyormuş. Ben sunum yaparken izlemiş. Öyle deyince hatırladım. Hatta hatırlarken hatırlama mekanizmasıyla ilgili ilginç bir şey de hissettim. Burası birçok kişiye saçma veya sıradan gelebilir. Linux semineri demesiyle birlikte aklıma hemen seminerde gördüğüm yüz, ardından da hocanın ismi geldi: “haaa Songül Hanııım… E bu da Songül Hoca. E tabii ya…”. Çok tuhaf gelecek belki ancak şunları hissettim: beyindeki sinir ağının farklı noktalarında bulunan ve ancak aynı içeriğe sahip iki bilginin ard arda düşünülmesi sırasında yapılan sıçrama ve bu iki bilginin eşleşmesi. Sıçramanın da sanki bir Graph, hatta daha ziyade Tree üzerinde gezerek yapılması. Yani bilginin eski ve kısa bir süre içerisinde edinilmiş olması sebebiyle küçük bir yer kaplaması, bu sebeple yapraklara kadar gittikten sonra tekrar köke geri dönüp oradan diğer dallara yönelerek diğer eş bilginin bulunması. Diğer en güncel ve çok yer kaplayan bilgiye ulaşırken ise bu Tree üzerinde gezinme olayının hiç vakit almaması. Tüm bunlar yapılırken ilk bilginin unutulmaması, bir ön bellekte saklanması. Beni anlayabilen var mııı? :) Neyse, boşverin. Bu aralar beynin çalışma mekanizmasıyla fazlaca düşünüyorum galiba :D

Öte yandan projemiz için geliştirdiğimiz RobinViz adlı yazılımın beta sürümünü yayınladık. Umarım sorunsuz bir kararlı sürüme ulaşırız en yakın zamanda.

12th Şub 2010 | Posted in: BT, Okul 2

Java slaytları
C/C++ Programcıları için Java’ya Giriş

Geçen çarşamba günü üniversitede ilk dersimi verdim. Data Structures and Algorithms dersini verecek olan Cesim hocam ilk 2 hafta öğrencilere Java anlatmam için rica etti ve ben de memnuniyetle kabul ettim. Seminer vermeyeli uzun zaman olmuştu zaten :) Olley sonunda bir şeyler öğretebileceğim diye içten içe sevindim, her ne kadar Java’yı anlatmak zor olsa da.

Ders vakti geldiğinde önce öğrencilere Netbeans kurdurmaya çalıştım. Çoğu kişi internetten indirmekte sorun yaşadı. Ya bağlantı problemi ya da BİM engellemesi sebebiyle. Biz de USB Flash disk ile dağıttık. Millet kurmaya çalışırken baktım ki çok zaman geçiyor, hazırladığım sunum ile başladım anlatmaya. System.out.println’da sorun çıkmadı ancak Scanner sınıfını anlatmaya kalkınca Object Oriented’ın korkunçluğuyla yüzleştiler. Birkaç örnek yaptıysam da kendilerine çok yabancı gelen bu kavram kafalarını karıştırdı. Öyle olunca ben de madem öyle deyip doğrudan Object Oriented mantığını anlatmaya çalıştım. Class yapısını gösterdim, Python’da yaptığım gibi Insan sınıfı tanımladım ve bu sebeple o kısmı her zamanki gibi baya eğlenceli geçti diyebilirim ;)

Ders böylelikle bitti. Dersin sonuna doğru öğrencilerin geçen sene gördükleri C++’ı unuttuklarını fark etmem sebebiyle (Işık’ta 2. 3. ve 4. dönem üst üste programlama dersi olduğu için böyle olmuyordu sanki) çok da verimli olmadı gibi. Artık takviye birkaç belge hazırlayıp çalışmalarını bekleyeceğim, tabii bir de gelecek haftaki dersler var. Sanırım statik metodlar kullanarak nesne oluşturmadan gitmeyi deneyeceğim bu sefer. Bir öğrenciden de çok güzel bir geribildirim aldım, moral oldu :)

12th Oca 2010 | Posted in: Okul 3

Uzun zaman geçti yine yazmayalı, yazacak çok bir şey bulamadığımdan. Hayatım baya monotonlaştı bu aralar. Birinci dönemin dersleri bitti, final dönemi geldi. Haftada 3 gün dersim vardı ancak genelde 1 ya da 2’sine katıldım. Bir de ek olarak haftalık toplantılarımıza. Dönemin sonuna doğru haftalık toplantı sayısı 2′ye çıktı. Dolayısıyla 2 toplantı arası 2-3 gün vakit oluyor, bu sayede bir sonraki toplantıya sonuç götürebilmek için hafta boyunca çalışmak zorunda kalıyorum. İyi taktik.

Paralel programlama’da sadece sunum yaptım. Sunumun konusu Paralel sıralama idi. “Parallel sorting by regular sampling” adında oldukça ilginç bir yöntem kullanılıyor. Nasıl olup da bunca curcuna ardından sıralı bir liste çıkarabiliyor, hayret.

İşletim Sistemleri (Linux) ve Sistem Programlama (Bash/Python) dersleri ise hep proje bazlı oldu. Ödevler, vizeler ve finaller hepsi evde yapıldı :) O yüzden bu dönem oldukça rahat geçti diyebilirim. Şimdi İşletim Sistemleri finalim kaldı, onu da verdim mi tamamdır.

Önceki yazımda projemizi bir konferansa gönderdiğimizi söylemiştim, kabul edilmişiz. Gelecek ay hocam Hindistan’a giderek projenin sunumunu yapacak. Ben gitmiyorum, çünkü projeye tam hakim değilim ve Hindistan’a doktora için bağlantı kurabileceğim batılı hocalar pek gitmiyor. Bu aralar ise projenin kodlarını toparlama, eksiklerini giderme ve belgelendirmesini yapma gibi işlerle uğraşıyor olacağız. Çok mu heyecansız göründüm? Aradan zaman geçince böyle oluyor. İlk duyduğumda tabii ki oldukça sevinmiştim. Ne de olsa ilk makalem ;)

Ek olarak da hocamın aklına gelen yeni bir proje fikri üzerinde uğraşıyoruz, yine Graphlar üzerinde. Sıfırdan bir projeyi götürmek oldukça hoş. Çözülmesi zor gözüken problemlere kısıtlama, varsayım, ispat, karşıt-örnek (counter example), zıtlık (contraposition), tümevarım (induction) gibi yöntemler uygulayarak çözüldüklerini görmek harika. 5 sene önce aldığım Ayrık Matematik (Discrete Mathematics) dersinin uygulamalarını yapıyorum yani.

Hocamın verdiği Discrete dersinin ilk quizlerini ben okumuştum, bununla birlikte vizeyi ve 2. quizi de bana okutturdu. Finalden de birkaç soru verecekmiş sanırım :S Neyse, oldukça hızlandım sayılır. Sınavların ortalamaları da -sayemde- 48 – 58 arasında değişiyor. Dersi ben versem öğrencilerin anladığını görmek daha zevkli olacak ancak şu halde derdini anlatmaktan aciz bazı öğrencilerin kağıdını okutmak oldukça sıkabiliyor :) Gelecek dönem de Veri Yapıları (Data Structures) dersi için ilk 2-3 hafta C++ bilen öğrencilere Java anlatacakmışım. Sözdizimini (Syntax) kavrayabilmeleri için. Ahh Javaaa, yine mi sen?!

Web geliştirmeden bu aralar koptum gibi ancak yakında projemiz için bir web sitesi yapacakmışız. Belki bu vesileyle tekrar ısınabilirim. Unutmadan, bu web 2.0 furyaları bitmiyor. Formspring denilen “bana soru sor, cevaplayayım” sitesine ben de üye oldum. Açık veya gizli kimlikle sorularınızı buradan sorabilirsiniz.

Aralık sonundan başlamak suretiyle de bir Kanada özlemi başladı bende, bitmiyor. Evet, 1 yıl geçmiş oraya gideli. Yıldönümünde yolculuğumu, Kanada’daki ilk günümü, Starbucks’ta kahve içişimde Tim Hortons’ta içtiğim kahveyi -sanırım en son Kanada’da içmiştim kahveyi-, kar yağdığında Kanada’nın lapa lapa yağan karını ve yoğun kar kokusunu hatırladım. Keşke arada gidip gelebilsem. Kış boyunca İstanbul’da gözlenen bahar havalarının da bir nimet olduğunu anladım. Bol bol vapurun açık kısmında seyahat ediyorum. Özellikle geceleri çok hoş oluyor.

5th Kas 2009 | Posted in: Okul 0

“Hemen doktor çağırıııın” espirisini yapmayacağım tabii ki. Onun yerine minibüsten inecekken “Kadir Hasta inecek var” diyen yolcuya “N’apim Kadir hastaysa!” espirisini yapan şoförden bahsetmek daha bir nezih olacak. Neticeye gelecek olursak, Kadir Has Anadolu Lisesini bitirmiş olan ben, yüksek lisans için bu sefer Kadir Has Üniversitesi’ne resmen kayıt yaptırmış bulunmaktayım.

Bunun resmisi gayriresmisi olur mu diyorsanız, kayıt işlemlerim kabulden sonra 1,5 ay kadar sürdüğü için böyle dedim. Biraz bürokrasi var, biraz da okula her gün gidemediğim için, gittiğimde de mutlaka birilerini bulamadığım için bu kadar uzadı. Kayıt prosedürü şöyle:

  1. Enstitüden kayıt belgelerini geri alın, imzalayın.
  2. Enstitü müdüründen imza alın, ek olarak olur da muhasebe sorun çıkarırsa diye burs miktarını belirttirin.
  3. Muhasebeye gidin, imzalasınlar belgeleri, ek olarak söyleyin bilgisayara da giriş yapsınlar.
  4. Bölümdeki danışman hocanıza gidin, kaydınızı onaylasın.
  5. Öğrenci işlerine gidin, onaylasınlar, geçici kayıt kartı versinler.
  6. Öğrenci işlerinde bursunuzun sisteme girilmesini sağlayın, yoksa ders seçimi yapamazsınız.
  7. Ders seçimi sistemine girin, derslerinizi ekleyip danışman hocanıza gönderin.
  8. Danışman hocanızın yanına gidip onaylamasını söyleyin, çıktısını alsın, imzalayın, bir kopya sizde bir kopya onda kalsın.
  9. Güvenliğe giderek manyetik kimlik kartı çıkarttırın.
  10. Bilgi işleme gidip e-posta adresi alın.
  11. Seçimlik: bilgi işlem yardım masasına giderek kablosuz ağ hesabı açtırıp ayar yaptırabilir, kütüphaneye giderek dış erişim hesabı açtırabilirsiniz (tahminimce)

Şimdi okulda kimin ne yaptığından kimsenin haberi olmadığı için o ona bu buna yolluyor, baya bir karmaşa oluyor. Yüksek lisans programları başlayalı daha kısa bir süre olduğu için böyle olduğunu tahmin ediyorum. Neyse, Bilgisayar Mühendisliğinden Paralel Programlama, IT’den ise Linux ve Linux programlama konulu dersler aldım. Okula ulaşımım zor (2-3 saat  X 2) olduğu için ilk dönemden ağır derslerle yüklenmek istemedim. Şimdilik güzel gidiyor gibi.

Öte yandan asistanlık işlerine çoktan başladım. Bir buçuk aydır “Protein-Protein Etkileşimlerinin Görselleştirilmesi” temalı bir projede çalışıyorum. Geceli gündüzlü yoğun bir çalışma temposunun ardından bir makale gönderimi yaptık. Sonucunu bekliyoruz, öte yandan durmak yok tabii, devam ediyoruz. Gönderdiğimiz makalenin son aşamasına büyük ölçüde katkım dokundu, şöyle ki C++ kodlarının içinden çıkamıyorken işi Python ile hallediverdim. Ancak algoritma oldukça karışık olduğundan koddaki  ya da algoritmadaki ufak bir hatayı bir türlü tespit edemedim. Şu aralar onun üzerinde uğraşıyorum. Bu arada Graph Theory alanını sevdim gibi. Biraz Geometri ve Trigonometri, bol bol da heuristic (çözüm uydurma) yöntemleri kullanıyorum.

Ayrıca ilk notlandırmamı da yaptım. Ayrık Matematik (Discrete Mathematics) dersinin quizlerini notlandırdım. 55 kişi, 3′er soru. Adil notlandırmaya çalışınca baya uzun sürdü. Neyse ki bol not dağıttım ki sınıf ortalaması 5.75 / 10.00 çıktı.

İşte gelişmeler böyle şimdilik…