Python ile eğlenmek ve PyCon

Dün gece yorgun bir şekilde Python çalışmalarıma devam ederken, öğrendeğim birkaç şey “puhahahs” şeklinde kahkahalar atmama sebep oldu(biraz da uykusuzluğun etkisiyle). Örneğin şu koda bakalım:

>>> 0.1 + 0.1 + 0.1 - 0.3
5.551115123125783e-17

Bu kod bu çıktıyı verince nedense komik geldi ve saçmalamaya başladım(bu arada sonuç 0′a çok yakınmış, ben hesaplamadım), neyse ki kitap hemen altında sebebini ve nasıl düzeltileceğini anlatıyor(Learning Python, O’Reilly, şu ana kadar gördüğüm en güzel Python kaynağı). Çözümü için decimal kütüphanesini inceleyebilirsiniz.

Neyse, biraz dinlendim, kitabı yeniden elime aldım ve ilerlemeye devam ettim, derken bir şey daha beni kopardı; Python’da True ve False’un aslında 1 ve 0′ı ifade ettiğini biliyoruz, fakat bu kadarı da fazla:

>>> True + 4
5

:) Neyse ki durum sandığım kadar abartı değilmiş:

>>> True is 1
False

Bu arada, Python’a veya hem Python’a hem programlamaya yeni başlayanlara Learning Python kitabını kesinlikle tavsiye ediyorum. Şu ana kadar bir sürü kitap -tüm türkçe kaynaklar, en yetersizleri bunlar zaten, Beginning Python: From Novice to Professional, Python Programming for Absolute Beginner, Invite with Python, Deitel’ın meşhur serisini Python versionu olan Python How to Program ve okulumun kütüphanesinden adını hatırlayamadığım birkaç Python kitabı- okudum/inceledim ve bu kadar yeterli, işin temelini ve arkaplanını anlatan bir kitap daha görmedim. Biraz kalındır, ama hakkıyla öğrenirsiniz diye düşünüyorum. Ben artık bir sürü kaynaktan okuduktan sonra çok iyi bildiğimi düşündüğüm konularda(sayılar, stringler..) bilmediğim ne kadar çok şey olduğunu farkettim.

Bir yandan da yeni birşeyler öğrenmek için PyCon videolarını tavsiye ediyorum. Çok çeşitli konularda çok ilginç kullanımlar görebilirsiniz. 2010′daki PyCon’da Guido’nun konuşmasını güzelmiş mesela :)

Programlamanın temelleri vs.

İngilizce aşkına bir senemi feda etmiş olmamın(?!) verdiği acı ile birkaç aydır okulumun kütüphanesinden “bilgisayar mühendisliğine giriş”, “programlamaya giriş” vs. kitapları alıp okumaya çalışıyorum. Tabii ki ders amaçlı kullanılan bu kitapları roman okur gibi okumak biraz garip oluyor ama neticede işe yaradığı kesin. Bu konularda Mutasyon’daki yazılar çok faydalı oldu. Assembly, C ve işlemciler hakkında çok güzel bir kaynak.

Bilgisayar mühendisliği ile alakalı konferanslara da katıldığımdan kafam iyice karıştı, önce işin temelini öğrenmek amacıyla işlemciler, makine dili, assembly gibi konuları kurcalamaya başladım, daha sonra derleyiciler derken şu anda aralarındaki bağlantıyı kurmakta zorlandığım bir sürü bilgi var kafamda. Özellikle derleme(compile), decompile(geri-derleme?!) ve interpret konusunda.

Sunum ödevim için konu olarak yapay zekayı seçmemin de etkisiyle yapay zeka konusuna dalış yaptım. Genel kültür seviyesinde bir sürü(umarım gereksiz değildir) bilgiyle doldurdum kafamı. Bir yandan da Python ile uğraşmaya çalışıyorum, arada nesne tabanlı programalamayı kurcalıyorum. Python’da ticari uygulama nasıl geliştirilir, kaynak kod nasıl gizlenir çözmeye uğraşıyorum, fakat hiç de kolay olmadığını farkettim. Neyse ki yüzlerce dolar değerindeki ticari uygulamalarının bile kırılıp, cracklerinin vs. yapılması bana moral veriyor. Açık kaynak kodu seviyorum :) . Aşağıda Python kodunun güvenliğini sağlamak ve decompile etmek hakkında bazı kaynaklar var:

Bir yandan da bir hafta sonra başlayacak olan 2 haftalık dönem arası tatilim için hazırlık yapıyorum(Dragon Age, Modern Warfare 2, Left 4 Dead 2 almak, arkadaşları ayarlamak vs.).

Bir Linux kitabından alıntılar

aspjpegÜcretsiz olarak edinebileceğiniz “Kim Korkar Linux” kitabını okuyorum şu sıralar. Biraz eski olsa da pek çok şey geçerliliğini koruyor tabii ki. Kitabı http://cayfer.bilkent.edu.tr adresinden edinebilirsiniz. Katıldığım ve beni güldüren bazı alıntılar yapmak istiyorum kitaptan.

LINUX, donanım sorunları olmadığı sürece kolay kolay çakılmaz, dolayısıyla bilgisayarınızı sık sık anahtarından kapatmak zorunda kalacağınızı sanmıyoruz. Enerji sorunu olmadığı sürece LINUX bilgisayarların tipik açık kalma ve çalıflma süreleri aylarla ölçülür. Hatta, ABD’de bir üniversitede (galiba MIT) yanlışlıkla bulunduğu odanın kapısı duvarla örülen bir bilgisayarın yıllarca sorun çıkarmadan çalıştığı ve bu durumun bir tesisat onarımı sırasında duvarın yıkılmasıyla ortaya çıktığı anlatılır. Donanım eklemek, taşımak ya da çekirdek (kernel) değişikliği yapmak gerektiğinde bilgisayarınızı kapatmalısınız elbette ama tabii ki kuralına göre.

Yazıldığı zaman nasıldı bilmiyorum ama şu anda Windows da pek göçmüyor açıkçası, ya da belkide ben artık kullanmayı çözmüşümdür o yüzdendir :) . Yine de yıllarca çalışan bilgisayar efsanesi hoşmuş.

Oyun meraklısı mısınız? Bilgisayarınızı çoğunlukla bir oyun makinesi olarak mı kullanıyorsunuz? O zaman Linux size göre değil! Her ne kadar çok sayıda Linux oyunu varsa da ve birçok Windows oyunu wine altına çalışıyorsa da, Linux sizi mutlu etmeyecektir. Oyun meraklılarına önerimiz, işletim sistemi ve antivirüs vergilerini muntazam ödeyip, virüs ve solucanlarla dolu bir dünyada yaşamaya devam etmeleri ve günde 2-3 kez güncelleme yapmaları, haftada bir kez bilgisayarlarına işletim sistemini yeniden kurmaya devam etmelidir.

Bu paragrafta bana seslenildiğini hissettim okurken. Yıllardır Windows’ta oyun oynayan birisi olarak katılamıyorum bu paragrafa. Bilgisayarıma farklı bir işletim sistemi kuracağım zamanlar format atarım sadece. Solucan ve virüslerle yaşadığım da doğru değil(belkide ben farkında değilimdir?!). Tabii lisans ücretlerini ödeme ve güncelleme yapma konusunda katılıyorum.

Napolyon sistem yöneticisi olsaydı, eminiz ki “para, para, para” yerine “yedek, yedek, yedek” derdi.

Gece gece güldürdü beni.. Sistem yöneticileri değil elektrik kesintilerinin çok olduğu bir yerde her kullanıcı yedek olayını ciddiye almalı bence..

UNIX ve türevi işletim sistemlerini oluşturan yazılımların en önemli özellikleri, her birinin “kendi işini, ama yalnızca kendi işini çok iyi ve hızlı yapan”, esnek ama gereksiz işlevleri olmayan, “küçük” programcıklar olmalarıdır. Bu yazılımlar; anlamlı olabildiği her durumda birer “filtre” olarak yazılmıştır. “Filtre” olarak kullanılabilen programlar girdilerini STDIN’den alan, bu girdileri işleyip çıktılarını da “STDOUT”a gönderen programlardır. Bu sayede, bu programları “pipe” ( | ) ve “yönlendirme” ( <, > ) işlemleri ile peşpeşe ya da birlikte çalıfltırılarak gereksinimlere göre anlamlı işler yapabilen zincirler oluşturulabilir. UNIX’in çok önemli bir başka tasarım ilkesi de; olabildiğince, tüm verilerin, ayar/seçenek değerlerinin basit metin dosyalarında saklanması ve işlenmesidir.

İşte Linux’un en sevdiğim yönlerinden biri. Şu sıralar bazı ISO’ları cdye yazmadan kullanmam gerekiyor ve Furius ISO Mount‘u her açışımda aşırı kullanışlı(?!), sade ve sadece kendi işini yapan arayüzünü bir kez daha seviyorum. Birde Nero‘ya bakın.. Bakarsınız yeni sürümlerinde web browser özelliği falan da eklenir.

Okudum: Hackers & Painters

hackerspainters
Hackers and Painters, sabit bir konusu olmayan genel olarak internet, bilgisayar dünyasıyla alakalı denemelerden oluşuyor diyebiliriz. Son bölümleri ise programlama dilleri hakkında. Paul Graham’ın tecrübelerinden bahsediliyor 3 bölümü hariç çok sıkıcı geldi bana. “İnekler neden popüler değildir?” ve “Rüya Dil” bölümleri ilginçti. Fakat kitabı bir bütün olarak düşünürsek sıkıcıydı diyebilirim. Birkaç bölümü için okunabilir.

Bu arada kitap türkçe, fakat ismi tercüme edilmemiş.