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

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