Sekkaşı’nın Bayırı: Bayatlı’nın Düşünce Değirmeninden Sızanlar

Python Deneyimleri 2

1 Puan2 Puan3 Puan4 Puan5 Puan6 Puan7 Puan8 Puan9 Puan10 Puan (Henüz Puanlanmamış)
Loading ... Loading ...

Python Logo

Python Logo

  1. Fonksiyon tanımlamak için def anahtar kelimesini kullanıyoruz. Fonksiyon çağrılmadan önce tanımlanmış olmalı
  2. from … import … ifadesinde birinci importtan sonra gelen yere modül adı importtan sonra gelen yere de fonksiyon adı giriliyor. Yani fonksiyonu import etme durumu var. Modül ednilen şey de bağımsız .py uzantılı dosyalar.
  3. Anladığım kadarıyla fonksiyona parametreler pass-by-value yöntemiyle gönderiliyor.
     def fonksiyon(isim ):
            print "Fonksiyondan çağrıldı", isim
            isim = "hübele"
        isim = "hebele"
        fonksiyon(isim)
        print isim
    

    kod parçacığı

    Fonksiyondan çağrıldı hebele
    hebele
    

    çıktısını veriyor.

  4. Hemen bir recursive fonksiyon deneyip fibonacci yazıyorum. Sorun yok :)
    def fibonacci(number):
        if number == 0:
            return 0
        elif number == 1:
            return 1
        else:
            return number + fibonacci(number-1)
    
    print fibonacci(5)
    
  5. Modülleri import ederken from “modül_adı import *” kullandığımızda “__” ile başlayan fonksiyonları import etmiyormuş dikkat etmek gerek
  6. Klasör oluşturma,silme,klasör içeriğini listeleme,harici çalıştırılabilir dosya çalıştırma, process açma kapama gibi işlemlerios modülü aracılığıyla yapıyoruz. Hayati öneme sahip.
  7. Herhangi bir modülde hangi fonksiyonların olduğunu öğrenmek için dir(module_adı) kullanılıyor.
  8. Text dosya okumak,yazmak çok kolay. Sadece open, write, close gibi fonksiyonlar kullanılıyor. Ama open dedikten sonra size dönen değişkenin tipini anlayamadım doğrusu. Fonksiyonlar modül dönebiliyorlar mı?
  9.  dosya = open("testdosyasi.txt","w")
        print type(dosya)
    

    çıktı olarak type ‘file’ veriyor. Bu file tipi nerede tanımlanmış onu bilmem lazım.

Python Deneyimleri 1

1 Puan2 Puan3 Puan4 Puan5 Puan6 Puan7 Puan8 Puan9 Puan10 Puan (Henüz Puanlanmamış)
Loading ... Loading ...

Python Logo

Python Logo

  1. http://www.istihza.com buradaki python2.x derslerini takip ediyorum
  2. from … import … ifadeleri sayfanın başına yazılmalıymış
  3. from’dan sonra gelen şeyin paket importtan sonra gelen şeyin sınıf tarzı bir şey olduğunu zannediyorum
  4. Türkçe karakterleri kullanabilmek için #_*_ coding: utf-8 _*_ yazıyoruz. Yine sayfamızın en başına ekliyoruz bunu
  5. print fonksiyonuna birden fazla argüman verirken , kullanıyoruz
  6. Kullanıcıdan girdi input() ve raw_input() fonksiyonları ile alınıyor. input() nümerik değer dönerken, raw_input() string değer dönüyor
  7. pre/post increment/decrement (++/–) operatörleri mevcut değil.
    a = 1
    while a < 10:
        print "Daha Bitmedi"
        ++a;
    

    ifadesi sonsuz döngüye sebep oluyor. Syntax hatası vermedi ilginç!

  8. döngülerde range() fonksiyonu kullanılıyor. Bu fonksiyon Matlab’dan tanıdık geldi bana.
  9. Java ve C++ dan bildiğim liste veri yapısı Python’da built in type olarak karşıma çıktı. Kullanımı çok kolay. append(), insert() gibi fonksiyonlarla düzenleme yapmak pratik.
  10. Liste içinde farklı veri tipleri barınabiliyor.
  11. Listeler + operatörü ile birleştirlebiliyor fakat – operatörü tanımlı değil
  12. pop() listenin son elemanını atıyor
  13. Listeler tersten indekslenebiliyor liste[-1] son elemanı gösteriyor. Büyük kolaylık
  14. Matlab’da bulunan aralık indeksleme yöntemi mevcut. Liste[1:3] 1. eleman dahil 3. eleman dahil olmamak kaydıyla aralıktaki elemanları belirtiyor
  15. Değiştirilemeten bir liste yapısı (tuple) var. Bunun tam olarak ne işe yaradığından emin değilim.
  16. HashTable benzeri sözlük veri yapısı da built in type olarak mevcut. Farklı bir özellik olarak tüm anahtarlar aynı tipte olmak zorunda değil. Scripting diye buna diyorlar herhalde

Fruchterman-Reingold Graf Yerleşim Algoritması

1 Puan2 Puan3 Puan4 Puan5 Puan6 Puan7 Puan8 Puan9 Puan10 Puan (1 oy, ortalama: 10,00 / 10)
Loading ... Loading ...

Fruchterman-Reingold

Fruchterman-Reingold


Algoritma Adı:Fruchterman-reingold Graf Yerleşim Algoritması
Algoritma Türü:
Graf Yerleşim Algoritması
Açıklama:
Graf yerleşim algoritmaları, graf üzerinde bulunan köşelerin verilen alan içerisine en iyi şekilde yerleştirilmesini amaçlar. En iyi yerleşimi sağlamak için şu temel prensipler göz önünde bulundurulur :

  1. Köşeleri verilen alan içerisine homojen bir şekilde yay
  2. Kenar kesişmelerini en aza indirge
  3. Kenar uzunluklarını birbirine eşit tut
  4. Varolan simetriyi yansıt
  5. Alan büyüklüğüne adapte ol

Fructerman-Reingold algoritması bunların tamamını sağlayamasada 1,3 ve 4. prensipler bazında iyi bir performans sunar. Bu algoritma graf köşelerini birer çelik bilye kenarları ise birer yay kabul eden algoritmalar sınıfındandır. Graf yapısını fiziksel bir sisteme benzeterek enerjisini minimuma çekmeye çalışır. Gerçek fiziksel yay kuvvet hesapları kullanılmaz. Ayrıca gerçek sistemlerdeki itme ve çekme kuvvetlerini uygulamak yerine daha basit bir model takip edilir. İtme kuvvetleri tüm köşeler için hesaplanırken, sadece bağlı köşeler birbirini çeker. Algoritmanın pseudo kodu şu şekildedir :

  1. Her köşe üzerine düşen itici kuvvetleri hesapla
  2. Her köşe üzerine düşen çekici kuvvetleri hesapla
  3. Köşeleri hareket ettir
  4. Maksimum mesafeyi azalt
  5. Yukarıdaki 4 maddeyi yeterince tekrarla

Algoritma her basamakta köşelerin maksimum hareket mesafesini biraz daha daraltarak sisteme damper etkisi vermekte. Algoritmanın nasıl çalıştığını daha iyi anlamak için ufak bir uygulama geliştirdim. Kullanmak için öncelikle graf yapınızın kayıtlı olduğu dosyayı açmanız, sonrada animasyon menüsünden başlatı seçmeniz gerekli. Algoritmanın detaylarına ve uygulamaya aşağıdaki linkten ulaşabilirsiniz.

  Fruchterman Reingold Graf Yerleşim Algoritması (1,2 MiB, 22 hits)

Asansör

1 Puan2 Puan3 Puan4 Puan5 Puan6 Puan7 Puan8 Puan9 Puan10 Puan (1 oy, ortalama: 10,00 / 10)
Loading ... Loading ...

Asansör

Asansör

Apartmana girerken adet edindiği üzere telofonun diğer ucundakine “Canım apartmana giriyorum yukarı çıkınca seni ararım” diyerek telefonu kapattı. Apartmanın iç kısımlarında cep telefonu kapsama alanı dışında kaldığından telefonu kapatırken bu uyarıyı yapmayı alışkanlık edinmişti. Asansörün çağrı düğmesine basıp kat göstergesindeki dijital kırmızı rakamların birer birer azalarak “0″ olmasını bekledi. Aklında bir şeyler atıştırıp karnını doyurduktan sonra yarım kalan romanını okumak vardı. Asansörün kapısını açmasıyla içeriye girmesi bir oldu. İstemsiz şekilde hareket eden parmağı, çıkacağı kat olan “3″ numaralı düğmenin üzerine hafifçe dokundu. Asansör kabinini binadan ayıran raylı panel kapı hafifçe kapandı ve asansör hareket etti. Kabin içindeki demire yaslanır yaslanmaz asansör aniden durdu. Ortalık zifiri karanlığa büründü. Olanlara bir anlam veremiyordu. İlk anda ne olduğunu kavrayamadı. Asansörde kalmış olamazdı, çünkü böyle şeyler hep başkalarının başına gelirdi, onun değil. Yaklaşık 30 saniye sonra durumunu kanıksadı. Asansöre bineli kaç saniye olduğu hakkında hiçbir fikri yoktu. Kaçıncı kattaydı acaba? Asansör kat arasında mı yoksa katta mı kalmıştı? Elektrikler kesilmiş olmalıydı. Aniden bu soruların cevabını bilmesinin kendisine herhangi bir yarar sağlayamayacağının farkına vardı. Birilerini durumundan haberdar etmeliydi. Alfa cep telefonu hizmet sağlayıcısına ait hattının takılı olduğu telefonuna sarıldı düşüncesizce. Evde bekleyen arkadaşına ulaşabilirdi. Fakat cep telefonunun apartmanın bu bölümünde kapsama alnı dışında kaldığı gerçeğiyle tekrar yüzleşmek zorunda kaldı. Şu cep telefonları en lazım olduğu zamanda çekmezdi hep. Zaten alfanında bu konuda pek iyi bir ünü yoktu. Aslında beta hizmet sağlayıcısının sim kartı da vardı onda. Acaba onların kapsama alanı içinde miydi? Pek zannetmiyordu. Zaten diğer telefonunun bataryası da bitmişti. Bir sorununun daha olduğu aklına geldi. Kullandığı telefonun da diğeri gibi pili tükenmek üzereydi. Ya kimseye haber veremezsem diye düşündü. Birden aklına kabinde bulunan acil durum düğmesini kullanmak geldi. Çalışıp çalışmadığını bilmiyordu. Denemekten başka çare yok diye geçirdi aklından. Karanlıkta parmaklarını düğmelerin üzerinde gezdirdi. Telefona benzer bir işaret vardı düğmelerin birinin üzerinde. Düğmeye bastı. Dışarıda ne olduğu konusunda bir bilgisi yoktu. Hatta düğmenin çalışıp çalışmadığından da emin değildi. Birden kabindeki hoparlörden ses duyuldu. Ses kapıcıya aitti. Telefon çalışmış olmalı diye düşündü. Asansörde kaldım diyerek durumunu bildirdi. Kapıcı hangi katta olabileceğini sordu. Galiba 2 ile 3 arasındaydı. Birazdan kabinin alt kısmında bir ışık hüzmesinin içeriye girdiğini gördü. Kapıcının sesi şimdi duyulabiliyordu. Kattaki asansör kapısının acil durum anahtarıyla açılmasıyla birlikte karanlığa alışan gözleri kamaştı. Bu müşkül durumdan kurtulduğu için rahatladı. Yüksekçe bir konumda kalmıştı fakat atlayabilirdi. Ayakları 2. kata değdiğinde mutlu olmuştu. Kapıcı asansörün bakımının yeni yapıldığını, arızanın muhtemelen elektrik şalterinin atmasından kaynaklandığını söyledi. Evine gidip rahatça uyudu. Ertesi gün iş yerinde sabah çayını yudumlarken her sabah yaptığı gibi İnternet’ten gazeteleri tarıyordu. Haberi görünce içi ürperdi. Kat arasında kalan asansörden inmek isterken yeniden çalışan asansörde sıkışan şahıs feci şekilde can verdi. Ya ben olsaydım diye düşünüp klavyesinin tuşlarına basmaya devam etti.

HSQLDB İpuçları

1 Puan2 Puan3 Puan4 Puan5 Puan6 Puan7 Puan8 Puan9 Puan10 Puan (1 oy, ortalama: 1,00 / 10)
Loading ... Loading ...

  1. HSQLDB’yi sunucu kipinde çalıştırmak için :
    java -cp ./hsqldb.jar org.hsqldb.Server -database.0 file:veritabanı dosya adı -dbname.0 veritabanı alias adı
    komutu girilmlidi. Bu komut hsqldb.jar dosyasının olduğu klasör içinde verilmiştir.
  2. HSQLDB’ye dosya kipinde bağlanırken veritabanı dosya yolunu jar dosyanıza göreceli verebilirsiniz. Jar dosyanız ile veritabaı dosyanız aynı klasörde bulunuyorlarsa veritabanı bağlantı Stringiniz :
    "jdbc:hsqldb:file:./veritabanı dosya adı" şeklinde olmalıdır.

2009′un Getirdikleri 2010′dan Beklentiler

1 Puan2 Puan3 Puan4 Puan5 Puan6 Puan7 Puan8 Puan9 Puan10 Puan (1 oy, ortalama: 1,00 / 10)
Loading ... Loading ...

Öyle nefis muhasebesi yapan birisi değilim. Kendisine hedef belirleyip sıkı sıkıya bu hedeflere sarılan birisi de sayılmam. Yeni yılın ilk ayının ortalarına gelmişken okuduğum bir blog girdisi kendimi sorgulamama sebep oldu. Geçtiğimiz yıl hayatımda ne gibi değişiklikler olduğunu ve yeni yılda kendimden ne beklediğimi yazmaya karar verdim. Önümüzdeki yıla kadar yaşarsak bu listenin neresinde olduğumuza bakarız hep birlikte.

  1. 2009
    1. Benim adıma 2009′un en önemli olayı nişanlanmam oldu :)
    2. Eski işyerim KaleTron’un KaTron oldu ve askerden dönmemle yeniden işe başladım
    3. Sonlarına doğru ekibe katıldığım MES projesini tamamladık.
    4. POTSIM projesine başladık. Hala bitiremedik :(
    5. NVIDIA PhysX kütüphanesiyle boğuştum
    6. Windows kullanmayı bıraktım, Ubuntu’ya terfi ettim
    7. Senenin ilk beş ayı Sarıyer’de, geri kalan kısmı Ümraniye’de geçti
    8. Proje Bülbül başladı
  2. 2010
    1. 2010 yılı içinde evlenmeyi planlıyorum (evlenmeyi planlayanı da ilk defa görüyorum) :)
    2. Yüksek lisansa başlamayı umuyorum
    3. Yeni bir programlama dili olarak Python öğrenmeyi planlıyorum
    4. Sene boyunca 50 kitap okumayı hedefliyorum. Listemde Jose Saramago, Asimov, Selim İleri, Refik Halid Karay var.
    5. Türkiye’de daha önce görmediğim bir şehri ziyaret etmek istiyorum. Bu şehir hakkında şu an hiç bir fikrim yok
    6. Blogumda aylık ortalama 5 yazı yayınlamayı amaçlıyorum

Proje Bülbül

1 Puan2 Puan3 Puan4 Puan5 Puan6 Puan7 Puan8 Puan9 Puan10 Puan (1 oy, ortalama: 10,00 / 10)
Loading ... Loading ...

Bülbül pojesi Twitter API sarmalayan bir Java katmanı geliştirmek için başladığım bir proje. Uygulamalarınızdan Twitter mesajlarınıza, listelerinize ulaşabilir. Yeni mesaj yollayabilirsiniz. Proje halen gelişme aşamasında olup ilgili kaynaklara http://kenai.com/projects/bulbul adresinden ulaşabilirsiniz. Şu anda desteklenen API fonksiyonlarının listesi :

  • statuses/public_timeline
  • statuses/home_timeline
  • statuses/friends_timeline
  • statuses/user_timeline
  • statuses/mentions
  • statuses/retweeted_by_me
  • statuses/retweeted_to_me
  • statuses/retweets_of_me
  • statuses/show
  • statuses/update
  • statuses/destroy
  • statuses/retweet
  • statuses/retweets
  • users/show
  • users/search
  • statuses/friends
  • statuses/followers
  • POST lists(create)
  • POST lists id (update)
  • GET lists(index)
  • GET list id(show)
  • DELETE list id (destroy)