Ev Arşiv Hakkında

Mezun olmak - buna değer mi?

21-9-2011, 5:59 ö.s. // yorum // // 440

Üniversiteye başlarsınız, istediğiniz bir bölümdesinizdir, artık ilgilendiğiniz bu alanla alakalı dersler alacaksınızdır, lisede, sorgusuz/sualsiz ezberlemeniz beklenen(o yaptığımız şeye öğrenmek diyemiyorum) sürü ders artık yok. Sadece sevdiğiniz şeyler. Değil mi?

Çok sevdiğim okulumda(burda not düşme ihtiyacı hissettim, bursluyum, tercih ettiğim sırada bir sürü alternatifim vardı yani, mecbur kalma durumu yok), 4 senelik lisans eğitiminde tam 6 dönem ikinci bir yabancı dil dersi almak zorundayız. Bu dersler(en azından benim aldığım), eğer altyapınız yoksa, ilk dönemden itibaren çalışmadan geçilebilecek dersler değil. Haftada 4 saat. Haftada birkaç saat ayırmazsanız kalacağınız garanti. Ve o birkaç saatte yapılacak daha iyi bir işiniz her zaman vardır(en azından benim için). Burda problem sadece zaman ayırma değil aslında, sevmediğiniz, istemediğiniz bir dersi 6 dönem almak zorunda olmanız. Düşündükçe fena oluyorum. Üzerine bir de İngilizce dersleri var, onlardan muaf olmasaydım delirirdim herhalde.

Diğer yandan, 4 dönem boyunca, 2 dönem Türkçe, 2 dönem inklap tarihi olmak üzere süper gerekli dersler almak zorunda kalırsınız. Bu derslere bir kere bile girmeseniz bile hocanız büyük ihtimalle sizi bırakmaz. Notlarınız da ~30 civarı olursa DD ile geçersiniz(ben yaptım ordan biliyorum). Not ortalamasını takmıyorsanız sorun değil. Ama siz takmasanız da, başkalarının(staj/iş/yüksek lisans vs.) takmayacağını bilemezsiniz. Not ortalamanıza bakan kişinin bu not ortalaması hangi derslerden oluşmuş haberi bile olmayacak.

Okulunuz büyük ihtimalle sizden mezun olana kadar teknik olmayan seçmeli bir ders almanızı da ister. İstemediğiniz bir ders daha. "Ben sadece bölümümden almak istiyorum, başka hiçbir şey bilmek istemiyorum, tüm sorumluluk bana ait" deme gibi bir şansınız yok. Mezun olamazsınız. Neyse ki seçecek bir sürü alternatifiniz vardır, ilginizi çeken başka birşey bulabilirsiniz. O kadar sorun olmaz. Ayrıca mezun olmak da çok önemli(özel bir üniversitede bursluysanız, okulu bırakmamanız için başka sebepler de olabilir, bazı şartlar falan, bu kısmı araştıracağım).

Bir de ne yapmaya çalıştığını anlamadığınız okulunuz sizden mezun olana kadar 2 endüstri, 1 işletme dersi almanızı ister(Mühendisler için olasılık ve istatistik, mühendislik ekonomisi, girişimcilik ve liderlik), işin tadı kaçar. Hocanız, sizin işinize yarayacak konuları seçmiştir, fakat hiçbir kitapda o konular düzenli olarak olmadığından, kendisi not falan hazırlar. Derse girmeyen siz, sınav vakti geldiğinde, çalışacak hiçbir şey bulamazsınız. Kitap bile yoktur ki?! Yüzlerce not arasından birşeyler çalışırsınız, notlarda hiçbir şekilde herhangi bir tanım yoktur, birşeyler kullanılır, hesaplar yapılır, ama herhangi bir terimin ne anlama geldiğini kesinlikle bilmezsiniz. CC ile geçersiniz(olasılık ve istatistik'de başıma geldi, ne öğrendin derseniz, Bx alan arkadaşlar bile hiçbir şey öğrenmediklerini söylüyorlar, dersin yarısını bilgisyar müh. öğrencileri zaten ayrık matematik dersinde görmüştü).

Yatay geçiş ile, daha iyi olduğunu(en azından müfredat açısından) düşündüğünüz bir üniversiteye geçmek isterseniz, sizin not ortalamanızdan çok uzak bir not ortalamasına sahip olmanız istenir. Halbuki ortak ders çok azdır. Yani, Japonca(ilk paragrafta bahsettiğim 2. zorunlu seçmeli yabancı dil) ve endüstri dersi olan olasılık ve istatistikden DD aldıysanız, bu not ortalamanızı düşürdüyse ve bu derse sahip olmayan/dersi bilgisayar mühendisliği müfredatına koymamış X üniversitesine girmek istediğinizde neden bu not ortalamasına bakılır ki? Gerekli derslere göre hesapla falan, akıllı mantıklı bir şey yap. WTF?!.

Böyle işte. Kendi durumumdan bahsettim biraz. 1 sene sonra ne halde olacağımı gerçekten çok merak ediyorum(şu ana kadar hiç merak etmemiştim). Şu sıralar kafam çok ciddi bir şekilde karışık.

Pygame ve düzensiz sprite sheetlerle çalışmak

8-9-2011, 6:48 ö.s. // yorum // python , pygame // 520

Pazartesi günü başlayacak Pyweek'e katılacağım, benim ilk oyunum olacağından daha en temel problemler bile benim için yeni, ve çözümlerini yavaş yavaş keşfediyorum. Birkaç gündür basit oyunlar yapıyorum ve iş bir yerden sonra animasyonlara geldi.

2d oyunlarla ilgilendiyseniz, animasyonların aslında sprite adı verilen png/gif/vs. dosyalarından oluştuğunu bilirsiniz. Animasyonlar çoğu zaman(AAA oyunladan bahsetmiyoruz tabii ki) birkaç kareden oluşuyor ve bunlar genelde tek bir dosyaya aralıklarla yerleştirilmiş oluyorlar. Bunlara sprite sheet deniyor. Örneğin bir karakter koşuyorsa, ilk kare, yukarıdan 100, soldan 50. pixelden itibaren, 40px yüksekliğinde ve 30px genişliğinde oluyor. Bir sonraki kare onun biraz yanında vs. Bu şekilde çalışmak gayet kolay oluyor. Bir kere büyük resmi yükledikten sonra, ondan subsurfacelar oluşturuyorsunuz. Peki neden ayrı ayrı resimler değil? Bunun hakkında iki güzel kaynak: 1, 2.

Çizim işinden hiç anlamadığımdan, sprite sheetleri genelde deviantart'dan ediniyorum. Fakat şu ana kadar basit bir şekilde kullanılabilir bir sprite sheet görmedim. Sprite sheetleri basitce ayrıştırmak için en azından spriteların resim üzerinde eşit aralıklarla falan bölünmesi lazım. Benim bulduklarımın hiçbiri bu şekilde değil. Ne eşit aralıklılar, ne de eşit boyutlu. Tüm kareleri tespit edebilmek için, ya elle ölçecektim, ya da benim için ölçecek bir program yazacaktım :) .

Tabii ki program yazdım. Aşağıda nasıl çalıştığının bir örneğini görebilirsiniz. Gösterdiğim sprite sheet'i tarayıp, birbirlerinden ayrılmış tüm parçaları bulup işaretliyor, mouse ile üzerine geldiğinizde, koordinatlarını ve boyutlarını yazıyor. Bunu sadece Pygame kullanarak yapıyor.(büyültmek için üzerine tıklayın)

Biraz da işin en zevkli kısmından, problemin çözümünden ve algoritmadan bahsedeyim. Program şu şekilde çalışıyor:

Her bir pixel için, eğer pixel colorkey'e eşit değilse(colorkey saydam olacak kısmın rengi ve derinliği oluyor), pixelin içinde olduğu veya komşu olduğu grubu ara. Burda grup bir pygame.Rect. Yani dikdörtgensel bir alan. Eğer bu pixeli içeren bir grup yoksa, bu pixeli içeren en küçük Rect'i gruplara ekle. Eğer piksel Rect'in içindeyse, birşey yapma, komşuysa, Rect'i o pixeli kapsayacak şekilde büyült. Eğer bir pixel birden fazla gruba komşuysa(veya içindeyse), bu iki grubu birleştir. Grupların son hali de ekran görüntülerinde gördüğünüz kırmızı alanlar. Aşağıda bir de Travis Touchdown(No More Heroes'dan) sprite sheeti üzerinde çalışmasını görebilirsiniz.

Böyle işte. Scripti şurdan görebilirsiniz. Konuyla alakalı her türlü algoritma öneri/tavsiye/eleştirisine açığım. Hatta mutlu olurum yani, acımasızca eleştirin lütfen :) .

Life.js - Javascript + DOM ile Game of Life

22-8-2011, 5:51 ö.s. // yorum // javascript // 416

Life.js, Javascript ile yazılmış basit bir Conway's Game of Life oyunu(ya da adı her neyse işte).

Geçen hafta kurcalamaya başladığım Javascript ile dün yazdım. Amacım basit birkaç şey yazarak Javascript'i az da olsa anlayabilmekti. Grid'i çizdirmek ve hareketler için DOM ile, bir tablo çizdiriyorum ve tablodaki alanların arkaplan renklerini değiştiriyorum.

Aşağıdaki gibi, sayfanızın istediğiniz herine Game of Life gridi koyup, istediğiniz hücreleri canlandırabilirsiniz,

<div id="lifegrid" style="height: 300px;"></div>
<script src="life.js"></script>
<script>
    var opts = {'height': 9,
                'width': 22};
    var life = new Life(opts);
    life.revive(life.grid, 3, 4);
    life.revive(life.grid, 4, 4);
    life.revive(life.grid, 5, 4);
    life.revive(life.grid, 6, 4);
    life.revive(life.grid, 7, 4);
    life.revive(life.grid, 8, 4);
    life.revive(life.grid, 9, 4);
    life.revive(life.grid, 10, 4);
    life.revive(life.grid, 11, 4);
    life.revive(life.grid, 12, 4);
    life.drawTable(document.getElementById("lifegrid"));
    life.run();
</script>

Ya da rastgele oluşturulmuş bir oyun(yeniden oluşturmak için üstüne tıklayın):

<div id="lifegrid"></div>
<script>
    var opts = {'height': 30,
                'width': 30};
    var life = new Life(opts);
    life.fillRandom();
    life.drawTable(document.getElementById("lifegrid"));
    life.run();
</script>

Henüz Javascript konusunda bir karara varamadım. Bir süre daha kurcalamaya devam edeceğim sanırım. Web programlama/tasarım olaylarından hiç hoşlanmayan biri olarak, Javascript'e başlama sebebim, neden sürekli farkı dillerden Javascript'e derleyicilerin yazıldığını(CoffeeScript, ClojureScript, Pyjamas, HaXe) ve Javascript içerisinde Linux veya Javascript PC emulator gibi uygulamaların nasıl ve neden yapıldığını, V8, Node.js tarayıcı eklentileri ve DOM gibi şeyleri az da olsa anlayabilmekti. DOM kısmı hariç henüz amacıma yaklaşamadım diyebilirim.

DOM kısmı işin en kolayı diyebilirim(ya da en azından başlangıç seviyesinde öyle gözüküyor). Daha önceden XML parse etmekle vs. uğraştıysanız muhtemelen yabancılık çekmeyeceksiniz. DOM öğrenmenin en eğlenceli yolu, bence, rastgele sayfaları açıp, resimler veya içeriği başka şeylerle değiştirmek, butonlar vb. şeyler eklemek. HTML konusunda iyi olmadığımdan çok fazla birşey yapamadım ama en azından Google logosu yerine lolcat veya osa1 logosu koymak güzel oluyor($('hplogo').style.cssText += "background-image: url(http://osa1.net/media/logo.png)" :)

Şurdan indirebilirsiniz. Javascript ile yazdığım ilk uygulamam olmasından ve öğrenmem + uygulamayı yazmamın toplam 4-5 akşam sürmesinden dolayı, kod iyi bir Javascript kodu sayılmaz muhtemelen. Tüm tarayıcılarda da çalışmayabilir(hatta içimden bir ses IE'de çalışmayacağını söylüyor nedense, test etme şansım yok), Firefox ve Chromium ile çalışıyor en azından. Onun dışında Javascript'de OOP konusunu hala tam olarak çözebilmiş değilim(prototype'lar hakkında kafama yatmayan birkaç şey, private methodların nasıl uygulanabileceği vs.). Onun dışında JSLint'de bir sürü uyarı veriyor ama henüz neden JSLint'i dinlemem gerektiğini bilmediğimden pek bir çaba sarfetmedim açıkçası.

Kaynak olarak ağırlıklı olarak Javascript: The Good Parts kullandım. Javascript gibi bir sürü ilk bakışta anlamsız gelen(ve çoğunun gerçekten anlamsız olduğu(inner fonksiyonlardaki this referansı, namespace problemleri, new keywordunun kullanımı vs.)) özelliklere sahip bir dili öğrenmek için mükemmel bir kitap(programlamaya yeni başlayanlar için değil). Onun dışında DOM ve eventlar hakkında Eloquent Javascript'e başvurdum. Bu aşamadan sonra sanırım Douglas Crockford'un Javascript videolarını izleyip, birkaç uygulama daha yazacağım. Daha sonra hoşuma giderse Javascript ile devam edebilirim.

Genel olarak programlama dilleri ve implementasyonları çok ilgimi çekiyor ve herhangi bir farklı özellik/yöntem için yeni bir programlama dili öğrenebilirim. Python ile başlayıp, dersler gereği Java, C, C++, daha sonra Common Lisp, Clojure ve şimdi de Javascript ile devam eden programlama dilleri maceram hakkında bir yazı yazıyorum. Eğer bitirip, sonuçtan memnun kalırsam herhande birkaç gün içinde ekleyeceğim.

Pardus'da 2. haftadan notlar

14-8-2011, 5:54 ö.s. // yorum // django , pardus // 315

Hafta başında projeler dağıtılmıştı ve bir haftadır üzerlerinde çalışıyoruz. Benim için en ilginç kısım, buraya gelirken yapma ihtimalimin en az olduğunu düşündüğüm işi yapıyor olmak. Web development :P .

Osman Başkaya ile beraber, packages.pardus'u daha güzel bir hale getirmek için çalışıyoruz. Şu andaki sayfayı, Fedora'nın, Debian'ın ve Arch'ınkilere benzer bir işlev/görünüm kazandırmaya çalışıyoruz.

Osman da ben de tasarımdan anlamadığımız için, Archweb'in tasarımı üzerinden gidiyoruz. Muhtemelen bizden sonra başkalarının tasarım ile oynaması gerekecek. Biz sadece işlev ile ilgileniyoruz.

Bir yandan birkaç farklı depodan binlerce paketin kaydını tutmak, güncellemeleri webe yansıtmak için scriptler hazırlıyoruz. Kimisi tek kullanımlık, kimisi depo her güncellendiğinde çalışacak şekilde. Sonuçta şu anki packages.pardus'dan çok daha işlevsel(istatistik ekranı, daha detaylı bilgiler) ve güzel görünümlü birşey çıkacak gibi.

Bu hafta Osman ile şu ana kadar hiç denemediğim birşey deneme fırsatımız da oldu. Pair programming. Sanırım 2 gün sadece pair-programming yaptık. Genel olarak, uzun süreler değil de, programın doğru kısımlarında doğru miktarda(süre olarak) yapılan pair programming'in gayet verimli olduğunu söyleyebilirim. Çok fazla tecrübem yok tabii ki ama güzel bir tecrübeydi, epey eğlendik. Projenin ihtiyaçlarını karşılayacak Django modellerini ve gerekli XML dosyalarını veritabanımıza aktaracak scriptlerden birini tamamen bıu şekilde yazdık.

Bu arada, şu ana kadar çalıştığım en büyük program/proje üzerinde çalıştığımdan şu ana kadar ihtiyacım olmayan şeylere ihtiyaç duydum. İyi bir Django IDE'si gibi. Projeye başladığımız ikinci günde, bazı şeyleri Vim ile yapmak artık dayanılmaz olduğundan(örneğin bir modelde yaptığım bir değişikliklik için view fonksiyonlarımdaki uyumsuzlukları tespit edip düzenleme, Django için debugging vs.) piyasadaki sağlam Django IDE'lerini test etmek istedim(WingIDE ve PyCharm). Wing ile aradığımı bulamadım(genel olarak çok güzel bir IDE ama Django için bana yukarıda bahsettiğim imkanları sunamadı), PyCharm'ı ise Linux ortamında kullanmak tam bir işkence. Swing ile yapıldığından, fontlar çok kötü gözüküyor ve render hızı çok kötü. Metin içerisinde gezinmek bile çok yavaş. Aynı problem Netbeans'de de var(yine Swing). Fontların kötü görüntüsü bir şekilde düzeltilebiliyor ama performans konusunda birşey yapılamıyor. Metin içerisinde gezmek işkence. Eclipse'de Java ile yazılmış olmasına rağmen, sanırım Swing yerine SWT kullanmasından dolayı, böyle problemler yok. Dolayısıyla Vim ile devam ediyoruz.

ha bir de kendime not: otomatik etiketleme sistemini düzelt. yazıları alakasız etiketlerle etiketleyip duruyorsun.

Pardus ilk haftadan notlar

7-8-2011, 4:51 ö.s. // yorum // pardus // 415

4 hafta sürecek Pardus stajımın(okuldan tamamen bağımsız olduğumdan ve dolayısıyla benim için staj sayılmayacağından, staj demek garip geliyor ama) ilk haftasının sonundan birkaç not düşeyim buraya.

Burda sanırım ~10 kadar(lol, daha kaç kişi olduğumuzu bilmiyorum) stajyerle beraberiz. İlk hafta eğitimle geçti, Pardusun açılış aşamalarından, Çomar, PiSi gibi sistemlerin altyapılarına kadar farklı farklı konular. Anlatılacak pek birşey yok aslında(yani bu süreçleri merak ediyorsanız Pardus Developer Basede zaten anlatılıyorlar).

Ben biraz diğer stajyer arkadaşların bahsetmediği şeylerden bahsetmek istiyorum. Bizden sonra gelecek stajyerlere bir faydası dokunur belki.

Burda ilk hafataki eğitimden sonra, projeler dağıtılıyor ve herkes gruplar halinde projelerini geliştirmeye başlıyor. 4. hafta sonunda projeleri teslim etmemiz bekleniyor tabii ki ama bitirmeseniz de oluyor sanırım. Yani ben kimseye "bitirmesek olur mu" diye sormadım ama şu anda Pardus svn alanında intern klasörüne baktığımızda, bitmemiş projeler görebiliyoruz(sonuçta stajyer 4 hafta sonunda projesini bitirmemişse ne yapılabilir ki).

Bu projelerin en garip özelliği(bence), içlerinde bir README dosyalarının bile olmaması. Yani kodda yorum satırlarını vs. geçtim, daha projenin ne olduğunu bile öğrenemiyoruz.

Eğer gerçekten bir katkımız olsun, 4 hafta burda geçecek zaten, dışarıda yapamayacağımız birşey yapalım diyen varsa, şunlara biraz dikkat edin. Yani burda bir sürü bitmemiş proje var. Ben sıfırdan birşeye başlasam, belki benimki de bitmeyecek. Ama benden önce birinin yarım kalan projesini bitirebilmem için yapabileceğim hiçbir şey yok. Yani bir README dosyası olsa, kodu okuyup nerede ne oluyor çıkaracağız sorun değil, ama README bile yok ki, ne işe yarar bu yarım proje?

Belki kendi stajınızdan birkaç ay sonra birisi projenizi tamamlar, /usr/lib/pardus'un altında, bir kodda isminizi falan görürsünüz(Pardus kullanıyor olursanız tabii), bir katkınız olmuş olur falan. Birşey ifade ediyorsa yani.

Benden şimdilik bu kadar..

0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12