5-12-2010, 9:43 ö.s. //
//
python
, nautilus
// 491
Şurda bahsettiğim nautilus için FTP upload scriptini güncelledim. Neredeyse her gün kullanıyorum ve bir özelliği beni çok rahatsız ediyordu. Yeni halinde ek olarak, upload etmeye çalıştığınız dosya zaten varsa, üzerine yazıyor(aslında eskisini silip yeniden upload ediyor). Önceden bunu yapmıyordu.
Overwrite bir arayüz vasıtasıyla kullanıcıya sorulabilir aslında. Scriptin içindeki bir değişken değiştirilerek "sormadan hep üzerine yaz" veya "bana sor" şeklinde 2 türlü çalıştırılabilir.
Son halini buradan indirebilirsiniz. İndirdikten sonra dosyanın adını istediğiniz gibi değiştirerek(uzantısını da silebilirsiniz, nautilus'da dosya adı gözükecek script adı olarak) ~/.gnome2/nautilus-scripts klasörüne atın. Tabii ki scriptin içinde ftp adresinizi, kullanıcı adınızı ve şifrenizi belirlemelisiniz.
5-12-2010, 3:15 ö.s. //
//
java
, ödev
// 421
Bil113 dersi için 4. ödev Java ile biraz değiştirilmiş(basitleştirilmiş anlamında değil) Conway's Game of Life yazmaktı. Ödev föyünü buradan indirebilirsiniz.
Conway's Game of Life'ın ne olduğu hakkında Wikipediaya bakabilirsiniz. Ben bu ödevde daha önce denemediğim birşey denedim ve çok faydasını gördüm. Ara ara Haskell ve Lisp çalışıyorum, tabii ki fonksiyonel programlama denemez ama, Haskell ve Lisp'den öğrendiğim kadarıyla bazı fonksiyonel programlama yöntemlerini uygulamaya karar verdim. Bundan önceki satranç ödevinde oyunu test etme kısmında çok sıkıntı çekmiştim, bu oyunda da acayip kolay oldu. Uygulamaya çalıştığım fonksiyonel programlam yöntemleri şunlardı:
- Programımı mümkün olduğunca fazla parçaya bölmeliyim.
- Bu parçaların her biri diğerlerinden ve programdan bağımsız çalışabilmeli.
- Parçalar, dışarıdaki hiçbir veriye ulaşamamalı, ve dışarıdaki hiçbir veriyi değiştirmemeli. Bu sayede tam olarak bağımsız olabilirler.
Dolayısıyla programımın parçaları, sadece parametre alıp, birşey döndürdüler. Testleri inanılmaz kolay oldu, aynı parametreleri yollayıp, döndürdükleri değerleri inceledim. Bu yöntemi daha sonra, 2 gün önceki Bil113 lab sınavında uyguladım, ve yine testlerim inanılmaz kolay oldu. Sınavın en zor sorusunun her parçasını sadece 1 kere test ettiğimi hatırlıyorum. Sınav cevaplarımı da birkaç güne yayınlayacağım.
Bu arada, ödevde ödev verilmeden önceki son derslerde öğrendiğimiz, inheritance, interface ve polymorphism gibi konuları uygulamamız için midir nedir, hoca orjinal oyunu biraz değiştirmiş, ve hiç gereği olmamasına rağmen bizi inheritance kullanmak zorunda bıraktı. O yüzden bazı kısımlar saçma gelebilir, onları inheritance(veya polymorphism) kullanmış olmak için yaptım.
Ödevi asistanlara gönderdiğim haliyle buradan indirebilirsiniz.
4-12-2010, 2:29 ö.s. //
//
python
, nautilus
// 625
Sıkıcı bir cumartesi sabahı arayüzü bitirdim artık. İngilizceye tercüme kısmı tam olarak bitmedi sanırım, tam olarak ingilizceye tercüme edip(programın ne iş yaptığı, credits kısmı vs.) kendi ppa'mı açmak istiyorum aslında.

Program şurdakinin aynısı. Tek farkı, klasöre sağ tıklayıp nautilus scriptini çalıştırmak yerine basit bir arayüz ile gerekli klasörü ve ayarları seçerek aynı işi yapıyor olmanız. Eğer böyle bir şeye ihtiyacınız yoksa(benim yok mesela), bunu indirmeniz için hiçbir sebep olmayabilir. Diğer scriptle aynı işi yapıyor çünkü, hiçbir fark yok. Hatta bence diğeri daha kullanışlı.
Bunu yapmamın sebebi, arayüz programlamaya giriş yapmaktı. Qt ve Gtk kütüphanelerini inceledim ve Gtk ile yaptım. Onun dışında, artık nautilus'a ihtiyaç duymadığından, kde ortamında da çalıştırılabilir(sanırım, gtk kurulu olduğu sürece). Hatta biraz zorlanırsa pencereler ortamında bile çalışabilir, ama Gtk kütüphanesini nasıl kuracağınız hakkında hiçbir fikrim yok.
Tercüme için desteğinizi bekliyorum bu arada :) .
Buradan indirebilirsiniz. Çalıştırmak için tek yapmanız gereken gui.py dosyasına çift tıklamak. ID3 etiketlerini okumak için kullandığım mutagen kütüphanesini de içine attım.
Başka bir sıkıcı cumartesi veya pazar sabahı da yarım bıraktığım irc botun(blogu biraz daha geliştirerek) loglarını osa1.net'e yollamasını halledeceğim. Ftp upload scriptinin de bakıma ihtiyacı var, upload etmeye çalıştığım dosyanın var olup olmadığını denetleyen, varsa üzerine yazayım mı diye soran hali çok daha kullanışlı olurdu.
15-11-2010, 2:57 ö.s. //
//
python
, django
, vim
// 949
Python'da IDE/editor olayı çok sıkıntılı geliyor bana. Aslında bir sürü alternatif var ama hepsi bazı sebeplerden dolayı çok kötü geliyor bana. Örneğin Eclipse/Pydev çok ağır geliyor, sahip olduğu özelliklerinin çoğunu en azından şimdilik kullanmıyorum. NetBeans aynı şekilde, üstelik Python için neredeyse hiçbir şey sağlamıyor. Sadece Aptana Studio işime yarıyor, o da HTML/CSS desteği ile PyDev'i buluşturduğu için, Django'da çok yardımcı oluyor.
Editor deyince, Gedit, Kate gibi araçlar için bir sürü eklentiler var, fakat emin olabilirsiniz, neredeyse tüm eklentileri denedim, hiçbir türlü işe yarar hale gelmiyorlar.. Aradığım özelliker: syntax renklendirme, otomatik indentation(düzgün çalışacak, return'den sonra diğer bloka geçmeli mesela), açtığım [ ( { " gibi karakterleri nerde kapatığımı görmeliyim, tek tuşla programımı çalıştırabilmeliyim, hatta gerekirse parametreler ekleyip onları başka kısayollara atayabilmeliyim, mümkünse file browser..
Vim, Emacs gibi araçlar en baştan beri aklımdaydı fakat öğrenmesi/kurulumları çok zaman aldığından bir türlü başlayamıyordum, Emacs öğreneceğim vakitle Common Lisp öğrenmek daha mantıklı geliyor örneğin. Üstelik bu araçlar için tüm detayların olduğu, tek bir tutorial gibi birşey yok. Araştırıp öğrenmek gerekiyor.
Common Lisp ve Haskell ile ilgilenmeye başlayınca farkettim ki, belki de dünyadaki tüm diller için ortak 2 tane editor var, Vim ve Emacs. Haskell yazacaksınız, IDE/editor arıyorsunuz, ama Eclipse gibi devasa araçlara ihtiyacınız yok, hızlı, pratik bir çözüm arıyorsunuz. 2 alternatifiniz var: Vim ve Emacs. Common Lisp için aynısını isteseniz, bu sefer tek alternatif, Emacs. Ki yeterince öğrendikten sonra Java için bile kullanılabiliyorlar(Java için bile diyorum, çünkü Java'da gerçekten gelişmiş IDE özelliklerinize ihtiyacınız oluyor, yeni başlayan ben bile Eclipse'in özelliklerini kullanıyorum).
Python'da da basit, hızlı, kullanışlı bir editor ararken Komodo Edit'i keşfettmiştim. Aslında bayaa kullanışlı bir araç, kendi çalıştırma komutlarınızı kolayca tanımlayabilir, çalıştırırkenki çevre değişkenlerinizi belirleyebiliyorsunuz falan. Kullanışlı ve küçük bir araç, ama çok büyük bir sorunu var; çok yavaş. Birkaç yüz satırlık kodda bile rahatlıkla gezinemiyorum, her nedense çok yavaş çalışıyor.
Dolayısıyla bu sabah yine Vim'e bir şans vermeye karar verdim. Emacs bana hep Vim'den daha karışık gibi gelmiştir. Ayarlarıyla, kısayollarıyla falan. GVim kurulumu yaptım, sıfırdan başlamak yerine birkaç farklı kaynaktan vim ayar dosyalarını incelemeye başladım(.vimrc). Neticede birkaç yerden derlediğim ve kendi kattığım birkaç satırla kendi Vim'imi oluşturdum(bu arada resimdeki arşiv düzenleyinin arayüzünün son hali):

Henüz Vim'in çoğu özelliğinden faydalanamıyorum ve metin düzenlerken sıkıntılar yaşıyorum(hatta bu yazıyı yazdığım sırada nasıl tüm kelimeyi sileceğimi, ve kopyaladığım bir metini nasıl yapıştıracağımı bile bilmiyordum), ama en azından tam istediğim özelliklere sahip bir Python editorum oldu.
Oturup vimtutor çalışarak öğrenmek yerine, işimi yaparken öğreneceğim artık. .vimrc dosyamı buradan indirebilirsiniz. Çoğu satırda açıklama var zaten, kısayollar genelde bana ait. Eski alışkanlıklarımdan kurtulamadığımdan, alt+w, alt+s, tab değiştirmek için alt+oklar gibi kısayollar ekledim.
Bu arada, Google ile kolaylıkla binlerce kaynak bulunabilir tabii ki, ama ben yine de kendi faydalandığım kaynakları vereyim:
15-11-2010, 9:59 ö.ö. //
//
java
, ödev
// 977
Programlamaya giriş dersi için son ödevimiz Java ile 2 kişilik bir satranç oyunu yazmaktı. Ama bazı kısıtlamalarla. Ödevi gönderdiğimize göre kodumu yayınlayabilirim sanırım..
Öncelikle kısıtlamalar ve özellikler için ödev metnine bakabilirsiniz. Kısaca bahsetmek gerekirse:
- Rok, en passant(piyonun ileri çıkarken çarprazındakini yemesi)gibi bazı hareketler yok.
- Oyun şahın yenilmesi ile bitiyor.
- Tanımlanması gereken bazı methodlar var ve bu methodların aldığı parametreleri bile değiştiremiyoruz.
- Inheritance, polymorphism, exception handling gibi konuları ödevin verildiği tarihte görmediğimizden kullanamıyoruz.
- Piyonlar terfi edebilir. Yani karşı tarafa varan piyon başka bir taşa dönüşebiliyor. Bunda sorun yok.
Bu kısıtlamalar kodumuzu çok kötü hale getirdi aslında. Özellikle polymorphism. Tüm taş tipleir için sınıf oluşturmamız gerekiyor, fakat polymorphism kullanamadığımızdan bunları ortak bir array'de toplayamıyoruz örneğin. Çok fazla kod tekrarı ve gereksiz kod oldu bu yüzden.
Benim bir sorunum da, ödevin başında kısıtlamalara dikkat etmeden kafama göre kod yazmam, daha sonra yazdığım kodu kısıtlamalara uydurmaya çalışmam oldu. Bu yüzden kod ekstra kötü oldu. Kodu okursanız, muhtemelen bazı yerler çok saçma gelecektir, oralar bu yüzden işte :) . Herşey bittikten sonra kodu belli bir formata uydurmaya çalışmak çok sıkıcı bir olay.
Bu arada merak edenler için, benim kodum toplam 876 satır. Buradan indirebilirsiniz.
0 ,
1 ,
2 ,
3 ,
4 ,
5 ,
6 ,
7 ,
8 ,
9 ,
10 ,
11 ,
12