Python’da Pyglet ile 2D Üçgen Döndürme

En iyi öğrenme metodunun uygulayarak, deneyerek, yanılarak olduğunu bayağı önceleri kavradım. Okul derslerinde bu yöntemi uygulamak ne yazık ki kimi zaman mümkün olmasa da, elimden geldiğince, konular dersler ilgimi çektikçe yapmaya çalışıyorum.

Bu nedenle Bilgisayar Grafik dersinde gördüğüm verilen bir noktaya göre üçgeni belirli bir açıyla döndürme işlemini python ve pyglet kutuphanesi ile gerçekleştirmek istedim. Kodda işin bitmesine odaklandım. Aynı işi çok daha iyi yaklaşımlarla yapmak elbette mümkündür.

Matematiksel Hesaplama:
Üçgenimizin köşelerinin A1(x1,y1) A2(x2,y2) A3(x3,y3) olduğunu, etrafında döndürülmesi istenen noktanın R(m,n) olduğunu ve verilen açının da θ olduğunu kabul edelim.
Öncelikle üçgenin her köşesini [x  y  1] formatına çevirip 3×3’lük matrisi elde edelim:

Daha sonra bu noktaları verilen referans noktaya göre orjine öteleyecek otele1 matrisini oluşturalım:

Orjin etrafında üçgenimizi verilen açı kadar saat yönünün tersine döndürecek dondur matrisini oluşturalım:

En son olarak da döndürülen üçgeni verilen referans noktaya göre eski yerine taşıyacak otele2 matrisini oluşturalım:

Oluşturduğumuz bu transform matrislerini sırasıyla üçgen matrisimize uygularsak, üçgenimizin yeni koordinatlarını elde ederiz:

Python’da Gerçekleştirme:
Program 4 aşamadan oluşuyor. Üçgen çizme, referans nokta alma, açı değerini alma ve yeni üçgeni ekrana çizdirme olarak. Aşamalar sequential yani birbiri ardına devam edecek şekilde ilerliyor.

Kullanıcı girdisi on_mouse_press ile ekrana tıklanılan koordinatlardan, açı değeri de konsoldan raw_input ile alınıyor.
Yeni oluşturulacak üçgen ucgen_hesapla fonksiyonu ile bulunuyor.
Sonsuz döngüde çalışan on_draw fonksiyonu ile ekrana o an çizilmesi gereken üçgen, nokta veya yeni üçgenin çizimi yapılıyor.

Kodun tamamına github sayfasından ulaşabilirsiniz: 2d_ucgen_dondurme.py

Bisiklet Gezisi – Sarımsaklı Barajı

ahmeta_sarimsakli_bisiklet01

Sarımsaklı Barakı – Patika Yol

Benim için bisiklet, şu ana kadar bir yerleri gezmek için kullandığım en zevkli araç diyebilirim. Aynı yerleri motorlu bir taşıtla gezmekle bisikletle gezmek arasında inanılmaz farklar oluyor. Bisikletle gezerken; gezinin her noktasını yaşıyor, en ufak hava değişimini fark ediyor, hemen bir tali yola sapıp daha önce görmediğiniz bir çok güzellikle karşılaşabiliyorsunuz. Eğer fotoğraf çekmek gibi bir tutkunuz da varsa gideceğiniz yere varmadan dahi, yolda yüzlerce fotoğraf çekebilme imkanınız oluyor. Sağlık ve ekonomi yönünden de malum bir çok faydası olmasına rağmen benim için asıl bisiklet amacını oluşturmuyor. Ben daha çok hissettirdikleri ve yaşamama vesile olduğu güzellikler üzerinde duruyorum.

Havaların soğumasına ve yağışlı olmasına aldırmadan kardeşim Yusuf ile geçtiğimiz pazar günü özlediğimiz turlardan birini yapmaya niyetlendik. Hem fazla yüksekliği olmamasından hem de çok uzak olmamasından dolayı Sarımsaklı Barajı‘na gitmeye karar verdik.

Sarımsaklı Barajı Rota

Sarımsaklı Barajı – Rota

Çok fazla yol alternatifimiz olmadığı için genel hatlarıyla kafamızda böyle bir güzergâh vardı. Dönüş yolumuza dair kafamızda alternatifler vardı ama havanın iyice bozması ve soğuması üzerine, gittiğimiz yoldan geri döndük.

Toplamla yaklaşık 75km yol yaptık. Çoğunluğu şehirlerarası asfalt yolda geçti.

Asfalt yolda gitmenin özellikle şehirler arası yolda gitmenin en sıkıntılı tarafı şoförlerin bisikletlilere karşı aşırı umursamaz ve tehditvari yaklaşımları oluyor. Sürekli korna ile ve rahatsız edecek derecede yakınlaşarak bizi taciz etmeleri her bisiklet severi rahatsız edeceği gibi gezimizde bizi rahatsız eden tek unsurdu.

Sarımsaklı Barajı

Sarımsaklı Barajı

Bisikletlerimiz dağ bisikleti olduğu için barajın etrafında dolaşırken gittiğimiz patika yoldan aldığımız zevk bir başkaydı. Hem çevrenin huzuru, hem de barajı izleyerek gitmek bizi keyiflendiren etkenlerdendi.

Bulunduğumuz mevsim itibariyla barajın su seviyesi bayağı alçaktı. Böyle güzel bir yerde piknik mevsiminin de kapandığını ve hava durumunu düşünerek 3-5 balıkçı dışında kimsenin olmamasına şaşırmadık.

Sarımsaklı Barajı - Piknik Alanı

Sarımsaklı Barajı – Piknik Alanı

Barajın yanında bulunan piknik alanı da bekçiler dışında sinek avlıyordu. Halbuki bu havanın ve sakinliğin güzelliği bir başka oluyor. Ama bizimle aynı güzellik anlayışına sahip olmayan kesim pek de azımsanmayacak ölçülerde sanırım.

Hem hava bozduğu için hem de ışıklandırmalarımızın eksiksiz olmasına rağmen fazla karanlığa kalmak istemediğimiz için daha fazla vakit geçiremedik burada. Çok temiz ve bakımlı olmasa da piknik alanının mescidinde öğle namazımızı kıldık. Yolculuğumuzun toplam maliyetini oluşturan simitlerimizi de daha öncesinde barajın yanında tükettiğimiz için fazla vakit kaybetmeden hemen yola koyulduk.

Cem ve Caner

Cem ve Caner

Geldiğimiz yoldan geri dönme konusunda hemfikir olduk, ama bu sefer barajın yanındaki patika yol yerine direk anayola çıkmayı tercih ettik.

Dönüş yolumuzda bir sürüyle ve sürünün minik çobanlarıyla karşılaştık. Durup biraz sohbet ettik. Cem 7’ye Caner ise 3’e gidiyormuş. Tanıştığımıza memnun olduk, bol bol fotoğraflarını çektik ve tekrar yolumuza koyulduk.

Dönüş yolumuzda yağmur bizi biraz ıslattı. Ama yağmurdan çok yol kenarlarına biriken su bizi olumsuz etkiledi. Sonuçta biraz yağmur, biraz çamur eşliğinde yolculuğumuzu kazasız belasız tamamladık.

Yaklaşık en verimli 6-7 saatimizi harcamamıza rağmen yolumuzun üzerindeki köyleri gezecek fırsatımız olmadı. Bu da ayrıntılarıyla düşünülmüş bir plan eksikliğinden ve bölgeyi iyi bilen birinin eksikliğinden kaynaklandı.

Fiziken yorulsak da zihinsel olarak çok dinlendiğimiz keyifli bir yolculuk oldu. Bu gezide beni yalnız bırakmayan Yusuf’a da tekrar teşekkür ederim.

Yusuf ve Ben

Yusuf ve Ben

Gezinin büyük bir kısmı boyunca RunKeeper uyguluması açıktı. Gezimiz ile ilgili ayrıntılı yükseklik, ortalama hız gibi bilgilere ulaşmak için tur sayfasına gidebilirsiniz.

Raspberry Pi’de 2gblik SD’yi Arttırmak

Raspberry Pi için hazırlanmış imaj dosyalarında root dizini 2gb ye ayarlanmış bir şekilde geliyor. Bu nedenle en az 2gb sd kullanmak gerekiyor. Daha büyük boyutta sd kullanmak bir sorun çıkarmıyor fakat sd’nin 2gb dışındaki alanı boşa gitmiş oluyor. Bunu kullanabilmek için bir kaç şey yapmak gerekiyor.

Şu an kullandığım Raspberry Pi 16 gb lik bir sd kullanıyor. Varsayılan olarak 2 gb si root dizini tarafından kullanılırken kalan 14gb home için kullanılıyor. Bunu sd’nin kalan bölümü için part oluşturup home a mount ederek yapmıştım. Fakat bu kullanımın pek kullanışlı olmadığını gördüm. Çünkü şimdiye kadar home dizininde pek bir dosya saklama ihtiyacı hissetmedim. Öte yandan yeni paketler kurmak için veya apache serverda çalıştırılan local dosyaları saklamak için 14gb’ye root dizininde çokca ihtiyacım oldu. Bu nedenle sd card’ın tamamını root dizine vermeye karar verdim, bu sayede home için ayrı bir part’a da gerek kalmadı.

Bunu yapabilmek için root dizinin bulunduğu partı(genelde mmcblk0p2 oluyor) silip, aynı başlangıçta ve bitişi sd card’ın sonunu gösterecek şekilde yeni bir part oluşturmak gerekiyor. Bu değişiklik sadece partition table’da yapılacağı için root dizinindeki veriler kaybolmuyor.

RPi’ye bağlanıp fdisk ile sd card açılır:

p ile partlar listelenir. Normalde burada boot için mmcblk0p1 ve root için mmcblk0p2 olması gerekiyor. Ben sonradan mmcblk0p3 oluşturup onu da home dizinine mount etmiştim. Şimdi içindekileri yedekleyip bu partı sildim, mmcblk0p2’den sonra başka part kalmaması gerekiyor.

Burada dikkat edilmesi gereken nokta mmcblk0p2’nin start noktası. Arch Linux Arm’de bu değer 194560 olarak gözüküyor.

Daha sonra,

d ile mmcblk0p2 (2 numaralı) part da silinir.

n ile ile yeni part oluşturulur. Primary seçeneği için p yazılır. Default value olarak gösterilen değerin önceki başlangıç değerine eşit olması gerekiyor. Eşit ise enter’e basıp geçilir. Bitiş değeri için default value eğer silmeyi unuttuğunuz başka bir part kalmadıysa sd cardın sonunu gösterecektir. Enter ile bu da geçilir ve yeni root partı oluşturulmuş olur.

w ile değişiklikler kaydedilir ve p ile yapılan değişiklikler gözlenebilir.

RPi yeniden başlatılır. Yeniden başlattıktan sonra root dosya sistemini yeniden boyutlandırmak gerekiyor. Bunun için de;

komutu yazılır. Sd Card’ın büyüklüğüne işlem süresi değişebilir.

ile root dizinin yeni boyutu görülebilir.

Kaynak: http://elinux.org/RPi_Resize_Flash_Partitions

Raspberry Pi ve Arch Linux Arm

Geçen sene Ağustos ayında bir diy projesi sayesinde Raspberry Pi ile tanıştım. O zamandan beri yapılan projeleri takip ediyordum. Nihayet geçtiğimiz günlerde siparişi verdim ve 5 gün içerisinde teslim aldım. İşin açıkcası en az 3 hafta içerisinde teslim almayı bekliyordum, bu kadar erken gelmesi süpriz oldu.

Raspberry Pi

RPi kredi kartı boyutlarında herşeyiyle tam bir bilgisayar. İçerisinde arm tabanlı bir işlemci ve kendi gpusu bulunuyor. Güncel olan B modelinde arttırılmış 512mb ram ve ethernet girişinin yanında direk görüntü alabilmek için hdmi ve komposit video çıkışı, klavye mouse vs için 2 tane usb girişi, ses için de 3,5mm lik stereo jack bulunuyor. Depolama alanı olarak hafıza kartı kullanılıyor. Düşük seviyede giriş-çıkış işlemleri yapabilmek için de GPIO pinleri bulunuyor. Ayrıntılı donanım bilgisi için buraya bakabilirsiniz.

Yazılım olarak şu anda sadece linux tabanlı belirli işletim sistemlerini destekliyor. En çok kullanılan ve resmi olarak tavsiye edilen dağıtım debian tabanlı RPi için geliştirilmiş olan Raspbian. İçerisinde hazır olarak bir çok uygulama ve grafik arayüzü ile geliyor. Yani bir masaüstü ortamı sizi karşılıyor.

Bir diğer dağıtım da aynı zamanda benim en çok ilgimi çeken Arch Linux Arm. Arm tabanlı işlemciler için geliştirilmiş olan bu dağıtım adından da anlaşılacağı gibi Arch Linux felsefesi doğrultusunda geliştiriliyor ve normal Arch Linux’ten kullanım olarak bir farkı bulunmuyor. Yani kurulum sonrası bizi bir grafik arayüzü karşılamıyor. :)

İhtiyaçlarımıza, isteklerimize göre bir dağıtım seçtikten sonra o dağıtım için imaj dosyasını indirip hafıza kartına o imajı açmamız gerekiyor. Bunun dışında herhangi bir sistem kurulumu ile uğraşmamıza gerek kalmıyor. Ben Arch Linux Arm kullanacağım için kendi sitesinden en güncel imaj dosyasını indirdim. İndirilen imaj dosyasını hafıza kartına açmak için Linux sistemlerde dd komutu kullanılıyor. Ayrıntılı anlatım veya diğer sistemlerde kurulum için RPi’nin wikisine başvurabilirsiniz.

Burada if= ile img dosyamızın kaynağını, of= ile hafıza kartımızın /dev klasöründeki yolunu belirtiyoruz. Burada önemli olan nokta hafıza kartının sdb1, sdb2 gibi bir bölümünün değil sdb gibi tamamının yolunu göstermemiz gerekiyor.

Raspberry Pi Çalışırken

İmaj açılmış hafıza kartını RPi’ye takıp elektrik verdiğimizde yaklaşık 15-20sn gibi bir süre sonra bizi kullanıcı adı ve şifre soran konsol ekranının karşılaması gerekiyor. Kullanıcı adı olarak root şifre olarak da root yazıp sisteme giriyoruz, gpasswd komutu ile giriş yaptıktan sonra bu şifreyi değiştirebiliriz.

Eğer bir monitör kullanılmıyorsa Rpi’ye ssh ile uzaktan bağlanılabilir. Arch Linux Arm açılışta eğer ethernet kablosu bağlı ise otomatik ip alacak şekilde konfigüre edilmiş. Bu nedenle elektrik vermeden ethernet kablosunu takmak gerekiyor. Ayrıca ssh daemonu kurulu ve aktif durumda geliyor. Bu nedenle ilk kullanım dahi ssh ile yapılabilir.

Komutu ile diğer bilgisayarımızdan RPi’mize bağlanıyoruz. RPi’nizin aldığı ip adresini modeminizin/routerınız yönetici panelinden görebilirsiniz. Eğer root hesabı için şifre soruyorsa başarılı bir şekilde bağlandınız demektir.

Bundan sonrası Arch Linux ile yapabileceklerimizle sınırlı. Bir dahaki yazımda Allah’tan bir mani gelmezse Arch Linux Arm için ilk kullanımda yapılması gereken konfigürasyonları ve apache kurulumunu anlatacağım. Daha sonra da python ile gpio pinleri ile uğraşmaya başlamayı umuyorum. Kolay gelsin..

Arch Linux ve Nvidia Optimus

Uzun süredir göz ardı ettiğim, uğraşmaktan ısrarla kaçındığım Arch Linux ve Nvidia Optimus ile yüzleşmeye karar verdim. Konuya ne kadar çözüm oldu bilmiyorum ama kendi kullanımım için ideal çözüme ulaştığımı gönül rahatlığıyla söyleyebilirim.

Bildiğiniz üzere bazı dizüstü bilgisayarlar içerisinde iki tane ekran kartı ile geliyor. Bunlardan birisi düşük performanslı olurken diğeri yüksek performanslı bir kart oluyor. Benim kullandığım dizüstüde Intel’in entegre kartı ile Nvidia’nın yüksek performanslı bir kartı bulunuyor. Nvidia’nın geliştirdiği Optimus teknolojisi de bu kartların sistem kaynaklarının kullanımına göre en fazla performans ile veya en düşük güç tüketimi ile çalışmasına olanak sağlıyor. Senaryo Windows kullanan bilgisayarlarda sıkıntısız işliyor. Ki ben de Windowsta normal kullanımda 4 saati geçkin pil ömrü alıyordum.

Read More…

Linux ve Java üzerine bir kitap..

Geçenlerde, finallerin de yaklaşması sebebiyle StumbleUpon’da vakit geçirirken Linux hakkında yazılmış 10 bedava kitap ismiyle bir sayfa ile karşılaştım. ‘Yeni yetme’ bir java programcısı ve meraklı bir linux kullanıcısı olarak bu kitaplar arasında bulunan “Java application development on Linux” kitabının adı ilgimi çekti ve kitabın da zaten bedava olmasından dolayı kolayca indirip incelemeye başladım.

Kitabın büyük bir bölümünü merakla ve sıkılmadan okudum. Kitap 2004 basım, biraz eski olsa da zaten bir referans kitabı olmadığı için -zaten güncel bir referans kitabı bulmak da imkansız bir durum- bence güncelliğini hala koruyor.

İçerik olarak kitap, öncelikle linux ortamı hakkında bilgi veriyor. Komut satırında yapabileceklerimiz konusunda ufkumuzu açıyor. Giriş/Çıkış işlemlerinden bahsediyor. Komut satırında komutların birbirleri ile nasıl bağlanabileceğini(pipes), olayların arkaplanda nasıl çalıştığını anlatıyor. Linux sistemlerde temel olarak gelen bir çok komutu(ls, cp, mv, grep, less, man, awk, vs) kısa kısa açıklıyor ve örnekler veriyor. Bence bu bölüm Linux hakkında hiçbir bilgisi olmayan, komut satırından korkan bir çok kişiye çok faydalı ve zevkli gelecektir.

Read More…

Linux, Arch Linux

1 yılı aşkın süredir Arch Linux kullanıcısıyım. Daha önceleri ubuntu, pardus, debian gibi Linux* dağıtımlarını incelemiştim ama hiç biri uzun soluklu olmamıştı, çünkü aradığımı bulamamıştım. Dönüp kendime baktığımda ne aradığımı bilmiyormuşum ki, diyorum fakat o zamanlar benim için; bahsedilen, kafamda canlandırdığım Linux mantığından, yaşadığım tecrübeler biraz uzaktı. Arkaplanda ne olduğundan bi haber, kullanımı kolay!, kapalı bir kutu gibi gözüktü, bu yüzden tekrar Windows’a döndüm. Ta ki dwm(dynamic window manager) ile tanışana kadar.

Dwm basit, son derece sade, hiçbir görsel efekt barındırmayan sadece işini yapan bir WM(window manager). C’de yazılmış ve biraz C bilgisi ile, anlaşılabilir yapısı sayesinde çok kolay özelliştirmeler yapılabiliyor. Dwm’yi kurcalarken ve daha önce yapılan özelliştirmeleri de incelerken sık sık Arch Forum ve Arch Wiki ile karşılaştım, biraz araştırınca Arch Linux’un kullanmam gereken bir dağıtım olduğuna karar verdim.

Arch Linux, geliştiricilerinin tabiriyle “it is what you make it” olarak tanımlanıyor. Yani senin yaptığın şey, hemen hemen sıfırdan kullanıcının geliştirdiği bir ortam. Başarılı bir Arch Linux kurulumu yapıldıktan sonra bizi shell karşılıyor. Komut satırı ve bir metin editoru(vi,vim,nano) ile sistemi kendimize göre konfigüre etmeye başlıyoruz. Pacman adında Arch Linux’un kendi paket yöneticisi bulunuyor. Bu paket yöneticisini kullanarak çok kolay bir şekilde çoğu programın en güncel versiyonunu kurabiliyoruz. Sistemimizde GUI uygulamalarını çalıştırmamız için, bugün hemen hemen her dağıtımda kullanılan Gnome, Kde gibi masaüstü ortamlarının(DE) da çalışmasını sağlayan altyapımız X Window Manager’i kurmamız gerekiyor. Bunu kurduktan sonra GUI’ye sahip programları da çalıştırılabilecek duruma geliyoruz. Tabi X’i bu haliyle kullanmak çok zor ve yetesiz, istersek bilinen DE’ler kurabiliriz bu aşamada ve çok modern bir arayüze sahip olabiliriz. Ama ben sadece WM kullanmayı tercih ediyorum. WM de kurduktan sonra, gerekli programları pacman paket yöneticisi ile kurup, sistemimizi hazır hale getirebiliyoruz. Pacman ile bir program kurulurken program için gerekli olan dependency(bağlı olunan diğer paketler) ler de otomatik kuruluyor. Yani direk pacmanla firefox kurmak istediğimizde başarılı oluyoruz. Gerekli kütüphaneler, derleyiciler, paketler otomatik kuruluyor. Arch Linux’un sürekli güncel tutulan ingilizce wikisinden kurulum ve kurulum sonrası konfigürasyon hakkında detaylı bilgiye ulaşılabilir. Wiki adım adım takip edilirse sorunsuz bir şekilde kurulum da konfigürasyon da tamamlanabilir. Zaman ve sabrınız da varsa, eksik birşey kalmıyor.

Sonuç olarak kendi isteklerinize göre çalışan sizin yaptığın bir işletim sistemine sahip oluyorsunuz. Neyin nerde olduğunu, bir sorun çıktığında nerden kaynaklandığını, çözümü dair keywordlere elinizin altındaymış gibi ulaşabiliyorsunuz. Bir süre sonra vazgeçilmeniz oluyor.

Linux’a yeni başlayacak birisi için Arch Linux, benim için doğru bir tercih olduğu kadar onlar için de olur mu bilmiyorum. Diğer dağıtımlarda biraz terminal bilgisi, metin editörleri kullanımı, bazı basit komutların kullanımı öğrenilip sonra Arch Linux tercih edilse daha doğru olabilir. Ben ikisini de bir arada götürmeye çalıştım, bazen çok zorlandım ama birazcık azimle aşılmayacak bir engel değil bence.

Linux, Arch Linux ile ilgileniyorsanız ve ‘sorunlarınız, sorularınız’ varsa elimden geldiğince yardımcı olmaya çalışırım.

Hatalı bir bilgi varsa lütfen düzeltebilmem için ya özelden ya da genelden beni bilgilendirin.

*Linux: GNU/Linux

Geç ama ..

Uzun, çok uzun süredir kendime farklı siteler tasarladım ama tembelliğimden olsun, üzerine fazla düşmeyişimden olsun bir türlü bunlar arasında yayınladığım bir tane olmadı. Nihayet kısmet bu tasarımla bugüneymiş, Allah uzun ve hayırlı soluk nasip etsin.

Sonuç olarak temelinde blog olan, fotoğraflarımı ve yaptığım proje tarzı çalışmalarımı da paylaşabileceğim bir ortam kurdum. Amacım kendime bir arşiv oluşturmak ve hakkında yazmayı düşündüğüm konularla ilgilenenlere yardımcı olabilmek.

Site wordpress üzerinde çalışıyor. Temayı sıfırdan kendim hazırladım. Optimizasyon, uyumluluk gibi sıkıntıları aştığımda darchtheme adıyla yayınlamayı düşünüyorum. Gelişmeleri temanın linkinden takip edebilirsiniz. Fotoğraflarımı yayınladığım bölümde kullandığım galeri eklentisini de kendim hazırladım. Tema gibi ilerleyen zamanlarda darchgal ismiyle onu da wordpress eklentisi olarak yayınlamayı düşünüyorum. Eklentinin sayfasından onu da takip edebilirsiniz.

Her ne kadar geç kalmış bir hareket olarak görsem de, daha fazla geç kalmayacağı için memnunum. İçerik olarak da amacıma ulaşabilirim inşaallah.

Diyeceğiniz, önereceğiniz şeyler kıymetlidir, esirgemeyiniz.