Emniyet kiritik sistemler icin model tabanli yazilim gelistirme (Model based software development for safety critical systems)


Merhabalar bugün ESA-Estec'te "10th ESA Workshop on Avionics, Data, Control and Software Systems" calistayina katilma firsati buldum. Ogleden sonranin konusu, uzun zamandir uzerine yazmak istedigim model tabanli otomatik kod uretimi idi. Avrupanin uzay konusunda onde gelen firmalari model tabanli olarak gelistirdikleri prolerini ve bu konudaki tecrubeleri paylastilar.  Bu yazida sunum yapan firmalarin model tabanli gelistirmeye bakisini, teknoloji seviyesini ve konuyla alakali kendi tecrubelerimi paylasacagim.
  •  1990'li yillarda deneysel projelerde kullanilsada artik neredeyse karmasik kontrol algoritmasi iceren butun ciddi projelerde model tabanli gelistirme yoluna gidiliyor. Bunda etkili olan, kod uretme araclarinin son yillarda ciddi sekilde gelismesi ve model tabanli gelistirme yaklasiminin yazilim gelistirme/verifikasyon maliyetlerini ciddi sekilde dusurmesi. Sunum yapan Thales Alenia Space, OHB Sweden, ESTEC gibi firmalar bu gorusu destekliyorlar. Gunumuzde artan sayida projenin kodu otomatik olarak uretiliyor. Airbus ta bu sekilde gelistirme yapiyor. Hollanda'da calistigim iki sirkette de, universite de kontrol algoritmalari model tabanli olarak gelistiriyoruz.   
  • Matlab/Simulink/Embedded Coder neredeyse piyasada tekel olmus durumda. Gecmiste cesitli farkli araclar kullanilirken giderek Mathworks un pazar payi artiyor. Sunum yapan firmalarin gorusu bu sekilde. Ben de sadece bunu kullandim.
  • Uzay sektoru benim gozlemime gore diger sektorlerden biraz daha geride otomatik kod uretimi konusunda. Havacilik, medikal ve otomotiv sektorlerinde kullanim cok daha yaygin. Ornegin,  artan sayida kullanimla birlikte ESA bunyesinde ECSS yazilim gelistirme standardi uzerinde model tabanli gelistirmeyi duzenleyecek revizyon yapmali miyiz? konusu henuz tartisiliyor. Havacilikla DO-178C standardi seneler once DO-331 (model based) ekiyle birlikte gelmisti.
  • Calistayda ilgimi ceken bir baska konu ise bilgisayarla gorme tabanli navigasyon ve ucus kontrol sistemleri idi. Geleneksel kontrol algoritmalari iceren yazilimlarda model tabanli gelistirme yaklasimi artarken, bilgisayarla goru uygulamalarin elle kodlandigini ogrendim. Sanirim otomatik olarak uretilen kod performans konusunda elle yazilan kod ile henuz rekabet edemiyor. Performans degerlendirmesi icin simulink ile gelen demo uygulamalarinin birisinden C kodu uretmeyi planliyorum, Gerceklestirirsem sonuclarini burada paylasmak isterim. (Eger bu konuda tecrubeniz varsa, paylasirsaniz memnun olurum.)
  • Modeller metin tabanli olmadigi icin geleneksel sekilde "diff" alinamiyor. Birden cok gelistiricinin calistigi projelerde farkli gelistiricilerin gelistirdigi modullerin nasil birlestirilecegi belli degil. Bu nedenle modellerin konfigurasyon yonetimi biraz daha sikintili. Model dogrulama yontemleri(unit tests, test coverage vs.), geleneksel yontemlere gore farkli. Bu konularin proje basinda iyi bir sekilde planlanmasi gerekiyor. Bu konu aslinda blog yazisinda anlatilamayacak olcude detayli...
  • Hem karmasikligi yonetilebilir seviyede tutabilmek icin, hem de uretilen kodun dogrulugundan emin olabilmek icin, modelleme standarti cok onemli. Firmalarin genellikle kendi tecrubeleriyle olusturduklari modelleme standartlari var.
 Cok uzun zaman sonra yazdigim yazinin sonuna geldik. Birilerine faydali olmasi dilegiyle..

Devamını oku...>>

OpenCV 2.3 ile Optical Flow C++

  Optical flow yöntemi, hareket kestirimi, nesne takibi, video stabilizasyonu(titreşim,hareket giderme), imge mozaikleme, stereo vision ile derinlik bilgisi eldesi gibi operasyonlarda sıklıkla kullanılan temel bir araçtır. Genel olarak Optical flow yöntemi bir resimdeki noktanın diğer bir resimde nereye gittiğini bulmaktadır. Burada OpenCV nin sağladığı fonksiyonlarla Lucas Kanade optical flow örneği bulunmakta. OpenCV  kütüphanesinin C dili arayüzlerini kullnıarak geliştirilen bu uygulamayı  C++ a çevirdim.


Devamını oku...>>

OpenCV 2.2 Windows .lib dosyaları?

     OpenCV nin 2.2 versiyonu geçtiğimiz yılın Aralık ayında yayınlandı. 2.3 versiyonunun ise planlanan sürüm tarihi Mayıs 2011 olarak belirtilmiş.  Versiyon 2.2 de neler değişmiş burada. Bu listede ilk gözümüze çarpan kütüphanenin organizasyonunun bir hayli değişmiş olması. Eski versiyonlardan aşina olduğumuz cxcore, cv, cvaux, highgui ve ml modülleri daha küçük parçalara bölünmüş halde karşımıza çıkıyor. Bu değişiklikler kodlarımızda kullanmaya alıştığımız opencv header dosyalarının adının değişmesine neden olmuş. Ayrıca lib ve dll dosyalarıda artık opencv ön ekiyle başlıyor. Bu versiyonun  android için de built edilebileceği resmi olarak belirtilmiş. Kütüphanenin C++ desteği de bir hayli gelişmiş. 

  OpenCV kütüphanesinin 2.2 versiyonunu Visual Studio ortamında kullanmak istiyorsanız, kütüphanin kodlarını indirdikten sonra CMake ile Visual Studio proje dosyası oluşturup bu projeyi derleyerek dll ve lib dosyalarını oluşturmanız gerekiyor.  buradan windows versiyonunu indirebilirsiniz. Bu pakette kütüphanenin kodları, değişik dillerde örnek programlar ve bin klasörü içerisinde derlenmiş kütüphane dosyaları bulunuyor. Kütüphanenin kodlarıyla ve örnek programlarla ilgilenmeyecekseniz, OpenCV kullanan herhangi bir programı derlemek için minumum gereksinimleri  aşağıdaki linkten indirebilirsiniz.


     Aşağıda OpenCV v2.2 nin c++ arayüzü ile yazılmış temel bir test programı veriyorum. Aynı cv::Mat objesine döngü içinde jpeg dosyadan okuma yapılmasına rağmen C++' ın güzelliklerinden faydalanılarak  memory leak oluşmadığına dikkat ediniz. 

Devamını oku...>>

vs.Pratik.Sözlük çıktı!


       Önceleri sözlük karıştırıp  kelimeyi bulmak zor gelirdi sonra bir kelimeye bakmak için her seferinde sözlük sitelerini açıp bakmak zor gelmeye başladı. Bunun için hafta sonu kendime  ufak bir program  hazırladım. Belki sizler için de faydalı olur. 

  • vs.Pratik.Sözlük, bilgisayarınızda çalışırken sözlük ihtiyacınızı pratik şekilde çözmeye yönelik olarak tasarlanmıştır. 
  • vs.Pratik.Sözlük ile size vakit kaybettirecek, web tabanlı sözlük hizmetlerine veya karmaşık sözlük programlarına ihtiyacınız kalmayacak.
  • vs.Pratik.Sözlük Google Translate altyapısını kullandığından bu hizmetin sunduğu pek çok dil arasında çevirme olanak sağlamaktadır.
  • vs.Pratik.Sözlük'ü sadece internet bağlantınız olması durumunda kullanabilirsiniz. vs.Pratik.Sözlük varsayılan kurulumla, İngilizce bir kelime girdiğinizde Türkçeye, Türkçe bir kelime girdiğinizde ise İngilizce'ye çevirmek üzere ayarlanmıştır.
  • Herhangi bir kelimenin veya cümlenin karşılığını bulmak istediğinizde, sistem çubuğunuzda çalışmakta olan vs.Pratik.Sözlük'ü iki kez ardarda ctrl tuşuna basarak aktif hale getirebilirsiniz. Kelimeyi veya cümleyi girdikten sonra enter tuşuna basmanızın hemen ardından çevrim sonucunu alacaksınız. Çalışmanıza geri dönemek için tekrardan CTRL tuşuna ardarda basın. (Yani hiç mouse kullanmadan çevrim yapabiliyoruz)
  • -vs.Pratik.Sözlük'ü kullanmaya başlamadan önce bir kereye mahsus olmak üzere google hesabınızla, "http://code.google.com/apis/console"  adresinden google translate api key adındaki şifreyi almanız gerekmektedir. Bu şifre ücretsiz olup vs.Pratik.Sözlük'ün google translate altyapısını kullanması için gereklidir. Aldığınız şifreyi ayarlar menüsü altından kaydettikten sonra vs.Pratik.Sözlük'ü kullanmaya başlayabilirsiniz. 
*vs.Pratik.Sözlük ile alakalı isteklerinizi, sorunlarınızı veya önerilerinizi bu yazı altına yorum olarak veya  "volkansalma@yahoo.com" adresine doğrudan e-posta ile iletebilirsiniz.

Devamını oku...>>

Naive Bayes Sınıflandırıcı. C++

    Naive Bayes sınıflandırıcı, Bayes karar teorisine dayanan basit bir olasılıksal sınıflandırıcıdır. Çok fazla teorik bilgiye girmeden, wikipedia üzerinde bayes sınıflandırcının anlatıldığı sayfada yer alan bir örnek için yazdığım uygulamayı paylaşmak istiyorum.Örnek başlığı Sex Classification olarak geçiyor.
    Elimizde 4 erkek, 4 bayana ait veriler var. Bu verilerden her birinin bayana mı ait yoksa erkeğe mi ait olduğunu biliyoruz. Amacımız bu verileri kullanarak bir sınıflandırıcı tasarlamak. Bu sınıflandırıcıyı kullanarak  kime ait olduğunu bilmediğimiz verilerin sahibinin cinsiyetini doğru olarak tahmin edebileceğiz.

Devamını oku...>>