• Hakkımda
burak@unix~$ ~bilgisayar üzerine deneyimler~

Programcıya tavsiyeler

May 13, 2013 10:56 am / Leave a Comment / Burak Sezer

İşe yarar bir programcı(aslında bu tabiri sevmiyorum) olmaya çalışırken hangi yolu izlediğimi, daha doğrusu izlemeye çalıştığımı maddeler halinde, Python’dan örnekler de vererek, yazayım bugün. Peşinen söylemeliyim ki; henüz iyi bir programcı olma konusunda başarılı olduğumu söyleyemem. Yemem gereken 40 fırın ekmek ve aşmam gereken yıllar var… :)

1- Bilgisayar biliminin temellerini bilin.

Program yazarken kullandığımız programlama dillerinin ve tekniklerin bir teorik temeli var. Veri yapıları, algoritmalar, nesne yönelimli programlama, tasarım örüntüleri(design patterns) ve diğer teorik bilgisayar bilimi konularında iyi kötü teorik bilgiye sahip olun. Hatta zamanınız varsa ve gerçekten ilgi duyuyorsanız daha fazlasını da çalışabilirsiniz. Bu madde benim gibi Bilgisayar Mühendisliği ya da yakın dallarla okul bazında alakası olmayanlar için çok önemli; çünkü yaptığınız işin temelini bilmelisiniz.

2- Kullandığınız dilin temel özelliklerini iyi bilin.

Bir programlama dilinde etkin kod üretebilmek için onun inceliklerini bilmeniz gerekir. Python özelinde konuştuğumuza göre kaynak da gösterebilirim. Resmi Python dökümanlarındaki bazı kısımlar ve bazı kaynak kitaplar işinizi görebilir.

3- Düzenli olarak kod yazın.

Eğer bir dili öğreniyorsanız, onu düzenli olarak kullanmalısınız. Bu sizi zinde kılar. Tıpkı bir sporcu gibi; sürekli çalışırsanız o dili, dolayısıyla programlamayı da zamanla özümsersiniz. Size 10 günde ya da 3 haftada programlama ya da programlama dili öğreteceğini iddia eden kitaplara, kaynaklara kanmayın. Programlama yeteneğiniz, zeka ve deneyim gerektiren tüm diğer işlerde olduğu gibi zamanla gelişir.

4- İyi yazılmış kodları okuyun.

Sizden daha zeki ve muhtemelen daha uzun zamandır program yazan insanlar vardır kesinlikle. Onların yazdıkları kodları okuyun. Github, Gitorious, Google Code ve Sourceforge gibi kaynaklarda pek çok proje var. İlginizi çekenlerin ve kaliteli kod içerdiğine inandıklarınızın kodlarını edinin ve okuyun. Kod roman okur gibi okunmaz elbette ama sadece baksanız bile bir göz aşinalığı edinirsiniz. Ayrıca yapabiliyorsanız koda ufak tefek müdahalelerde bulunup nasıl çalıştığını gözleyin. Bu sizi motive eder.

Son dönemde dikkatimi çeken ve bolca kaliteli Python kodu içeren PyPy projesi var mesela. İnceleyin, gerçekten çok ilginçtir… Ayrıca Python’un kendi kodunu da inceleyebilirsiniz. Kodun C kısmından bahsetmiyorum; saf Python’la yazılmış modülleri inceleyin. Bizzat Python geliştiricileri ve katkıcıları tarafından yazılmış kodlar bunlar.

5- Temiz ve standartlara uygun kod yazın.

İster Özgür Yazılım geliştirin ister sahipli, kodlarınız mümkün olduğunca okunaklı ve standartlara uygun olmalıdır. Bu durum Özgür Yazılım projeleri için daha da önemli; çünkü sizden başkaları da programınızı geliştirmek isteyebilir. Sadece yazdıklarınızı anlamak bile yeterli bir beyinde verimli fikirler oluşturabilir. Ayrıca programınızı nasıl dağıtırsanız dağıtın kodun kirli ve standart dışı, yani kalitesiz, olması zamanla projenizi öldürebilir.

Bu da benim stilim diye havalara asla girmeyin, yazılım tasarlayıp geliştirmek bir mühendislik işidir. Ve mühendislikte her yiğidin bir yoğurt yiyişi yoktur. Standartlar vardır!

Meşhur PEP 8, Python’un stil rehberidir. Mutlaka okuyun.

http://www.python.org/dev/peps/pep-0008/

Bu da Google‘ın Python hakkındaki tavsiyeleri. Google gibi Python’u çok yoğun olarak kullanan kaliteli bir firmanın dediklerine kulak asmak gerekir.

http://google-styleguide.googlecode.com/svn/trunk/pyguide.html

6- Yarım yamalak öğrenmeyin.

Kullandığınız dilin bir özelliğini keşfettiğinizde, o konu hakkındaki her şeyi araştırın ve bulduğunuz bilgiyi elinizden geldiğince özümseyin. Bir şeyi yarım yamalak bilmek çok tehlikelidir.

7- Daha fazlasını öğrenin.

Özellikle benim gibi orta düzey bir programcıysanız öğreneceğiniz çok şey vardır. Yazdığınız program muhtemelen çok daha güzel ve zekice yazılabilir. Sürekli araştırın, yeni özellikler ve teknikler öğrenip onları kullanmaya çalışın.

8- Asla bir programlama diline bağımlı kalmayın, yeniliklere açık olun

Mutlaka birden fazla programlama dili öğrenin ve bu dillerde yazılmış kodlarla haşır neşir olun. Bu ufkunuzu açar. Tercihen zaten bildiğiniz dilden farklı bir dil öğrenin. Fonksiyonel bir programlama dili öğrenin mesela. Farklı bir bakış açısı edinebilirsiniz. Ben Scala ile ilgileniyorum, apayrı bir alem olan Java alemine de yaklaşıyorum sayesinde.

Ve son olarak şunu söylemem gerek: mutlaka test yazarak yazılım geliştirin. Test yazmıyor olmanız o iş kapsamında kötü mühendislik yaptığınız anlamına gelir.

Yazının orjinali burda, eski blog:

http://buraxezer.wordpress.com/2011/03/30/python-programcisina-tavsiyeler/

Posted in: Python, Yazılım Geliştirme

VisualVM, Ubuntu ve Oracle Java

May 6, 2013 9:21 am / Leave a Comment / Burak Sezer

Arada sırada Java ve Scala ile oynuyorum. Dolayısıyla hangi proses ne kadar kaynak yemiş, neler etmiş diye de şöyle bir bakayım diyorum. Bu işler için de VisualVM diye güzel bir alet var. Ubuntu depolarında da mevcut. Buraya kadar bir sorun yok.

Bir sebepten ötürü depolarda bulunan OpenJDK sürümlerini kaldırıp Oracle Java kurmuştum sisteme ve VisualVM açısından da kıyamet tam olarak burada koptu.

Çalıştırmak isteyince alet şöyle bir hata verip ölüyor.

No jdkhome found

Halbuki Java sistemde kurulu ve ortam değişkenlerinin de tam olarak ayarlandığından eminim. Ama yok işte! Ufak bir araştırmayla kendimi VisualVM’in start betiğinde(/usr/bin/jvisualvm) buldum. Tam da ilk satırlarda şöyle bir blok var.

jdkhome=
for j in /usr/lib/jvm/java-7-openjdk-$ARCH /usr/lib/jvm/java-6-openjdk-$ARCH; do
    if [ -x $j/bin/javac ]; then
        jdkhome=$j
        break
    fi
done
if [ -z "$jdkhome" ]; then
    echo >&2 "No jdkhome found"
    exit 1
fi

Gördüğünüz gibi paket OpenJDK6 ve 7 ile çalışacak şekilde ayarlanmış. Bir sonraki güncellemeyle uçacak olsa da yukarıdaki kod bloğunun 2. satırına /usr/lib/jvm/java-7-oracle ifadesini ekledim.

Sadece hata değişti!

Cannot find java. Please use the –jdkhome switch.

Çözümü daha da çirkinleştirip .bashrc dosyasına bir alias ekledim ben de:

alias jvisualvm='jvisualvm --jdkhome /usr/lib/jvm/java-7-oracle'

Bu terminalden başlatırken anı kurtarıyor. Grafiksel arabirim menülerinden başlatırken bir işe yaramıyor doğal olarak. Onun için de /usr/share/applications/visualvm.desktop dosyasını açıp Exec satırını şu hale getirmek gerekiyor.

Exec=/usr/bin/jvisualvm --jdkhome /usr/lib/jvm/java-7-oracle

Şimdilik çalışıyor ama dandik bir sorun için fazla mı kastık diye de düşünmeden edemiyorum.

Posted in: Dağıtımlar, Java, Linux, Sistem

VIM’i Python desteğiyle derleyemiyor musunuz?

May 6, 2013 9:02 am / Leave a Comment / Burak Sezer

Başlık açık, eğer bir şekilde VIM‘i derleyerek kullanıyorsanız Python desteğini(--enable-pythoninterp) açmaya çalışınca şöyle çok gıcık bir derleme hatası ile karşı karşıya kalıyor olabilirsiniz:

objects/if_python.o: In function `DoPythonCommand.isra.29':
if_python.c:(.text+0x38de): undefined reference to `PyGILState_Ensure'
if_python.c:(.text+0x3942): undefined reference to `PyGILState_Release'
if_python.c:(.text+0x3a0f): undefined reference to `PyEval_InitThreads'
if_python.c:(.text+0x3b93): undefined reference to `PyGILState_Release'
if_python.c:(.text+0x3b98): undefined reference to `PyGILState_Ensure'
if_python.c:(.text+0x3bce): undefined reference to `PyGILState_Release'
objects/if_python.o: In function `python_end':
if_python.c:(.text+0x4939): undefined reference to `PyGILState_Ensure'
collect2: error: ld returned 1 exit status
link.sh: Linking failed
make[1]: *** [vim] Error 1
make[1]: Leaving directory `/var/tmp/lpms/app-editors/vim-7.3.798/source/vim73/src'
make: *** [first] Error 2

Gördüğünüz gibi hata normal şartlarda çözülebilir olmaktan oldukça uzak. Mutlaka bağımlılıklarının birinde bir terslik olduğu için böyle anlaşılması güç bir hata veriyordur.

Biraz araştırdıktan sonra sorunun, daha doğrusu eksiğin, Python’da olduğunun farkına vardım; threads(Gentoo, Hadron ve Exherbo’da opsiyonun adı bu) desteği ile tekrar derlemeniz gerekiyor sorunu çözmek için. Bunu nasıl yapacağınıza girmeyeceğim. Gentoo ve Exherbo kullanıyorsanız zaten sistem bunu kendisi halleder. Hadron’da da kendisi halleder ama paketi yapan adamın(ben) olayın farkında olması lazım! :) LFS ile kendinize eziyet ediyorsanız bizim paketlere falan bakarak Python’u nasıl threads desteği ile derlediğimizi öğrenebilirsiniz.

Bu da böyle çok spesifik bir sorunun çözümü olarak dursun.

Posted in: Linux, Python, Sistem / Tagged: Hadron, lpms, Paketleme

User Mode Linux deneyimlerim

May 5, 2013 5:38 pm / Leave a Comment / Burak Sezer

Eski statik Github blogundaki yazının aynısı. Güzel bir konudan bahsettiği için buraya da alayım dedim. Eksik kalmasın.

Hadron’un 64 bit toolchain’i üzerinde çalışmayı bitirdim. Şimdi sıra daha kanlı işlere geldi.

Daha önce de bahsettiğim gibi Hadron’un sonraki sürümlerinde Arch Linux’un init betikleri yerine systemd kullanmayı planlıyoruz. systemd ve saz arkadaşlarını temel düzeyde çalışacak kadar özenerek paketledikten sonra acaba sisteme nasıl entegre edebilirim diye bakınmaya başladım ve kısa bir araştırmadan sonra fark ettim ki sistemi boot etmeden yerine oturtabileceğim bir şey değil kendisi.

Hadron’u şu aşamada boot etmek ciddi bir sorun, zira sadece derleme yapmaya yarayacak bir şey var şu an elimde. Geçici de olsa bir init sistemi koyup, bir kernel derleyip onu boot edebilirdim makinam üzerinde belki ama bu da gerçek bir çözüm olmaktan uzak. Zira sık sık internete ve gerçek bir tarayıcıya ihtiyacım olacağı için sadece terminalde çalışmak hiç mi hiç işime gelmiyor.

Çözüm tabii ki sanallaştırma. Üzerinde biraz düşündükten sonra User Mode Linux(bundan sonra UML olarak bahsi geçecek) kullanmaya karar verdim ve sırf kolaylıklar sağlasın diye sistemde tuttuğum Ubuntu 12.10 üzerinde deneylere başladım. Elimde kalması uzun sürmedi…

Bu yazı da Ubuntu’nun UML paketindeki bir hata mı yoksa özellik mi olduğunu bilemediğim bir duruma karşılık ortaya çıktı.

systemd çalışmak için dev dosya sistemine ihtiyaç duyuyor. Ama Ubuntu depolarından indirip kurduğum UML paketi dev içeriğini otomatik olarak dolduracak yeteneğe sahip değil. Şöyle ki:

CONFIG_DEVTMPFS=y

Ubuntu’daki paketi yapan arkadaş CONFIG_DEVTMPFS opsiyonunu açmamış, bir bildiği olduğunu düşünsem de küfrümü esirgemedim kendisinden. Zira systemd’nin yazarı dahil, herkes systemd’nin çalışması için kernel’da yukarıdaki opsiyonun açık olması gerektiğini söylüyor.

Bu böyle olmaz deyip kernel.org‘dan son model kaynak kodları çektim ve işe balıklama daldım, kendi UML kernelimi derledim. Şöyle ki:

Kodları sistemde herhangi bir yere açtım. Daha sonra AUR‘daki UML paketinden config dosyası aldım. Bunları nasıl yaptığımı komut olarak vermeme sanırım gerek yok. Önemli olan şey, kerneli nasıl derlediğim.

Kaynak kodların olduğu dizinde şu komutları uyguladım:

$ make menuconfig ARCH=um

Ayarlara bir göz atmakta yarar var her zaman. Özellikle CONFIG_DEVTMPFS ayarının etkin olduğundan emin oldum. Komutta sıradışı olan tek şey ARCH=um parametresi, bir UML kernel derlemek istiyorsanız bu parametreyi kullanmak zorundasınız.

Ayarlardan emin olduktan sonra kerneli ve modüllerini inşa ettim:

$ make ARCH=um vmlinux modules

ARCH=um parametresine dikkat edin, mutlaka kullanacaksınız UML kernel inşa etmek için.

Bu komut kaynak kod dizininin kökünde vmlinux adında bir binary dosya oluşturuyor ve bunu sıradan bir uygulama gibi kullanabiliyorsunuz. Bu sıradan program ki aslında Linux çekirdeğinin ta kendisi, dosya sistemi imajınızı boot edebiliyor. Harika öyle değil mi! :)

İşler yolunda giderse ki gerekli header dosyalarınız varsa gider, vmlinux dosyasını görmeniz lazım. Onu sistem yolundaki bir yere kopyalayın. Ben /usr/bin altına koydum.

Son olarak da modülleri kurdum.

# make ARCH=um INSTALL_MOD_PATH="/usr" _modinst_

Bundan sonrası ayrı bir mevzu, bir sonraki yazıda anlatacağım.

UML ile bana göre her şeyi boot edebilirsiniz. Ki internette Ubuntu boot eden, Gentoo kuran falan gördüm. Yeni şeyler denemek için harika bir sistem olduğunu söyleyebilirim. Ki kernel hacking yapmak için de birebir.

Bu arada, UML sayesinde systemd entegrasyonunu yapmayı başardım sayılır.

Posted in: Kernel, Linux, Sistem / Tagged: Hadron, UML

Error: PHP is not running

May 5, 2013 2:51 pm / Leave a Comment / Burak Sezer

Geçenlerde başlıkta bahsettiğim bu acayip hatayı aldım. Ubuntu üzerinde WordPress kurcalayasım gelmişti, ama kurulum betiği Error: PHP is not running şeklinde anlamsız bir hata çıkarıyordu karşıma tüm ayarlar doğru gibi gözükmesine rağmen.

Ufak bir hileyle aştım. Zaten ayar dosyasının içine de durumu anlatan bir not da düşmüşler.

Şimdi, öncelikle /etc/apache2/mods-enabled/php5.conf dosyasını açın. İçinde şöyle bir blok olmalı:

<IfModule mod_userdir.c>
   <Directory /home/*/public_html>
       php_admin_value engine Off
   </Directory>
</IfModule>

Bu blogu yorum haline getirin, yani tüm satırların başına # koyun ve Apache Web sunucusunu yeniden başlatın.

service apache2 restart

Bu arada, ev dizinimdeki public_html dizininden PHP betikleri çalıştırmaya çalıştığımı belirteyim. Öntanımlı dizini kullansaydım karşıma çıkmayabilirdi bu hata.

Posted in: Linux, PHP, Programlama Dilleri, Sistem, Yazılım Geliştirme

Python yorumlayıcısında kod tamamlama

May 5, 2013 2:24 pm / Leave a Comment / Burak Sezer

Anadil olarak Python kullanan bir programcı olarak yorumlayıcıyı sık sık kullanıyorum. Genelde araya IPython koysam da onun olmadığı yerlerde özelliklerini aramıyor da değilim hani. Geçen gün IPython’da, ya da genel olarak bir kabukta, en çok işe yarayan özelliklerden biri olan tab completion olayıyla ilgili bir ipucu yakaladım. Şöyle güzel bir şey:

Önce ev dizininizde, eğer yoksa, .pythonrc.py diye bir dosya oluşturuyorsunuz. Şöyle yapabiliriz:

vim $HOME/.pythonrc.py

İçine şunları yazın:

import readline, rlcompleter
readline.parse_and_bind("tab: complete")

Kaydedip kapatın ve şu komutu vererek ortam değişkenini ayarlayın:

export PYTHONSTARTUP=$HOME/.pythonrc.py

Bu satırı .bashrc dosyasına eklerseniz sonraki oturumlar için de bu ayar geçerli olacaktır. O anki oturum için ise şu komutu çalıştırabilirsiniz:

source ~/.bashrc

Python yorumlayıcısını çalıştırdığınızda tab tuşu ile kod tamamlaması yapabildiğinizi görmeniz gerek.

Bu arada, ilgili Stack Overflow girdisi de burada.

Posted in: Python, Yazılım Geliştirme

Yeniden WordPress

May 5, 2013 2:02 pm / Leave a Comment / Burak Sezer

Arada sırada, 1-2 yıllık periyotlarla da olsa değişimler yaşıyorum. Geçen sene bu zamanlar eski ve hazır WordPress blogumdan bu adrese taşınmış ve Github yardımıyla bu zamana kadar bir şeyler karalamıştım.

Markdown formatıyla blog yazma düşüncesi benim gibi geek bir insana çok çekici gelse de bir süre sonra hem statik blogumdan hem de Markdown’dan sıkıldım, WordPress’i özledim. Çok nadir yazan bir adam olarak nesini özlediğim benim için de muamma.

Çok eskiden yazdığım yazıların bir çoğuna http://buraxezer.wordpress.com adresinden, son yazdığım yazılara http://purak.github.com adresinden ve gelecekte yazacaklarıma da bu okuduğunuz siteden ulaşabilirsiniz.

Zaten 2-3 tane ancak var ama iyi yazıları yine burada toplayacağım. Ama çok tembel bir adam olduğum için zaman alacak gibi görünüyor.

Yakında yeni ıvır zıvırlarla dönerim. Boş beleş yazılar da olsa artık daha sık yazmak istiyorum. Lazım.

Posted in: fasa fiso

burak@unix~$

Zeki bir sersem bir şeyleri daha büyük, daha karmaşık ve daha zor hale getirebilir. Bunun tersini yapmak için bir dahinin dokunuşu ve epeyce cesaret gerekir.

Son gönderiler

  • Programcıya tavsiyeler
  • VisualVM, Ubuntu ve Oracle Java
  • VIM’i Python desteğiyle derleyemiyor musunuz?
  • User Mode Linux deneyimlerim
  • Error: PHP is not running

Arşiv

  • May 2013

Kategoriler

  • Dağıtımlar
  • fasa fiso
  • Java
  • Kernel
  • Linux
  • PHP
  • Programlama Dilleri
  • Python
  • Sistem
  • Yazılım Geliştirme

Meta

  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org
© Copyright 2013 - burak@unix~$
Infinity Theme by DesignCoral / WordPress