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 );