17 Eylül 2010 Cuma

WCF Library Projesinde "HTTP could not register URL" Hatası

WsHttpBinding kullan bir WCF Library projesinde app.config'teki base adresi değiştirdikten sonra şöyle bir hata ile karşılaştım:
Please try changing the HTTP port to 8732 or running as Administrator.
System.ServiceModel.AddressAccessDeniedException: HTTP could not register URL http://+:8732/WCFTestNameSpace1/WCFTest/. Your process does not have access rights to this namespace
Problem yeni base adres için namespace rezervasyonu yapılmamasından kaynaklanıyormuş. Yeni base adres için namespace rezervasyonu ;

Windows Vista, Windows Server 2008 r2 veya Windows 7 için;
netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user
Windows XP veya Server 2003 için;
httpcfg set urlacl /u {http://URL:Port/ | https://URL:Port/} /aACL
komutları ile yapılabiliyor. Windows 7 ve Vistada komutlar administrator hakkı isteyebilir, bunun için şu yazıda anlattığım ipucunu kullanabilirsiniz.

Ayrıca "HttpNamespaceManager" isimli araç ile de namespace rezervasyon işlemini görsel olarak yapmak mümkün. 

Detaylı bilgi için;

15 Eylül 2010 Çarşamba

Windows 7 ve Vista'da Admin olarak komut çalıştırmak

Konsol ekranından çalıştırılan bazı komutlar kimi zaman admin hakkı isteyebiliyor. Böyle durumlarda kolayca admin modunda komut çalıştırabilmek için bir ipucu;

Başlat menüsündeki arama alanına bildiğimiz şekilde, komut satırını açmak üzere 'cmd' yazıyoruz ve çalıştırmak için enter yerine, ctrl+shift+enter a basıyoruz. Böylece komut satırı administrator modda açılıyor ve buradan çalıştırılacak uygulamalar da "run as administrator" yapılmış şekilde çalıştırılıyorlar.

1 Eylül 2010 Çarşamba

Backpropagation Temelli Yapay Sinir Ağı Kütüphanesi

Merhaba , geçen yaz yapay sinir ağlarında geri yayılım algoritmasını öğrenebilmek için araştırmalar yapıyordum. Bunun için c# ile, geri yayılım algoritmasını kullanan basit bir yapar sinir ağı kütüphanesi yazdım. Burada da paylaşmak istiyorum umarım birilerinin işine yarar :)





















31 Ağustos 2010 Salı

Veritabanından okunan tip bilgisine göre nesne yaratma

Merhaba, bir önceki yazımda Linq To Sql Classes yöntemi ile veritabanı tablolarından otomatik olarak yazılım sınıfların yaratılmasını anlatmıştım. Şimdi aynı proje üzerinde biraz değişiklik yapıp veritabanından okunan sınıf adlarına göre çalışma zamanında nesneler oluşturacağız.

İlk olarak, bir önceki yazımda kullandığım projeye 3 adet yeni sınıf ve bir interface ekliyoruz. Bunlar; BronzeMusteri, AltinMusteri, PlatinMusteri sınıfları ve IMusteri interface'i .

C# ile otomatik olarak veritabanı tablolarından sınıflar oluşturma

Merhaba, bu yaz Microsoft yaz okulunda öğrendiğim en güzel konulardan biriydi bu. Veritabanı tablolarından sınıflar oluşturma ve bunları kullanma, yani Linq To Sql Classes.
Veritabanı kullanan uygulamalar geliştirdiğimiz zaman,  veritabanındaki her tablo için yazılım tarafında bir mapping sınıfı oluştumak hem zaman alır hem de oldukça sıkıcı bir iştir. Microsoft bu soruna, .Net Framework 3.0 ile birlikte gelen Linq ile bir çözüm bulmuş. Aslında Linq, List gibi veri yapılarında, SQL benzeri sorguların çalıştırılabilmesini sağlayan .Net Extention'ı. Fakat yetenekleri bununla sınırlı değilmiş, veritabanı tablolarından otomatik olarak sınıflar üretip mapping işlemi de yapıyormuş.

Nasıl Mı?
Bunu anlatabilmek için çok basit bir örnek hazırladım. Çalıştırabilmek için; SQL Server 2005 veya üstü, .Net Framework 3 veya üstü ve de Visual Studio 2008 veya 2010 sisteminizde yüklü olmalı . Ben Visual Studio 2010 ve SQL Server 2008 kullandım.

30 Ağustos 2010 Pazartesi

El Yapımı Servo Motor

Geçen sene can sıkıntısından yaptığım bir projeydi bu, oldukça düşük torka sahip olsa da (biraz dişli ile bu sorun aşılabilir tabiki) opamp'ın karşılaştırıcı olarak kullanımını öğrenmem açısından faydalı oldu.


                      Büyük Halini Görmek İçin Resme Tıklayın


Nasıl Çalışıyor?
Devrede iki adet potansiyometre var bunlardan biri kontrol için kullanılan potansiyometre diğeri de dc motor tarafından döndürülen ve servonun konumunun algılanabilmesini sağlayan potansiyometre. Bunlardan okunan voltaj değerleri 2 farklı 741 opamp ta birbirlerinin tersi sırada karşılaştırılıyor. Böylece arada bir voltaj farkı oluştuğunda çift yönlü karşılaştırmanın yapılabilmesi sağlanıyor. Aynı şey tek opamp ile negatif gerilim kaynağı kullanılarak  da yapılabilirdi belki ama L293 entegresinin kontrolünde sorun çıkarabilirdi bu nedenle çift opamp kullanmayı tercih ettim.
Kontrol potansiyometresi, motora bağlı potansiyometreden yüksek bir değere çekildiğinde değişikliği algılayan ilgili opamp pozitif çıkış üretiyor bu olay önündeki transistörü iletime geçiriyor ve dc motor sürücü entegresi olan L293D nin kontrol uçlarından biri Low' a düşüyor. Bu da motorun bir yönde dönmesini sağlıyor. Eğer dönüş yönü motora bağlı olan opamp'ı kontrol opamp'ının değerine çekecek şekilde ayarlanmış ise, her iki opamp da aynı konuma geliyor ve orada sabit kalıyorlar. Tıpkı gerçek servo motorlarda uygulanan pwm sinyaline karşılık şaftın bir açıya gelmesi ve orada kalması gibi. Bu işlemlerin aynısı kontrol potansiyometresinin değerinin düşüğe çekildiği durum için de geçerli.

Not: Devre şemasında hatalar ya da gereksiz gördüğünüz yerler olabilir.

PIC Resetlenme Sorunu

Şu yazıda anlattığım robot kol projesinde karşılaştığım bir sorunu bu;
Üzerinde PIC 16F877 bulunan kontrol devresinde servo motorlara hareket sinyali verildikten sonra PIC sürekli resetleniyordu ve program tutarsız bir şekilde çalışıyordu. Proteus ortamında yaptığım simulasyonlarda ise bir sorun görünmüyordu. Bunun üzerine biraz araştırma yaptım ve sorunun "Brown Out Reset" isimli ayardan kaynaklandığını öğrendim.
Brown Out Reset aktif iken, mikrodenetleyicinin besleme gerilimi düştüğü zaman, işlemci resetlenerek program yeniden başlatılıyor.
Benim projede de tam olarak olan şey buydu servolar çalışmaya başladığında mikrodenetleyici besleme geriliminde düşüşe yol açıyorlardı bu da işlemciyi resetliyordu. Bu durumu önlemek için Brown Out Reset'i pasifleştirmek gerekiyor. PIC programlayıcının ayarlarından yapılabileceği gibi kaynak kodda config bölümünden de yapılabilir.

Örneğin Hi Tech PIC C için;
 __CONFIG( diger ayarlar .... &BORDIS );



3 Eksenli Robot Kol

Merhaba  uzunca bir aradan sonra bu yazımda, geçen yıl bahar döneminde Endüstriyel Elektronik dersi kapsamında yaptığım 3 eksenli robot kol projesini paylaşmak istiyorum.

Bizden dönem projesi olarak, kendi ekseni çevresinde dönebilen ve kolları 180 derecelik aralıkta hareket edebilen, 3 eksenli bir robot kol yapmamız istenmişti.(Şekil-1)
Şekil-1

Robotun kontol mekanizması, motor seçimi ve kullanılacak mikrodenetleyici tipi bizim tercihimize bırakıldı.

Kontrol kısmını nasıl olsa bir şekilde yaparım deyip, mekanik kısımlardan başlamaya karar verdim. Kendi ekseni etrafındaki dönüş için bir step motor ve diğer eksenler için 2 şer tane 6 kg torklu servo motor satın aldım.
Şekil-2
Ardından gövdeyi oluşturabilmek için , hafif olması amacıyla, dört adet 20cm'lik plastik cetvel satın aldım ve bunları sıcak silikon ile motorlara yapıştırdım. Geriye tek birşey kalmıştı o da tüm sistemi tutacak ve yüzey normalinde dönmesini sağlayacak tepsi. Bunun için de evde bulduğum eski bir bilezik kutusunu kullandım. (siyah bant ile güzel durdu :) ) El yapımı robotumun mekanik kısımları böylece bitmiş oldu. (Şekil-2)

30 Temmuz 2010 Cuma

C# ile resimdeki bir alanın baskın rengini bulma






















Resimlerden oluşan resimler yaratmada kullanılabilecek bir kod.
Örneğin; büyük resim küçük bölgelere ayrılarak, her bölgenin renk yoğunluğu bulunabilir ve renk yoğunluğu önceden bulunan değere uyan daha küçük resimler bu bölgelere yerleştirilebilir.

Lexical Parser

Bir zamanlar Programlama Dilleri dersi projesi için javada Eclipse ortamı ile hazırladığım bir Lexical Parser örneği. Çok çok basit bir derleyici olarak da düşünülebilir aslında :)
Verilen bir dilin kurallarına uygun olarak girilen kodu parçacıklara (Tokenlara) ayırarak bir parse-tree oluşturuyor ve bu ağacı dolaşarak, kodu söz dizimsel analizden geçiriyor, girilen kod doğruysa işlemi yapıp sonucu ekrana yazıyor hata varsa hatayı yazıyor.
Kullanılan dil ise;
a:=234+55;
b:=32;
c:=(a+b*2)*24; 
gibi işlemleri gerçekleştirebilecek operatörler ve ‘:=’ işaretinden oluşuyor; değişkenler de kullanılabiliyor ve de satır sonunu göstermek için ‘; ‘ (noktalı virgül ) kullanılıyor.
Bir işlemi yapmak için programa girdi olarak verilen kodlar, ekrandan girilebileceği gibi dosyadan bir script olarak da alınabiliyor. Dosyadan okunan çok satırlı kodlarda her bir satır için ayrı parse-tree görüntüleniyor.

VirtualBox'ta Linux sanal makinadan Windows altındaki dizinlere erişim

VirtualBox üzerinde kurulu bir Linux sanal makinadan, Windows Host'taki dizinleri görebilmek için öncelikle misafir eklentilerin Linux'ta kurulu olması gerekmektedir. Misafir eklentilerin kurulmasını şu yazıda anlatmıştım.

Linux'tan Windows'a ulaşabilmek için ilk olarak Windows altındaki paylaşılacak olan dizinlerin belirtilmesi gerekiyor. Bu iş için VirtualBox'ta Aygıtlar menüsünden Paylaşılan Dizinler..  bölümü seçilir ve açılan pencerede istenilen dizinler Makina Dizini olarak belirlenir. (Dizinlere vereceğiniz isimler önemli mount işlemi bu isimlere göre yapılacak.)

VirtualBox'ta Linux sanal makinalar için misafir eklentilerin kurulması

VirtualBox'ta sanal makinaların bazı network ve grafik özelliklerinin etkinleştirilmesinde kullanılan misafir eklentileri bir linux sanal makinaya yüklemek için izlenecek adımlar;

Ubuntu' da gcc ve g++ derleyicilerini yükleme

Ubuntu'ya Codeblocks kurduktan sonra, Codeblocks'un gcc derleyicisini bulamaması üzerine biraz araştırmayla bulduğum bir kod:
sudo aptitude install build-essential
Terminal ekranına bu kod girildikten sonra gelecek menüden, kurulması istenilen derleyiciler seçilebilir.