wait.h

Birden fazla process ile çalışan kod yazarken bazen wait() / waitpid() sistem çağrılarını kullanmak gerekebilir, bu sistem çağrıları child process yaratan parent process’lerin child’ların bitmelerini beklemek için kullanılır. Örneğin bir child process bir dosyaya yazma yapıyorsa ve parent process daha sonra bu dosyadan okuma yapacaksa önce child’ın tamamen sonlanmasını beklemesi gerekir çünkü child henüz daha dosyaya yazmayı bitirmemişken parent’ın bu dosyadan okuması hatalı sonuçlara yol açabilir.

wait()’in kullanılabilmesi için yazılan kodun en üstüne “#include <sys/wait.h>” satırının eklenmesi gerekir. Ancak bazı kodlarda bu satırın “#include <wait.h>” şeklinde yazıldığını da gördüm. Peki hangisi doğru? diye /usr/include dizini altına bakınırken aslında iki dosyanın da sistemde varolduğunu öğrendim:

$ find /usr -iname 'wait.h'
/usr/include/wait.h
/usr/include/x86_64-linux-gnu/sys/wait.h

Birbirinin sembolik linki olmayan bu iki farklı dosyanın içeriklerine baktığımda ise sys/wait.h olanı içersinde bir .h dosyasından bekleyebileceğim tanımlarla karşılaşmışken ilk wait.h dosyasının içeriğinin güldürecek kadar basit tutulduğunu gördüm:

$ cat /usr/include/wait.h
#include <sys/wait.h>

Muhtemelen BSD, Solaris, Linux vs gibi farklı platformlar arasındaki kod uyumluluğu artırmak için alınmış bir önlem olsa gerek.

20 Nisan 2015

Posted In: Gezegen Yazıları, linux, process, programlama, wait

Çeviri sözlüğü yayında

Özgür yazılım çevirileri arasında arama gerçekleştirmenizi sağlayan Çeviri Sözlüğü yayında.

Proje fikri nereden çıktı?

Sitenin hakkında kısmında da değindiğim gibi, Yakın Doğu Üniversitesi İnovasyon ve Bilişim Teknolojileri'nde stajımı gerçekleştirirken özgür yazılım çevirilerine katkı sağlamıştık. Çeviriler yaparken en çok ihtiyaç duyduğum şey, birden fazla yaygın anlamı olan kelimenin daha önce hangi Türkçe karşılığı kullanıldığı oluyordu. Bence bu konu, çevirinin bütünlüğü açısından da önemli. Aynı projede hatta aynı programda kelimelerin ortak bir karşılığı kullanılması, kullanıcıların da isteyeceği bir şeydir diye tahmin ediyorum.

Burada öğrendiğim yöntem ile, çevireceğim kelimenin daha önceki çevirisini görmek için ilgili projenin tüm çeviri dosyalarını bir dizine indirip, komut satırından "grep" komutu ile bulmak istediğim kelimenin çevirilerini ekrana getirebiliyorum.

Zaman içerisinde bu işlemi web uygulaması ve veritabanı ile yapma fikri kafamda oluştu ve sitenin şuan ki hali meydana geldi.

Teknik olarak neler var?

Tüm çeviri dosyaları bir dizin altında bulunuyor. Ayıklama (parse) işlevi gören Java kodu, po uzantılı çeviri dosyalarını işleyerek İngilizcesini, Türkçe çevirisini ve dosya isimini veritabanına atıyor.

Linux Tomcat üzerinde çalışan Jsp de sorgu çekmenizi sağlayıp, sonuçları ekrana getiriyor.

Neden Java?

İşin kodlama kısmında Java teknolojilerini tercih ettim. .po dosyalarını ayıklama işlemi Python'da polib kitaplığı ile hali hazırda gayet pratik bir şekilde yapılabiliyor. Lakin Java'yı seçerek iş yerinde kullandığım ve öğrendiğim teknolojiler yardımı ile hali hazırdaki bilgi birikimi mi kullanabilecek, aynı zamanda bu proje ile yeni öğrendiğim şeyler iş yerinde bana faydası dokunabilecekti. Aynı şekilde veritabanında da Postgresql tercih etmemin sebebi hem özgür olması hem de iş yerinde kullandığımız bir sistem olmasıdır.

Yazdığım kodda doğrudan polib'den  yararlanmasamda, polib'in kaynak kodunu inceleyerek, ayıklama işi yapan Java kodu için fazlası ile ilham aldım.

Lictionary.in

Projeyi heyecanla ilerletirken bir yandan daha önce böyle bir çalışma olmuş ya da mevzu bahsi geçmiş mi diye araştırırken, lictionary.in sayfası ile karşılaştım. 2011 yılında gerçekleştirilen bu proje ile daha önce nasıl karşılaşmadım bilmiyorum.

Çevirileri tablolama açısından benim yapmak istediğim site ile tamamen aynı fikir üzerine kurulu. Daha önce yapılmış olanı yapmak bir süre hevesimi kırsa da, projenin eğitici yönünden dolayı yaptığım işi yarıda bırakmak istemedim.

Ne öğrendim?

.po dosyalarını ayıklama işlemlerini gerçekleştirirken temel Java bilgilerimi ilerlettim.
Postgresql bilgilerimi ilerlettim.
Jsp ile tanıştım.
Jsp'den gelen talepleri işlemek ve tekrar Jsp'ye göndermek için Servlet kullandım.

Bu proje bahanesi ile DigitalOcean'dan çok cüzi miktara Linux sunucu sahibi oldum. İnsanın elinin altında bandı geniş, alanı geniş bir VPS'i olması çok güzel :) Sitenin yayında olmasını sağlayan işlerin çok büyük çoğunluğunu kendim gerçekleştirdim. Daha önce LKD'nin eğitimine katıldığım ve LFS ile uğraştığım için işin en kolay kısmı Linux sistem yönetimi alanında oldu :)

DigitalOcean'dan kiraladığım sunucuya svn kurdum ve projeyi orada sakladım. svn co, svn up komutlarından öteye giderek svn yönetimi ile ilgili işleri öğrendim.

Ha unutmadan birde, sunucu sahibi olmadan önce projemi dışarısı ile paylaşmak için dizüstünde kurulu olan Ubuntu sistemi mi kullanıyordum. Bilgisayarımı barındırma olarak kullanabilmek için port yönlendirme, iptables vb konularda bilgi sahibi oldum. Bilgisayarımı barındırma olarak kullanmak gençlik hayalimdi :)

Sayfalama (pagination) işlemleri sırasında MVC ile tanıştım. Sürekli duyduğum birşeydi. Uygulamalı olarak tanımış oldum.

Temel HTML, CSS kodlarını öğrendim.

Proje ile uğraşırken karşılaştığım sorunlar ve çözümleri

Birileri sayfama giripte, "bunu nasıl yapmış acaba" diyebileceği ve aynı zamanda benim üzerinde bir süre takıldığım konularda yararlandığım kaynakları paylaşmak istiyorum.

tablonun css'i için hazır kodlar kullandım. Ufak tefek değişiklikler dışında olduğu gibi kaynaktan yararlandım

http://johnsardine.com/freebies/dl-html-css/simple-little-tab/

Sonuçları sayfalamak için aşağıdaki kaynağı takip ettim. Üzerine eklemeler yaptım. İlerleyen sürümlerde tablolamada jQuery'ye geçecek olsam da, MVC öğrenmeme vesile olması sebebiyle taglib (JSTL) kullandığıma pişman değilim.

http://theopentutorials.com/examples/java-ee/jsp/pagination-in-servlet-and-jsp/ 

Tomcat'te Türkçe karakter sorunu yaşadım. Konu Jsp ile alakalı zannederek Google'da bu konudaki bir çok sayfayı tekrar tekrar ziyaret ettim. Lakin bakış açımı değiştirince çözüm Tomcat'te olduğunu farkettim. Bunun ile ilgili

http://struts.apache.org/release/2.0.x/docs/how-to-support-utf-8-uriencoding-with-tomcat.html

Html etiketlerini düz metin olarak göstermek için

http://stackoverflow.com/questions/6817262/how-to-display-html-tags-as-plain-text


Sistem tarafında iş arkadaşım Gökhan Atmaca'dan, kodlama ve arayüz konusunda diğer çalışma arkadaşlarımdan epeyce fikir aldım. Onlara da teşekkürler.

Biterken

Veritabanı üzerinde çalışmak isteyenler için, yedeğini (dump) paylaşabilirim.

Henüz 5 aylık Java serüvenim var. Bulduğunuz hata veya absürtlükleri değerlendirirken bunu göz önünde bulundurarak değerlendirirseniz sevinirim. 

Böyle ufak bir proje için bu kadar dil dökmüş olmamı garipseyebilirsiniz, lakin yazmayı seviyorum :)

Gelecek sürümlerde görüşmek üzere.


29 Ocak 2014

Posted In: çeviri sözlüğü, Gezegen, java, linux, programlama

Java split() metodunda kırpmanın önüne geçme

Java'da bir dizgeye split() metodunu uyguladığımız zaman, dizgenin son kısımlarında boş (yani "") dönmesi gereken alanlar kırpılıyor ("trim" uygulanıyor).

Örneğin aşağıdaki gibi bir dizgemiz olsun.
String degerler = "0|0|0|1|||0|1|0|||";
degerler dizgesini boruya (pipe, "|") göre split() ettiğimde karakter dizisi içerisinde geriye "0", "1" yada "" değerleri dönecek.
String[] karakterDizisi = degerler.split("\\|"); 
Yukarıdaki kodu uyguladıktan sonra split() metodu en sondaki "0" rakamından sonraki  "|||" kısmını kırpıyor ve boş değerleri listeye dahil etmiyor.  Bu durumda karakterDizisi'nin uzunluğu 9 dönüyor.

Bu durum String.split(String regex) bağlantısında açıkça belirtilmiş.

Kırpılan alanları da karakter dizisine eklemek istiyorsanız, sınırlama değeri girmelisiniz. Sınırlama değeri  split() metodunun dizgeye kaç defa uygulanacağını belirtir.  split() metodunun kaç defa uygulanacağına dair bir sınır girmek istemiyorsanız eksili bir sayı girmeniz yeterli.

Sınırlama değeri ile kullanmak için sözdizimi şu şekilde: String.split(String regex, int limit)

Örnek olarak;
String[] karakterDizisi = degerler.split("\\|", -1); 

Artık karakterDizisi uzunluğunda bir sınır yok ve boş alanlar da listeye dahil. Yukarıdaki kodu uyguladıktan sonra listenin uzunluk değeri 12 dönüyor.

Kaynak: http://stackoverflow.com/questions/14414582/java-split-string-to-array

18 Ocak 2014

Posted In: Gezegen, java, programlama, split metodu

Functional Programming Principles in Scala

25 Mart tarihinde Coursera üzerinden Functional Programming Principles in Scala dersi başlıyor. İlgileniyorsanız kaydolmak için şu adrese gidebilirsiniz.
Dersi dilin yaratıcısı ve EPFL(kabaca Lozan Teknik Univ.) öğretim üyesi Prof. Martin Odersky'nin vermesi de cabası.

Bilmeyenler için Scala fonksyonel ve nesne yönelimli programlama paradigmalarını bünyesinde birleştirmeye çalışan nispeten yeni bir programlama dili. JVM üzerinde çalıştığı için Java uyumluluğu sağlayabilmesi de bir artı. Bu aralar oldukça revaçta hatta 1-2 sene önce Twitter altyapısını Scala'ya geçirmeye başladı. (Artık meşhur balina pek gözükmüyor di mi). Daha fazla bilgi için scala-lang.org adresine gidebilirsiniz.

Coursera'da günümüzün kutsal bilgi kaynaklarından sayılabilecek bir eğitim platformu. 60 kadar üniversite (Bu üniversitelerin içinde Stanford,Princeton, Caltech falan gibi çok iyi üniversiteler de var) tarafından dersler bedava olarak yayınlanıyor. Herhangi bir kısıtlama olmadan istediğiniz derse yazılabiliyorsunuz. Dersi takip eder ve verilen ödevleri yapıp internete gerekli puanı tutturabilirseniz dersi geçmiş oluyorsunuz. Salt video ve ödevden gayrı ders forumlarının bulunup bunlar aracılığıyla insanlarla iletişime geçebilmek güzel.

Bu ders ikinci defa açılımış, ilk açıldığında 50.000 kişi kaydolmuş ve bunların 10.000'i dersi geçmiş ki söylediklerine göre bir online dersin ulaştığı en yüksek başarı oranıymış.

23 Mart 2013

Posted In: Gezegen, Özgür yazılım, programlama

python uygulamalarında hata ayıklama – pdb

Program yazarken ortaya çıkan hataların sebeplerini bulmak kodun büyüklüğü, karmaşıklığı ile orantılı olarak zorlaşıyor. Çok sayıda geliştiricinin üzerinde çalıştığı projelerde ya da sonradan dahil olunan projelerde hata takibi daha da zor oluyor.

Python hata durumunda (çoğu zaman) güzel çıktılar sunuyor olsa bile işin o noktaya nasıl geldiğini ve değişkenlerin, argümanların o andaki değerlerini koda müdahale ederek öğrenmek gerekiyor. Bunun için koda print satırları ekleyip değerleri ekrana bastırmak (printf debugging) en sık tercih edilen yöntemlerden. Fakat bu basit yöntem çoğu zaman yetersiz kalıyor.

Bu noktada da `pdb` modülü imdada yetişiyor. debugger’a geçmek istediğimiz noktaya aşağıdaki satırı ekleyerek breakpoint oluşturuyoruz.

import pdb; pdb.set_trace()

Breakpoint’e gelindiğinde debugger shell’e düşüyoruz. Debugger komutlarıyla uygulamanın ilerleyişine müdahale edebiliyor, yeni breakpointler tanımlayabiliyor ve uygulamayı yeniden başlatabiliyoruz. Debugger komutlarının yanısıra tüm python ifadelerini de kullanabiliyoruz.

Sosyal medya editi: Serdar Dalgıç twitter’dan “pdb’den daha iyi bir yöntem olarak ipdb :) github.com/gotcha/ipdb” dedi. Gerçekten de python shell yerine çok daha yetenekli ipython shell’ini kullanabilmek büyük bir avantaj. pdb yerine ipdb kullanmak gayet mantıklı görünüyor.

23 Ocak 2013

Posted In: debug, Gezegen, Kendime notlar, pdb, programlama, python

Clipdict’e Merhaba

Uzun zamandır program bağımsız bir sözlük olsa ne güzel olurdu diye düşünüp duruyorum. (Bir akıllı ben değilim ya illa birileri yapmıştır ben denk gelememişimdir.) Kafamda kurduğum şeyde şuydu anlamını bilmediğim bir kelimeyi seçsem bir tuşa bassam ve anlamını görebilsem. Bunu yapabilen tarayıcı eklentileri var ama bu bana bir tek tarayıcıda lazım olmuyor. Akşam aklıma kelimeyi clipboard'dan çekerek bunu yapabileceğim geldi. Python ve QT ile 15-30 dk'lık bir uğraşıyla (ki onunda en az yarısı döküman okumaya gitmiştir) Clipdict'i yazdım ve ona mümkün olabilecek en berbat isimlerden birini verdim.

Aslında çok çok basit bir iş yapıyor clipboard'dan çektiği kelimeyi seslisozluk'te arayıp çıktısını bir QWebView'e veriyor. Kendisi için bir klayve kısayolu oluşturduktan sonra gayet güzel olduğu fikrindeyim.

Xubuntu üzerinde test ettim. Diğer dağıtımlarda da sorun çıkmaz sanıyorum ama Windows'da çalışır mı bilmiyorum. Windows'ta çalıştırmak isteyen olursa diye Python 2.7.x ve QT 4.7.x kullandığımı yazayım.
Kullandığım QClipboard modunun X11'e özel olması gibi bir şey yazıyordu QT belgelerinde. Bir deneyen olursa haber verirse sevinirim.
GÜNCELLEME: Windows bir makina üzerinde deneme fırsatı buldum. Çalışması için QClipboard modunu Selection'dan Clipboard moduna değiştirmek gerekti. Windows herhalde farklı bir clipboard sistemi kullandığı için seçilen veriye ulaşmak için kopyalamak gerekti. Windows'ta bir kısayol ile komut çalıştırmanın mümkün olmadığını sanıyorum.  Clipdict'i GNU/Linux üzerindeki gibi çalışır için gereken çabanın Windows araçlarıyla yeni bir tane yazmaktan daha fazla olduğunu düşündüğüm için de üzerinde uğraşmamayı düşünüyorum.

Olur da bir göz atmak isterseniz aşağıdaki adreste bulabilirsiniz.

30 Nisan 2012

Posted In: Gezegen, Özgür yazılım, programlama

Pardus Stajına Başlarken

Benim de seçildiğim 2011 Pardus Yaz Stajı yaklaşık ben yazmaya başladıktan 8 saat sonra başlayacak.Ve başlamadan önce bu staj hakkında ne hissediyorum,ne düşünüyorum,ne bekliyorum gibi soruları özellikle daha sonra bakmak için yazmak için yazmak istedim.

Çok genelden başlamak gerekirse. TÜBİTAK ülkemizin önemli bilim insanlarınca kurulmuş her ne kadar son yıllarda siyasi iktidar bazı müdahalelerde bulunmuş olsa da ülkemizin araştırma alanlarında lokomotiflerinden biri olduğunu düşündüğüm bir kurum. Özellikle TÜBİTAK yayınlarıyla büyümüş bir neslin ferdi olarak bu güzide kurumda kısa bir süre çalışabilecek olmak benim için gurur verici
Ayrıca bir özgür yazılım aktivisti olmaya çalışan (ne kadar beceriyorumdur takdir bana ait değil) biri olarak da ülkemizin en büyük özgür yazılım projelerinden birinde çalışabilme olanağı bulmam da bir mutluluk kaynağı benim için.

Peki beklentim neler
Öncelikle herkesinde tahmin edebileceği üzere tecrübe özellikle günlük hayatta kullanılabilecek hiç bir yazılım üret(e)memiş biri olduğum da düşünülürse bu çok önemli.
Bireysel değil takım içi çalışma tecrübesinin de ayrıca çok önemli olduğunu düşünüyorum.
Kısaca bu tecrübe bittiğinde bir ay sonra daha iyi bir yazılımcı/programcı olmayı umuyorum.

Bence önemli olan bir beklentim daha var.
Yaklaşık 2008 yazından beri Pardus'la ilgileniyorum.Son 1 sene içerisinde de toplulukta yer almaya çalıştım. Bu sürede gözlemlediğim önemli şeylerden biri de kullanıcılarla geliştiriciler arasındaki devasa iletişim bozukluğu.Özellikle kullanıcı tarafı Pardus geliştiricilerini yoğun bir eleştiri yağmuruna tutuyor.Sanıyorum ki geliştiricilere de söylenmedik söz kalmamıştır. Bu durum beni oldukça rahatsız etmekle beraber
Bu stajı bir anlamda da madalyonun öteki yüzünü görmek olarak düşünüyorum.
Nasıl çalışıyorlar,durumları neler,acaba kullanıcılar olarak onlara haksızlık ettiğimiz noktalar var mı gerçekten merak ediyorum. Bunu özellikle gözlemlemeye çalışacağım ve sizin onların açısından öğrenmek istediğiniz bir şey varsa mümkün olursa iletmek de ayrıca isterim.

Şu anlık düşündüklerim,hissettiklerim bunlar. Aklıma bir şey gelirse ekleme yapabilirim.
NOT: Pardus stajı ile alakalı yazılarımı dürüst bir şekilde yazmaya çalışacağım  "Onlara yaranmak için yazıyorsun bunları, Beynin yıkamışlar orada" şeklinde yorumlar yapmamanızı rica edeceğim.
Özellikle tartışmak istediğiniz bir şey varsa ugurcanergn@gmail.com adresinden ulaşabilirsiniz.

20 Haziran 2011

Posted In: 2011 Pardus Stajı, Gezegen, gnu/linux, Özgür yazılım, pardus, programlama

Şoför ilanları Yazılım Geliştiricisi ilanları gibi olsaydı

http://blog.jitbit.com/ adresinde gayet güzel bir yazı gördüm. Yazı dediğim şey aslında kurmaca bir iş ilanından ibaret.Çeviriyi kendim yaptım yamulduğum yerlerde düzeltmekten çekinmeyin.


İş tanımı: Şoförlük


İş gereksinimleri:  Profesyonel seviyede araba,yük vagonu,otobüs,kamyon,troleybüs,tramvay,metro,traktör,kepçe kullanabilmek ayrıca NATO ülkelerinde kullanılan modern hafif ve ağır tankları kullanabilmek


Ralli ve ekstrem sürüş becerisi (Zorunlu)
Formula-1 tecrübesi (Tercih edilir)


Dünyaca ünlü üreticilerin pistonları,motorları,şanzımanları,ateşleme sistemleri,dahili bilgisayarları,ABS,ABD,GPS ve araç içi ses sistemlerini tamir etme becerisi ve tecrübesi (Zorunlu)


Araba boyama tecrübesi (Tercih edilir)


Başvuracakların BMW,General Motors ve Bosch firmalarından iki seneden eski olmamak kaydıyla sertifika almış olmaları gerekmektedir.


Ücret: Saat başına 35-45 TL (Mülakat sonucuna bağlı olarak)


Eğitim: Mühendislik mezunu


Altta 3 ila 5 yıl arası Honda Civic kullanma tecrübesi  gibi bir yorum vardı oda çok hoşuma gitti ayrıca paylaşmak istedim.
NOT: Blogger'in yazım aracı font ve renklerde fena sapıtabiliyor o konuda affınıza sığınıyorum.

24 Mayıs 2011

Posted In: Gezegen, programlama

ARDrone

Okulda üzerinde çalışacağım (en azından çalışmaya çalışacağım) cihazı sizlere de tanıtmak için bir yazı yazmak istedim.
Adını başlıktan da anlayabileceğiniz gibi cihazın adı ARDrone. Peki nedir bu ARDrone ?
ARDrone en kaba ifadeyle dört pervaneli uzaktan kumandalı bir helikopter (İngilizcesiyle quadrotor veya quadricopter bu araçlardan Avatar'ı izlediyseniz veya Crysis oynadıysanız görmüşsünüzdür). Ama çok önemli bir farkla normal modellerin aksine radyo dalgalarıyla değil  Wi-Fi ağları sayesinde kontrol ediliyorlar. Diğer model araçlardan bir başka ilginç farkı ise kullanmak için spesifik bir kumandaya ihtiyaç yok resmi olarak iOS işletim sistemine sahip herhangi bir cihazdan kontrol edilebiliyorsa da açık kaynak SDK (Geliştirme lisansını okudum özgür yazılım değil gerçek anlamda açık kaynak) sayesinde herhangi bir kişisel bilgisayardan kontrol edilebilme özelliğine de sahip. Aslında ARDrone'un klasik uzaktan kumandalı modellerle aynı kefeye koymak da pek mümkün değil. Hatta ARDrone'u bir UAV (İnsansız Hava Aracı) olarak adlandırmak bence daha doğru. Çünkü onu kullanırken amaç uçurabilmek değil. Zaten üzerindeki bilgisayarla kullanıcının işini çok kolaylaştırıyor. Altındaki kamera ve ultrason alıcı ile yüksekliğini belirleyerek otomatik olarak inebiliyor veya kalkabiliyor komut verilmediğinde sabit bir yükseklikte durabiliyor. Ayrıca önünde de bir kamera bulunuyor bu sayede çok rahat kontrol edebiliyorsunuz.Aklınıza madem uçurmak çok kolay ne zevki kalır diye haklı bir soru gelebilir. ARDrone zaten arttırılmış gerçeklik (augmented reality) oyunları için tasarlanmış bir araç. Arttırılmış gerçeklik oyunları derken şunu kastediyorum. ARDrone'un ön kamerası belirli işaretleri algılayabiliyor. Bu algılama olayı sırasında kumandada belirli animasyonlar gösterecek oyunlar tasarlanabiliyor. (Mesela ARDrone bir işaret algıladığı zaman kumanda ekranıında ona ateş ettiğinin gösterilmesi,birden fazla ARDrone'un it dalaşı yapması vs.) Araç iç ve dış mekan uçuşlarına uygun hatta bu nedenle iki farklı gövde ile geliyor.
ARDrone SDK ve yazılım geliştirmeye ayrıca değinmek istiyorum ama önce ARDrone özelliklerini vereyim.
Özellikler

  • Geçici dijital Wi-Fi bağlantı (Wi-Fi router’a gerek yoktur). 
  • Menzil: 50 metreye kadar
  • 2 video kamera ile iPod touch® / iPhone®/ iPadTM ekranına canlı görüntü
  • Otomatik stabilizasyon ve tam pilotaj yardımı (6 metreye kadar yükseklik)
  • iPod touch® / iPhone®/ iPadTM üzerinde acemi ve uzman modu ile dokunmatik kontrol arayüzü
  • Maksimum hız: 5 m/s; 18km/h
  • Bağlantı için maksimum yükseklik: 50 metre
  • Çalışma süresi: 12 dakika
  • Güvenlik sistemi: 
  • Kapalı mekân uçuşları için EPP gövde
  • Temas halinde otomatik pervane kilitleme
  • UL2054 batarya
  • Acil durumda motorları durduran kontrol arayüzü
  • Ebatlar:
  • Kapalı mekân uçuşları için koruyucu gövde ile birlikte: 52,5x51,5cm Ağırlık: 420 g
  • Dış mekân uçuşları için şekillendirilmiş gövde ile birlikte: 45x29cm 
  •         Ağırlık: 380 g

  • Radyo dijital bağlantı
  • Geçici moda gömülü ve yapılandırılmış entegre Wi-Fi b/g modülü 

  • Video
  • Ön kamera: Geniş açı kamera
  • VGA kamera (640x480 pixel), 93° geniş açı diyagonal objektif, CMOS sensör
  • Şifreleme ve iPod touch® / iPhone® / iPad™’a görüntü akışı
  • Düşman aracını algılama
  • Çekim doğrulama
  • Tahmini mesafe
  • Mesafe algılama: 5 metre
  • Engel algılama
  • Engel konumunu hesaplama
  • Sanal nesne konumunu hesaplama
  • iPod touch® / iPhone® / iPad™ ekranına video aktarımı

  • Dikey kamera: Yüksek hız kamerası
  • QCIF kamera (176x144 pixels), 64° diyagonal lens, CMOS sensör
  • Yatay hız değişikliği hesaplama: 60 fps
  • Şifreleme ve iPod touch® / iPhone® / iPad™’a görüntü akışı

  • Otomatik pilot
  • Otomatik kalkış ve iniş
  • Kapalı ve dış mekânda otomatik sabit nokta (Rüzgâr hızı < 15km/h, Yükseklik < 6 metre 
  • Otomatik yükseklik ve hız ayarı (6 metreye kadar)
  • Kapalı (hassas) ve açık hava (hız) uçuşları için 2 komut modu

  • iPod touch® / iPhone®/ iPad™’de dokunmatik kontrol arayüzü
  • Acemi(2 komutlu) ve Uzman (1 komutlu) modlar
  • AR.Drone’u kumanda etmek için iPod touch® / iPhone®/ iPad™ ivmeölçerini kullanır
  • iPod touch® / iPhone® / iPad™’in hareketlerini kopya eder (ileri-geri, sol-sağ)
  • Motorları durdurmak için acil durum düğmesi

  • Tam Ataletsel Ölçüm Birimi
  • MEMS 3 eksen ivmeölçer
  • MEMS 2 eksen XY ve 1 eksen Z jirometre
  • Açısal hız tahmini
  • Sapma, eğim ve yuvarlanma açısı tahmini
  • Ölçüm frekansı: 200 Hz
  • Patentli anti-vibrasyon sistemi

  • Ultrason yükseklikölçer
  • Emisyon frekansı: 40kHz
  • 6 metre menzil
  • Ölçüm frekansı: 25 Hz
  • Başka bir AR.Drone’dan gelen ultrasonik sese karşı sistem 

  • On-board bilgisayar
  • CPU Parrot P6 ARM926 çekirdek 32bits-468MHz
  • Gömülü Linux platformu
  • 128 MB DDR RAM
  • 128 MB flash memory
  • Wi-Fi ya da USB üzerinden gömülü yazılım güncelleme
  • Havacılık yapısı
  • Yüksek verimlilikte pervaneler (Parrot AR.Drone için özel tasarım)
  • Karbon tüp yapısı
  • Fiber-takviyeli PA66 plastik
  • Kapalı mekân uçuşlarında pervaneleri koruyan EPP gövde
  • Dış mekân uçuşları için şekillendirilmiş EPP gövde

  • Motor ve enerji
  • Değiştirilebilir 4 fırçasız motor (3 500 rpm, Güç:15W)
  • Fırçasız motorlar için 4 kontrolör (dijital komut)
  • Lityum polimer batarya (3 gözlü, 11,1V, 1000 mAh) UL2054
  • Batarya şarj süresi: 90 dakika
Özelliklerine baktığımızda üzerinde şu an kullandığım cep telefonundan (Samsung Corby Pro) daha güçlü bir donanım barındıran ARDrone'u bir RC araç değilde UAV olarak olarak adlandırma isteğimin anlaşılabileceğini düşünüyorum. Ayrıca ARDrone'un günümüz teknolojisinin en büyük sorunlarından biri olan güç sorunundan  nasibini aldığını görüyoruz.Üzerindeki 1000mAh batarya ile sadece 12 dakika gibi bir ortalama uçuş süresi var.
Batarya daha yüksek kapasiteli başka bir tanesiyle değiştirilmediği sürece uçuş ömrü oldukça kısa.
Bu kadar yetenekli bir aracın bir geliştirme ortamı olarak da kullanılabilmesi için üretici firma Parrot bir açık kaynaklı bir SDK yayınladı. Bu SDK ARDrone'un Redmine sayfasından edinilebilir. Geliştirici sözleşmesini onayladıktan sonra SDK'yı ve yüz sayfalık developer guide'ı indirebiliyorsunuz. Önce sözleşme hakkında biraz bilgi vereyim. Parrot kendi fikri mülkiyet haklarını korumak için koyduğu bir kaç maddenin [mesela kodu tekrar dağıtırken Parrot'un telif hakkı bilgisini eklemek,geliştirilen yazılımların reklamında Parrot ismini kullanmama vs.]yanında geliştirdiğiniz yazılımın tüm fikri mülkiyetini geliştiriciye bırakıyor. SDK'nın kullanım amaçlarıyla ilgili bazı kısıtlamalar da mevcut. Şahsi fikrim sözleşmenin gayet makul maddeler içerdiği ve geliştiriciye ağır kısıtlamalar getirmediği yönünde. Sıfırıncı özgürlüğü sunmasa bile genel anlamda özgür yazılım esaslarına da pek ters düşmüyor. Parrot kaynak koda erişim, kaynak kodu düzenleme,dağıtma gibi temel özgürlüklerini geliştiricilere sunuyor.
Dökümantasyonda ARDrone'un genel yapısından,SDK hakkında kısa bir özet,API fonksyonları,temel komutlar,bilgi akışı yönetimi,drone ayarları gibi teknik bilgilerin yanı sıra Linux,Windows işletim sistemlerinde programlama ile ilgili temel veriler yer alıyor. Gerçi geliştirici sözleşmesini onaylamadan dökümanların indirilememesi olayını mantıklı bulmadım.
Peki indirdiğimiz SDK'nın içerisinde neler var.
ARDroneLIB : ARDrone ile ilgili kütüphane ve API'leri içerir.
ARDroneTool : ARDrone'un yönetimi ile ilgili hazır araçları içerir.
İPhone örneği.
Ayrıca ARDrone yazılımlarının farklı platformlarda geliştirebileceği gibi soket programlamayı destekleyen farklı programlama dilleri ile geliştirebileceğini öğrendim.
Sorularınız ve sorunlarınız varsa ARDrone API forumuna başvurabilirsiniz. Aynı zamanda ARDrone ile ilgili bir topluluk sitesi olan http://www.ardrone-flyers.com/ adresi de mevcut.

16 Mayıs 2011

Posted In: Gezegen, KOÜ Bilgisayar Müh., programlama

WP Twitter Auto Publish Powered By : XYZScripts.com