Bir süredir sitemi arkadaşım Remzi’nin slicehost VPS’inde barındırıyordum ancak ping süreleri 177 ms civarlarında olmasına rağmen sitenin bulunmasında ve yüklenmesinde ciddi sorunlar vardı. HTML/CSS bozuklukları meydana geliyordu ve tanımlayamadığım bu sorunları çözemedim. Tek bildiğim Apache’nin zaman zaman böyle şeyler yaptığı. Ben de sistem yönetimi konusunda uzman olmadığım için sunucuları Türkiye’de olan hosting firmalarını araştırmaya koyuldum ve sitemi bu firmalardan birine taşıdım. Şimdilik her şey güzel gibi. Ancak sitemin erişilemediği 2 haftalık süre içerisinde maalesef ciddi ziyaretçi kaybına uğradım. Umarım durum düzelir.
Okul da güzel ve yoğun gidiyor, Veri Madenciliği’nin 1. vizesini olduk. İşlem hatası yoksa fena geçmedi, zira 5 sayfaya yakın işlem vardı. Hesap makinesi kullanarak yaptık hepsini ancak makine kullanmaya alışkın olmayan bir birey olarak karıştırmadıysam iyidir. Sonuçları sabırsızlıkla bekliyoruz
Dün okul Tiyatro ekibimizin gösterimi vardı, ona katıldım. Yıllardır tiyatroya gitmediğimi fark ettim. En son lisedeyken 2-3 yıl kendim oynamıştım
Oldukça başarılı bir oyundu. Trajikomik, zaman zaman duygulandıran, zaman zaman güldüren, bol taklit, dalga geçme, mesaj gönderme unsurları içeren bir oyundu. Akşam durakta ekipten birkaç kişiyi gördüm ve tebrik ettim. Öğrendim ki haftada 3 gün, oyuna yaklaşırken ise her gün çalışıyorlarmış. Pes doğrusu. Ben de isterdim ancak o kadar vaktim yok maalesef.
Yine aynı gün Real Time and Embedded Systems konulu bir seminer vardı. Bir firmadan konuşmacı gelmiş.Gerçek zamanlı ve gömülü sistem tanımını yaptı ve geliştirme aşamalarından bahsetti. Bu alanda en büyük problem hata ayıklamaymış. Genel bir girişin ardından Windows CE 6.0 işletim sistemini tanıttı. Duyduğuma göre geliştirme lisansı $999, sistem başına $8-20 imiş. Öte yandan mikroişlemci fiyatlarının € 1 dolaylarında olduğunu öğrenip şaşkınlık yaşadım. Eğlenceli konular olmalı. Gömülü sistemler için sadece Windows CE yok tabii ki. En popüleri TinyOS olmakla birlikte sürüyle işletim sistemi var. Yazılım geliştirme için de dil çeşitliliği mevcut: Assembly/C/C++/C#/Java/Python/Tcl/Lua.
Nette gezinirken rastladığım Python’la alakalı çeşitli çalışmalar:
- http://www.nongnu.org/pyet/
- http://code.google.com/p/python-on-a-chip/
- http://www.philhassey.com/blog/2009/12/01/restricted-tinypy-to-c-compiler/
- http://code.google.com/p/shedskin/ (Python => C++ çevirici)
Diğer bir duyuru: 13 Nisan Salı 13.00′da arasında arkadaşım Erçin Dinçer Linux semineri, sonraki haftalarda salı 13-16 arasında ise bash komutlarını hızlıca geçerek sistem yönetimine dair kurs verecek. Linux temellerinden ziyade yönetimine dair olacakmış. Kursun hazirana kadar, belki daha da uzun sürmesi bekleniyor. Kurs Kadir Has Üniversitesi’nde olacak. Salonu hatırlamıyorum ancak D Bloktan girince camda afişleri görürsünüz zaten.
Geçen dönemin oldukça rahat geçtiğini söylemiştim. Sanki birileri beni duydu
Bu dönem ise tam tersi oldukça yoğun geçiyor. Ödev üzerine ödev… Olup biteni başlıklar halinde anlatmaya çalışacağım.
Yazılım Mühendisliği
Son yazımda anlattığım Türk Bayrağı projesinden sonra bu seferki proje Conway’in Hayat Oyunu oldu. Bunu da Java’da yaptım ve applet olarak sitemde yayınladım. Buradan ulaşabilirsiniz ancak applet kapanmazsa sekmeyi/tarayıcıyı kapatmanız gerekebilir. Kapatma işini halledemedim. Ayrıca Internet Explorer’da çalışmadığına dair duyumlar aldım. Applet yapmayı da öğrenmek gerekiyor bir ara
Bu oyunumsu şeyde ekrandaki siyah alanlar ölü hücreleri, beyaz alanlar ise canlı hücreleri temsil ediyor. Hücrelere tıklayarak ölü/canlı haline getirebilirsiniz. Iterate tuşuna basarak da bir sonraki adımda hücrelerin genel hali ne olacak onu görebiliyorsunuz. Her adımda ne olacağının belirli kuralları var. Yukarıdaki wiki makalesinde bu kurallar mevcut. Kodlarını projenin teslim tarihi geçince github hesabıma koyacağım.
Ardından Julia Set Fractals konulu bir sunum gerçekleştirdim. Fractal çizimlerinin nasıl yapıldığını anlattım ve örnek kodları kullanarak farklı parametrelerle farklı şekiller elde edebilmelerini sağladım. Güzel oldu diyebilirim. Çizimlerde sadece mavi renk kullandım. Rengarenk nasıl yapılır onu çözemedim. 256 rengi bir şekilde RGB’ye dönüştürmek gerekli. Kodlar burada.
Şimdi de sırada dersin büyük projesi var. Bu projede ise eskiden Python ile prototipini yaptığım Gözetmen‘i Java’da yazmayı planlıyorum. Bakalım olacak mı…
Algoritma Analizi
Lisansta gördüğümüz konuları tekrar ediyoruz. Şimdilerde dinamik programlama ile çözülebilen bazı problemleri incelemekteyiz. Bu derste de projemiz var, Optimal Binary Search Tree’yi kodlayacağız. İlk adım olan quicksort’un 3 farklı sürümünü yazdım. Şimdi asıl adıma başlayacağım.
Veri Madenciliği
Beklediğimden güzel gidiyor. IT dersi olmasına rağmen mühendislik tadında işliyor hoca. Baya bir şey öğreniyoruz. İlk ödevi verdi ancak ödevin 5. sorusu Matlab ile PCA kodlamaca. Uğraştıracak gibi. Zevkli bir ders ama.
Veri Yapıları
Öte yandan da asistanlığını yaptığım bu dersin de Quizleri okunmak üzere bekliyor. Neyse ki sorulardan 2′si boşluk doldurma ve kısa cevap şeklinde. Kısa süreceğini umuyorum. Arkadaşım asistan Caner’in odasında takıldığım zamanlar bazen öğrencilerden Serkan gelip soru bombardımanına tutuyor, ben de çeşitli canlandırmalarla (tiyatro gibi) konuları anlatıyorum. Eğlenceli oluyor, tabii uzun sürmezse
Hatta bu piyesleri youtube’a mı koysak gibi fikirler de çıkmadı değil
Akademik Çalışmalar
Bu aralar ikincil projemize yoğunlaştık. Mevcut çalışmaları tararken oldukça ilginç makalelere rastladım. Bunlardan birisinin sunumunu yaptım. Diğer bir makaleyi bizim problemimize uyarlama üzerinde çalışmam gerekiyor bu aralar. Bakalım buradan da bir makale çıkacak mı…
Havadan Sudan
Bir github hesabı açtım ve şimdiye kadar yazdığım kodlardan bazılarını buraya koydum. Hem arşiv olsun, hem derli toplu olsun, millet ulaşabilsin diye. Öte yandan belediyemize geri dönüşümle ilgili bir hizmet verip vermediklerini sordum. Bir cevap gelmiş ama spam klasörüne düşmüş, ben de yanlışlıkla sildim. Tekrar e-posta attığımda ise cevap alamadım ancak ertesi gün eve zabıtalar gelmiş “Atık ambalajınız varmış onu almaya geldik” diye. Ya sadece sordum ben, var demedim ki! Birkaç gün sonra da sitelere ambalaj atık toplama kutusu yerleştirmişler. Acaba ben söyledim diye mi, yoksa zaten yapılıyor muydu bilmem. Şimdi sırada evimize bu atıkları toplamak için uygun bir kutu bulmakta ancak plastik/cam ayrı toplayan ikili bir kutu bulmam lazım. Arayışlardayım.
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.
İ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
Ö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.
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