Web servisler üzerinde çalışırken , aldığım bir hatanın nerede olduğunu gözlemlemek için debug mode da projeyi açmak istediğimde karşıma çıkan hata mesajı ile aşağıdaki gibi

Unable to start debugging on the web server. Debugging failed because integrated Windows authentication is not enabled. Please see Help for assistance”

Çözümü :

1. IIS(Internet Information Server)’i açın
2. Web Site’a sağ tıklayın ve Properties(Özellikler)sekmesini seçin
3. Directory Security(Dizin Güvenliği) sekmesini seçin ve “Anonymous access and
authentication control” ü seçin
4. Açılan pencerede “Enable Anonymous access” checkbox’ının tik’ini kaldırın ve
“Integrated Windows Authentication” checkbox’ını tik’lyin.

4 . adımı yaptıktan sonra da baktım ki debug ta sorun yok ama bu seferde servisi kullanan uygulama erişemiyor. bu yüzden 4. adımda “Enable Anonymous access” ifadesininde seçili olmasını sağlayın.

Merhaba Arkadaşlar,

Bazı durumdalarda session nesnesinde bilgiler taşıyoruz. Benim en sık yaptığım ise login olan kullanıcı bilgilerini sessionda tutmak ve uygulama süresince login olup olmadığını ve yetkili sayfalarını buradan kontrol ediyorum. Hal böyle olunca sayfalarımın init kısmında session nesnesine ihtiyaç duyuyorum. Ben sayfaların init kısmında session nesnesine erişmek istediğimde VS 2010 ‘un design view kısmı kontrolü render edemediği ile ilgili hata veriyor. Bu konu ile ilgili çözümü aşağıda bulabilirsiniz.

Sayfanın init anında Sessiondan bilgi almaya kalkarsanız eğer aşağıda görüldüğü gibi,


Design View a geçtiğinizde “ Error Creating Control – <ControlName>
Session state can only be used when enableSessionState is set to true, either in a configuration file or in the Page directive. Please also make sure that System. Web.SessionStateModule or a custom session state module is included in the <configuration>\<system.web>\<httpModules> section in the application configuration.” Hata sı ile karşılaşa bilirsiniz. Fakat bu hata sadece Design View a geçtiğinizde karşınıza çıkacaktır. Yani uygulamanızın çalışmasını etkiletecek bir hata değildir.

Bu hata çözüm olarakda şunu yapabiliriz. session nesnesinin ve context in null olup olmadığını kontrol edersek eğer design view sorunsuz bir şekilde aktif hale gelecektir.

Bana yardımı olan ve çözümü bulduğum yere buradan ulaşabilirsiniz.

Bol kodlu günler :)

Bu çalışmamızda PHP Curl ve JQuery kütüphanelerinden faydalanarak başka bir domaine form submit edip ve sonuç alacağız. İlk olarak ajax proxy sayfamızı oluşturmakla işe başlayalım.


[?php

header("Cache-Control: no-cache");

header("Content-type:text/html; charset=utf-8");

function geturl($url,$request){
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $request); 

  $results = curl_exec($ch);
  curl_close($ch);
  return $results;

}

$theurl = $_POST["url"];

$theurl = urldecode($theurl);

$theurl = str_replace( "& #038;", "&", $theurl );

$req=$_POST['vars'];//POST edilecek değişken(ler)

$v = geturl( $theurl,$req);

$v = mb_convert_encoding($v, "UTF-8", "ISO-8859-9");//Sonuç alınacak sayfanın kodlaması sizinkinden farklı ise

echo $v;

?]

Yukarıdaki kodun bulunduğu sayfayı ajax_proxy.php olarak kaydediyoruz. Şimdi POST işlemini yapıp sonuç yazdıracağımız sayfaya geçelim

[HTML]
[HEAD]

[script type="text/javascript" src="jquery-1.3.1.min.js"][/script]//jquery kütüphanesini sayfamıza dahil ediyoruz

[script type='text/javascript']
function post_to_ajaxproxy(){
document.getElementById("loader_div").innerHTML='[img src="loading.gif" width="24" height="24"]';//Beklerken gösterilecek olan yükleme animasyonu

var var1=document.getElementById("var1_box").value;
var var2=document.getElementById("var2_box").value;

        $.ajax({
           type: 'POST',
           url: 'ajax_proxy.php',
           data: "&url="+var1+"&vars="+var2,
           success: function(sonuc) {
                document.getElementById("loader_div").innerHTML='';
		document.getElementById('result_div').innerHTML = sonuc;
           }
         });
}
[/script]

[/HEAD]
[BODY]

[input name="var1_box" id="var1_box" type="text" value="http://www.domain_adi.com/sorgulanacak_sayfa.asp"/]
[input name="var2_box" id="var2_box" type="text" value="post_edilecek_degisken"/]
[input type="button" value="Gönder"  onclick="post_to_ajaxproxy()"/]
[div id="loader_div"][/div]//yükleme animasyonunun gösterileceği
[div id="result_div"][/div]//sonuçların gösterileceği

[/BODY]
[/HTML]

Geliştirmekte olduğumuz uygulamalarımız, kullanıcılara aktarılırken mutlaka bir kurulum paketi haline getirilir. Bu kurulum esnasında kimi zaman gerekli bileşenlenlerin kurulu olup olmadığını kontrol ederiz (örneğin : .net FW kurulumu, kurulu ise sürümü, veri tabanı uygulamaları için veri mssql,mysql oracle vb. kurulumu? Kurulu ise tabloların,procedure’lerin aktarılması). Kurulum esnasında kullanıcıdan bir takım bilgiler istenebilir,  bizim paket içerisindeki dosyaları başka bir yere taşımamız gerekebilir, belkide paket içerisindeki uygulamaları çalıştırmamız gerekebilir.  Bunları gerçekleştirebilmek için Installer Class tan yardım alıyoruz. Uygulamamız içerisine Installer Class ımızı ekledikten sonra Install , Uninstall gibi fonksiyonlarımızı override işlemine tabi tutarak bu işlemleri gerçekleştirebiliriz.

Yazımızda Installer Class yardımı ile kullanıcıya kurulumun devam ettiğini ve uygulamanın kaldırılma işleminde de kaldırılmakta olduğunu bildiren birer mesaj yayınlayarak devam edeceğiz. İlk olarak Installer Class ımızı aşağıdaki gibi ekliyoruz.

Ekleme işleminden sonra Install ve Uninstall fonksiyonlarımızı override işlemine tabi tutuyoruz.

?View Code CSHARP
[RunInstaller(true)]
 
public partial class Installer1 : Installer
 
{
 
public Installer1()
 
{
 
InitializeComponent();
 
}
 
// Kurulum işleminde verilecek olan mesaj yada
 
// kurulum anında yapmak istediğiniz diğer işlemleri
 
// bu fonkisyon içerisinde gerçekleştirebilirsiniz
 
public override void Install(IDictionary savedState)
 
{
 
base.Install(savedState);
 
System.Windows.Forms.MessageBox.Show("Uygulama Kuruluyor");
 
}
 
// Kaldırma işleminde verilecek olan mesaj yada
 
// kaldırma anında yapmak istediğiniz diğer işlemleri
 
// bu fonkisyon içerisinde gerçekleştirebilirsiniz
 
public override void Uninstall(IDictionary savedState)
 
{
 
base.Uninstall(savedState);
 
System.Windows.Forms.MessageBox.Show("Uygulama Kaldırılıyor");
 
}
 
}

Bu işlemden sonra eğer uygulamanız içerisinde setup projesi  yok ise önce bir setup projesi ekleyelim, daha sonra setup projesi üzerinde sağ tıklayıp Project Output ekleme işlemini gerçekleştiriyoruz.

Son olarak yine setup projesi üzerinde sağ tıklayıp View menüsünden Custom Ations Bölümne geçip Install ve Uninstall klasörleri üzerinde sağ tıklayıp Add Custom Actions seçeneğini seçtikten sonra açılan pencereden  Application Folder içindeki Primary output from installerClass (Active) ‘ ı seçiyoruz.

Gereken işlemleri tamamladıktan sonra test işlemimize geçebiliriz. Setup projemizi çalıştırdığımızda kurulum başladıktan belirli bir süre sonra karşımıza aşağıdaki gibi bir ekran geliyor.

Programı kaldırma işlemini test etmeye başladığımızda da yine aşağıdaki gibi bir ekran görüntüsü geliyor. Umarım kullanabileceğiniz bir yazı olmuştur.

 

Bağımsız bir kuruluş olan W3C (World Wide Web Consortium) organizasyonu tarafından tasarlanan ve bağımsız bir yapıya sahip olan XML (extensible Markup Language),kişilerin kendi etiketlerini tanımlayarak bu etiketler ile hiyerarşik yapı kurabildikleri ,bunları istedikleri zaman değiştirebildikleri ; esnek, teknolojiden -platformdan bağımsız text tabanlı bir meta dilidir. Xml açılımının içerdiği “markup” onun tagler ile kullanıldığını,”exensible” de onun genişletilebildiği yani standart taglerin değil de kendimizin oluşturduğu farklı tagleri de kullanabileceğini ifade eder. Html de bir markup dilidir fakat Xmli Htmlden ayıran en önemli özellik standart taglerin değil de kişilerin tanımladıkları taglerin kullanabiliyor olmasıdır.

Şimdi teknolojiden-platformdan bağımsız derken ne kastettiğimi biraz daha açmak istiyorum:

Günümüz teknolojisi o kadar zenginleşti ve çeşitlendi ki…..Farklı farklı işletim sistemleri,programlar… Bunlar bir yana bir programın bile birden çok farklı versiyonu var. Bu kadar çeşitliliğin olması şüphesiz yanında uyum problemlerini getirecektir.Bir dosyayı aynı programın farklı versiyonlarında çalıştırmak istediğimizde bile zaman zaman problem yaşamaktayız,kaldı ki farklı program ve işletim sistemlerinde yaşanmasın.Bütün teknolojilerde ortak olarak açılan ve çalışan tek dosya türü text dosyalarıdır(notepad).Ama notepad ile en basitinden bir tablo oluşturup bunun üzerinde çalışmak istediğimizde bile bu tabloyu organize etmek baya bir zor olacaktır:kolonların sırası kayabilir,karışabilir….Bunun yerine tablolarımızı hiyerarşik yapı ile xmle atmak işimizi bayağı bir kolaylaştıracaktır.Xml verinin hızlı bir şekilde sogulanmasını,değiştirilmesini,transfer edilmesini,verinin içerik bilgisi ile saklanmasını(bu noktada htmlden ayrılır) sağlar.Xmlin güzel yanlarından birtanesi de uluslararası bir standarttır ve evrensel bir formattır ve firewallara takılmaz(text tabanlı olmasından kaynaklı).

Bir dosyanın xml dosyası olduğu dosyanın başında yazan <?xml version=”1.0″ encoding=”utf-16”?> ifadesinden anlaşılır.Htmldeki gibi açılan tag kapanmalıdır.Genel anlamda xml dosya akışı şu şekilde olur.

dosya akışı şu şekilde olur.

<?xml version=1.0 encoding=utf-8 ?>

<kategoriler>

  <kategori>

    <kategoriID>1</kategoriID>

    <kategoriAdi>meyveler</kategoriAdi>

  </kategori>

  <kategori>

    <kategoriID>2</kategoriID>

    <kategoriAdi>sebzeler</kategoriAdi>

  </kategori>

</kategoriler>

Veri tabanından veri çekerek xmle yazdırılabilir ve gerektikçe xmlden okunabilir.Bu şekil bir kullanım daha mantıklı olacaktır,çünkü veri tabanından bilgi almak istediğimizde program her defasında veri tabanına bağlanmak zorunda kalacaktır,oysa ki bir defa bağlanıp veri tabanındakileri xmle yazdırıp gerektikçe xmlden okumak performans,veri tabanını çok meşgul etme ve daha birçok açıdan daha olumlu sonuçlar yaratacaktır.Bu okuma ve yazdırmaları yapmak üzere tanımlanmış “ReadXml ve WriteXml” nesneleri vardır.

WriteXml şu şekilde kullanılır:

SqlConnection conn = new SqlConnection(“server=derya-pv\\sqlexpress;database=Northwind;integrated security=true”);

            SqlDataAdapter adp = new SqlDataAdapter(“select CategoryID,CategoryName from Categories”, conn);

            DataSet dt = new DataSet();

           adp.Fill(dt);

            dt.WriteXml(dosya);

Böylece veri tabanındaki bilgiler xmle yazılmış oldu.Her veri çekmek istediğimizde “ReadXml” ile verileri xmlden alıp işleyebiliriz.Yada satır satır okuma ve yazma yapmak için XmlTextReader ve XmlTextWriter da kullanılabilir.

Oluşturulan Xml üzerinde update,delete işlemleri için de “XmlDocument” ve “XmlNode” nesneleri oluşturulup kullanılır.

Kimi zaman belirli bir kısmı üzerinde değişiklik yapmak isteriz,bu durumda hepsini belleğe almak yerine sadece değiştirmek istediğimiz kısmı almalıyız.Bunun içinde şu nesneler kullanılmalı:

XPathDocument()-xml şemayı okuyacak nesne

XPathNavigator()-doküman üzerinde gezinecek nesne

XPathNodeNaveigator()-nodelar üzerinde tek tek gezinecek nesne

DERYA GÜNDÜZ

Diyelim ki c#da  bir sinema otomasyonu yapmanız gerekiyor.Formu dizayn ederken yapmanız gereken koltukları temsilen herhangi bir kontrol eklemektir.Bir sinema salonu 50 kişilik ve 4 tane de salon varsa toplamda formlarınız için 200 tane kontrol eklemeniz gerekmektedir.Oldukça uğraştırıcı ve zaman kaybettiren bir dizayn işlemi olacaktır sizin için.Programlama bilgisi çok iyi olmayan birinin yapacağı kontrolleri tek tek eklemek olacaktır,oysa ki object oriented programming(nesne yönelimli programlama)  dan ve nimetlerinden haberdar olan programlamacı ise kontrolleri tek tek eklemez onları kodu çalıştırırken yapabileceğini bilir.Benim bahsedeceğim de 2. seçenek,yani kontrolleri elle, tek tek değil de kod içerisinde oluşturup çalıştırmaktır, yani Run-Time(çalışma anında) nesne oluşturmak olacaktır.

Run-Time kontrol oluşturabilmek için o kontrolden bir nesne yaratmanız gerekecektir.

    Button btn = new Button();  diye tek bir nesne oluşturup döngüler yardımıyla istediğiniz kadar buton görüntüleyebilirsiniz.

Bu konuyla ilgili BilgeAdamda staj yaparken derste yazdığımız  şu  kodu beraber inceleyelim:

 

int x = 40; //başlangıç x koordinatı

 

int y = 40;//başlangıç y koordinatı

int b = 1; //yerleştirilen buton numarasının tutar

private void Form3_Load(object sender, EventArgs e) //işlemleri form yüklenirken yapsın

{

for (int i = 0; i < 10; i++)                          //matrix mantığı ile 100 tane buton oluşturacaz

{

        for (int j = 0; j < 10; j++)

{

Button btn = new Button();

                                  //butondan bir nesne oluşturmamız gerekecek

btn.Name = “btnNo” + b;

                           //her birinin adı oluşum sıralarının adını alacaktır

btn.Text = b.ToString();

btn.Size = new Size(40, 40);              //size her defasında 40-40 olacaktır

btn.Left = x;

x += 40;                                //x koordinatı tek bir satır için her defasında 40 yana kaymalı

btn.Top = y;                         //y koordinatı aynı satır aynı kalır alt satıra geçildiğinde 40 artar

b++;                             //butonun numarası her defasında bir artacaktır

btn.Click += new EventHandler(btn_Click);    //hatta isterrsek o butona event bile yazarız

                //butona basılma eventini tutar

                    //event olduğunu += gösterir

                               //bu formun kontrollerine oluşturduğun btn nesnesini eklemen gerek

this.Controls.Add(btn);                  //btn kontrolünün nereye ait olduğunu belirtmeiz gerekir,formun kontrolü

}

x = 40;                     //ilk 10 taneyi oluşturduktan sonra alt satıra geç ama lefti değişmeyecek

y += 40;                    //top üstten bir satır uzaklaştığı için +40 olmalı

}    }

void btn_Click(object sender, EventArgs e)

{

Button btn = sender as Button;

//sender içinde thisin verilerini tutar

MessageBox.Show(“Merhaba ” + btn.Text + ” im..”);

 

işte çıkan sonuç:

 

 

Butona tıkladığımızda da şöyle bir görüntü oluşur:

 

 

 

DERYA GÜNDÜZ

deryagunduz.blogspot.com

Merhaba,

Visual studio 2008 html editore gecince problem almaya başladıysanız. Bu yeni yüklediğiniz office 2010 dan kaynaklanıyor olabilir. Nedendir bilinmez ama office 2007 den 2010 ‘a gectikten sonra vs 2008 in html source ve design kısımlarında problem oluştu şöyleki, vs 2008 de bir web projesi açıyorum ve sonrasında codebehind ile işlem yapmamda bir problem çıkarmıyor fakat source kısma yani html editor veya design kısmına geçtiğimde vs 2008 dokunup kalıyor.

Kullandığım bir eklentinin buna neden olabileceğini düşündüm ve eklentiyi kaldırdım. fakat vs 2008 düzelmedi sonrasında vs 2008 tamamen kaldırdım ve yeniden kurdum, ama sonuç sadece kaybettiğim zaman oldu. Bugün bir blogta bunun office 2010 ile alakalı olduğunu gördüm ve çözüm için  gösterdiği yolları yaptım. Vs 2008 im düzeldi.ilginçtirki bu olayla sadece office 2007 den 2010 gecince karşılaşılıyormuş. Belki sizde aynı hatayı alıyorsunuzdur diye çözüm yollarını sizinle paylaşıyorum.

Windows 64bit

C:\Program Files (x86)\Common Files\microsoft shared\OFFICE12\Office Setup Controller\Setup.exe

Windows 32bit

C:\Program Files\Common Files\microsoft shared\OFFICE12\Office Setup Controller\Setup.exe

bulunan dosyaları çalıştırıyoruz ve sonrasında repair / tamir et deyip işlemimizi tamamlıyoruz. Eğer bunu program ekle kaldırdan yapmak istersenizde , Microsoft Visual Studio Web Authoring Component e change / değiştir seçip repair / tamir et de diyebilirsiniz.

Benim yaralandığım kaynağa buradan ulaşabilirsiniz.

Pic 16f877a da ledin yanması demek  kullanılan  potrun ilgili  bitinin “1″ olması demektir.Yanan bir  ledin sağa sola hareket etmesini sağlayan özel komutlar  vardır:

rlf :   Açılımı “rotate left file”,içeriği sola kaydırmaya yarar.Örneğin portun içinde b’01000000′  ise  rlf komutu bir kere uygulandığında b’10000000′   şeklinde olur.

rrf: Açılımı “rotate right  file”,içeriği sağa kaydırmaya yarar.Örneğin portun içinde b’01000000′  ise  rrf komutu bir kere uygulandığında b’00100000′   şeklinde olur.


portun içeriğini sağa  sonra sola kaydıran örnek kodu inceleyelim:

Bu kodda    PORTB nin içine en başta b’00000001′  sayısı  yerleştiriliyor,içerik 7. bit 1 olana kadar her defasında  bir bit sola kaydırılıyor, çünkü 7. bit  1 olduğunda sola kayacak yer klamıyor,bu kontrolden sonra  sağa kaymalar başlayacaktır.Bu aşamada da içerik0. bit 1 olana kadar  her defasında bir bit olmak üzere sağa kaydırılıyor ,0. bit  1 olduğunda yine sola kayma olacaktır.

SAYAC1 EQU h’0C’   ;gecikme sayacları için adresler belirtiliyor
 
                  SAYAC2 EQU h’0D’
 
                       CLRF PORTB      ;potrbnin içi en başta temizleniyor
 
            BSF STATUS,5             ;bank1 tris registerlarının ayarlanması için seçildi
 
                 CLRF TRISB             ;portb çıkış portu yapıldı
 
                  BCF STATUS,5                  ;port içeriği ile ilgili işlem yapılması için tekrar bank0 a geçildi
 
               MOVLW h’01’               
 
               MOVWF PORTB            ;portb nin içine b'00000001'  sayısı atıldı
 
SOL:
 
             CALL GECIKME;en başta bi bekleme anı oluyor
 
            RLF PORTB,F               ;içerik 1 birim sola kaydı
 
  BTFSS PORTB,7            ;portbnnin 7. biti kontrol ediliyor,
 
1 ise sağa kaydırma başlayacak 1 değilse tekrar  sola kayma olacaktır                                                                                                 
 
GOTO SOL
 
SAG:
 
CALL GECIKME                    ;bekleme yapılıyor
 
RRF PORTB,F                     ;içerik 1 birim sağa kaydırılıyor
 
BTFSS PORTB,0                  ;portbnin 0. biti kontrol ediliyor 1 ise sola kaymaya geçilecek,0 ise sağa ;kaymaya devam
 
GOTO SAG
 
GOTO SOL
 
GECIKME:
 
              MOVLW h’FF’
 
             MOVWF SAYAC1           ;gecikme için sayac1 in içine h'FF'  sayısı atılıyor
 
DONGU1:
 
          MOVLW h’FF’
 
               MOVWF SAYAC2                 ;gecikme için sayac1 in içine h'FF'  sayısı atılıyor
 
DONGU2:
 
          DECFSZ SAYAC2,F
 
    GOTO DONGU2           ;sayac2 nin içindeki sayı 0 olana  kadar her defasında 1 azalt,0 olunca saya1 i      ;                                       ;azaltmaya git
 
               DECFSZ SAYAC1,F        ;sayac1in içi 0 olana kadar her defasında 1 azalt,0 olduğunda return yap
 
              GOTO DONGU1
 
              RETURN            ;en son callın yapıldığı adrese  gider
 
        END        ;programo bitir

DERYA GÜNDÜZ

http://deryagunduz.blogspot.com

deryagunduz47@gmail.com

portlar nedir ne işe yarar?

port

şekilden de  anlaşılacağı gibi,portlar bir microcontrollerda microcontroller ile bileşenleri arasındaki iletişimi sağlar.

pic 16f877a da  5 tane  port vardır:

  • PORT A
  • PORT B
  • PORT C
  • PORT D
  • PORT E

portların giriş çıkış  portları olması

portlar  kullanılacakları konuma  göre bazen çıkış portu bazen de giriş portu olmalıdır.portun  giriş ya da  çıkış portu olmasını yada  bazı bitlerinin  giriş bazı  bitlerinin çıkış olmasını  TRIS adındaki  özel bir register sağlar.

hangi port için çalışacaksak trisx  deyip bitlerini  değiştiririz.

0——>çıkış

1——>giriş

clrf    TRISB            ;b  portunun bütün bitlerini çıkış yapar

movlw  h’ff’

movwf  TRISA         ;a  portunun  bütün bitlerini  giriş yapar

ya da  bazı bitleri girş  bazılarını çıkış da  yapabiliriz:

movllw  b’00001111′

movwf     TRISD        ;d  portunun ilk 4  bitini giriş,son 4 bitini çıkış yaptık

porta yazma porttan okuma:

clrf          TRISB           ;önce  b  portunun bütün bitlerini çıkış olarak ayarlıyoruz

movlw     0×55

movwf      PORTB         ;portb nin içine  55 hex  yazdık

movlw  h’ff”

movwf    TRISA       ;a  portunu okuma yapmak için giriş portu yaptık

movf  PORTA,w

movwf   myreg          ;porta nın içeriğini  myreg adında  bir registera attık

DERYA  GÜNDÜZ

Geçtiğimiz yıl Eskişehir Osmangazi Üniversitesi Bilişim Günleri’nin ilk defa düzenlenmesine rağmen 600’ den fazla kişi katıldı. Yerel ve ulusal basında yer alan bu etkinliğimiz Eskişehir‘de gerçekleştirilen en büyük ve içeriği en zengin bilişim etkinliklerindedir. Geçtiğimiz yılki tecrübelerimize dayanarak bu yıl etkinliğimizi bir adım daha öne götürme hedefine sahibiz. Bunun için gerekli çalışmalara çoktan başladık. Bu yıl 14-15-16 Mayıs tarihlerinde yine Eskişehir Osmangazi Üniversitesi Meşelik Yerleşkesi Kongre ve Kültür Merkezinde düzenlenecek olan etkinliği dört farklı fakülteden 5 öğrenci kulübü organize ediyor. Etkinlik Programı

© 2010 bilyaz.com , Programlama Makaleleri, Yazılım Makaleleri , Örnek Kodlar , Eğitim Videoları , C#,ASP.NET,SQL,PHP Suffusion WordPress theme by Sayontan Sinha