Deprem hasarları tespitinde bulanık mantık modellemesi

Kategori: Bulanık Mantık, C#, Referanslar
Tarih: 15th Aralık 2011

Standart bir program:

Temel girdiler → Program → Sabit bir sonuç

 

Bir bulanık mantık modellemesinin yapısı:

Sayısı belli olmayabilen veri yığını → Program → Girdilere ve varsayıma göre değişken bir veya birden fazla sonuç

 

Program 2 giriş için (kat sayısı ve fay bilgisi) tek çıkış veriyor. Sınırlar keyfi verilmiştir. Tecrübe edilerek sınırlar düzenlenebilir; girişler artırılabilir. Proje dosyası ektedir.

 

 

Proje dosyasını indirmek için tıklatınız.

Yorumlar: 6 »

Codeigniter’a birden fazla dil özelliği ekleme

Kategori: Codeigniter, Php
Tarih: 13th Aralık 2011

Codeigniter’ın zaten yerleşik dil dosyaları var. Normal şartlarda sayfanın dilini urlin sonundan okuyacağınız varsayılmış.

http://www…com/kayit/ekle/tr

http://www…com/haber/oku/id66/en

Siz controler a gelen veriyi inceleyip dili tespit edip istenilen dil dosyasını göstereceksiniz. Mevcut halde dil verisi her seferinde farklı yerdedir. (ilk url de 3. “/” karakterinden sonra, 2. url de 4. “/” karakterinden sonra ) Bu hem sayfa linklerini oluştururken – okurken zorluk çıkarır hemde çirkin bir url görüntüsü oluşturur. Bunu yerine sadece ./config/routes.php dosyasını düzenleyerek linklerini aşağıdaki gibi kullanabilirsiniz.

http://www…com/tr/kayit/ekle

http://www…com/en/haber/oku/id66

Dil bilgisi hep 1. “/” karakterinden sonra olur. Dil bilgisine istediğiniz sayfa içinde $dil=$this->uri->segment(1); şeklinde erişebilirsiniz. “./config/routes.php” sayfasına eklemeniz gereken kod aşağıdadır.

Not: dil verisinin tr, en, es… gibi iki karakter girildiği varsayılmıştır.


//Dil Yönlendirmeleri

$route['^..'] = $route['default_controller'];

$route['^../(.+)'] = "$1";

Jquery, ajax ve thread üzerine…

Kategori: Jquery
Tarih: 7th Aralık 2011

Sayfayı yenilemeden başka sayfalardan veri çekerek göstermek istiyorsanız Jquery kütüphanesinin ajax fonksiyonunu kullanabilirsiniz. İlk önce fonksiyonun standart kullanımını anlatalım. Sonra fonksiyonu ileri düzeyde inceleyelim.

$.ajax({
  type:'POST',//Veri gönderme methodu
  url:'http://www.sunucu.com/Kontrol/',//veri gönderilecek sayfa
  data:'email='+email,//veri
  success:function(e)
  {
    alert(e);//Gelen sonucu e değişkeninde tut ve göster
  }
  });

Şimdi gerçek bir uygulama yapalım. Örneğin bir yönetici ekleme sayfasında olduğumuzu düşünelim kullanıcıdan adını, soyadını ve mail bilgilerini forma girmesini istedik. Kullanıcının girdiği mail adresini daha önceden girmiş başka bir kullanıcı olabilir bunu engellemek için ajax’ı kullanabilirim. Ajax fonksiyonu kullanıcının girdiği mail bilgisini okuyacak sonra başka bir sayfaya mail adresini gönderecek. O başka sayfada mail adresini kontrol edip var yada yok diye cevap verecek. Sonuç olarak gelen cevaba göre yönetici eklenecek yada hatalı mail adresi denilecek. (Var yada yok diye cevap verecek sayfanın düzgün çalıştığını varsayıyorum.)

<form onSubmit=”return yoneticiKontrol();” …

function yoneticiKontrol()
{
  var email = $('#email').attr('value');

  $.ajax({
    type:'POST',
    url:'http://www.sunucu.com/Kontrol/',
    data:'email='+email,
    success:function(e)
    {
      if(e == 'yok')
        return true;//Mail adresi geçerli. Form gönderilsin
      else if(e == 'var')
        alert("Mail adresi kullanılıyor!");
      else
        alert("Hata Oluştu");
    }
  });

  return false;//Mail geçersiz yada hata oluştuysa form gönderilmesin
}

İlk bakışta sorunsuz görünsede bu fonksiyon hatalı çalışır. Çünkü siz ajax fonksiyonunu çağırdığınızda bu fonksiyon sizin için yeni bir thread yaratır ve istediğiniz işlemleri buna yaptırır. Bu yeni thread yeni bir süreç oluşturur. Bu süreç yoneticiKontrol() fonksiyonundan sonra bitebilir. Çoğu zamanda böyle olur. Yani 20. satır 12. satırdan  daha önce işlenir. Fonksiyon her zaman false değeri döndürecektir. Kullanıcı doğru bir mail adresi girse bile form gönderilmeyecektir.

Bunu şu şekilde çözebiliriz.  Önce global bir değişken oluşturalım adı yKontrol olsun bunun ilk değerini false verelim. Biz eğer kullanıcının maili geçerli ise yKontrol değişkenine true verelim ve ana fonksiyonu (yonetici Kontrol fonksiyonunu) tekrar tetikletelim. Fonksiyon çalışınca önce yKontrol değişkenine baksın eğer false ise normal çalışmasına devam etsin; true ise fonksiyon daha önce çalışmış ve maili geçerli bulmuş demektir formu göndersin.

var yKontrol = false;
function yoneticiKontrol()
{
	if(yKontrol == true)
		return true;

	var email = $('#email').attr('value');

	$.ajax({
		type:'POST',
		url:'http://www.sunucu.com/Kontrol/',
		data:'email='+email,
		success:function(e)
		{
			if(e == 0)
			{
				yKontrol = true;
				$('#yonetici_form').submit();//Bu fonksiyonu tekrar çalıştırır
			}
			else if(e == 2)
				alert("Mail adresi kullanılıyor!");
			else if(e == 1)
				alert("Kullanıcı adı kullanılıyor");
		}
		});

	return false;
}

Yorumlar: 0 » tags: , , ,

Mapinfo Buttonpad Kısayolu

Kategori: MapBasic - MapInfo
Tarih: 5th Aralık 2011

Mapinfo menüleri dahi programlayabilmeye izin vermiş olmasına rağmen buttonpad elemanlarına direk kısayol atamamız için bir komut üretilmemiş. Şimdi ufak bir programla istediğimiz butona kısayol vereceğiz. İlk olarak bir menü oluşturalım sonra bu menüye kısayol vermek istediğimiz butonları dolduralım ve menüdeki elemanlara kısayol verelim. Böylece biz kısayol tuşu ile menüyü tetikleyeceğiz oda istediğimiz butonu çalıştıracak. Dolaylı olarak butonpade kısayol vermiş olacağız.

Benim yazdığım program Pencere menüsünün altına Kısayol diye bir alt menü ekliyor. İsterseniz bunuda gizleyebilirsiniz.


declare sub main

sub main
	Create Menu "Kısayol" As

		"Seç İmleci...\tCTRL+1/W^1"
		HelpMsg "Nesne Seçme Moduna Geç"
		calling 1701,

		"Seçimleri Kaldır...\tCTRL+2/W^2"
		HelpMsg "Tüm seçimleri iptal et"
		calling 304,

		"Kaydır İmleci...\tCTRL+3/W^3"
		HelpMsg "Nesne Kaydırma Moduna Geç"
		calling 1702,

		"Bilgi Penceresi...\tCTRL+4/W^4"
		HelpMsg "Bilgi Penceresini Göster"
		calling 1707,

		"Yaklaş İmleci...\tCTRL+5/W^5"
		HelpMsg "Noktaya Yaklaş"
		calling 1705,

		"Uzaklaş İmleci...\tCTRL+6/W^6"
		HelpMsg "Noktadan Uzaklaş"
		calling 1706

		alter menu "Pencere" add "Kısayol" as "Kısayol"
end sub

Yorumlar: 0 »

Mapbasic Başlangıç

Kategori: MapBasic - MapInfo
Tarih: 5th Aralık 2011

Bilmeyenler için söylüyorum MapBasic harita programlama dilidir. MapInfo CBS yazılımını bu dille programlayabilirsiniz. Başlangıç aşamasında işe yarayacak 2 program anlatacağım.

1. program koyyolu_kkno kolonunu kontrol ediyor. Kolon içinde “-” karakterini bulursa bunun 2. derece bir yol olduğunu anlayıp koyyolu_derece kolonunu FALSE yapıyor; değilse TRUE yapıyor. Bi zaman 3000 kaydı teker teker incelememek için yazmıştım.

include "mapbasic.def"
declare sub main
sub main
   dim tabloAd as string
   tabloAd = "koyyolu_boslarsilindi_" 'Tablo adı
   select * from tabloAd into tablo
   fetch first from tablo
   dim i as integer
   i=1
   do while not eot (tablo)
	if InStr(1, tablo.koyyolu_kkno, "-") <> 0 then
		update tablo set koyyolu_derece = 0 where Rowid=i 'tablo.derece = "F"
	else
		update tablo set koyyolu_derece = 1 where Rowid=i 'tablo.derece = "T"
	end if
	i = i+1
	fetch next from tablo	
   loop	
end sub

2. Program biraz daha komplex. İki tane grafik verili koyyolu ve ilcesiniri tablom var. koyyolu tablosu çizgi, ilcesiniri tablom alan verisi tutuyor. Bir excel tablosundada koyyollarının grup yada münferit bilgilerini tutuyorum. Program istediğimiz ilçenin alanları içindeki yolları buluyor sonra her bir yol için excel tablosundaki gurup yada münferit bilgisini alıp ilgili kolana giriyor. Bu programıda aynı şekilde yaklaşık 3000 kaydı teker teker incelememek için yazmıştım.


include "mapbasic.def"

declare sub main
declare function verigetir(ByVal kkno as string) as integer

global bilgikkno(1), bilgimunferit(1) as string

function verigetir(ByVal kkno as string) as integer
	dim k as integer
	for k=1 to 71
		if bilgikkno(k) = kkno then
if bilgimunferit(k) = "MÜNFERİT" then
verigetir = 1
			else
				verigetir = 0
			end if
		end if
	next
end function
sub main
	dim i as integer
	select * from tavsanli into bilgi

	redim bilgikkno(tableinfo(bilgi, tab_info_nrows))
	redim bilgimunferit(tableinfo(bilgi, tab_info_nrows))

	fetch first from bilgi

i=1
	do while not eot(bilgi)
		bilgikkno(i) = bilgi.kkno
		bilgimunferit(i) = bilgi.munferit

		i = i+1

	        fetch next from bilgi
	loop
        select koyyolu_boslarsilindi_.obj, koyyolu_boslarsilindi_.koyyolu_tanimi, koyyolu_boslarsilindi_.koyyolu_derece, koyyolu_boslarsilindi_.koyyolu_kkno, koyyolu_boslarsilindi_.koyyolu_munferit from koyyolu_boslarsilindi_, ilcesiniri where ilcesiniri.obj Contains koyyolu_boslarsilindi_.obj and ilcesiniri.IlceAdi="Tavşanlı" into tablo

	fetch first from tablo

	dim k as integer
	do while not eot(tablo)
		if tablo.koyyolu_derece then
			update tablo set koyyolu_munferit = verigetir(tablo.koyyolu_kkno) where  Rowid=k
		end if

		k = k+1

		fetch next from tablo
	loop
end sub
Optimization WordPress Plugins & Solutions by W3 EDGE