Sayfalar

21 Ağustos 2012 Salı

Alan Adı Değişikliği

Merhaba arkadaşlar, uzun zamandır tumblr'da İngilizce olarak yazılar yazıyorum bu adreste. Fakat gerek tumblr'ın istatistik verilerini sağlayamaması gerekse benim blogger'ı daha çok sevmemden dolayı, bu yazılara blogger'da devam etmeye karar verdim. Ve bu yazılara ozanyildiz.blogspot.com adresinde devam etmek istediğim için, hali hazırda bu alan adıyla kullandığım bu sitenin alan adının sonuna "tr" ekledim. Bu site artık hayatına ozanyildiztr.blogspot.com adıyla devam edecek. Tumblr'daki yazıları da yavaş yavaş eklemeye başlayacağım. Artık beni buradan takip edebilirsiniz.

Görüşmek üzere.

19 Şubat 2012 Pazar

C ile Multithreading Örneği

Geçen dönem İşletim Sistemleri dersinin en heyecanlı lab dersi Thread konusundakiydi. Bir programın yapacağı işi parçalara bölmek ve her parçayı ayrı ayrı thread’lere paralel olarak yaptırma fikri gerçekten herkesin ilgisini çekmişti.

Labda yaptığımız örnek ise Silberschatz’ın kitabındaki matris çarpma projesi oldu. Labdan kısaca bahsedeyim: A ve B matrisini çarpıp C matrisi elde ediyoruz. Yalnız bu çarpma işlemini yaparken C’nin her bir elemanını ayrı ayrı thread’lerde hesaplıyoruz. Örneğin, A 3x2 bir matris ve B 2x3 bir matris olsun, çarpma sonucu oluşan C matrisi bu durumda 3x3 olur ve C matrisini oluşturmak için toplam 9 thread kullanılırız. Umarım anlatabilmişimdir.

Labın kodlama kısmı şöyle:


Şimdi ise nasıl derleyip çalıştırdığımıza ve çıktısına bakalım.

ozan@pardus2011 Labs $ gcc thread_project2.c -o thread_project2.o -pthread
ozan@pardus2011 Labs $ ./thread_project2.o  
28      23      18
41      34      27
54      45      36

Görüşmek üzere.

4 Şubat 2012 Cumartesi

Pygame ile Zombi Oyunu Denemesi

Daha önce de bahsettiğim gibi Pygame ile uğraşmak istiyordum. Başlangıç için ufak bir zombi oyunu yapmaya karar verdim. Şu ana kadar, temel bazı şeylerin programlaması bitti, mermi ve zombilerin hareketleri gibi.

Bu aşamaya kadar yazarken, beni biraz da olsa zorlayan kısım mermilerin nasıl çapraz hareket edeceği oldu. Bu sorunu halletmek için mermilerin x ve y koordinatlarını belli bir açının sinüs ve kosinüsleriyle arttırarak çözdüm. Bu oyunda ise o açı, asker ve hedef arasında kalan açı.

Yalnız hala çözemediğim bi’ şey var. Hareket halindeyken ateş edince mermiler falso alıyormuş gibi gözüküyor. Bu olması gereken bir durum mu yoksa göz ardı ettiğim bir durum mu hala karar veremedim.

Bir sonraki aşama için ise eklenebilecek pek çok şey var gibi gözüküyor. Öncelikle, zombiler ve asker resimleri olarak kareler yerine resimler koymak istiyorum, tabii uygun spritesheet’leri bulabilirsem. Daha sonra, silahların geliştirilebilir olması, zombilerin bölümler geçtikçe daha hızlı hareket etmesi, bazılarının bize fırlatabilecekleri şeylerin olması aklıma ilk gelenler.

Ama bu aralar Unity3D'ye merak saldığım için devam eder miyim bilmiyorum.

Oyundan bir görüntü:


Kodu çok dağınık yazdığım için koymadım. Biraz vakit harcayıp düzelttikten sonra koymayı düşünüyorum.

Görüşmek üzere.

16 Ocak 2012 Pazartesi

Burada Neler Oluyor?

Bir dönemi daha geride bıraktık. Bu dönem boyunca blogu çok fazla ihmal ettim. Gerek derslerin yoğunluğu gerekse projeler fazlasıyla vakit alıcıydı. Ama bugün son final sınavının bitmesiyle hiçbir engel kalmadı ve kendimi hemen buraya attım. Bu yazıda da bu süreçte aklımda kalan bir-iki şeyden bahsedeceğim.

Geçen dönemin en flaş dersi Bilgisayar Oyunlarına Giriş oldu benim için. Garip bi’ şekilde çok sevdim. Ders projesi olarak Jurump adlı bir oyun yaptık. Dersi sevmemin sebebi bu dönem içerisinde Humble Indie Bundle’ı keşfetmem oldu sanırım. Herhalde, oradaki acayip orijinal, süper oyunları görünce ben de o tarzda bir oyun yapmak istedim. Ama tabii olaya yeni başladığım için yaptığımız oyun basit bir oyun oldu. Başka bir yazıda bahsetmeyi düşünüyorum bu oyundan.

Ee, şimdi tatil zamanı. Bu tatilde yapmak istediğim bazı şeyler var. Python’dan çok uzaklaştım, ona biraz yönelmeyi düşünüyorum. Pygame ile basit bi’ zombi öldürme oyunu düşüncem var. Git’i öğrenmek istiyorum. Geçen yaz Github’da hesap açıp ilk adımları attım ama şimdi onları da unuttum. Ve de blogu güncel tutmak istiyorum.

Bu arada sizlere son bi’ şeyden daha bahsetmek istiyorum. Kodlama yaparken veya çalışırken müzik dinlemeyi seviyorsanız mutlaka Grooveshark’ın Ambient tarzdaki radyosunu dinleyin. Mükemmel şarkılar çıkıyor. Ben sağlam adamlar keşfettim, Milosh, Deaf Center, Max Richter, M83 bunlardan bazıları.

Lamp Mien by Deaf Center on Grooveshark

Şimdilik benden bu kadar.

Görüşmek üzere.

12 Eylül 2011 Pazartesi

Python’da NetworkX ile Graph Denemeleri

Geçen dönem C ile gördüğümüz graph algoritmalarını bir de Python ile denemek istedim. Ve bu işlemleri daha kolay yapabileceğimiz bir kütüphane arayışına girdim. Stackoverflow’da bu konuyla alakalı şu soruyu da görünce, NetworkX ile tanışmış oldum.

Gerekli yüklemeleri yaptıktan sonra, bu kütüphaneyle biraz uğraşmak adına unweighted (unit-weight) shortest path algoritmasını yazmayı denedim. Ve de bu kütüphanenin özelliklerinden biri olan ve beni heyecanlandıran oluşturduğumuz graph’ları mathplotlib ile çizdirme özelliğini de görmek istedim.

C ile yazarken graph’ı tutmak için 2 boyutlu array kullanmıştık ve bu array’in boyutunu da node sayısı belirlemişti. Node’ların komşuluklarını (adjacency) belirlemek için ise kesişim yerlerine flag koymuştuk, Graph[1][3] = -1 gibi. Eğer unweighted değilse, iki node’un arasındaki ağırlık neyse onu yazmıştık.

NetworkX’te ise herşey daha kolay. Kullanıcının işini kolaylaştıran add_node(), add_edge() vb. methodlar var. Eğer edge’lere ağırlık eklemek istersek G.add_edge(1, 2, weight=4.7 )
ve G.edge[1][2]['weight'] = 4 gibi kullanımlar mevcut.

Kendi sitesindeki başlangıç tutorial’ı için buraya bakabilirsiniz. Gerçekten uğraşması zevkli bir kütüphane.

Yazıyı bitirmeden önce bahsettiğim algoritmayı ve çıktı resmini ekliyorum.


Kaynak 3, hedef 6 iken oluşan görüntü:


Aslında kodun bu kadar uzun sürmemesi gerekiyordu. Ben çıktıyı biraz daha süslemek istediğim için oldu galiba. Bu süslemeyi yaparken de şuradaki örnek çok işime yaramıştı.

Görüşmek üzere.

24 Ağustos 2011 Çarşamba

Python ile Twitter'dan Trending Topics Almak

Geçenlerde Twitter’da gündem konuları (Trending topics’in Türkçe’si buymuş.) hakkında yazılanlara bakıyordum yine, bi’ hesap gördüm. 15 dakikada bir - veya 30 tam hatırlamıyorum - bu konuları otomatik olarak tweet atıyordu. “Aaa!” dedim, “Acaba bunu nasıl yapmışlar?”.

Daha sonra Twitter api’lerini buradan incelemeye başladım. GET Trends tam benim aradığım şeydi. Ayrıca Twitter, gündem konularını almak için günlük, haftalık gibi seçenekler de sunmuş, buradan bakabilirsiniz. Dikkat ettiyseniz bu konular JSON uzantısıyla geliyor. JSON’u daha önce duymuştum ama ne olduğuna dair fazla bilgim yoktu. Biraz araştırdıktan sonra artık işin Python kısmı için hazırdım.

Python’da JSON dosyalarını decode etmek için simplejson kullandım. Bu kütüphaneyi de böylece ilk defa kullanmış oldum. Kodlar şu şekilde:


Kodun içerisindeki yorum satırını aktive ederek gelen JSON dosyasının içeriğini görebilirsiniz.

Bu arada simplejson için buraya, JSON için ise wikipedia sayfasına bakabilirsiniz.

Son olarak hem örnek bir çıktı göstermek hem de bu yazıyı yazarken Twitter'da gündem konuları neymiş öğrenmek için programı çalıştırıp sonucu yapıştırıyorum.

['#Cheers2Rihanna',
'#HappyBirthdayRupert',
'SMASH HEART SCTV',
'#bakerfilms',
'Jorge Luis Borges',
'Charlie and the Chocolate Factory',
'TOTP',
'QPR',
'Brenda Song',
'Trace Cyrus']

Görüşmek üzere.

GÜNCELLEME: Kod, Twitter API'sinin değişen methodu nedeniyle yenilendi. (11.02.2012)

21 Ağustos 2011 Pazar

Merhaba Dünya!

Uzun süre önce almıştım blogspot’tan bu adresi. “ozanyildiz” isminin uygun olduğunu görünce hemen üye olmuştum. Gmail, hotmail, yahoo gibi e-mail servislerinden isim alırken aynı şekilde şanslı değildim. Yahoo’nun “rocketmail.com” uzantısını bile denediğimi hatırlıyorum.

Aslında çoktandır bi’ şeyler yazmayı düşünüyordum fakat kafamda bazı sorular vardı. Baktım zaman geçiyor, daha fazla bu sorular üzerinde düşünmeden bu fikri aksiyona geçirmeye karar verdim. (Cümleye bak be!)

Umarım uzun soluklu bi’ şey olur. Daha sonra görüşmek üzere.