Pages

İstanbul mu yoksa Dunnington mu ?

AMD 6 çekirdekli ve İstanbul kod adına sahip 45 nm'lik işlemci üretecek. İstanbul kod adlı işlemci, Intel'in yenilerde duyurduğu 6 çekirdekli, 45 nm Dunnington( Dunnington, İngiltere’nin ortalarında, doğu kıyısında bir küçük köy. Kasaba bile değil bildiğimiz köy) işlemcisi ile doğrudan rakip.

Silverlight,WPF,LINQ semineri

 

Bugün YTÜ, Davutpaşa Kampüsü'ndeydim. Güne ağır bir LINQ oturumu ile başladık :) Biraz herkesi sıkıntı bastı :) Sonra yemek molası ile dinlenip WPF ve Silverlight oturumlarına geçtik. Günün sonunda aldığım tepkiler ne mutlu ki her zamanki gibi muhteşemdi. YTÜ'nün Davutpaşa Kampüsü'ndeki enerjisi Beşiktaş Kampüsü'nden açık ara önde :) Böylece mini bir gaz da vermiş olayım :)

w

Çok eğlendiğim, süper yorumlar almanın yanı sıra seminerler esnasında sorduğum sorulara da burada yer veremeyeceğim derecede fantastik cevaplar aldığım bir gün oldu :) Katılan tüm arkadaşlara çok teşekkürler.

[ http://daron.yondem.com/tr/default.aspx den alıntıdır.]

Geleceğin teknolojisi: Bilgisayarsız internet

IBM, internetin, bilgisayar kullanılmadan tüm dünyada erişilebilir hale gelmesini sağlamak amacıyla, Konuşan Web (Spoken Web) teknolojisini geliştiriyor.

Konuşan Web, cep telefonu üzerinden ses etkileşimi aracılığıyla, insanların bilgiye erişmesini ve işlem yapmasını sağlıyor. Yeni teknoloji, bilgisayar ve metin arabirimleri yerine cep telefonu ve sesin kullanılmasıyla, insanların yaratma, oluşturma ve bilgiyle etkileşme yolunu tamamen değiştirmeye hazırlanıyor.


Konuşan Web hayata geçtiğinde, insanlar otomobil kullanırken, telefonla gitmek istediği yerin tarifini dinleyebilecek. Yakın çevredeki restoranlardan birine rezervasyon yapıp, mekanla ilgili eleştirileri öğrenebilecek. Yemek yaparken en sevdiği yemeğin tarifini bulup, fırın sıcaklığını ya da eksik malzemeleri kontrol edebilecek. En sık kullandığı arkadaşlık sitesini veya web günlüğünü kolayca güncelleyebilecek. İşten eve dönerken, ihtiyaçlarını sesli olarak sayıp, internet üzerinden markete sipariş verebilecek. Tüm bu taleplerinin cevabını web üzerinden sesli olarak alabilecek.


Günümüzde, dünya nüfusunun sadece %17’si internet erişimine sahip bulunuyor. Geriye kalan %83’ü, fakirlik, okuma yazma bilmeme, bilgisayar kullanmayı bilmeme veya bilgisayar alacak maddi güce sahip olmama gibi nedenlerle internete erişemiyor. Oysa bir telefonun maliyeti bilgisayardan çok daha düşük ve telefonu kullanmak için gerekli olan bilgi birikimi de bir bilgisayara kıyasla çok daha az. “Sesli Site”lerin (VoiceSites) yaygınlaşmasıyla; bir bilgisayara sahip olmayan, internete erişemeyen ya da okuma-yazması olmayan kişiler de web’in sunduğu tüm avantajlardan yararlanabilecek. Web’e sesle erişim yaygınlaştıkça, herkes tarafından kullanılması da kolaylaşacak.

(Haber : Alıntıdır.)

DE-BUG hikayesi

1944 yılı sonbaharında, Amerikan Donanması’na ait MARK II isimli 30 ton ağırlığındaki ilk bilgisayarlardan biri, o gün başına geleceği bir olaydan ötürü, tüm yazılım dünyasına bir terim armağan edeceğinin farkında bile değildi…

Gece vardiyasına geçildiğinde, sistemin işleyişinden sorumlu programcılardan biri – ki, o dönemdeki programcılara elektronik yüksek mühendisi demek daha doğru bir yaklaşım olur – bilgisayarın bazı rölelerinde kısa devreler oluştuğunu ve bunlardan ötürü sistemin işlemediğini görerek hemen harekete geçti. Hatanın meydana geldiği kısma baktığında, devrelerin içinde bir ağ ve bir böcek buldu. Hemen eline bir cımbız alarak böceği temizledi, devrelerden tekrar akım geçmesini sağladı ve vardiya defterine şu notu düştü:

Failure : Bug

Solution : De-bug

Windows Registry İşlemleri .

 

Windows sitemlerinde yer alan registry’ye ne amaçla erişiriz, nasıl kayıt yapar , nasıl bilgi alırız gibi konulardan bahsadeceğim. Programımız başladığında bazı verileri saklamak veya almak için kullanılabilir. Veya bir bilgisayarda açık olan oturuma yönelik bilgiler saklayacak veya kullanacaksak regisrty’yi kullanabiliriz. Veya programımızın ilk kullanımında girilmesi gereken bazı değerleri girip daha sonra bu değerleri kullanmak istediğimizde bu değerlere erişebiliriz….
Registry’ye erişmek başlat > çalıştır> regedit  komutları yeterlidir. karşımıza çıkan şey aslında bir nevi windowsun kendi database idir.

Şimdi Registry burda kod yazmadan önce bu kısmı biraz tanıyalım.

image

1-) HKEY_CLASSES_ROOT :Dosya türleri, dosya bileşenleri ile ilgili bilgileri saklar.

2-)HKEY_CURRENT_USER : Kullanıcı bilgilerini tutar.
3-) HKEY_LOCAL_MACHİNE : Donanım bilgilerini bulundurur.
4-) HKEY_USERS : Kullanıcıya ait konfigürasyon bilgilerini tutar.
5-)HKEY_CURRENT_CONFİG :  donanım ayarları,bilgileri bulunur.

Şimdi Registry ile ilgili işlemler yapmadan önce kodumuza bazı isim uzayları eklemek gerekiyor.
image

isim uzayımızı ekledikten sonra kodumuza geçebiliriz.

Burda keys2 nesnemizi oluşturuyor. Local machine altındaki Software\\Classes klasörüne ulaşıyoruz. ve bu klasörün içindeki isimleri GetSubKeyNames ile alıyoru.  Registry erişimi bu şekilde  image
Şimdi registry de olmayan bi klasörü biz oluşturalım. Önce OpenKey(“SOFTWARE”,true); kodu ile oluşturacağımız klasörün localmMachine altında SOFTWARE in altında olacağını söylüyor sonra true ile yazmaya izin veriryoruz. True değeri yazmazsak Kayıt defterine windows default da yazmaya izin vermiyor.image

Kodumuzu çalıştırıp baktığımızda ibrahim adlı klasörün orda olduğunu gördük. 
image 

Şimdi Klasörümüzün içine bir değer tanımlayalım. Burda Diğer bi olay ibrahim klasörünü oluşturduğumuzda içeride isim ve değer verilmemiş bir varsayılan değer oluşturul masıdır otomatik olarak.

image 

kodumuz derleyelim ve sonucuna bakalım. Deneme isimli bölümü oluşturmuş ve değerimizi 123 olarak atamış bulunuyoruz.
image

burda Dikkat ederseniz tür kısmı altında REG_SZ yani sitring değer olarak türümüz tanımlanmış.
şimdi biraz burdaki türlerden bahsedelim ve sonrada diğer türlerde kayıt olayını nasıl yapacağız görelim.

REG_SZ karakter katarı
REG_DWORD Tamsayı
REG_BINARY ikilik tamsayı

şimdi mesela dword(ikilik sayı ) biçiminde yeni bir anahtar oluşturalım.

image
bakalım oluşturuldumu . programımızı çalıştıralım. Oluşturmuş.

image

şimdi Bu Oluşturduğumuz anahtardan nasıl değer okuyacağımızı görelim.

image

sonucunda messageboxda daha önce yazdığımız 123 değerini okumuş bulunuyoruz.
image

 

İBRAHİM ÖZBEY

WebPart

 

webPartlara portal uygulamalarının  temellidir. İçerik kısmının saklandığı bölümlerdir webpartlar.

webpartları webpartzone , EditörZone,CatalogZone ve webpartmanager olmak üzere ana başlıklara ayırabiliriz.

  •  webpartmanager  en önemli olanıdır ve webpart kontrolü içeren her sayfada olmak zorundadır.
  • WebpartZone   kontrolü ise sayfamızda ana şablon , taşıyıcı kısımlardır . Yazdığımız parçaların gösterileceği yuvalardır. Bir sayfada istenildiği kadar WebPartZone kullanılabilir.
  • EditorZone   sayfadaki webpartların kişiselleştirilmesi, görsel olarak üzerinde oynanması sıralamalarının değiştirilmesi bu parça tarafından yapılır. toolbox da webparts bölümünde bulunan üç parçanın çalışmasını sağlar. bu parçalar aslında editorzone un birer özelliği sayılırlar.
    • AppearanceEditorPart = görsel değişiklikler için kullanılır.
    • LayoutEditorPart. = sıralamaların değişmesi için kullanılır.
    • BehaviorEditorPart =Parçaların bazı hareketlerini değişmesinde rol oynar.
  • CatalogZone   sayfadaki webpartları kapatıp açmak gibi işler için kullanılır. veya hazırladığımız bi kontrolü webpartların içine atmak için kullanılır.
    • DeclarativeCatalogPart hazırladığımız içeriği webpartzonelara eklememizi sağlayan bölüm. aynı formdan istediğimiz kadar ve istediğimz zone a ekleyebiliriz.
    • PageCatalogPart kapatılan sayfaların açılmasını sağlayan özellik.
    • importCatalogPart dışardan hazırladığımız formu burada kullanmak için kullanılır.

 

image

webpartmanager ve webpartzone ların ekledik.Arkasından editör zone ekliyoruz.
image  ve içine appearance ve layout bölümlerini ekliyoruz.

sonra catalogzone ekliyoruz. ve declerativ ve pagecatalog bölümlerini içine ekliyoruz.

image

şimdi 2 button ekliyor ve şu kodları yazıyoruz. default.aspx.cs  içine .image

bu kodlar ile editorZone ve CatalogZone dan hangisini kullanacaksak.  onu displaymode olarak atıyoruz.

bu konuda web partların XML olarak export/import’u gibi konurından yeterince bahsedemedik ilerde onlarıda daha derinlemesine işlemek üzere burda bitiriyoruz.

Zaman Yönetimi ve stratejik planlama

 

Bu gün ERDEM Holding de zaman yönetimi ve stratejik planlama eğitimine katıldım.
Benim için çok faydalı geçti. Çok eğlenceli bir ortamda plan yapmayı zamanı verimli kullanmayı , hedefler ve hayyaller arsı farkları, hedef belirlemeyi ve gerekli aşamaları… öğrendim

Azure ne zaman çıkacak, fiyat ne olacak?

Microsoft'un web tabanlı yeni işletim sistemi Azure için çıkış tarihi ve ilk fiyat bilgileri belli oldu. Buna göre Azure 2009'un ikinci yarısında kullanıcılarına merhaba diyecek. Azure'nin ücretlendirme politikası ise kullanıma göre belirlenecek. Microsoft'un online müşteri portalından satın alınabilecek olan Azure, beta aşamasında ücretsiz olarak kullanılabilecek. Ücretli kullanıma geçildikten sonra, "kullandığın kadar öde" modeli uygulanacak. Ücretin belirlenmesinde de üç faktör etkili olacak. Birincisi işlemci kullanımı, ikincisi kullanılan bant genişliği, üçüncüsü ise kullanılan depolama alanı olacak. Öte yandan Dell de Azure'yi çalıştıracak donanımların sağlayacağını duyurdu. Buna göre Dell, Azure için özelleştirilmiş donanım sağlayıcısı olacak.

Yazım hataları Google'a servet kazandırıyor

Dikkatsiz internet kullanıcılarının tarayıcıların adres satırında yazarken yaptığı yazım hataları, Google'a her yıl 32 ila 50 milyon dolar kazandırıyor. Harvard Üniversitesi İşletme bölümü profesörlerinden Benjamin G. Edelman'ın yaptığı bir araştırma Google'ın her yıl deyim yerindeyse havadan 32 ila 50 milyon dolar arasında gelir elde ettiğini ortaya koydu.

Ancak burada bir usulsüzlük ya da kanuna aykırı bir durum söz konusu değil. Google'a her sene hatırı sayılır bir para kazandıran şey, dikkatsiz internet kullanıcılarının yaptığı yazım hataları. Örneğin "bankofamerica.com" sitesine girmek isteyen bir kullanıcı yanlışlıkla "bankkofamerica.com" adresine gittiğinde görüntülenen Google AdSense reklamları kullanıcıyı karşılıyor. Sayfaya yanlışlıkla gelen kullanıcı, buradaki AdSense reklamlarına tıkladığında Google'a hatırı sayılır bir gelir bırakıyor.

Google bu işi ciddiye aldığını, park edilmiş alan adları için hazırladığı AdSense tarifesi ile belli ediyor. Tam bu noktada, Google karşı açılan bir davanın da ana konusu olan kritik bir soru gündeme geliyor: "Google'ın yaptığı ticari marka haklarının ihlali olarak değerlendirilebilir mi?".

Haziran ayında bu konu ile ilgili bir şikayette bulunarak Google'ı mahkemeye veren Vulcan Golf'un açtığı dava halen sürüyor. Böyle bir davaya, davacı taraf olarak katılan Prof. Edelman danışmanlık görevi yürüttüğü McAfee'de yaptıkları bir çalışmada 80 bin adet bu tip yazım hatalarını fırsata çevirmek isteyen alan adı tespit ettiklerini belirtirken, bunların arasında dünyanın en çok ziyaret edilen 2 bin sitesinin isimlerini taklit eden bir çok site bulunduğuna dikkat çekti. Google'dan yapılan açıklamada ise söz konusu iddialar "temelsiz" olarak nitelendirilerek, suçlamalar reddedildi.

SqlServer de Cursor olayı

Cursor  database den aldığımız verinin içinde gezinmemizi sağlar. bunu Database den Datareader ile dataları aldığımızda da yapabiliriz. fakat bu kullanıcı makinasında (client) yapılacağı için veri eğer büyükse performansı düşürür. bu işlemi server de yapıp client a sadece istenileni göndermek ise performans olarak daha iyi olur.

DECLARE Kisi_tablosu CURSOR FOR
SELECT Ad,soyad FROM tblKimlik;
OPEN Kisi_tablosu;
FETCH NEXT FROM Kisi_tablosu;
WHILE @@FETCH_STATUS = 0
   BEGIN
      FETCH NEXT FROM Kisi_tablosu;
   END;
CLOSE Kisi_tablosu;
DEALLOCATE Kisi_tablosu;

burada yine önce  Declare Kisi_tablosu Cursor For Select Ad,Soyad from tblKimlik; satırları ile önce cursorumuzu tanımlıyor sonrada hangi sql işlemi üzerine çalışacağını gösteriyoruz. tblKimlik tablosunda Ad,soyad değişkenlerini alıyoruz.

cursoru açıyoruz Open Kis_tablosu; ile.

FETCH NEXT FROM Open Kis_tablosu; ile ilerlemeyönünü gösteriyoruz.

WHILE @@FETCH_STATUS = 0
   BEGIN
      FETCH NEXT FROM Kisi_tablosu;
   END;

data basede kayıdımız olduğu sürece kayıtları tek tek alıyoruz.

CLOSE Kisi_tablosu;
DEALLOCATE Kisi_tablosu;

Cursoru kapatıyoruz ve rem de boşuna yer kaplamasın diye DEALLOCATE ile remden kaldırıyoruz. burda DEALLOCATE olayı önemli. Çünkü Eğer unutursak bunu belirli bir sayı sonra server remi dolacak ve isteğimize yanıt veremeyecektir. performan için gerekli.

SqlServer de Triggerler

sql serverde trigerler ve cursorlar ve stored procedure ‘ler öncelikle performans sonrada bazı güvenlik artıları için kullanılır.

Triggerler (tetikleyiciler) i bazen database de yaptığımız bazı işlemlerde o işlem ile birlikte başka olayın tetiklenmesini istediğimizde yaparız. örneğin bir ürün tablosuna kayıt girildiğinde o kayıta ait bir log tutulması nı otomatik olarak tetikleyicilerle yapabiliriz veya ürün silmek istediğizde o ürünün başka bir tablo ile etkileşimi olduğunu kontrol eder silmesini engelleyebiliriz veya ürünü silince ttikleyici ile ürünün başka bir tablodaki veilerini de silebiliriz.

cursor ise database den aldığımız verinin içinde gezinmemizi sağlar. bunu Database den Datareader ile dataları aldığımızda da yapabiliriz. fakat bu kullanıcı makinasında (client) yapılacağı için veri eğer büyükse performansı düşürür. bu işlemi server de yapıp client a sadece istenileni göndermek ise performans olarak daha iyi olur.

Triggerler : 

 

CREATE TRIGGER dbo.KontrolEt
   ON  dbo.tblKimlik
   AFTER  INSERT ,DELETE,UPDATE
AS
BEGIN
    declare @AdresSayisi int
    declare @KimlikSayisi int

select @KimlikSayisi = count(*)    from tblKimlik
select @AdresSayisi = count(*)    from tblAdres

   if     (@KimlikSayisi =  @AdresSayisi)
    insert into tblLog(logumuz) values('Doğru')
else
insert into tblLog(logumuz) values('yanlış')

SET NOCOUNT ON;
END

şimdi kodlarımızı anlatalım

CREATE TRIGGER dbo.KontrolEt
   ON  dbo.tblKimlik
   AFTER  INSERT ,DELETE,UPDATE

burada ilk satırda Trigger i oluşturuyor ve KontrolEt adını veriyoruz.Sonra hangi tablo üzerinde işlem olduğunda tetikleneceğini veriyoruz on dbo.tblKimlik ile.

after insert,delete,update ise tablonun hangi işlemlerden etkilendiğinde tetikleyicimizin çalışacağını gösterir.

AS
BEGIN
    declare @AdresSayisi int
    declare @KimlikSayisi int

select @KimlikSayisi = count(*)    from tblKimlik
select @AdresSayisi = count(*)    from tblAdres

burda ise trigeri başlatıyor ve AdresSayisi ve KimlikSayisi isimli 2 değişken deklare ediyoruz. Daha sonra Select cümlemiz ile tblKimlik tablomuz ve tblAdres tablomuzdan kayır sayısını alıp karşılaştırıyoruz.

   if     (@KimlikSayisi =  @AdresSayisi)
    insert into tblLog(logumuz) values('Doğru')
else
insert into tblLog(logumuz) values('yanlış')

set nocount on;

end

KimlikSayisi AdresSayisi ne eşitse tblLog Adlı tablomuza doğru değilse yanlış kayıtınnı işliyoruz.

set nocount on; end kısmında ise işlemimizi bitiriyoruz.

tabiki teikleyicimiz inser,delete,update işlemi yapıldığı anda tblKimlik tablosu üstünde çalışmaya başlayacaktır.

Trigerler select işleminde çalışmaz sadece insert,update, delete işlemlerinde çalışırlar.

Ajax (XMLHttpRequest)

 

Öncelikle Ajax nedir? niye kullanılır bu soruların cevabını verelim. Çünkü bir teknolojinin ne işe yaradığını bilmezsek gerektiğinde kullanamayız.

ajax=Asynchronous JavaScript and XML demektir. Peni ne işe yarar bu ajax derseniz. sayfa içinde bazen veritabanı bağlantıları yaparız veya başka bir kod sayfasında işlem yapıp bu sayfayı etkilemek isteye biliriz fakat tüm bunları yaparken sayfayı yenilemek gerekir. işte ajax bu noktada devreye girerek sayfayı yenilemeden sadece sayfa içinde bazı bölümlerin yenilenmesini ve gerekli işlemleri yapmamızı sağlar.Sunucu ile doğruden iletişim kurabiliriz.
Ajax XMLHttpRequest nesnesini kullanır. sunucu bağlantısı için.

Ajax Kullanmak için ;

  • JavaScript
  • Html/XHTML bilmemiz gerekir.

Şimdi birkaç basit uygulama ile ajax kullanımını öğrenelim.

testajax.html dosyamızı oluşturalım.



<html>
<body> //script bloğu içine kullanacağımız gerekli ajax ve javascript //kodunu yazıyoruz
<script type="text/javascript">
function ajaxFunction() {
var xmlHttp;//xmlhttp nesnemizi tanımlayalım try {
// Firefox, Opera 8.0+, Safari için nesnemizi oluşturalım.
xmlHttp=new XMLHttpRequest();
} catch (e) {
// Internet Explorer
try {
//internet explorer 6 ve üstü tarayıcılar için
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
//internet explorer 5.5
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
alert("Your browser does not support AJAX!");
return false;
}
}
}
//sunucudan gelecek yanıtı işleyecek fonksiyon xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState==4) {
//sunucudan gelen yanıtın formumuzdaki time textbox’una yazılması document.myForm.time.value=xmlHttp.responseText; } }
//sunucu ile iletişim. xmlHttp.open("GET","time.php",true); xmlHttp.send(null);
}
</script>

<form name="myForm">
//Ajax işleminin çalışma başlangış yeri

Name: <input type="text"onkeyup="ajaxFunction();"name="username" />
Time: <input type="text" name="time" /></form>
</body>

</html>


test.php






<?php
echo date('H:i:s');
?>



şimdi gelelim. yukarıda kodda kullandığımız. bazı kodalrı açıklamaya

OnlyReadyStateChanged : sunucudan gelen veriyi kullanabilmek için fonksiyon ayarlar.

readyState : Sunucunun yanıt durumunu tutar.

1: istek başlatılmadı

2: istek ayarlandı.

3: istek gönderildi

4: istek işlemde

5: istek tamamlandı

if(xmlHttp.readyState==4)  burada isteğimizin işlemde olup olmadıını kontrol ediyoruz.





xmlHttp.onreadystatechange=function()

{
if(xmlHttp.readyState==4)
{
document.myForm.time.value=xmlHttp.responseText;
}
}



burada ise myform isimli formumuzun time isimli textbox ının değerini test.php den gelen değer olarak atıyoruz.

ResponseText:Sunucudan gelen veriyi alıyoruz





xmlHttp.open("GET","time.php",true);

xmlHttp.send(null);



burada ise isteğimizn gönderiliş şeklini ayarlıyor ve sunucuya gönderiyoruz.

open(); 3 parametre alır

1- get/post gönderim metodu

2- URL

3- isteğin asenkron olarak elealınacağını gösterir.

Send() ise isteğimizi sunucuya gönderir.
istersek send() içininde sunucuya parametrede atabiliriz.





<form name="myForm">

Name: <input type="text"onkeyup="ajaxFunction();"name="username" />

Time: <input type="text" name="time" /></form>

burda ise ajax sın nezaman çalışacağına karar veriyoruz. kullanıcı name alanında herhangi bir tuşa bastıktan sonra olrak ayarladık.

C# da yazılım standartları

İsimlendirmeler.

public void Sınıfım

{

public int Sayi=100;

public void ClassOrnek()

{

}

}

değişken isimlerinin başharfleri önemli.

2-Local değişkenle ve metod değişkenleri

public void ClassOrnek(int yeniNumara )

{

int numara;

}

local değişkenler ilk harfi küçük. metod değişkenlerikelimeolarak ayırırsak ikinci kelimenin başharfi büyük.

3-arayüz tanımlamalarında

interface IAraYuz
{
}

interface lerde I harfi ile başlamak şart değil ama artık klasik olarak tüm uzman yazılımcılar tarafından kullanılır bir hal almış durumda

4- metot isimleri anlamlı olmalıdır. Yüklem –nesne ilişkisi olmalıdır.

ShowDialog veya GetDirectoryInfo gibi..

5- Metotlarda isim veriken geri döndüreceği değertipi isimde belirtilebilir.

GetObjectState-

6 – bir sınıfa ait özel değişkenler _ ile başlar

public void ClassOrnek(int yeniNumara )

{

private int _numara;

}

 

7- Anlaşılabilir değişken isimleri kullanın .Değişkenlerinizin tek karakterden oluşmamasına özen gösterin.

8- Generik koleksiyonlar kullanırken tipler için etiketler kullanın

public LinkedList<K,T> { }

yanlış kullanım ise

public LinkedList<KeyType,DataType> { }

 

9- Namespace’lere anlamlı isimler verin

10- tip tanımlamalarında full isim kullanmak yerine using ifadesi ile alan isimlerini tanımlamaktan kurtulun.

System.Collections.ArrayList YeniDiziNesnesi = new  System.Collections.ArrayList();

yerine
using System.Collections;

kullandıktan sonra kodumuzda
ArrayList YeniDiziNesnesi = new ArrayList();

11- Using ile tanımladığımız isim alanlarını alt alta dizin

12- Sınıflar içinde önce değişkenleri tanımlayın.sonra metodları

public class BenimClasim
{
private int _sayi;
private string _adi;
public void method1(){}
public void method2(){}
}

13-  “{” parantezleri yeni satıra indirin

14 – Delegate tanımlamalarında aşağıdaki şekildeki gibi davranın

a=)parametreli delegate

public delegate void temcilci(int deger);

parametsiz delegate

public delegate void temcilci();

53 CSS örneği

 

Siteleriniz de kullanabileceğiniz güzel örnekler .

BURDAN BAKABİLİRSİNİZ

I‘m a PC .

Stored Procedure Kullanarak Kayıt Ekleme

Öncelikle stored procedure ü neden kullanıyoruz.

Sql Procedure’ler derlenmiş sql cümlecikleridir. Bunlar birer veritabanı nesnesi oldukları için, doğrudan veritabanı yöneticisi olan programda  yer alırlar. Bu nedenle veritabanınızı bir yere taşıdığınızda otomatik olarak, Sql Procedure’leride taşımış olursunuz.  Aslında , çalıştırmak istediğimiz sql cümleciklerini bir Sql Procedure içine yerleştirerek, bunun bir veritabanı nesnesi haline gelmesini ve çalışıtırıldığında doğrudan, veritabanı yöneticisini üzerinde barındıran sunucu makinede işlemesini sağlarız. Bu doğal olarak, istemci makinelerdeki iş yükünü azaltır ve performansı arttırır. Nitekim bir program içinde çalışıtırılan sql cümleleri, Sql Procedure’leden çok daha yavaş sonuç döndürür.

önce procedürümüzü oluşturalım. sqlserverde new query açıyor ve aşağıdaki kodu yazıyoruz.

image

 

Şimdi Yine Windows formumuzu oluşturuyoruz. ve kaydet butonuna bastığımızda aşağıdaki kodu çalıştırıyoruz.

private void btnKaydet_Click(object sender, EventArgs e)
{
    string constr = @"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=KayitEkle;Data Source=IBRAHIM\SQLEXPRESS";// teksatırda yaz


    SqlConnection conn = new SqlConnection(constr);
    conn.Open();//baglatıyı açıyoruz
    SqlCommand cmd = new SqlCommand("Kayit", conn);
    cmd.CommandType = CommandType.StoredProcedure;//commandtype belirliyoruz

//parametreleri ekliyoruz.
    SqlParameter parametreler = cmd.Parameters.Add("@OgrenciNo",SqlDbType.Int);
    SqlParameter parametreler1 = cmd.Parameters.Add("@Adi",SqlDbType.VarChar,50);
    SqlParameter parametreler2 = cmd.Parameters.Add("@soyadi", SqlDbType.VarChar, 50);

//değerleri atıyoruz   

parametreler.Value = txtno.Text;
    parametreler1.Value = txtAdi.Text;
    parametreler2.Value = txtsoyadi.Text;

//veriyi işliyoruz 

  cmd.ExecuteNonQuery();

//bağlantıyı kapatıyoruz
    conn.Close();

}

 

textbozları doldurup kaydete basıyoruz. bakalım şimdi veritabanımıza değerlerimiz eklenmişmi.

image

Kayıdımız database e eklenmiş.

image

Sql server e Yeni kayıt ekleme.

sql server e c# programımızdan kayıt ekleme.

Önce Microsoft Visual Studio’dan yeni bir proje açıyor. Windows Form Application oluşturuyor ve adını SqlServereKayitekleme olarak belirliyoruz.

image

Sonra İlk aşama olarak Formumuza 3 tane Label Atıp test özelliğini Ad,Soyad,ÖğrenciNo diye değiştiriyor. ardından 3 tane textboz atıp properties ten name özelliklerini txtadi,txtsoyadi,txtno diye değiştiriyor ve bir butonu sürükleyip name özelliğini btnkaydet olarak değiştiriyoruz.

image

Şimdi gelelim sql severimizde Kayıtekle isimli database ve tblkayitekle isimli bir tablo oluşturmaya.

image

Daha Sonra yapacağımız iş database imiz hazır olduğuna göre formumuzda kaydet tuşuna basıldıktan sonra işlemleri yapacak gereken kodları yazmaya.

ilk olarak kodumuza

using System.Data;
using System.Data.SqlClient;

idadeleri ekliyoruz.Sonra Aşağıdaki kodu yazıyoruz.ve Programımızı çalıştırıyoruz.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Data;

using System.Data.SqlClient;

namespace SqlServerKayit_Ekleme

{

    public partial class Form1 : Form

    {

        public string conn = null;

        public string cmd = null;

        public Form1()

        {

            InitializeComponent();

        }

        private void btnKaydet_Click(object sender, EventArgs e)

        {

           //bağlantıyı kuruyoruz

string constr = @"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=KayitEkle;Data Source=IBRAHIM\SQLEXPRESS";//tek satır da olucak

            SqlConnection conn = new SqlConnection(constr);

            conn.Open();

//sql cümlemizi tanımlıyoruz

//tek satırda olucak.

string sqlsrt = "insert into tblKayitekle (OgrenciNo,Adi,soyadi) values "+txtno.Text+",'"+txtAdi.Text+"','"+txtsoyadi.Text+"')";

 

          //sql den verileri alıyor bağlantıyı kapatıyoruz.

  SqlCommand cmd = new SqlCommand(sqlsrt,conn);

            cmd.ExecuteNonQuery();

            conn.Close();

        }

    }

image

Şimdi veritabanımıza bakalım kayıtlarımız eklenmişmi . Tamamdır kayııtlarımız eklenmiş.

image

Xml Web Servisleri

Bir Web Servisi, uzak istemcilerin başvuruda bulunduğu çeşitli işlevsel metod çağırımlarını bardındırdan, çok yönlü ve merkezileştirilmiş bir ünitedir. Bir web servisi, çok sayıda istemci tarafından erişilebilen  bir yapıya sahiptir. Onu diğer dağıtık nesne modellerinden farklı kılan sahip olduğu alt yapı sistemi sayesinde, platform bağımsız uygulanabilirliği sağlamasıdır.

Bir web servisi, standart olarak HTML iletişim protokolü üzerinden veri alışverişine izin veren bir yapıdadır. HTML tabanlı bu sistem XML temelleri üzerine dayandırılmıştır.  Web servislerinin kullanılmasında yatan en büyük kavram xml tabanlı veri akışının belirli standartlar dahilinde gerçekleştirilmesidir. Bu, web servislerinin platform bağımsız olmasıdır.

şimdi aşağıda bazit bir örnek gösterelim

Visual studio new website oluşturuyoruz. ve Adına services olarak ayarlıyoruz.

s

karşıma çıkan sayfada

 

[WebMethod]
   public string HelloWorld() {
       return "Hello World";
   }

örneğini görüyoruz. burdaki [webMethot] kısmı mecburi kısım eğer yazmazsak bu sırdan bir class olur ve biz bunu servisimizde kullanamayız.devamında ise klasik class yapımızı görüyoruz..

Şimdi biz bir class oluşturalım bu classa bağlanıp kullanalım.

 

[WebMethod]
  public int Topla(int sayi1,int sayi2)
  {
      return sayi1+sayi2;
  }

oluşturduktan sonra kodumuzu derliyoruz. ve bu oluşturduğumuz kodu bulup service.cs kodunu oluşturup.programımıza eklememiz gerekiyor. Önce wsdl.exe olarak aratıyoruz dosyamızı ve bulduğumuz path i cmd yazıp komut satırının directory si olarak atıyoruz.

sonra projemiji derleyip internet explorer penceresi açık ken url sini alıp

wsdl http://localhost:4544/services/Service.asmx

tarzında yazarak derliyoruz ve bu bize service.cs dosyası olusturuyor . bu kodu artık kullanacağımız aspx sayfamıza ekleyebiliriz.

burda localden çalıştığımız için bu işlemi yaparken alttaki resimde gördüğünüz internet sayfasını kapatmıyoruz.çünkü bu servisi aktif olarak tutuyor.

bu sayfadaki topla fonsiyonunu tıklayarak servisimizin çalışıp çalışmadığını deneyebiliriz.

image image

şimdi gelelim uygulamamıza yeni bir ASP.NET web sitesi açıyoruz app_code dosyamızı oluşturup içine az önce oluşturduğumuz service.cs dosyasını ekliyoruz (dosyamız yukarıdaki ekranda gördüğümüz directory pathi nereyi gösteriyorsa orda :) ).

sonra referansları kontrol ediyoruz. eğer yoksa gerekli referansları ekliyoruz.

bunlar

System.web;

System.web.services;

System.Xml;

image

default.aspx dosyamıza gelerek 2 textbox,1 label ve 1 buton ekliyoruz.

buttonumuza çift tıklayarak codebehind dosyamız olan default.aspx.cs dosyamıza gelip aşağıdaki kodumuzu yazıyoruz.

using System.Web.Services.Description;
using System.Web.Services;
using System.Web.Services.Protocols;

tabi önce bu ykarıdaki kısımları koda eklememiz gerekiyor. yoksa app_code içindeki service.cs dosyamızdaki service adlı classımıza erişemeyiz.aşağıdaki kodu ekleyip

image

programımızı derliyoruz. ve bizim yazdığımız değereleri servisimizi kullanarak  toplayıp sonucu elde ediyoruz

image

…..

Çok Kanallı(Multithreaded Programming) Programlamaya Giriş 1

C# ın bir çok önemli özelliğinden biride ÇokKanallı programlamayı(Multithreaded programming) standart olarak desteklemesidir. Bu sayede bir çok dilde karşılaşılan problemler minimize edilmişti.
Çok kanallılık aslında multitasking(çok görevlilik) in özelleşmiş bir şeklidir.2 ayrı tipde çok görevlilik mevcuttur.Proses tabanlı ve kanal tabanlı.

Proses tabanlı programlar yani bilgisayarda eş zamanlı olarak birden fazla programın çalışmasıdemektir. Bir yandan interneti kullanırken eşzamanlı olarak kelime işlemcisini de çalıştırmanıza denir.

Kanal tabanlı programlama ise yine kendi içinde 2 ye ayrılır.Foreground (ön kanal) ve background (arka kanal) olmak üzere. Bu iki kanal arasındaki fark ise . Geri planda çalışan background kanalının prosesindeki tüm foreground kanallar kapandığında otomatik olarak kapanmasıdır.

C# da Multithreaded programming için gerekli kütüphane Using System.Threading isim uzayında bulunmaktadaır. Ve çok kanallılık sistemi çalışma kanallarını paketleyen Thread sınıfı üzerine kurulmuştur.

Şimdi bir örnek ile kanal açmayı gösterelim

Using System;
Using System.Threading;


class Kanal{

public int sayac ;
public Thread kanal;

public Baglantı(string name){
// kanal açmak için nesneden gelen ismi alıp burda kanalımızı açıyoruz.
sayac=0;
kanal = new Thread (new ThreadStart(this.run));
kanal.name=name;
kanal.start();

}
void run(){
//kanalımızın başlangıç noktası burası
Console.WriteLine("Kanal başlatıldı");
do{
Thread.Sleep(300);
Console.WriteLine("kanal çalışıyo"+sayac);
sayac++;

}
while (sayac<10)
}
Console.WriteLine("Kanal Kapanıyor..");
}

class KanalAcma{
public static void Main() {
//kanal açmak için gerekli nesneyi tanımlıyoruz.
Kanal knl = new Kanal("ibrahim");

do{
// enson kapanması gereken ana kanal burası . burda kapatıyoruz.
Console.WriteLine("Ana kanal kapatılıyor...");
Thread.Sleep(200);
}
while(sayac!=10)

}
}

yukarıdaki örnekte bir tane kanal açtık Şimdi birden fazla kanal açmamız gerektiğinde ne yapacağız.Yapacağımız şey basit
aşağıdaki satırda olduğu gibi başka kanallar ekleyerek birden fazla kanal açabiliriz.
Kanal knl = new Kanal("ibrahim");
Kanal knl2 = new Kanal("özbey");
.
Fakat birden fazla kanal açtığımızda Düşünmemiz gereken başka durumlar ortaya çıkıyor.
Aynı kanal aynı anda iki yerden kullanılmak istenirse ne olacak. İşte ozaman Düşünmemiz gerekn kanal öncelikleri ortaya çıkacaktır. Yüksek öncelikli kanal bağlanır sonrada işi bitince diğer kanal bağlanır gibi

KANAL öNCELİKLERİ

thread sınıfının Priority özelliklerini kullanıcaz.Genel kullanımı şu şekildedir.
Public ThreadPriority Priority{get ; set ;}
burda ThreadPriority Aşagıdaki beş özelliğe sahiptir.
ThreadPriority.Highest
ThreadPriority.AboveNormal
ThreadPriority.Normal
ThreadPriority.BelowNormal
ThreadPriority.Lowest

bu özellikeleri kullanarak kanala öncelik veririz ve kanal önceliği önde olan bağlanır ve kanalı kititler. o kanalı bırakınca sonraki önceliği olan bağlanır.
Kanal içinb var sayılan öncelik ThreadPriority.Normal Dir

bunu ise programımıza şu sekilde ekliyoruz.

Kanal knl = new Kanal("ibrahim");
Kanal knl2 = new Kanal("özbey");

kanalı tanımladıktan sonra öncelik sırasını ayarlıyoruz
knl.Kanal.Priority=ThreadPriority.Normal
knl2.Kanal.Priority=ThreadPriority.Highest

ayrıca temel kanaldan önce diğer kanalların sonlandığından emin olmak istiyorsak İsAlive () kullanabiliriz. Bunu ise Kodumuzun main kısmına şu şekilde ekleyebiliriz.

public static void Main() {
Kanal knl = new Kanal("ibrahim");
do{
Console.WriteLine("Ana kanal kapatılıyor...");
Thread.Sleep(200);
}
while(knl.Kanal.IsAlive&&knl2.Kanal.IsAlive)//burda temel kanalımız diğer iki kanal sonlanmışsa kapanacaktır
}

C# Boxing and unboxing

Boxing: değer türünden  bir değişkeni referans türünden bir nesneye aktarma işlemidir.Unboxing : bunun tersidir. Burda değişkenlerin hangi bellekte tutulduğu asıl önemli olan noktadır. referans tipleri (Reference type) ve değertipleri (value type) boxing unboxing in temelinş oluşturur.

Value type’lar stack (Yığın) Reference type ise Heap(öbek) de tutulmaktadır. Reference tipleri Şunlardır : Delegate, İnterface, Strings,object,class . Value tpleri ise bildiğimiz ; int , float , double,char…vb tiplerdir.

Boxing :


using System;

namespace İbo
{
class İbrahiminClasi
{
static void Main(string[] args)

{
int ibo=120;
object obj=ibo;

Console.WriteLine(“Değer tipli değişken = {0}”,ibo);
ibo=300;
Console.WriteLine(“Değer tipli değişken = {0}”,ibo);
Console.WriteLine(“referans tipli değişken = {0}”,obj);
}

}

}

 

ekran cıktısı:

Değer tipli değişken = 120
Değer tipli değişken = 300
referans tipli değişken = 120

Çünkü object obj Satırında stackta tutulan ibo Değişkeninin Bir kopyası heap de oluşturuldu ve bunun referansı obj değişkeninde tutuldu. Biz ibo değişkeninin değerini değiştirdiğimizde stacktaki değer değişti fakat heapde oluşturduğumuz değer değişmedi.Böylece Boxing işlemimizi yapmış olduk.

Burda boxing de Kopyalam kısmı otomatik olarak yapıldı.

 

Unboxing :

using System;

namespace ibrahiminclasi
{
class ibrahim
    {
static void Main(string[] args)
        {
double ibo=111111111111111;
object obj;

            obj=ibo;

            Console.WriteLine(ibo.ToString());
            Console.WriteLine(obj.ToString()); 
            ibo=ibo+10;
            Console.WriteLine(ibo.ToString());
            Console.WriteLine(obj.ToString());

    double yenibo;
            yenibo=(double)obj;
            Console.WriteLine(yenibo.ToString());

        }
    }
}

burda önce stackta ibo adlı değer tutulur sonra bu değerin heap de bir kopyası oluşturulur(boxing).  Ve arkasından stack’ta bulunan değer tipli değişkenin değeri değiştirdi. fakat referans tipli değişken heapte etkilenmemiştir. Burda kutulama işlemi bitiyor . arkasından kutudan çıkarma işlemi başlıyor. ve Heap te bulunan obj nesnesinin (referans tipli) value tipli değişkene yenibo ya aktarılıyor. Yani boxing işlemi ile kutulanmış bir veri kümesi, öbekten alınıp tekrar yığındaki bir alana konulmuş, dolayısıyla kutudan çıkartılmıştır.

Datagridview Kullanarak Access’ e bağlanma Örnek

C# ve Nesne Yönelimli Programlamanın 3 Prensibi

Kapsülleme (Encapsulation)
Nesne yönelimli programlamanın ilk prensibi kapsülleme (encapsulation) olarak adlandırılır. Bu özellik, dilin nesne kullanıcısından gereksiz uygulama ayrıntılarını saklayabilme yeteneği olarak ifade edilebilir. Örnek olarak .Net Framework temel sınıf kütüphanesi içerisinde yer alan ve Open() ve Close() metotlarına sahip SqlConnection sınıfını ele alalım.
  //SqlConnection, veritabanına yapılan bağlantının detaylarını kapsüllemektedir.
SqlConnection baglanti = new SqlConnection("server = London; database = AdventureWorks; integrated security = true");
baglanti.Open();
  //Burada veri yönetilir.
baglanti.Close();

SqlConnection sınıfı, veritabanına açılan bağlantının sağlanması, yüklenmesi, yönetimi, kapanması gibi içsel detayları gizlemiştir. Nesne kullanıcısı kapsüllemeyi sever; çünkü programlama görevlerini daha kolay hale getirir. SqlConnection sınıfında olduğu gibi, nesnenin görevini yerine getirmesi için arka tarafta çalışan onlarca satır kodu düşünmeye gerek yoktur. Tek yapılması gereken nesne örneğinin oluşturulması ve uygun metotların çağrılmasıdır.

Kapsüllemenin diğer bir işlevi ise veri korumadır. Bir sınıf tasarımında doğru olan, nesnelerin durum verilerini private erişim belirleyicisi ile koruma altına almaktır. Bu yolla dış dünya, alanın değerini elde etmek ya da değiştirmek istediğinde bir kontrolden geçmek zorunda kalır. Dış dünyaya açık, yani public erişim belirleyicisine sahip alanların sorunu, ait oldukları sınıfın iş mantıklarını algılayabilme yeteneklerinin olmamasıdır. Dolayısıyla atanan değerin iş mantığına (business logic) uygun olup olmadığına dair herhangi bir kontrolün sınıf içerisinde yapılabilmesi mümkün olmamaktadır. Nesne kullanıcısı genelde sınıfı yazan kişi olmakla birlikte harici birisi de olabilir; dolayısıyla böyle bir kontrolü nesne kullanıcısı tarafında yapmak akla gelse de ; bu çok efektif bir yol olmaz. Sınıfların durum verileri olarak anılan alanlar, private erişim belirleyicisi alarak dış dünyaya kapatıldıklarında başlangıç değerleri, sınıf içerisinde tanımlandığı yerde ya da yapıcı metot yardımıyla verilebilir. Böyle bir kapsülleme tercih edilebilir; ancak bazı durumlarda alanın değerinin dışardan okunması, değerinin sadece içsel olarak sınıf üyeleri tarafından atanması, durum verileri üzerinde yapılacak değişikliklerin dışarıya açılması gerekebilir. Burada değişiklikle birlikte gelen verinin kontrol edilerek istenmeyen durumların önüne geçilmesi gerekliliği ortadadır.
Kapsülleme, durum verilerinin tutarlılığını sağlamak için bir yol sunmaktadır: public eirşim belirleyicisine sahip alanlar tanımlamaktansa, alan verilerini private olarak tanımlamak alışkanlık haline getirilmelidir (Herhangi bir iş kuralı olmasa da). Bu durumda alanlar nesne kullanıcısına iki teknikle açılabilir:


- Nesne yönelimli diğer diller için geleneksel yol olan Erişen ve Değiştiren (Accessor and Mutator) metotlar tanımlamak.
- Bir özellik (property) tanımlamak.

Hangi teknik kullanılırsa kullanılsın iyi kapsüllenmiş bir sınıf, ham verisini (yani alanlarını) ve onu nasıl yönettiğinin ayrıntılarını dış dünyanın kem gözlerinden gizlemelidir. Bu yaklaşımın güzel ve faydalı olan yanı, sınıfı yazan kişinin, çalışan kodu bozmadan kapalı kapılar ardında metodun ya da özelliğin uygulanışını değiştirmekte serbest olmasıdır. .NET Framework temel sınıf kütüphanesi, geleneksel Erişen/Belirleyen metotlar yerine tip özelliklerini tercih eder. Bu yüzden sınıf kütüphanesi ile sağlıklı bir şekilde etkileşen programlar için kendi tiplerimizi yazarken özelliklerden faydalanmak doğru bir davranış olacaktır. Ayrıca özelliklerin bir alanın değerini işaret edip alana değer atamaları zorunlu değildir. Bir alan olmadan da özelliklerden faydalanılabilir.  
Kalıtım (Inheritance)
Kapsüllenmiş bir sınıf geliştirmeyi analiz ettikten sonra, şimdi sıra birbirleriyle ilişkili sınıf aileleri oluşturmaya geldi. Nesne yönelimli programlamanın ikinci prensibi olan kalıtım (inheritance), dilin varolan sınıf tanımlamalarının üzerine yeni bir sınıf tanımlaması inşa edilmesine izin verme yeteneği olarak ifade edilebilir. Kalıtım, bir türetilen sınıfın (base class ya da parent class) özellik ve davranışlarını, bir alt sınıfın miras alarak sanki kendi üyeleriymiş gibi kullanmasıdır.   

image
Yukarıdaki şekil, şöyle yorumlanabilir: Kare bir şekildir, şekil ise bir object’dir. Sınıflar arasında bu tarz bir ilişki oluşturulduğu zaman, tipler arasında bir bağlılık inşa edilmiş olur. Kalıtım fikrinin altında yatan en basit fikir, yeni sınıfın varolan bir sınıfın fonksiyonelliklerine sahip olması ve muhtemelen genişletmesidir. Kalıtım konusu ile ilgili belirtilmesi gereken bir ayrıntı vardır: .NET dünyasında her tip, eninde sonunda ortak bir temel sınıftan (base class) türer: System.Object. Object sınıfı, .NET ekosisteminde yer alan bütün tipler tarafından desteklenen üyeler kümesini tanımlamaktadır. Herhangi bir temel sınıf belirtmeden tanımlanan bir sınıf, bilinçsizce Object sınıfından türer. 
Kalıtıma başvurmak için şu iki sebepten birisi olmalı : (1) Var olan bir tipe yeni fonksiyonellikler eklenmek istendiğinde. (2)Birbiriyle ilişkili sınıfların birçok ortak üyesi bulunması durumunda . Kalıtımın uygulandığı yerde, bir temel sınıftan türeyen sınıflar, bütün temel sınıf üyelerini miras alırlar.
.NET Framework içerisinde örnek vermek gerekirse System.Windows.Forms.Control sınıfı, kendi yazacağımız bir windows kontrolünün ve System.Windows.Forms.Button, System.Windows.Forms.TextBox gibi var olan windows kontrollerinin temel sınıfı olarak kullanılmaktadır. 
Altı çizilmesi gereken bir diğer ayrıntı ise şudur: Kalıtım, kapsüllemeyi korur. Dolayısıyla türeyen sınıflar, temel sınıfın private erişim belirleyicisine sahip üyelerine erişemezler. 
Temel sınıflar (base classes) hakkında konuşmak gerekirse C#’da, bir sınıf direk olarak sadece tek bir temel sınıfa sahip olabilir. Dolayısıyla tek bir tipin, birden fazla temel sınıfının olması mümkün değildir. Buna karşın C#, bir sınıfın istenilen sayıda arayüzü (interface) uygulamasına izin vermektedir. Yani C#’da çoklu kalıtım (multiple inheritance) ancak arayüzler (interface) ile sağlanabilir.


Çok Biçimlilik (Polymorphism)
Nesne yönelimli programlamanın son prensibi, çok biçimlilik (polymorphism) olarak adlandırılır ve şu soruya cevap verir: Türeyen sınıflar, temel sınıfta yer alan bir üyeyi nasıl farklı şekillerde uygulayacaklardır? Çok biçimlilik, temel sınıfta yer alan bir üyenin (metot, özellik, indeksleyici ya da olay), türeyen sınıf tarafından nasıl değiştirileceğine dair bir yol sunmaktadır. Bu yoldan ilerlemek için öncelikle virtual ve override anahtar kelimelerinin çalışma mekanizmalarının anlaşılması gerekmektedir.
Bir temel sınıf, tanımlayacağı üyenin uygulanışının -yani içerisindeki kodların-, kendisinden türeyen sınıflar tarafından değiştirilebilmesini istiyorsa bu üye virtual anahtar kelimesi ile işaretlenmelidir. 
Türeyen bir sınıf, virtual anahtar kelimesi ile işaretlenmiş bir üyenin uygulanışını kendi sınıfına ait bir iş mantığıyla değiştirmek isteyebilir; ancak zorunda değildir. Üyenin başına override anahtar kelimesi yazılarak yeniden kodlanması ile böyle bir değişiklik mümkün olmaktadır. Ayrıca ezilen (overriden) her üye, ihtiyaç duyulması halinde temel sınıfta yer alan uygulanışı yeniden çağırmakta serbesttir: Kod içerisinde istenen herhangi bir yerde temel sınıfın bir üyesi base anahtar kelimesi ile çağrılabilir.

PHP ile gelistirilmis Turkce Takvim Uygulamasi

 Merhabalar, 

Uzun zamandir belki de php ciktigindan beri asp ile karsilasitirilmis, ustun yonleri
zayif yonleri bulunmaya calisilmistir hep.

Bana kalirsa php'nin asp'den en ustun yanlarindan biri bircok seyin sizin
insiyatifinize birakilmis olmasi.
Php, her turlu uygulamayi gelistirmekte temel olarak kullanabilecegimiz fonksiyonlari
hizmetimize sunmus, bizeyse bunlari uygun bir sekilde harmanlayip
uygulama gelistirme imkanini tanimis. Dedigim gibi en onemli ustunluklerinden biri
de bu bana kalirsa.

Ornegimizde de inceleyecegimiz takvim uygulamasi asp.net' te surukle birak islemiyle
cok bir kisa surede yapilabiliyor fakat phpdeki gibi her satirina sizin yon
verdiginiz bir uygulama yazma imkani tanimiyor bu sebep nedeniyle. Hersey standart,
kaliplasmis sizin takvime mudahele edip kendinizce birseyler eklemeniz oldukca guc.
Phpde yazdigimiz bu takvim uygulamasinda ekleyeceginiz iki satir kod ile ajandanizi
olusturabilirsiniz mesela.

Bunun yaninda bu belirttiklerimin sadece benim goruslerim oldugunu Asp.net' inde
kendine gore ustun yonlerinin oldugunu belirtmek isterim. php, asp.net, jsp, cfm vs.
bunlar arasindaki secimi yapmak tamamen uygulama gelistiriciye ve tabi ki kosullara
bagli.

Simdi uygulama icinde gecen mktime fonksiyonunun islevine kisaca deginelim:

mktime : Bu fonksiyon date fonksiyonuyla birlikte kullanilarak ilerideki tarihlerde
yada gecmis tarihlerdeki degerlere ulasma imkani tanir.

Genel Kullanimi:

//bu sekilde bir kullanimla belirtilen ileri

veya gecmis tarihle ilgili ayin kac gun cektigini dondurur.


date("t",mktime(0,0,0,month,day,year))

seklindedir.

mktime () fonksiyonunun islevini uygulama icerisinde daha iyi gorecegiz.


Türk-php de bulunan  Örnek uygulama,
Program Kodlari : (Renklendirilmis)

http://www.turk-php.com/ornekler/takvim_uygulamasi/kodgoster.php?Yol=index.php

http://www.turk-php.com/ornekler/takvim_uygulamasi/kodgoster.php?Yol=style.css

Programin Calisan Hali:

http://www.turk-php.com/ornekler/takvim_uygulamasi/index.php

Tum Dosyalar:

http://www.turk-php.com/ornekler/takvim_uygulamasi/takvim_uygulamasi.zip

Not:

Turkce karekterlerin duzgun cikmasi icin etiketinden once asagidaki iki satiri index.php
dosyasi icinde ekleyiniz:

Nasıl Açık Kaynak Kod Yazılımcısı Olunur?

Bu yazının amacı çeşitli programlama tekniklerini anlatmak değil, genelde başlangıçta göz ardı edilip daha sonra hayal kırıklıklarına ve hatta projenin başarısızlığına yol açan çeşitli faktörleri sıralamaktır.

Açık Kaynak Kod Yazılımcısı Olmak İçin Ne Gerekli?

Aslında öğrenme yeteneği, merak ve sabırdan başka hiç bir şey gerekli değil. Bir bilgisayar, üzerinde açık kaynak kod geliştirmeniz için gerekli araçlar minimum gereksinimler. Internet'e erişim bunlardan sonra gelen ikinci en önemli gereksinim. Geriye kalan teknik bilgileri (çeşitli programlama dilleri, teknikleri, işletim sistemleri vb) bilmeniz elbette faydalı olur, fakat bunları öğrenebilme imkanı da açık kaynak kodlu sistemlerin iyi taraflarından birisi.

Nereden Başlanır?

En iyi başlama yöntemi, ihtiyaç duyduğunuz bir şey olmasıdır. Bu, ne kadar ufak olursa, o kadar iyi. Çok büyük projelere başlamak, bunları tasarlamak elbette güzel, fakat özellikle başlarda yapılabilir minimumlarda gezinmek en doğrusu. Öbür türlü işin yükünü kaldıramayabilir, yarı yolda bıkıp bırakabilirsiniz. Eğer iş ve özel hayatınızda açık kaynak kodlu sistemleri (örneğin Linux) kullanıyorsanız, "şu da olsaydı" dediğiniz noktalar olmuştur. Buralardan başlamak en doğrusudur. Gerçek bir ihtiyacınıza cevap veren bir yazılım, hem sizin ilginizi uzun müddet çeker, hem de sistem analizini doğru yapma fırsatınız olur.

Kendi İhtiyacınıza Cevap Veren Bir Konu Seçin

Bir kaç sebepten dolayı açık kaynak kodlu yazılım geliştirebilirsiniz: Bir şeye ihtiyacınız vardır ve bulamazsınız, çözüm yoktur. Veya bir hobi olarak bu işle uğraşmak istersiniz. Burada zor olan şey aslında hobi olarak uğraşmak. Çünkü yazılımı geliştirmek ve daha sonra ayakta tutarak devam ettirmek uzun soluklu bir iş. Dolayısıyla gerçekten kullanacağınız, ihtiyaç duyduğunuz bir şey bulmaya gayret edin. Sizin yazıcınız Linux üzerinde desteklenmiyor olabilir. Kurban ve Ramazan Bayram'larının tarihlerini şaşırıyor ve "iki hafta önce haberim olsa da kart atma imkanım olsa" diyor olabilirsiniz. İlk Internet üzerinde kamera yayını (webcam), yazılımcıların laboratuarın öbür tarafında duran kahve makinasına kadar gidip boş bulduklarından dolayı yazılmıştı ve kahve makinasını Internet'te gösteren bir kamera düzeneği idi. Sizin ihtiyacınıza cevap verdikten sonra gerisinin önemi yok. Eğer bankacı değil iseniz, banka sistemleri ile uğraşmıyorsanız, ilk açık kaynak kodlu projeniz için Linux üzerinde bir banka sistemi yazmayı tercih etmek, %99 başarısızlıkla sonuçlanacak bir projeye başlamak demektir. Hem proje fazla büyük (bankacılık sistemleri milyonlarca satır kod içerir), hem de sizin bu projenin sistem analizini yapacak bilginiz eksiktir.

 Ama Benim Hiç Bir İhtiyacım Yok?

Emin misiniz? Muhakkak vardır, biraz düşünün. Yok sahiden aklınıza hiç bir şey gelmiyor ise, en sık kullandığınız yazılımın geliştirildiği web sitesine gidin ve yapılacak işler listesine (TODO List) bakın. Oradaki işlerden birini yapmayı deneyin. Mevcut bir yazılım üzerinde değişiklikler yapmak tecrübe kazanmak için iyi bir yoldur.

Konumu Buldum

Tebrikler. Şimdi lütfen Google, SourceForge ve Freshmeat'e gidin ve bu konudaki yazılımları arayın. Yazmak istediğiniz yazılım birileri tarafından zaten yazılmış ve yaygın kullanımda olabilir. Veya doğru başlamış ve doğru yolda (sizin gitmek istediğiniz yolda) giden bir çalışma grubu olabilir. Konunuzla ilgili bulduğunuz yazılımları gözden geçirin. İsteklerinize az değişiklik ile cevap verebiliyorsa, o projeye katılın ve yazılıma o değişiklikleri katın. Türkçe olması, ufak tefek görüntü değişiklikleri, hatta ciddi değişiklikler katkı olarak verilebilir. Bu şekilde katkılarda bulunmak sizi küçültmez. Aksine, mevcut bir yapı içerisinde ciddi katkılarda bulunmak, sıfırdan bir proje geliştirmekten çok daha kolaydır ve ilerideki projeleriniz için ciddi tecrübe edinirsiniz.

Mevcut Projelerin Hiç Biri Benim İstediğimi Yapmıyor

O zaman siz bir proje başlatacaksınız. Uzun, bir hayli yalnız ve sıkıntılı bir yoldur, ama yapılamaz bir şey değildir.

Hemen Bir Proje Kurup Gönüllü Arayayım

Bulamazsınız. Daha önce ciddi başarılara imza atmış (C dilini geliştiren yazar vb) kişiler bile sıfırdan ve planlama aşamasında ciddi bir gönüllü grubu toplayamazlar. Gönüllüler ne yapacak? Hiç beyni olmayıp çok sayıda midesi olan tek canlı komitelerdir. :-) Komite ile dizayn yapılmaz. Protokol oluşturan konsorsiyumlar bile bireysel olarak protokol örneklerini hazırlar, bu örneklerin üzerinde çalışıp hepsinin iyi taraflarını toplayarak protokolü oluştururlar. İlk başta kendiniz oturup yazılımınızı iyi kötü yazacaksınız. Herşeyi hemen yapması gerekmez, fakat en azından yapmak istediği şeylerin bir kısmını yapar hale getirin. Yapmak istediğiniz diğer şeylerin mümkün olduğuna emin olun - bazen yazılımın yapısı bazı şeyleri imkansız kılabilir. Yazılımınız en azından bir "beta" kalitesine gelsin.

Yazdım, Şimdi Ne?

Kullanıyor musunuz? Bir ihtiyacınıza cevap vermek üzere yola çıkmıştınız. İyi kötü kullanmaya başladıysanız, artık bunu bir proje haline getirmeyi düşünmeniz gerekebilir.

Proje Oluşturmak

Neden Internet'e Koyayım? Bunun çok açık seçik nedenleri yok. Eğer sizin işinize yarayan bir şey ise, başkalarının da işine yarayabilir. Bir kullanıcı kitlesi oluşturmak hem proje gelişiminde size yardımcı olacak gönüllü grubunu bulmak için, hem de yazılımınız hakkında hata raporları gibi sizin tek başınıza kullanışınızda bulmanız zor olan şeyleri bulmakta işinize yarayabilir. Daha önce faydalandığınız açık kaynak kodlu yazılımlara bir karşılık olarak bunu kullanıcılara sunmak isteyebilirsiniz. Belli bir miktar "şan şöhret" kazanabilirsiniz.

Bir Lisans Seçtiniz Mi?

Yazılımınızı dış dünyaya sunduğunuz zaman hangi lisans altında sunacağınıza karar vermeniz gerekli. Benim tavsiyem GPL. Bir yazılımı GPL altında nasıl yayınlayacağınız hakkında İngilizce bilgi burada mevcut. Kısaca, yazılımın her dosyasına bir telif hakkı ibaresi, ve bu yazılımın GPL altında yayınlandığına dair bir iki paragraf koymanız ve GPL'i paketinizin içerisine ayrı bir dosya halinde koymanız gerekli. Bunlar İngilizce olmak zorunda. Yani her dosyanıza: /* Copyright 2002 Adım Soyadım This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ şeklinde bir telif hakkı ve lisans bildirim ibaresi eklemeniz gerekli. Ayrıca, GPL'in orjinal metnini yazılımınızın içerisine ayrı bir dosya olarak koymanız gerekli. GPL'in Türkçe çevirisini okumak isteyebilirsiniz, fakat bağlayıcı olan İngilizce metindir, yazılımlarınız içerisine İngilizce metni koymanız gereklidir. Bu işlemleri yaptığınız zaman yazılımınız için telif hakkı almış ve yazılımınızın dağıtımını GPL'in koruması altına sokmuş olursunuz.

Yazılımınız Derlenebilir mi?

Yazılımınızı rahatça derlenip kurulabilecek hale getirin. Kimse sizin yazılımınızı derlemek için gereken seksen adımı yapmaz. ./configure ; make ; make install en fazla bekleyebileceğiniz işlemdir. Bunları nasıl yapacağınızı bilmiyorsanız, autoconf ve make paketleri hakkında bir şeyler öğrenin. Eğer yazılımınızı yaygın dağıtımlardan birinin paket sistemi (RPM, apt vb) şeklinde dağıtabiliyorsanız, bunu tercih edin. Eğer yazılımınız derlenmeyen bir dilde yazılmış ise - perl, PHP vb, yine de uygun ve anlaşılır bir kurma yöntemi olmalıdır. Genelde paketlerin içinden README (benioku) ve INSTALL (kurma) dosyaları çıkar, bu dosyalarda paketin ne olduğu, ne iş yaptığı, nasıl kurulacağı hakkında bilgiler bulunur.

Yazılımınıza Sürüm Numarası Verin

Bunu ilk başta yapın ki, daha sonra sorun olmasın. Yazılımınıza ilk başta 0.1 veya 0.9 (ne kadar kullanılabilir vaziyette Internet'e çıkarıyorsanız) vermek faydalıdır. Oturmuş olan ilk sürüm 1.0 olur, ufak tefek değişiklikler noktadan sonra olur. Yani 1.2, 1. sürümden yapı olarak çok farklı değil, ufak tefek değişiklikler içeriyor manasına gelir. 10 yıllık Linux çekirdeğinin 2. sürümde olduğunu düşünerek sürüm numaralarınızda fazla bol keseden davranmayın..

Web Siteniz var mı?

Yazılımınızı başkalarının kullanmasını istiyorsunuz. Bunu sağlamanın ilk adımı yazılımınızın Internet'te bir sayfası olmasını sağlamak. Yazılımınızın Internet'te kendine ait bir sayfası olmaması için hiç bir neden yok. Sourceforge veya Savannah'ta bir proje açmak size bir web sitesi de sağlar ve maliyeti sıfırdır. Üstelik, ihtiyaç duyacağınız e-posta listesi, CVS sunucusu, FTP sunucusu gibi hizmetleri de veriyorlar. Veya Türk kaynaklı gruplardan yardım alabilirsiniz: Linux Kullanıcıları Derneği, AçıkKod Org gibi gruplar Türk açık kaynak kod projelerine yardım ediyorlar. Size de bir web sitesi ve ihtiyaç duyduğunuz diğer imkanları sağlayabilirler. Temasa geçin. Eğer tamamen kendinize ait olmasını istiyorsanız, Internet'te bir alan adını kaydettirmenin maliyeti yaklaşık 35 USD, web hizmetlerini bir yıllık kiralamanın bedeli ucuzunda yıllık 36 USD'dir. Geocities vb gibi bol miktarda reklam barındıran ve esas olarak kişisel web siteleri için hazırlanan bedava hizmetleri kullanmayın. Proje bağlamında olacak olan indirme (download) trafiği bu siteler tarafından hoş karşılanan bir şey değil. Size web hizmeti ve hatta daha fazlasını bedava verecek olan bir sürü grup var Internet'te, onlarla temasa geçin. Web sitenizin süslü püslü olması, arka planında kullanıcı girişleri, chat sunucusu vb olması gerekmiyor. Kolay okunabilir, sade, amaca yönelik bir web sitesine ihtiyacınız var. Amacınız ise, bir şekilde buraya ulaşan bir potansiyel kullanıcıya sizin yazılımınızın onun derdine nasıl deva olacağını anlatmak. Bu amaca yönelik olarak web sitenizde yazılımınızın ne iş yaptığını, eğer başka paket/yazılımlara gereksinim duyuyorsa bunların ne olduğunu anlatmalısınız. Eğer çeşitli standartlar, protokoller ile uyumlu iseniz bunlardan bahsetmelisiniz. Çoğu yazılım web sitesi, kendi konusundaki diğer alternatif yazılımlar hakkında da bilgi ve link verir. Yazılımınızı indirmeleri için kolayca anlaşılır bir link vermelisiniz.

 Bir Posta Listeniz Var Mı?

Yazılımınızı kullananlar için ilk başta bir tek e-posta listesi açın. Buranın fazla suskun/sessiz olmasına aldırış etmeyin. İkide birde "madem kullanıyorsunuz, insan bir haber verir yahu" tarzında e-posta atmayın. Yazılımınızın yeni bir sürümü çıktığı zaman web sitenize yerleştirdikten sonra buraya bir duyuru geçin. Kullanıcılardan gelen soruları cevaplayın. Yazılımda değişiklik taleplerini en azından okuyun. Bu değişiklik taleplerinin hepsini hemen yapmak zorunda değilsiniz, fakat kullanıcılarınızın ne istediğini bilmek, yazılımın nasıl şekilleneceğine karar vermek için faydalıdır. İleride posta listelerinizi çoğaltabilir ve anonslar (yeni sürüm vb anonslar), kullanıcı listesi (yeteri kadar popüler bir yazılım olursa, kullanıcılar birbirlerine yardım ederler, bırakın etsinler), ve geliştirme listesi (gönüllüleriniz) olarak ayrı listelere bölünebilirsiniz. Baştan bunları uygulamak listelerin hiç birisinin hayata geçmemesine sebep olabilir. Trafik çok artıp insanlar farklı listeler talep edene kadar tek listede kalın.

Yazılımınızı Duyurun

Bir web sitesi hazırladınız, bir posta listesi açtınız. Şimdi yazılımınızı duyurmalısınız. Eğer konu ile ilgili bir newsgroup var ise oraya bir duyuru yapın. Freshmeat'e duyurun. Linux Kullanıcılar Derneği'nin web sitesine bir haber yollayın. Türk Linux Listesi'ne yazın. Eğer benzer yazılımlar için Google'da bir kategori var ise, o kategoriye DMOZ'dan ekleme yapın. Eğer yazılımınız KDE veya GNOME kullanan bir grafik yazılımı ise, onlara duyurun. Yeteri kadar yaygınlaşırsa, KDE veya GNOME'un "desteklenen" yazılımlarından biri haline gelebilirsiniz. Yazılımınız her derde deva bile olsa, kullanıcılar varlığını bilmez ise kullanamazlar. Bunların

Hepsini Yaptım ve Bir Şey Olmuyor

Bu işler zaman alır. Genelde bir yazılımın kullanıcı kitlesine yayılmaya başlaması neredeyse bir yıl sürüyor. Yani siz yukarıdaki adımları yapıp duyurduktan bir yıl kadar sonra geniş kitle tarafından "bu işi yapan bir yazılım vardı" diye bilinmeye başlar. Yazılımınız yaklaşık 2-3 bin defa indirildikten sonra bir iki tane gönüllü yardımsever çıkar ve "şurasına şunu ekledim, kabul eder misiniz" diye sorar. Hemen gönüllülerin oluşup heykelinizin bir meydana dikilmesini beklemeyin. Siz bu güne kadar kullandığınız yazılımların kaçına gönüllü olarak bir katkıda bulundunuz? Bir veya iki yıl kadar bir süre yazılımınızın bütün geliştirmesini yalnız başınıza siz yapacaksınız. Bu zaman zarfında yavaş yavaş bir iki kişi ortaya çıkar. Bunlar genelde projenize destek olayım diye ortaya çıkmaz, hata bildirir. Siz bu hatayı çözersiniz. Daha sonra bir hata daha bildirir, çözümünü beraberinde yollar. Siz bunu eklersiniz. Yavaş yavaş aranızda bir ilişki oluşur. Bu ilişki zaman içerisinde "gel beraber geliştirelim"e gidebilir. Sabırlı olun.

 Sıkıldığınız Zaman Devredin

Yazılımınız sizin bir ihtiyacınıza cevap vermek için hayata başlamış idi. Bir gün bu ihtiyacınızın üzerinde yeteri kadar uğraştığınızı düşünebilirsiniz. O ihtiyacınız kalmamış olabilir. Eğer yeteri kadar paylaşımcı davranmış iseniz, gönüllüleriniz arasında yazılımı sizin kadar bilen, sizin güvendiğiniz birileri olacaktır. Kendisi ile temasa geçin ve yazılımınızın proje liderliğini devredin. İlginizi kaybettiğinizden dolayı ölmesine müsaade etmeyin. Bugüne kadarki çabalarınız, sizin bireysel emeğinizden doğan bir şeyin yaygınlaşması ve kendi başına bir hayat kazanmasını sağlamak için idi. Bu hayatın devam etmesini sağlayın. Bırakın, sizden daha iyi yapan birisi çıkarsa, o devam ettirsin.

Visual Studio 2008 ve Sql server kurulum problemi

Sql Server Kurulumunda Management Studio ve Sql Profiller gibi araçların kurulmaması gibi bir problem oluyor genelde.

Bunun Sebebi Visual Studio 2008 i SqlServer 2005 den önce kurduğunuzda sqlserver sunucu olarak bilgisayarınıza kurulmuş olsada beraberinde gelen bileşenler kurulmuyor. Bunun İçin önce Sql server kurup daha sonra Visual Studio kurmalıyız.

İntroduction to the c# Programming Language

Yeni bir Söylenti Midori . Peki nedir bu Midori?

Son günlerde basında çıkan birçok haber oldu Midori hakkında, bu konuda bana da çok soru geldiği için blogum üzerinde bir açıklama yapmak istedim. Microsoft her zaman hayatı kolaylaştıracak yeni ve yenilikçi teknolojiler üzerinde çalışmaktadır, bunlardan biri olan Midori de Microsoft’un kuluçka projelerinden birisidir. Teknik stratejilerden sorumlu başkan Eric Rudder tarafından liderliği yürütülen bu proje Windows Vista’dan sonraki işletim sistemi değildir; Microsoft olarak son zamanlarda özellikle vurguladığımız gibi şuanki odağımız tamamen Windows Vista’dır. Tabiki Windows Vista lansmanından sonraki 3 yıl içerisinde yeni işletim sistemimiz olan ve üzerinde yoğun bir şekilde çalıştığımız Windows 7 piyasaya çıkacaktır. Sonuç olarak Midori, Microsoft içerisinde yürütülen binlerce kuluçka projesinden sadece birisidir ve Windows artık olmayacak şeklinde çıkan haberler doğruluk niteliği taşımamaktadır.

Alıntı: (Mehmet Nuri Çankaya)www.nuricankaya.com  8/7/2008 Tarihli yazısı.