failed to query a list of database names from the sql server. invalid object name ‘sysdatabases’

September 2nd, 2010 Jamshid Hashimi No comments

Asp.net bir proje üzerine uğraşırken başıma gelen bir sorunun çözümünü bulduktan sonra buraya da not düşmek istedim. hani olurda birilerinin başına gelir diye…

şimdi, Visual studio command prompt tan aspnet_regsql komutunu çalıştırdığınızda, bütün işlemleri düzgün yapmanıza rağmen, son aşamada başlık olarak verdiğim hatayı alıyorsanız : “failed to query a list of database names from the sql server. invalid object name ‘sysdatabases’”  ve  Ayni zamanda, Visual studioda, projenizi açtıktan sonra , Website -> Asp.net configuration ve oradanda “Güvenlik” sekmesini tıkladığınızda ; hatalarla karşılaşıyorsanız, aşağıdaki çözüm size ilaç gibi gelecektir :)

Bütün bunların aşabilmek için, komut satırında tek bir satırlık kod yazmanız yeterlidir. (Next next next and finish olayları burada pek işe yaramıyor malesef).

Bunun için Visual studio command prompt u açıyoruz ve aşağıdaki kodları çalıştırıyoruz:

aspnet_regsql -S (local)\SQLEXPRESS -E -A all -d MyDatabase

MyDatabase kısmını, şayet yeni bir veritabanı üzerinde bu işlemi gerçekleştirecekseniz, kendinize göre bir ad verebilirsiniz. yada, mevcüt bir veritabanı adı ile de ayni işlem yapabilirsiniz.

Kolay Gelsin:)

SQL Server 2008 – İşlemler, Özellikler ve Tanımlar

August 28th, 2010 Jamshid Hashimi No comments

SQL, verileri yönetmek ve tasarlamak için kullanılan bir veritabanı yönetim sistemidir. SQL, kendisi bir programlama dili olmamasına rağmen birçok kişi tarafından programlama dili olarak bilinir. SQL herhangi bir veri tabanı ortamında kullanılan bir alt dildir. SQL ile yalnızca veri tabanı üzerinde işlem yapılabilir. SQL’e özgü cümleler kullanarak veri tabanına kayıt eklenebilir, olan kayıtlar değiştirilebilir, silinebilir ve bu kayıtlardan listeler oluşturulabilir.

SQL Server bir ilişkisel veritabanı yönetim sistemidir (RDBMS: Relational database management system). SQL Server:

• Veri işleme ve analiz için saklanan veri yığınlarını yönetebilir.
• Client uygulamalarından gelen isteklere cevap verebilir.
• SQL Server ve clientlar arasında veri göndermek için T-Sql (Transact SQL), XML, MDX veya SQL-DMO kullanabilir.

SQL Server Windows Server 2008, Windows Vista, Windows 2003 Server, Windows XP Professional, Windows 2000 Server, Windows 2000 Professional, Windows NT 4.0 sistemleri üzerinde çalıştırılabilen istemci/sunucu (client/server) tabanlı bir ilişkisel veritabanı yönetim sistemidir.

SQL Server 2008 veritabanlarının grafiksel arayüzden yönetimi ve SQL Server 2008 ile Transact-SQL kodları geliştirmek için SQL server 2008 Management studio’yu kullaniyoruz.


SQL Server Management studio yu açtığımızda karşımıza Connect To Server ekranı gelir. Buradaki öğeleri tanıtacak olursak:

Server Type:  Bağlanmak istediğiniz SQL Servis tipini seçebilirsiniz. Biz SQL Server veritabanı sistemine bağlanacağımız için, Database Engine bileşenini seçiyoruz.

Server Name:  Bağlanacağınız SQL Server Instance adı yazılır. SQL Server kurulumunda SQL Server kurulumunu yaparken Default Instance seçeneğini seçtiyseniz, SQL Server kurulu bilgisayarın adı otomatik gelecektir veya kendiniz de yazabilirsiniz, ya da Browse seçeneği ile gelen pencereden de server adını seçebilirsiniz.

Authentication : SQL Server bağlantısını yaparken kullanacağınız kimlik doğrulama yöntemi seçilir. Burada sahip olduğunuz SQL hesabına göre ilgili kimlik doğrulama yöntemini seçmeniz gerekir. 

Bilgileri girdikten sonra, connect diyoruz ve karşımıza Management studio ekranı gelir.

Hazır ekranımız açıkken biraz veritabanı işlemlerine göz atalım, ne dersiniz :)

Veritabanı Oluşturmak

SQL Management Studio içerisinde Databases öğesi üzerinde sağ tuş -> New Database ile oluşturulur.

Gelen ekranda Database Name kısmına veritabanı adını veriyoruz. Owner kısmında veritabanın sahibi olacak kişi atanabilir. Default olarak veritabanıyı açan kişi veritabanı sahibidir. Hemen altında Database Files kısmında veritabanı ve log dosyası otomatik olarak oluşacaktır. Burada Initial Size : Başlangıç boyutunu belirlemek için ve Autogrowth: Büyüme oranı ve maksimum dosya boyutu değelerini ayarlayabilirsiniz.

Autogrowth yanındaki üç nokta butonuna tıklanınca yukarıdaki şekilde görülen görünecektir. Burada Enable Autogrowth ile veritabanı dosyasının Initial Size boyutu dolduğunda otomatik olarak dosyanın kendi kendini büyütmesi aktifleştirilir. File Growth kısmından bu büyümenin yüzde olarak mı (In Percent) yoksa MB olarak mı (In Megabytes) olacağı belirlenir. Maximum File Size ile de veritabanı dosyası için maksimum boyut belirlenir. Herhangi bir maksimum dosya boyutu limit uygulamayacaksanız, şekilde de olduğu gibi Unrestricted File Growth seçilir. Otomatik büyüme ayarlarını Log dosyası için de ayrıca benzer şekilde yapılabilir.

Path sütununda veritabanı ya da log dosyasının depolanacağı konum belirlenir.

Options kısmından veritabanı özellikleri ayarlanabilir. Veritabanı ayarlarını, veritabanını oluşturduktan sonrada üzerine sağ tıklayıp-> Properties den ulaşabilirsiniz.

Oluşan veritabanını silmek için, veritabanı üzerinde sağ tuşa basılıp Delete seçeneğine tıklanır.

Oluşan veritabanının adını Management Studio içerisinden artık değiştirebiliyoruz. (Bu SQL 2000 de mümkün değildi.) Bunun için veritabanı üzerinde sağ tuş Rename ile gerçekleştirilebilir.

T-SQL

SQL Server üzerinde bulunan belli işlemleri gerçekleştirmek için oluşturulmuş ve derlenmiş T-SQL ifadelerdir. Standart SQL ’de döngü ifadeleri, şart ifadeleri gibi programlanabilme özelliğine sahip terimler yoktur. Fakat T-SQL  gibi özelleştirilmiş araçlar bu özellikler mevcuttur. Bu yapılar veritabanında ilk çalıştıklarında derlenirler ve sonraki kullanımlarında bir daha derlenmedikleri için hızlı çalışırlar ve performanıs artırırlar.

T-SQL de çalıştıracağımız komutlar 3 kategoriye ayrılırlar:

-Data Manipulation Language(DML) – Veri düzenleme ile ilgili işlemleri yapabileceğimiz komutları içerir.
   DML Komutlar:

•Select – Veri/Verileri seçmek
•Insert – Yeni veri eklemek
•Delete – Var olan veriyi silmek
•Update – Var olan veriyi güncellemek

-Data Definition Language(DDL) – Verilerin saklandığı yapıların (tabloların) tanımlandığı ve düzenlendiği komutları içerir.
   DDL Komutlar:

Create – Yeni bir Veritabanı(Database), Tablo(Table), İndeks(Index), Veri Tipi(Type), View(View), Stored Procedure-Saklı Yordam(Procedure), Fonksiyon(Function), Trigger-Tetikleyici(Trigger) vb. gibi oluşturabileceğimiz komuttur.
Alter – Daha önce oluşturulmuş bir veritabanı nesnesinin(database objects) üzerinde değişiklik yapmamızı sağlayacak komuttur.
Drop - Daha önce oluşturulmuş veritabanı nesnesini kaldırmak için kullanılan komuttur.

-Data Control Language(DCL) – Verilere ulaşırken, kimin-neye yetkisi olduğunu belirlemekte kullanılacak komutları içerir.
   DCL Komutlar:

Grant - Yetki vermek için kullandığımız komuttur.
Deny – Kullanıcı, grup veya rolü bir eylem için engeller.
Revoke – Belirtilmiş olan yetkiyi ya da engeli kaldırır.

Transact-SQL İle Veritabanı Oluşturmak


DETAYLİ BİLGİLERLE VERİTABANİ OLUŞTURMAK

 


VERITABANI HAKKINDA BILGI ALMAK

exec ifadesi execute’in kısaltılması. sp ise store procedure (saklı yordam)kısaltılması. Tek komutla toplu işlemler yapılabilir bu sayede. sp_helpdb ise kendinden sonra belirtilen veritabanı hakkında bilgi görüntüler:


Veritabanları hakkında bilgi alabilmek için, hakkında bilgi almak istediğimiz herhangi bir veritabanını seçtikten sonra, aşağıdaki komutla bilgi edinebiliriz. Veritabanının mevcüt olup olmadığı ile ilgili ve buna ek olarak bazı diğer bilgiler (Resimde görebilirsiniz).


VERİTABANI DOSYASININ ÖZELLİĞİNİ DEĞİŞTİRMEK



T-SQL komutlarıyla birçok işlem yapabilir, ve işlerimizi komutlarla sadeleştirebiliriz. Basit bir örnekle şu şekilde göstereyim: Eğer Jamshid adlı veritabanı varsa, silecek ve yerine JamshidH adına bir veritabanı oluşturduktan sonra, silindi mesajından sonra bilgileri ekrana gösterecek.


Aşağıdaki komutlarıda ayni şekilde uygulayabilirsiniz:

VERİTABANI DOSYASININ ÖZELLİĞİNİ DEĞİŞTİRMEK

ALTER DATABASE Jamshid
MODIFY FILE (NAME=’Jamshid_DATA’, MAXSIZE=500MB) –Jamshid_DATA dosyasının maksimum dosya boyutunu 500 MB olarak ayarlar

VERİTABANI ADINI DEĞİŞTİRMEK

exec sp_renamedb ’Jamshid’,’JamshidH’ –Jamshid isimli veritabanı adını JamshidH olarak değiştirir

VERİTABANINDA KULLANILMAYAN ALANLARIN BOŞALTILARAK DOSYA BOYUTUNUN DÜŞÜRÜLMESİ

Dbcc shrinkdatabase (Jamshid,10)  –maya2005 veritabanını %10 küçültür.
VERI FİLTRELEME

Verilerinizi Where ifadesinden sonra kullanacağınız bazı koşullar ile filtreleyebilirsiniz. Bu koşullar şunlardır;

• Karşılaştırma operatörleri =, >, <, >=, <=, <>
• String karşılaştırmalar LIKE ve NOT LIKE
• Lojik operatörler AND, OR
• Lojik operatörler (Negatif) NOT
• Değer aralıkları BETWEEN ve NOT BETWEEN
• Değer listeleri IN ve NOT IN
• Bilinmeyen değerler IS NULL ve IS NOT NULL

Bunları bazılarını detaylıca inceleyim:

STRİNG KARŞILAŞTIRMALARIN KULLANIMI

% 0 veya daha fazla karakterli string
_ tek bir karakter
[] belirtilenler arasından tek bir karakter
[^] belirtilenler arasında olmayan tek bir karakter
Bu wildcarların LIKE ile kullanım örnekleri aşağıdaki gibidir;
LIKE ‘BR%’ BR ile başlayan tüm isimler
LIKE ‘Br%’ Br ile başlayan tüm isimler. Büyük küçük harf farkı
LIKE ‘%een’ een ile biten tüm isimler
LIKE ‘%en%’ en karakterlerini içeren tüm isimler
LIKE ‘_en’ en ile biten tüm 3 karakterli isimler
LIKE ‘[CK]%’ C veya K ile başlayan tüm isimler
LIKE ‘[S-V]ing’ Tüm 4 karakterli ve ilk karakteri S ile V arasında olan ve ing ile biten tüm isimler
LIKE ‘M[^c]%’M ile başlayan ve ikinci karakteri c olmayan tüm isimler

ÖRN : SELECT companyname FROM customers
WHERE companyname LIKE ’%Restaurant%’

DEĞER ARALIKLARI

BETWEEN ifadesini Where ile beraber kullanarak belli bir değer aralığındaki kayıtları getirebiliriz. Between ifadesi ile belirlenen aralık dışında kalan verileri almak için NOT BETWEEN kullanabiliriz.

ÖRN:

SELECT productname, unitprice
FROM products
WHERE unitprice BETWEEN 10 AND 20

DEĞER LİSTELERİ

Verilen bir liste içerisinde yer alan veya almayan değerleri içeren kayıtları getirir. Listede yer alanları aramak için IN, yer almayanları aramak için NOT IN ifadelerini kullanırız. Birden fazla koşulu OR ile de ayırabiliriz veya IN ile bir liste içerisinde arayabiliriz. İkisinide SQL aynı şekilde çözümler.

ÖRN :

SELECT companyname, country
FROM suppliers
WHERE country IN (’Japan’,’Italy’)

SYSTEM VERİTABANLARI

1- Master: SQL Server ile alakalı server – level bilgileri tutar.
2- Model: Model DB si SQL Server da yeni oluşturulacak DB lerin template idir. Msdb üzerinde database size,collation,recovery model gibi bilgiler değiştirilerek yeni oluşturulan her DB nin bu bilgiler ile oluşturulması sağlanabilir.
3- Tempdb: TempDB temporary objeleri tutar.
4- Msdb: SQL Server Agent tarafından kullanılan bu db; alert ve job lar ile ilgili bilgileri tutar.
5- Resource: SQL Server sistem objelerini tutan Resource DB bir read-only DB dir. Sistem objeleri fiziksel olarak resource db de tutulurken mantıksal olarak her DB nin içerisinde gösterilir.

İpucu : Management studioda T-SQL olarak Query ekraninda birçok kod yazdınız. Bu kodların arasından o anda sadece bir kısmının çalıştırmasını istiyorsunuz; bunun için o kısmı seçili hale getirdikten sonra F5 yaptıktan sonra sadece o kısmı çalıştırmış olursunuz.

VIEW

View; kısaca depolanmış query denilebilir.
View kullanımının Faydaları

1) Performans
2) Column Level Security
3) Database complexitysini düşürür
4) Network trafiğini engeller

STORED PROCEDURES

Transact-SQL (T-SQL) Stored Procedure, Microsoft SQL Server üzerinde barındırılan, T-SQL komutları ile hazırladığınız işlemler bütününün çalıştırılma anında derlenmesi ile size bir sonuç üreten SQL Server bileşenidir.

Storeprocedure ler default olarak geriye int deger donerler . Storeprocedure içerisinden metinsel bir deger dondurmek istersek bunu output ifadesi ile procedure umuze belirtmeliyiz.

Yazılan stored procedure lerin çalışması ve sonuç döndürmesi için geçilen aşamalar şunlardır:

Parse : syntax hatası var mı yok mu kontrolu
Resolve : Sorgu içerisinde alanlar yani kolonlarım var mı yok mu kontrolu
Optimize : Sorgumuz en hızlı sekilde nasıl calısır .
Complite  : Kodumuzun derlenmesi
Execution : İlgili kod calısır .

TRANSACTION

Transaction, özet olarak daha küçük parçalara ayrılamayan işlem demektir. Özellike bir grup işlemin arka arkaya gerçekleşiyor olmasına rağmen, seri işlemler halinde ele alınması gerktiğinde kullanılır. Transaction bloğu içerisindeki işlemlerin tamamı gerçekleşinceye kadar hepsi gerçekleşmemiş varsayılır.

SQL Server 3 farklı transaction desteği sağlar:

1. Harici(Explicit) Transaction: SQL Server’in kullanıcı tarafından bir BEGIN TRAN ifadesi ile transaction’a başlatılması şeklindeki bloktur. Bir aksilik olması halinde SQL Server tarafından veya kullanıcı tarafından COMMIT ifadesi ile gerçekleşmiş olarak veya ROLLBACK ifadesi ile hiç olmamış olarak sonlandırlabilir.

2.Dahili(Implict) Transaction: SQL Server’in belli ifadelerden sonra otomatik olarak transaction açmasını sağlar. Bu modda, bu belli ifadeler kullanıldıktan sonra, kullanıcı tarafından transaction’ın sonlandırılması gerekir. Bu nedenle zahmetli bir mod’dur.

3.Auto Commit: Hiç bir transaction mod’u tayin edilmedi ise, SQL Server bu modda çalışır. Auto Commit modunda iken, her bir batch(yığın, Query Analyzer için iki go arasındaki ifade veya bir defada çalıştırılan bütün SQL ifadeleri) bir transaction bloğu olarak ele alınır. Batch içerisinde bir sorun olursa, SQL Server otomatik olarak bütün batch’i  geri alır(ROLLBACK eder).

SQL SERVER DATA REPLICATION (VERİ YİNELEME)

SQL Server’in sürekli kullanılabilirlik için desteklediği işlemlerden biri de replication modelidir. Replication kısaca verileri merkezi konumdan alıp farklı konumlarda yedekleme işlemidir.

Replikasyon Türleri

Snapshot Replication:  Static replication olarak ta bilinen Snapshot Replication en basit replikasyon türü olup her defasında kaynak veritanındaki tüm verileri bağlı abonelere toplu olarak yükler. Snapshot replication’da daha önce abonelere hangi verilerin gönderildiğine bakılmaz. Bütün verilerinin taşıması söz konusu olduğu için ve şayet verilerinin boyutu büyükse zaman ve kaynak maliyetine sebep olabilmektedir.

Transactional Replication: Dynamic replication olarak ta bilinen bu yöntem Snapshot Replication’tan farklı olarak incremental modele sahiptir yani sadece son yapılmış replikasyon işleminden bu yana gerçekleşmiş değişiklikleri üye veritabanlarına adım adım yansıtır. Bunu da merkezi veritabanındaki log dosyasını dinleyerek gerçekleştirir. Değişiklikler üyelere gerçek zamanlı gönderilebildiği gibi belli peryotlarda da gönderilebilir. Bu yöntem çok yoğun transaction işlemlerinin yapıldığı sistemlerde tercih edilir.

Merge Replication: Transactional Replication gibi incremental özelliğe sahip olan bu yöntem çift yönlü bir replikasyon sunar yani hem publisher tarafındaki değişikliği subscriber’a yansıtır hem de subscriber tarafındaki değişikliği publisher’a yansıtır.  Transactional’dan farklı olarak bir veri üzerindeki tüm değişiklikleri değil sadece son değişikliği karşı tarafa gönderir. Örneğin bir kayıt üzerinde 5 kere düzenleme yapıldıysa Transactional Replication’da bu 5 günceleme de karşı tarafa yansıtılır fakat Merge Replication’da sadece son güncelleme gönderilir.

FONKSİYONLAR

Sql fonksiyonları, kullanımı ve yararlığı nedeninden ötürü önem arz etmekte ve yaygın olarak kullanılmaktadır.
Örnek yapacak olursak :

CREATE FUNCTION whichContinent
(@Country nvarchar(15))
RETURNS varchar(30)
AS
BEGIN
declare @Return varchar(30)
select @return = case @Country
when ’Argentina’ then ’South America’
when ’Belgium’ then ’Europe’
when ’Brazil’ then ’South America’
when ’Canada’ then ’North America’
when ’Denmark’ then ’Europe’
when ’Finland’ then ’Europe’
when ’France’ then ’Europe’
else ’Unknown’
end

return @return
end
fonksiyonumuzu yazdık. Şimdi çalıştıralım :
print dbo.WhichContinent(’USA’)

SQL SERVER YEDEKLEME

1) Full Backup (Tam yedekleme) : Veri tabanının o andaki tüm yedeğinin alındığı yedekleme şeklidir. Bu yedekleme türünden geri dönmek için tüm backup dosyasını restore etmemiz yeterlidir. Fulll backup alındığı zaman o anda onaylanmamış transactionlar da yedeklenir.

2) Differential Backup (Fark yedeği) : En son alınmış olan full backuptan bu yana değişmiş kayıtların alındığı yedekleme şeklidir. Bu yedekleme türünü kullanabilmek için daha önce bir full backup almış olmak gerekir. Differential backup yöntemi, full backup yöntemine göre daha hızlı ve kısa sürede gerçekleştiği için daha çok büyük veri tabanlarında tercih edilir. Bu yedekleme türünden geri dönmek için öncelikle ilk başta alınmış full backup restore edilir ardından alınmış differential backup restore edilir. Differential backup yönteminde full backup’tan sonra bir nesne üzerinde birçok kez değişiklik yapılmışsa differential backup, o nesnenin son değerini içerir.

3) Transaction Log Backup (İşlem günlüğü yedekleme) : Veri tabanındaki tüm değişiklikleri yedeklemek için kullanılır. Bu yedekleme türünü de kullanmak için daha önce en azından bir kere full backup alınmış olması gerekir. Transaction Log backup yönteminin en önemli özelliği belli bir andaki değişikliğe geri dönülmesini desteklemesidir. “BACKUP LOG” komutu kullanılır.

MSSQL TRIGGER & KULLANIMI

Tanım : Tablo üzerinde yapılan insert, update ve delete işlemleri öncesinde veya sonrasında ek işlemler yapmamıza olanak sağlayan (Aynı veya başka bir tabloya kayıt eklemek, kayıt silmek gibi) veya yapılan işlemi (insert, update, delete) kontrol etmemize duruma göre işlemi iptal etmemize yarayan özel stored prosedürleri trigger olarak tanımlayabiliriz.
Triggerlar çalışma şekli açısından transaction ile benzerlik gösterir.

Herhangi bir tablo üzerine trigger tanımladığımız zaman tabloya gönderilen komutlar (insert, update, delete) işletilmeden önce bir transaction başlar. Daha sonra tabloya gönderilen komut işletilir. Üçüncü olarak trigger içerisine yazdığımız komutlar çalıştırılır. Son olarak yapılan işlem geçerli ise transaction commit olur, işlem geçersiz bulunursa RollBack Transaction ile yapılan işlemler iptal edilir.

Bir sonraki makalede görüşmek üzere :)

Windows Server 2008 R2

August 28th, 2010 Jamshid Hashimi No comments

Windows Server 2008 R2 Yenilikleri

Kullanıcıya özel iş zekası hizmetleri: Kullanıcılar kendi PC’lerinde, veri merkezinde veya bulut ortamındaki kurumsal bilgiyi bir değere dönüştürme konusunda daha esnek davranabiliyorlar.  SQL Server 2008 R2 self servis iş zekası yetkinliği ile profesyonel veritabanı kullanıcıları ile son kullanıcılar arasındaki mesafeyi ortadan kaldırıyor.

Microsoft Excel 2010 ve Microsoft SharePoint Server 2010, bu yeni sürümün sunduğu avantajları kurum genelinde yaygınlaştırırken, kullanıcılar yeni PowerPivot iş zekası teknolojisi ile geniş veri setlerinden ürettikleri anlamlı bilgi kümesini istedikleri ortama veya rapora taşıyabiliyor, kendi iş zekası çözümlerini kolaylıkla hayata geçirebiliyorlar.

Ölçeklenebilirlik ve BT verimliliğine doping: Güvenli ve kolay yönetimi ile veri merkezlerine yüksek verimlilik sunan Microsoft SQL Server 2008 R2, kesintisiz ve yüksek performanslı iş uygulamalarının yoğunlukta olduğu bilgi işlem ortamları için tasarlanmıştır. Endüstri standartlarına sahip en gelişmiş donanımlar üzerinde yapılan son testlerde SQL Server 2008 R2 yüksek başarı oranıyla dikkat çekiyor.

Kurumlar artık Windows Server 2008 R2 üzerinde çalışan SQL Server 2008 R2 Datacenter sürümü ile 256 adet mantıksal işlemciye kadar genişleyebilen sistemlerde Hyper-V sanallaştırması ve Live Migration teknolojilerini kullanarak kendi sanal veri merkezlerini oluşturabilecekler. Her iki sürüm Microsoft müşterilerine kesintisiz çalışma, sanallaştırma ve konsolidasyon hedeflerine uygun olarak özel Bulut altyapılarına geçme fırsatı sunuyor.

Hedef, işlem yoğunluklu uygulamalar:  Microsoft kurumsal bilgi platformu Microsoft SQL Server 2008 R2 iki önemli bileşeni ile klasik ilişkisel veritabanı işlevlerinin çok ötesinde yeni bir dünyanın kapılarını aralıyor. SQL Server 2008 R2 – Master Data Services farklı işletim platformlarında ve ortamlarında saklanan kurumsal bilgiler arasında tutarlılığı garantilerken, SQL Server 2008 R2 – StreamInsight ise veri hareketi yani işlem yoğunluklu uygulamalar için yüksek ölçekleme sunuyor. Böylece Microsoft SQL Server 2008 R2, RFID sistemlerden, çeşitli algılayıcılardan veya finans işlemleri gibi sürekli veri işleyen uygulamalardan kaynaklanan veri akışını (datastreaming) gerçek zamanlı kullanma olanağı sunuyor.

SQL Server StreamInsight teknolojisi, kurumunuzun birikmiş ve yoğun veri madenciliği verilerini anında değerlendiren uygulamalara destek veriyor. Master Data Services ise kurum genelinde dağıtık sistemlerde bulunan kritik verilere standart bir görünüm sağlarken veri kaynaklarının merkezi yönetimini önemli ölçüde kolaylaştırıyor.

Server Manager: İçerdiği yeni işlevlere ek olarak Windows Server 2008, Windows Server 2003’ün üzerine temel işletim sistemine yönelik olarak güçlü iyileştirmeler sağlıyor. Göze çarpan iyileştirmeler arasında ağ kurma, gelişmiş güvenlik özellikleri, uzak uygulama erişimi, merkezi sunucu rolü yönetimi, performans ve güvenilirlik izleme araçları, yük devretme kümelendirmesi, dağıtım ve dosya sistemindeki yenilikler yer alıyor.

PowerShell 2.0: Windows Server 2008 R2 PowerShell 2.0 , mevcut komut dosyalarınızı taşımanızı gerektirmez .Yeni  yönetim odaklı komut dili ile tutarlı söz dizimi ve hizmet programları yoluyla Windows PowerShell, Active Directory, Terminal Server ve Internet Information Server (IIS) 7.0 gibi sistem yönetimi görevlerinin otomasyonunu hızlandırır ve sistem yönetimi sorunlarını bulmasını kolaylaştırır.

Windows PowerShell, programlamada bir arka plan gerektirmez ve mevcut BT altyapınızla, mevcut komut dosyalarınızla ve mevcut komut satırı araçlarınızla birlikte çalışır. Bilinen komut satırı uygulamasının gelişmiş hali olup, daha esnek bir yapıdadır.

Server Core: Arkaplanda çalışacak servislerin çalışımı ve denetimini kontrol eder.

Ipv6 desteği: Ipv6 desteği ile 128 bitlik adres desteği gelmiştir. Header genişliği , audio ve video desteğide Ipv6 ile gelen yenilikler arasındadır.

IIS 7.5: Windows Server 2008 R2 işletim sistemiyle beraber IIS 7.5 versiyonu da yayınlandı. Artık Windows PowerShell Provider for IIS kullanarak IIS ile ilgili yönetimsel  görevleri ve IIS konfigürasyonu yapmak mümkün.

IIS 7.5 ile yeni gelen Configuration Logging özelliği ile gelişmiş IIS değişiklikleri ve uygulama konfigürasyonu denetimi yapmak, böylece test ve üretim ortamındaki konfigürasyon değişikliklerini izleyebilmek mümkün kılınıyor. Bu özellik sayesinde hem okuma hem yazmaları, logon girişimlerini ve dosya oluşturma işlemlerini loglayabilmek mümkün.

Her IIS 7.5 application pool’u artık tek ve daha az haklara sahip kimliklerle çalışacak. Bu özellik sayesinde de uygulamaların ve servislerin güvenlik özelliklerini sıkılaştırmak mümkün olacak.

Hyper-V: Windows Server 2008 R2 Hyper-V, Windows Server 2008’in bir rolü olarak dahil edilmiş hypervisor tabanlı bir sanallaştırma özelliğidir. Bilgisayar sanallaştırmasını desteklemek üzere gerekebilecek her yeteneğe sahiptir. Hyper-V, BT kurumlarının giderleri düşürmesine, sunucu kullanımını geliştirmesine ve daha dinamik bir BT altyapısı oluşturulmasına olanak sağlamasına yardımcı olmaktadır.

Windows Server 2008 R2 – Teknoloji Yatırım Alanları
Tek başına kullanıldığında Hyper-V ile sunucu sanallaştırması gerçekleştirilirken, Virtual Desktop Infrastructure (VDI) ile beraber kullanıldığında hem sunucu hem istemci bilgisayar sanallaştırması gerçekleştirilebilmekte.

Sanallaştirma

Uzak bağlantı servisinin RemoteApp’siyle sağlanan Presentation Virtualization teknolojisiyle de proseslerin I/O ve grafiklerden izole edilmesi ve bir uygulamanın bir lokasyondan çalıştırılıp başka bir lokasyondan kontrol edilmesi mümkün. Bu yeni işletim sistemiyle sanal datacenter’lar için güvenliğin en önemli parametrelerinden olan sürekliliğin arttırılması ve iyileştirilmesi planlanmış. Windows Server 2008 R2 ile birlikte gelen Hyper-V’deki geliştirilmiş Live Migration özelliğiyle, herhangi bir hizmetin çalışması kesilmeksizin sanal bir makinayı başka bir sanal makinaya aktarmak mümkün.

Hyper-V 2.0

Yukarıdada bahsedildiği gibi Windows Server 2008 R2 Hyper-V, Windows Server 2008’in bir rolü olarak dahil edilmiş hypervisor tabanlı bir sanallaştırma özelliğidir. Bilgisayar sanallaştırmasını desteklemek üzere gerekebilecek her yeteneğe sahiptir. Hyper-V, BT kurumlarının giderleri düşürmesine, sunucu kullanımını geliştirmesine ve daha dinamik bir BT altyapısı oluşturulmasına olanak sağlamasına yardımcı olmaktadır.

Windows Server 2008 R2 ile birlikte Hyper-V özellikleri aşağıdaki gibidir:

Yeni ve gelişmiş mimari: 64-bit micro-kernelized hypervisor mimarisi Hyper-V’nin geniş bir aygıt destek yöntemi yelpazesi, gelişmiş performans ve güvenlik sunmasını sağlamış

Yaygın İşletim Sistemi desteği: 32-bit ve 64-bit Windows ve Linux gibi farklı sunucu platformlarında farklı işletim sistemlerinin eş zamanlı çalışabilmesi 

SMP desteği: Sanal aygıt içerisinde çoklu kullanım uygulamalarından bütünüyle kullanılması için 4 çoklu işlemciye kadar (SMP) destek sağlaması

Bellek desteği: Sanal aygıt başına geniş bellek ataması desteği artık iş yüklerinin büyük bir bölümünü sanallaştırmanıza olanak tanıması

Gelişmiş depolama erişimi: Doğrudan disk erişimi, SAN dahili disk erişimi için geniş destek ile birlikte, Hyper-V, depolama ortamlarını yapılandırılması.

Ağ yükü dengelemesi: Hyper-V yeni sanal aktarma yetenekleri içerir. Bu yüklemeyi diğer sunucular üzerindeki sanal aygıtlar arasındaki yükü dengelemek üzere sanal aygıtların Windows Ağ Yükleme Dengeleme (NLB) Servisi ile birlikte çalışması için kolaylık getirilmesi.

Yeni donanım paylaşma mimarisi: Yeni sanal hizmet sağlayıcısı/ sanal hizmet kullanıcısı (VSP/VSC) mimarisi ile , Hyper-V disk, ağ oluşturma, video vb. gibi temel kaynaklara daha kolay erişilmesini sağlaması

Hızlı geçiş: Hyper-V, Windows Server ve System Center yönetim araçlarının yüksek erişilebilirlikteki yeteneklerini kullanarak, kullandığınız sanal aygıtın fiziksel bir ana bilgisayar sisteminden bir diğerine en az hata süresi

Linux entegrasyonu bileşenleri: Beta Linux entegrasyonu bileşenleri, SUSE Linux Enterprise Server 10 SP1 x86 ve x64 sürümleri için kullanılabilmesi ve Bu entegrasyon bileşenleri, Xen-enabled Linux’un VSP/VSC mimarinin avantajlarından faydalanmasına olanak tanıması, böylece gelişmiş bir performans sunması

Sanal aygıt bellek kopyası: Hyper-V R2 ile, önceki hale geri dönebilmeniz, genel yedekleme ve geri yükleme çözümünü geliştirebilmeniz için çalışmakta olan bir sanal aygıtın bellek kopyalarını alma yeteneğinin getirilmesi

Ölçeklenebilirlik: Sanal aygıtlar içerisinde host seviyesinde birden fazla işlemci ve çekirdek için sağladığı destek ve geliştirilmiş bellek erişimi ile verilen bir host dahilinde daha fazla sayıda sanal
aygıtı desteklemek için sanallaştırma ortamınızı dikey olarak ölçeklendirebilir; birden fazla host üzerinde ölçeklenirlik için hızlı geçişi geliştirmeyi sürdürebilmesi

Geliştirilebilir: Standart tabanlı Windows Management Instrumentation (WMI) arabirimleri ve Hyper-V içerisindeki API’ler bağımsız yazılım sağlayıcıları ve geliştiricilerinin hızla özel araçlar, hizmetler ve sanallaştırma platformu için desteklemeler oluşturmalarına olanak tanımış.
System Center Virtual Machine Manager için Hyper-V de Hazır Proje Planları ve içerdiği yeni Performans ve Kaynak Optimizasyon desteği ile sorun yaratan cluster sunucu üzerine daha etkin yönetilmesi sağlanmış.

Faydalar:

• Ağ bağlantıları düşmez
• Kritik iş yükleri için süreklilik sağlar
• Esnek yönetim özellikleri sunar
• Dinamik BT ortamları oluşturur

Kolaylaştırılmış ve  Daha Etkin Server Yönetimi

İçerdiği yeni işlevlere ek olarak Windows Server 2008, Windows Server 2003’ün üzerine temel işletim sistemine yönelik olarak güçlü iyileştirmeler sağlıyor. Göze çarpan iyileştirmeler arasında ağ kurma, gelişmiş güvenlik özellikleri, uzak uygulama erişimi, merkezi sunucu rolü yönetimi, performans ve güvenilirlik izleme araçları, yük devretme kümelendirmesi, dağıtım ve dosya sistemindeki yenilikler yer alıyor.

Bu alanlarda kaydedilen aşamalar ve iyileştirmeler sayesinde kurumlar sunucuları üzerindeki esnekliği, kullanılabilirliği ve kontrolü maksimum seviyeye çıkarma yanı sıra yönetimin daha basitleştirilmiş olması IT Operasyonları için büyük avantaj  ve zaman kazandırmakta.

• Geliştirilmiş DataCenter Güç tüketimi ve yönetimi uygulanabilirliği, erken teşhis
• Geliştirilmiş Uzak yönetim ve Uzaktan Yüklenebilme işlemleri için Merkezi  Sunucu Yöneticisini barındırması
• Yenileştirilmiş Güncelleştirilmiş Kimlik Yönetimi özellikleği ve basitleştirilmiş Active Directory Domain Servisi ve Active Directory Federated Services

Geliştirilmiş  Best Practices Anaylzer

Windows Server 2008 R2 ile gelen Best Practises Analyzer aracı, performans sorunlarını ve yapılandırma ayarlarını incelemek için kullanabilirsiniz.

BPA aracı aynı Exchange Best Practices Analyzer aracı gibi çalışarak sunucunuz üzerindeki DNS, disk üzerindeki dosyalar, sistem kayıt defteri, WMI class’ları, yönetimsel COM objelerinden verileri toplayarak otomatik olarak belirli testleri gerçekleştirir ve kritik yapılandırma hataları, potansiyel sorunlar ve sunucunuz hakkında ayrıntılı bir rapor sunar.
Windows Server 2008 R2  Best Practises Analyzer aracı ile daha güçlü ve daha hızlı sorun çözme yeteneğine kavuşmuştur.

Güç Yönetimi

Windows Server 2008 genel mimarisinde güç kullanım özellikleri çok sayıda çekirdekle az miktarda güç kullanımı hedeflenmiş. Üzerinde bulunan Core Parkuru sayesinde sistemde yoğun işlem olmadığı zamanlarda sunucu üzerinde bulunan çekirdekleri optimize ederek kullanıyor ve diğer kullanım dışı cekirdek işlemciler ise PowerSaving konumunda bekleyerek güç tüketimi açısından maliyet düşürücü bir özellik sağlıyor.
Windows Server 2008 R2’da Group Policy içerisinde bulunan Power Management Console(Güç Yönetim Konsolu)  ile Active Directory yapısına bağlı bulunan tüm Client PC’leri ve bağlı sunucularınızı merkezi olarak kontrol edebilmenize olanak sağlıyor.

Kolay Sanallaştirma Yönetimi• Hyper-V Manager
• PowerShell komut satırı
• System Center Virtual Machine Manager 2008 R2

Windows 7 ile daha iyi

• DirectAccess özelliği sayesinde basitleştirilmiş uzak bağlantı
• Presentation Virtualization özelliğini kullanarak daha güvenli uzak bağlantı
• BranchCache özelliği sayesinde uzak ofisler için iyileştirilmiş performans
• Agile VPN özelliği sayesinde siteler arası daha yüksek hata toleranslı bağlantılar
• Bitlocker To Go şifreleme özelliği sayesinde çıkarılabilir sürücüler için geliştirilmiş koruma
• Offline Folders özelliği sayesinde mobil kullanıcılar için geliştirilmiş veri kaybı engellemesi

Not: Bu makale, Staj yaptığım Microsoft Yaz Okulunda, Muammer Benzeş tarafından verilen “Windows Server 2008 R2″ adlı eğitimden alınan notların araştırılması sonucu hazırlanmıştır.

Kaynaklar:
muammerbenzes.com
mshowto.org
omerkaradeniz.com

Visual Studio 2010 Klavye kısayolları

August 27th, 2010 Jamshid Hashimi No comments

Visual studio yu sürekli kullananların mutlaka çıktısını alıp, kod yazarken görebilecekleri bir yerlerde bulundurmaları gereken bir sayfa.

Visual studio 2010 klavye kisayollari
Posteri bu linkten indirebilirsiniz:  click.

Agile(Çevik) Modelleme ve Çevik Yazılım Geliştirme

August 23rd, 2010 Jamshid Hashimi No comments

Çevik modelleme (agile methods, yazılım sistemlerini etkili ve verimli bir şekilde modellemeye ve dokümantasyonunu yapmaya yönelik pratiğe dayalı yöntemlere verilen genel addır. Yazılım geliştirme amacıyla üretilen bu modelleme biçimi, kapsadığı değerler, prensipler ve pratikler sayesinde geleneksel modellemelere metotlarına göre yazılımlara daha esnek  ve kullanışlı biçimde uygulanabilir.

Çevik modellemenin başlıca özelliği veri modelleri ve ara yüzü modelleri gibi modelleme tekniklerinin neler olduğunu ve bunların ayrıntılarını söylemek yerine bu tekniklerin nasıl uygulanması gerektiğini söylemesidir. Mesela; yapılan projelerin test edilmesi gerektiğini belirtse bile nasıl test hazırlanacağına değinmemesi gibi. O sadece bir yöntemler biçimidir ve bir projenin etkili,hızlı bir şekilde ortaya çıkarılmasında, müşterinin ihtiyaçlarını karşılamasında ve aynı zamanda da her türlü değişikliğe kolayca adapte olabilmesinde geliştiricilere yol gösterir.

Ayrıca  Hızlı bir geliştirme sürecine sahip, kaliteli ürünlerin ortaya çıkması için uygulanan bir geliştirme yöntemidir. Agile geliştirme yöntemlerinde en önemli sonuç kriteri müşteri memnuniyetidir. Asıl amaç müşteriyi memnun eden bir ürün ortaya koyabilmektir. Ortaya çıkan ürünün çalışan ve müşterinin ihtiyaçlarını tam olarak karşılayabilen bir ürün olması en temel amaçlardan biridir.

Hangi Durumlarda Kullanılabilir?

Bu metotların kullanılmasının en uygun olduğu durumlar şunlardır:

•Projenin yazılım evresinde müşteriden gelebilecek talep değişikliklerinin tahmin edilemez olması

•Projenin parçalarının önce tasarlanıp ardından hemen geliştirilmesinin gerekmesi ve önceden ne yapılacağını, detaylı yol haritasını ve tasarımını tahmin etmenin çok güç olması

•Analiz, tasarım ve test etme süreçlerinin ne kadar zaman alacağının önceden bilinememesi

•Yazılım ekibinin birlikte çalışmak, hiyerarşiye önem vermemek, sağlam iletişim kurmak gibi özelliklere sahip olması

Elbette bazı durumlarda çevik programlamadan vazgeçilmesi gerekebilir. Örneğin; çok kişinin dahil olduğu projelerde çevik metotlar ile proje geliştirmek mümkün olmayabilir ya da aynı yerde bulunmayan takım arkadaşları ve hiyerarşik yapının her an hakim olduğu şirket ortamlarında klasik yöntemler daha uygun olabilir. Zaten, düşünülenin aksine, bu metotları kullanarak programlama ve modelleme yapılmasını öneren insanlar bu gibi durumlarda klasik yöntemlerin kullanılmasına karşı değildir.

Çevik programlama metotlarının özellikleri:

Çevik metotlar tam bir yazılım süreci değildir ama kapsamlı yazılım geliştirme yöntemlerini tamamlayıcı niteliktedir. Başlıca çevik süreç modelleri:

•Sınırsal programlama(Extreme Programming-XP)
•Çevik Birleştirilmiş Süreç (Agile Unified Process)
•Scrum
•Test Güdümlü Geliştirme (Test-driven Development)
•Çevik bilgi Metodu (Agile Data Method)
•Özellik güdümlü geliştirme (Feature-Driven Programming)


Çevik (Agile) Programlama Süreci

Çevik yazılım geliştirme, takım çalışmasını desteleyen liderlik vasıflarını, sorumluluk alabilme ve kendi kendini organize edebilme özelliklerini ve nitelikli ve yeterince hızlı yazılım geliştirmeye yarayan mühendislik uygulamalarını destekleyen proje yönetim sürecini kapsar. Bu yönetim süreci hem müşteri taleplerini hem de şirket amaçlarını düzenleyerek olumlu  bir geliştirme ortamı ve yaklaşım sunar.

Çevik modelleme işleri kısa vadeli planlar ve küçük gelişmeler halinde yapmayı uygun görür. Kısa vadeli planlar yineleme (iteration) olarak bilinir. Her yineleme sürecinde belli bir takım yazılım ya da modelle üzerinde çalışır ve bu süreç planlama, talep analizi, tasarım, kodlama, birim testi ve kabul testi gibi süreçleri kapsar. Yineleme süreci değişikliklere uyum sağlamayı kolaylaştırırken genel riski de azaltır. Tek bir yineleme bir ürünü piyasaya sürmek için ona yeterli işlevsellik katmayabilir ancak amaç her yineleme sonunda en az sorunla çalışan mevcut bir sürüm elde edebilmektir. Bir ürünü sürüm olarak piyasaya sürmek ve yeni özellikler eklemek için birden çok yineleme gerekir.

Çevik programlama ve modellemede dokümantasyon da yapılır. Ancak dokümantasyon ürünün kullanılabilirliği ve verimliliğinin önüne geçmez. Aksine dokümantasyon sadece gerekli görülen yerlerde yapılır. IBM ’de çalışan ve aynı zamanda da “Effective Practices for Modeling and Documentation” kitabının yazarı olan scott ambler’e göre; geliştiricilerin tahtada yazıp çizdikleri modeller uzun uzadıya yazılan dokümanlardan daha kullanışlıdır ve insanların aylarca dokümantasyon yapmasının önlenmesi gerekmektedir.

Çevik projedeki takım yapısı çoğunlukla iş değişimine dayanan ve kendi kendini organize eden bir yapıdır. Firma içindeki hiyerarşik durumlar takım içinde göz ardı edilir ve çalışmalar bu şekilde yürütülür.
Bir çok projeden insanlar daha ilerideki işler için önceden çalışmaya başlarlar. Örneğin; gelecekte yapılacak işler için karmaşık altyapılar geliştirmek ve modelleme yapmak. Bu durum çok büyük bir zaman kaybına yok açar ki, taleplerde bir değişiklik olması durumunda bu çalışan insanlara fazladan emek ve iş gücü olarak geri döner. Çevik modeller ihtiyaç olmadan herhangi bir şeyin yapılmasına ve boşa zaman kaybedilmesine karşıdır.

Proje aşamasında test süreci, önemli bir yer kaplar. Tüm testlerin son ana bırakılması yanlış anlaşılmaların projeyi çok farklı yerlere götürmesine sebep olabilir. Henüz yapım aşamasındayken, yapılan kısmı farklı kişilerin test edip geri bildirimde bulunması, bu açıdan hayati bir süreçtir. Bu sayede yanlış henüz yeni yapılmışken tespit edilip ortadan kaldırılır. Çevik programlama ve modelleme geliştiricilerin her an yan yana bulunarak bu iletişimde olmasını ve aynı zamanda da müşteri ile iletişim içinde bulunmasını öngörerek bu sorunu aşar. Kabul testleri ise müşteri tarafından en son aşamada yapılacak testlerdir. Burada geri dönülen hatalar yeniden modellemeye aktarılabilir. Çevik modellemede en son yapılan değişiklikler bile olumlu karşılanır.

Agile Yazılım Geliştirme’de, takım çalışması,güven,iletişim gibi insanlar ile olan etkileşim çok önemli. Sürekli bilgi alışverişi ve beyin fırtınalarına dayanan bir geliştirme süreçi olduğundan bu kavramların bilincinde olmak geliştirme sürecine artılar katabiliyor. Geliştirme sırasında ya da öncesindeki analiz kısımlarında sürekli yüz yüze bir iletişim ile gereksinim ve ihtiyaçların sürekli üzerinden geçilmesi daha sağlıklı sonuca ulaşmak için kaçınılmaz ihtiyaç.

Agile yazılım geliştirme süreçlerinde her zaman çalışan bir yazılım aranan bir kavram. Zaten soyut kavramlardan oluşan yazılım dünyası, bu dünyaya uzak olan müşteri için pek bir şey ifade etmeyecektir. Bu yüzden bazı şeyleri biraz daha somutlaştırmak adına çalışan bir yazılım her zaman aranan bir kavramdır. Uygulamaların nasıl çalışacağına ya da ne yapacağına dair uzun ve karışık dökümanlardan çok müşteriye çalışan bir uygulama göstermek her zaman daha faydalı olacaktır.

Agile’ın altını çizdiği bir başka husus da müşteri ilişikileri.Belli bir sözleşme yerine sürekli müşteri ile işbirlik halinde olunmasının daha faydalı olacağı manifestoda söylenen diğer bir şey. Müşterinin ihtiyaçlarını sürekli sorgulamak ve işi onunla beraber yapmak ortaya çıkacak ürünün kalitesi adına önemli bir nokta. Bu noktada, ihtiyaçların sürekli sorgulanmasından dolayı da ortaya çıkacak değişiklik taleplerine de açık olmak gerekmekte.Bu değişikliklerin yönetilmesi sayesinde ürünlerin canlılığı ve tam olarak ihtiyaca uygun olması sağlanabiliniyor.

Tarihçe

Uygulanabilir bir yazılım geliştirme süreci ilk önce 1974 te Edmonds tarafından kaleme alınmıştır. Bundan sonra daha çok yeni bir yöntem olan çevik yazılım geliştirme ve modelleme 1990ların ortasında diğer (“heavyweight”) zor uygulanan, aşırı kuralcı waterfall model tipi geliştirmeye tepki olarak ortaya çıkmıştır.  Bu tip bir gelişim modelinin usta yazılım geliştiricileri için fazlasıyla bürokratik, yavaş ve tutarsız olduğu düşünülmüştür. Bunun üzerine bu süreci hızlandırıp kolaylaştıracak çevik metotlar  hafif metotlar -“lightweight methods” olarak ortaya çıkmıştır. Daha sonra 2001’de, yazılımın önde gelen isimleri Snowbird Utah’ta buluşarak bu metotlara çevik metotlar -“agile mehtods” – ismini vermişlerdir. Aynı kişiler “Agile Alliance” diye kar amacı gütmeyen ve bu sistemin gelişmesine destek veren bir organizasyon kurmuşlardır.
En önemli çevik programlama süreçleri Clear, Exreme Programming (XP-1996), uyarlanabilir yazılım geliştirme, özellik bazlı gelişim ve DSDM’dir (1995). Bunlar çevik  yöntembilimleri olarak 2001’de yayınlanan Çevik Yazılım Yaklaşımı Manifestosu’nu yayımlamışladır.

Çevik program geliştirme alanındaki önde gelen 17 isim 2001 yılında Snowbird, Utah’ta buluşarak bir yazılımı nasıl daha hızlı, basit ve insan merkezli yaratabileceklerini tartışmışlar ve sonucunda imzaladıkları manifesto ile  bu süreci anlatmışlardır. Bu manifestoyu imzalayanlar Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James Grenning, Jim Highsmith, Andrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert C. Martin, Steve Mellor, Ken Schwaber, Jeff Sutherland, Dave Thomas’tır.

Bundan sonra 2005 yılında ise Alistair Cockburn ve Jim Highsmith yönetim uzmanlarını toplayarak bu manifestoya bir ek yazmıştır. PM Decleration of Interdependence adı verilen bu manifesto 6 madde ile Çevik Yazılım Yaklaşımı Manifestosu’nu günümüze daha iyi uyarlanabilir hale getirmişlerdir.

Çevik Metotların Prensipleri:

Yukarıda isimleri geçen topluluk, manifestoda,  nasıl daha iyi bir yazılım geliştirdiklerini ve bunu yapmak isteyenlere yol gösterecek maddeler listelemişlerdir. Genel olarak kabul edilen yöntem 4 maddede sıralanabilir:

•Bireyler ve onlar arasındaki etkileşimi süreç ve araca tercih etmek
•Çalışan bir yazılımı detaylı bir dokümantasyona tercih etmek
•Müşteri ile işbirliğini, anlaşma görüşmelerine tercih etmek
•Değişikliklere istenildiği anda cevap verebilmeyi sınırları belirli bir plana tercih etmek


Agile manifestosunun ardındaki başlıca ilkeler ise:

•Hızlı, devamlı ve kullanışlı yazılım üreterek müşteri memnuniyeti sağlamak amaçlardandır.
•Çalışan yazılım gelişimin en önemli ölçüsüdür.
•Taleplerdeki geç değişikliklerin de memnuniyetle karşılanır.
•Yüz yüze görüşme iletişimin en güzel yoludur.
•Geliştiriciler ile iş adamları arasında günlük ve yakın işbirliği bulunmalıdır
•Basitlik önemlidir. (Yada sadellik güzelliktir)
•Kendi kendini organize eden takım yapısı gereklidir.

Çevik Metotların Diğer Metotlardan Farkı:

Çevik metotlar bazen planlı ve disiplinli olmaması ile eleştirilse de bu doğru değildir. Açıklamak gerekirse; bir projenin ortaya çıkarılmasında 2 tip metot kullanılabilir. Biri uyarlanabilir olan, bir diğeri de tahmin edilebilir olandır.  Değişime tepki verebilecek şekilde tasarlanmıştır. Mesela, projenin gereksinimleri değişirse, projenin takımı da bu değişikliğe ayak uydurur ve değişir. Bu takım bize 1 hafta sonra hangi işlerin yapılacağını söyleyebilir ancak 1 ay sonra ne yapacaklarını belirtemez. Yani  projede planlanan tarih ne kadar uzaksa o tarihte yapılacak işler de bir o kadar belirsizdir. Tahmin edilebilir olan metotların takımları projenin tamamlanma süresi içindeki tüm değişikliklerin ve gelişmelerin tarihini önceden bilir, bu plan çerçevesinde iş yapar. Değişiklik olduğunda tüm plan iptal olur ve yeni bir program yapılır. Yeni programda ise sadece en önemli olan değişikler seçilip projeye dahil edilir. Çevik metotlar uyarlanabilir olanlara dahildir. Yani değişime açıktır ve uyarlanabilirdir. Uyarlanabilir olduğu için bu kadar net bir şekilde planlanmayan proje müşterinin isteklerine göre şekil alır ve istenilen başarıyı gösterir.

Çevik metotların bir diğer özelliği de; diğer yinelemeli geliştirme metotlarında (iterative development methods) zaman dilimi ay olarak alınırken, çevik metotlarında bu süre haftaya kadar düşer. Bu kısa süre içinde küçük ilerlemeler şeklinde ve her adımda müşteriden geri bildirim alınarak yazılım ortaya çıkarılır.

Günümüzde kullanılan bir diğer model de Waterfall modelidir. Waterfall modeli 2008  yılında dahi geçerliliğini koruyan bir modeldir ve çevik modellemeden farklılık gösterir. Bu model yazılım projesini baştan sona planlar. Gelişim ise  sunulabilir işler açısından ölçülür: talep açıklamaları,tasarım dokümanları, test planları, kod incelemeleri vb. Bu durum belli aralıklara bölünmeye uygun değildir ve ilerideki değişikliklere uyum gösterilemez. Ancak çevik metotlar ise her şeyi küçük parçalar halinde yapıp haftalık olarak sunar ve gerekirse o parça üzerinde gerekli değişiklikleri rahatlıkla uygular.

Cowboy coding’in çevik modellemeden farkı metottan yoksun olmasıdır. Proje takımındakiler kendilerine nasıl uygun gelirse o şekilde çalışırlar. Çevik  programlamada yüz yüze görüşme ve her an iletişimde olmak ön plandadır. Ayrıca önceden belirlenmiş kısa bir süreç içinde çalışmalar yürütülür.

Sonuç olarak; bugün yazılım ve teknoloji dünyası büyük bir hızla gelişmekte ve yeni sistemler yeni talepler ortaya çıktıkça aynı zamanda yeni modellemelere de gereksinim duyulmaktadır. Bunun en açık göstergesi ise bilişim projelerinin ortalama 1 yılda bitiriliyor olmasıdır. Artık projelerin daha etkin ve hızlı bir şekilde bitirilmesi beklenmektedir. Bu amaca yönelik olarak ortaya çıkan çevik programlama modelleri modelleme ve programlama konusunda geliştiricilere yol göstermekte ve alternatif bir model oluşturmaktadır.

Kaynaklar

http://en.wikipedia.org/wiki/Agile_Modeling

http://en.wikipedia.org/wiki/Agile_software_development

http://e-bergi.com/2008/Ekim/Cevik-Modelleme-ve-Cevik-Yazilim-Gelistirme

http://www.minepla.net/2008/10/agilecevik-yazylym-gelithtirme

Nasıl Daha İyi Kod Yazılır?

August 21st, 2010 Jamshid Hashimi No comments

Yazılım geliştirme olayını bir bütün olarak ele aldığımızda kod yazmanın çok küçük bir parçayı temsil ettiğini görüyoruz. Hataların en fazla yapıldığı ve müşteri isteklerinin programa dönüştürüldüğü geçiş süreci olduğu için de yanlış anlaşılmalara ve uygulamalara en açık bölüm. Hal böyle olunca buna bir de yazılımcının yetersiz deneyimini ve yönetimin ilgisizliğini katarsak ortaya kalitenin çok düşük olacağı bir ürün çıkacaktır. Yazılım uzmanı kullandığı programlama dilini çok iyi biliyor olabilir. Yazılımı yapılan işi de bilmek en az programlamayı bilmek kadar önemlidir. Örneğin muhasebe kurallarını bilmeden nasıl muhasebe programı yazacağız? Yada diğer sistemlerin girdi çıktılarını öğrenmeden nasıl entegre bir sistem yazacağız?

Çoğu zaman program geliştirmek; favori text editörümüzü açıp bir kaç satır kod yazmak, veritabanına iki üç tablo yerleştirmek ile başlar. Bu bazı firmalarda dahi böyle. Bu tür bir projeye devam ettiğinizi düşünelim eminim 5 ay sonra ilk yazılan kodun tek satırı dahi kalmaz. Diğer bir konuda yazılan kodun müşteri istekleri ile örtüşmesi. Örneğin yazdığınız bir fonksiyonun hangi müşteri isteği tarafından kullanıldığını biliyor musunuz?

Kitap Okuyun

Kullandığınız yazılım dili ile ilgili en az bir referans kitap bulundurmalısınız. Araştırıp en iyisini veya tavsiye edilenleri alın. Dil ile ilgili kitapların yanında insan ilişkilerini anlatan kitaplar, proje yönetimini anlatan kitaplar, süreç iyileştirme ile ilgili kitaplar, IEEE, CMMI yada ISO standart kitapları, UML ve nesne yönelimli dizayn konularını anlatan kitaplar, kullandığınız yazılım araçlarını anlatan kitaplar, güvenli kod yazmak ile ilgili kitaplar sayılabilir. Burada kitap reklamı yapmayacağım, eğer ilgileniyorsanız benimle bağlatıya geçip bilgi alabilirsiniz.

Bu kitaplardan öğreneceğiniz yöntemler yazdığınız kodun kalitesini oldukça arttıracaktır.

Listelere Üye Olun

E-posta listeleri bedava destek alabileceğiniz yerlerden bir tanesi. Çoğunlukla üretici firmalar tarafından da kontrol edilmekte. Bir listeye üye olduğunuzda muhakkak liste kurallarını öğrenin. Örneğin nasıl üye olacağınızı veya üyelikten çıkacağınız iyi bilin. Benim takıldığım listelere her gün bir kaç kişi direk listeye gönderdiği UNSUBSCRIBE e-postası ile hem kendini rezil ediyor hemde üyelikten çıkamıyor. Listede her zaman saygılı olun ve şakayı yeri gelince kullanın. Şaka yaptığınızı belirtmek içinde :-) imleçlerini kullanın ki herkes şaka yaptığınızı anlasın, aksi takdirde sonu gelmez tartışmalara girersiniz. Konu dışı bir şey soracaksanız liste kurallarına göre postayı işaretleyin. Örneğin benim üye olduğum bir listede OT harflerini konu kısmında görünce konu dışı olduğunu anlıyorum. Liste üyeleri e-maıl programlarında bu başlıklara göre kurallar oluşturabiliyor.

Sorduğunuz sorular cevaplanınca teşekkür edin ve daha sonra bir özet postası atıp problemi nasıl çözdüğünüzü anlatın ki herkes yararlanabilsin. Listedeki insanlarla fırsat doğarsa tanışmaya çalışın. Listeye sormadan evvel Google’da arayın.Yüzde 95 ihtimalle sizin karşılaştığınız problem birileri tarafından zaten çözülmüştür.

Açık Kaynak Araçları Kullanmayı Öğrenin

Eskiden kod yazarken Allah ne verdiyse harala gürele yazıyorduk. Ne bir dökümantasyon ne bir ünite testi nede kurulum için herhangi bir şey yapıyorduk. Programı edinen kişilerin en az bizim kadar bildiğini varsayarak, kurulum sırasında problem yaşamayacaklarını düşünürdük. Şimdi o günler geride kaldı. Artık kod yazarken gerekli açıklama satırlarını XML olarak yazıyoruz. Daha sonra açık kaynak programlar ile bunları yardım dosyalarına dönüştürmek mümkün. Ünite testleri içinde bir sürü açık kaynak sistem var. Programı yazmadan önce testini yazıyoruz artık. Sonrada bu testlerden geçmek için kod yazıyoruz. Sonuçta ortaya çıkan ürün en azından bazı testleri yapılmış olarak çıkıyor. Kodun ne kadarının ünite testine girdiğini anlayacak araçlar da var. Testleri yapılmamış kısımları hemen görmek mümkün. Ayrıca bu işleri tamamen otomatize edip sonuçları her derleme işleminde görmekte mümkün. Belli kurallara uyulup uyulmadığını kontrol edecek araçlar da mevcut. Örneğin herkes member değişkenler için m kullanmış mı? Bu araçların bugün mevcut olması bizim için bulunmaz bir fırsat. Belli bir programlama diline yönelik yazmadığım için araç isimlerini vermiyorum fakat .NET ile ilgili araç isimlerini isterseniz benimle bağlantıya geçiniz.

Sürüm ve Konfigürasyon Yönetimi Konusunda Bilgilenin

Bir ekip içinde yazılım geliştirmenin sorumluluğu, diğer kişilerin ne yaptığını bilmekten geçer. İşlerin paylaştırılması, planların yapılması ve çalışmaya başlamak için kendi payınıza düşen kod parçasını alıp değiştirmek, ünite testlerini yapmak ve en sonunda da diğer kişilerin kullanımına açmak gerekir. Kullandığınız kod kontrol programının özelliklerini öğrenmek bir yana, proje içinde kullanılan konfigürasyon yönetimi metodunu öğrenmek te çok önemlidir. Yapılan her işin, üretilen her dökümanın kısacası zaman içinde değişime uğrayacağını bildiğiniz her türlü materyal kod kontrol sunucularında tutulmalıdır. Yazdığınız kodun eski sürümüne dönmek yada farklı sürümlerde paralel geliştirme yapmak ancak bu şekilde mümkün olabilir.

Bir Bilene Sorun

İşte herkesin korktuğu bir olay. Genelde kişiler suçlanmaktan yada küçük düşmekten korktuğu için soru sormaz. Ama soru sormadan da öğrenme olmuyor. Yazdığınız bir kodun daha iyi nasıl yazılabileceğini sordunuz mu hiç? Yada bir problemi en iyi hangi yolla çözebileceğinizi öğrenmek için soru sordunuz mu? Eğer korkularınız varsa yukarıda anlattığım e-posta listeleri sizin için biçilmiş kaftan. Kendi isminizi kullanmadan soru sorabilirsiniz. Yada patronunuzun ismine GMail’de bir hesap açıp onu kullanın Smile evet bu bir şaka…

Soru soracağınız kişileride iyi belirlemeniz lazım. En azından yeterli bilgiye sahip olup olmadıklarını anlamaya çalışın. Aldığınız bilgiyi vakit geçirmeden uygulayın ve sonuçları tekrar bir bilenle tartışın.

Seminerlere Katılın

Yeni ürünleri görmek, yeni insanlarla tanışmak, yaptığınız iş hakkında daha da fazla bilgilenmek ve sıfatınızın daha da fazla tanınması için en mükemmel yol. Peki yazdığınız kodun kalitesini nasıl arttıracak? Ben genelde hands-on denilen oturup kod yazdığımız seminerleri tercih ediyorum. Hem uygulama var hem öğrenme. Bu arada da kodu nasıl yazmışlar görme imkanımız oluyor. Eğer birinin daha iyi bir fikri varsa çıkıp söylüyor.

Ürün tanıtım seminerleri de yararlı eğer kod yazmada kullandığınız araçlar ile ilgiliyse yada üretkenliği arttıracak araçlar anlatılıyorsa. Bu araçlara erişiminiz olmayabilir fakat en azından böyle bir teknolojinin varlığından haberdarsınız.

Yeni İnsanlarla Tanışın

İnsan ilişkilerine yukarıdaki paragraflarda değindim. Yeni insanlarla tanışmak önünüze yeni ufuklar açabilir. Bu kişilerden öğreneceğiniz hiç bilmediğiniz hiç görmediğiniz yada pek önemsemediğiniz konular problemlerinize farklı bir bakış açısı katabilir. Yada siz onlara bir şeyler katabilirsiniz. Yeni insanlarla tanışmak benim hayatımda her zaman değişikliklere yol açmıştır. Ayrıca iş konuları dışında birlikte yapılacak aktiviteler çok değişik iş imkanları açabilir.

Blog Yazın/Okuyun

Deminden beri yaptığım olay… Eğer benim blogumu okuyorsanız ne mutlu bana. Bir iki yorum da atarsanız çok mutlu olurum. Şaka bir yana öğrendiğim konuları ders notları gibi başkalarına anlatmak amaçlı yazdığımda daha da pekiştiriyorum. Hatta bazen farklı yollar bile bulmak mümkün oluyor. Ek olarak iş verenler blogunuzu okuyup ne işler yaptığınızı öğrenebilir ve buna göre size teklifte bulunabilirler. Blogunuzda belli konulara yönelin ve iş hayatınızda karşılaştığınız konuları yazın. Tanıdıklarımın bir kaç blogu birden var, bir tanesi kesinlikle işleri ile ilgili konuları yazmak için diğeri ise sırf geyik olsun diye yazdıkları yada aile fertleri ile resim paylaşmak için kullandıkları blogları.

Kod yazarken çeşitli problemlerin çözümünü genelde bloglarda buluyorum. Bir kaç yazışmadan sonra kodu alıp kullanabiliyorum. Kimi zaman örnek projeler bile indirmek mümkün. Böylece yazdığım kodun kalitesi artmış oluyor.

Refactoring Nedir Öğrenin

Refactoring yazılan kodun performansının, bakımının, okunabilirliğinin ve yeniden kullanılabilirliğinin arttırılması için uygulanan bir dizi metoddan ibarettir.Örneğin tekrar eden rutinleri ayrı fonksiyonlara ayırmak, ilgili rutinleri bir sınıf altında toplamak, değişken isimlerini değiştirmek, algoritmaları daha hızlı çalışır hale getirmek vb gibi. Tüm bunları yaparkende zaten çalışan kodu bozmamak. Sonuçta işin kalitesi artmış oluyor.

İnsan İlişkilerini Sıcak Tutun

Firma içinde olsun, bağlı olduğunuz sektörde olsun; tanıştığınız insanlar ile ilişkilerinizi sıcak tutmaya çalışın. Bir gün bir probleminiz olduğunda gene onlara soracaksınız ama sadece probleminiz olduğunda bu kişilerle bağlantı kurarsanız biraz ayıp olur. Ayrıca soru sormayıda öğrenmek gerek. Örneğin benim blogumda bir kaç tane yorum var, sadece hata aldığı kısmı kopyalayıp yapıştırmış. Ne bir açıklayıcı not var nede takip ettiği adımları anlatmış. Neyse bende çıkarttım kristal küremi baktım neymiş hatası. Geriye mesaj atıp 3 vakte kadar çözeceksin dedim :-) .

Değişime ve Yenilenmeye Açık Olun

Değişik metodları ve yeni ürünleri kurmaktan, kullanmaktan çekinmeyin. Değişmeyen ve yenilenmeyen beyinler bir gün gelir sistem dışı kalırlar. Değişiklik ve yenilik her zaman iyi olmayabilir ama bunun muhakemesini yapacak olan sizlersiniz.Benim en çok karşılaştığım tipler “gündüz programcıları”. Bunlar sadece yazılım sektörü iyi maaş ödüyor diye sektöre atılmış kişilerdir. Bir iki kurstan sonra hayata atılıp kendilerini işin ehli gibiymiş gösterip ahkam keserler. Bu kişiler kullandıkları yöntemleri değiştirmek istemezler çünkü öğrenmek ve uygulamak beraberinde yeni külfetler getirecektir. Zaten bildikleri yoldan şaşmayıp işlerini zamanında bitirmeye çalışırlar. Mükemmele ulaşmak gibi bir çabaları yoktur. Refactoring deyince küfür zannederler :-)

Birde “gece programcıları” vardır. Burada anlattıklarımı yüzde 70 yapan kişiler sanırım bu kategoriye giriyorlar. Gece programcısı araştırıp öğrenmek, yenilikleri denemek için sonsuz bir istek içindedir. Mükemmelliğe ulaşana kadar her yolu dener. Sistemleri değiştirmekten kaçınmaz.

Sektörün her iki tip insana da ihtiyacı var. Biri iyidir, diğeri kötüdür diye bir yorum yapmayalım. Projelerde bazen zamanlama ön plandadır, kimi zamanda kalite. Duruma göre bu iki tip yazılım uzmanının dengeli bir karışımı kaliteli bir ürünü zamanında teslim etmenize sebep olabilir.

Firma Kültürünü Öğrenin

Firma içindeki işleyiş şemasını iyi öğrenin. Firma kurallarını iyi öğrenin. Bazı kurallar yazılı olmayabilir ve zamanla öğrenilecek kurallardır. Yazılım standartlarını, kullanılan araçları, ve ağ yapısını öğrenin. Yazdığınız kodun standartlara uyduğundan emin olun.

Kişisel Bilgisayarınıza Yazılım Araçlarını Kurun

Yazılım olayına gönül vermiş iseniz zaten bunu söylemeye gerek yok. Ama ben öyle insanlar ile çalıştım ki adam sadece firma duvarları arasında yazılım uzmanı olarak geçiyor. Evinde bir bilgisayarı dahi yok, varsa bile örütbağı amaçlı kullanıyor. Bir kişisel e-posta adresi yok. Seminerlerden, toplantılardan, etkinliklerden bi haber. Ben bu işi yapmaktan zevk alıyorsam tabii ki evimdeki bilgisayarıma gerekli araçları yüklerim. Evde de bazı projeler geliştirmek isterim. Amaç daha çok denemek, daha çok yanılmak ve bilgiyi arttırmak değil mi?

Açık Kaynak Projelere Katılın

Açık kaynak projeler size bir ekip içinde nasıl çalışacağınızı ve ne tür araçları kullanacağınız hakkında bilgi verir. Katılacağınız bir projeyi eminim Sourceforge yada başka açık kaynak proje sitelerinde bulabilirsiniz. Sonuçta yazdığınız kod başkaları tarafından kontrol edileceği için değişiklikleri takip edip en iyi nasıl yazılır öğrenebilirsiniz.

Hayal Kurun

Hayal kurmak beynimizin en üretken işlerinden biridir. Hayal kurarken problemlere yeni çözümler bulabilir veya yeni projelere başlamak için malzeme toplayabilirsiniz. Ben bir defter alıp buna aklıma gelen olası projeleri yazıyorum. Gerçi ben projeleri hayata geçirene kadar birileri benden önce yapıyor ama olsun. Bu yöntemin amacı aslında yeni projeler bulmak değil var olan projelerin belirli kısımlarının nasıl düzeltilebileceğini araştırmaktır. Örneğin bir projede şöyle bir durumla karşı karşıya kaldık. Bir dökümanın onaylanması için 3 ayrı kişinin onay vermesi gerekiyordu. 5 yıl önce programı dizayn edenler veritabanında ki Dokuman tablosunda bu 3 kişi için birer saha tanımlamış. Gel zaman git zaman, onaylama süreçleri organizasyonun yapısı ile değişmiş fakat yeni sistemi karşılayacak veritabanında yeteri kadar saha yok. Olayın çözümü basit. Ek bir tablo yaratıp onaylayacak kişileri burada tutabilir ve her döküman için istendiği kadar çok onaylayacak kişi tanımlanabilir.

Kod Teftişi

Kod teftişi başkasının yazdığı kodun gözden geçirilmesi ve aksaklıkların not edilmesidir. Proje açık kaynak ise, kodu düzeltmek te işin içine girer. Eğer firma içinde yazılım geliştiriyorsanız, kodun yazarına bir not gönderip değişmesi gereken yerleri ve nedenlerini bildirebilirsiniz. Kod teftişinin amacı var olan kodu daha iyi çalışır hale getirmek yada proje standartlarına uydurmaktır. Agile metodları ile geliştirme yapanlar Pair Programming olayını bilirler. Bu yöntemde iki kişi bilgisayarın karşısına geçer. Birisi kod yazarken diğeride yazılan koda puan verir. 10’dan başlayan bu puanlamada her hata da 1 puan düşülür. Kodlama bitince programın aldığı puana bakılır ve 10 puan almak için neler yapılabilir tartışılır. Gerekli olan düzeltmeler uygulanır.

Ofisle paralel psikoloji Süreci :)

August 19th, 2010 Jamshid Hashimi 1 comment

Yeni Eleman – Ofiste İlk Gün

Stevie Wonder dinliyorsunuz. (Ofiste İlk Gününüz, her şey yolunda ve çok güzel)

3 Ay Sonra …

HOUSE tarzı müzik dinliyorsunuz (çünkü o kadar yoğun ve meşgulsünüz ki hiçbir şeyin farkında değilsiniz)

6 Ay Sonra…

Heavy Metal dinlemeye başladınız (Mesainiz sabah 08:00’de başlayıp akşam 20:00’de bitiyor)

9 Ay Sonra…


Hip Hop dinliyorsunuz (Stres yüzünden kilo aldınız ve kabızlık sorunu yaşamaya başladınız)

Birinci Yılın Sonunda…

GANGSTA RAP dinliyorsunuz (Gözleriniz seyirmeye başladı, yataktan düşüp kafein bağımlısı olunca, ’güzel bir gün geçirmenin’ nasıl olduğunu çoktan unuttunuz!!)

Ve Nihayet, ikinci yılın sonunda…

Artık Techno dinliyorsunuz ve nasıl demeli… biraz… kafayı üşütmüşsünüz!

Categories: Personal Tags: , ,

INT vs UniqueIdentifier

August 19th, 2010 Jamshid Hashimi No comments

An identify value is an automatically incrementing integer that starts counting from a base seed value (such as 1, or 100, or 1000, whatever integer you choose), and increments by a value you specify, which is called an increment (such as 1, -1, 10, whatever integer you choose). The default seed is 1, and the default increment is 1. Because the values are never the same (they increment), an identify value often makes for a good column on which to base a primary key.

When you create an identity column in a table, you must also specify the data type as some form of integer. As you probably know, SQL Server supports several different integer types, each with different sizes (widths). They include:

Bigint 8 bytes -263 to 263-1 (SQL Server 2000 and 2005 only)
Int 4 bytes -2,147,483,648 to 2,147,483,647
Smallint 2 bytes -32,768 to 32,767
Tinyint 1 byte 0 to 255

When creating an identify column, always select the narrowest integer type that will meet your needs. If an Int will do, then don’t use Bigint, as you will just unnecessary be increasing the physical size of the index, which can hurt SQL Server’s performance.

A unique identifier column, like an identify column, is used to create unique values for each column in your table. But instead of using an incrementing value, instead it creates a unique value based on a special internal algorithm that creates what are called a Globally Unique Identifier (GUID), which is 16 bytes in size.

Right away, you should notice which unique column type — identify or unique identifier — will provide the best performance as a primary key. Because the unique identifier column will always be 16 bytes wide, it will always create a primary key index that is larger than any of the identity column options, and unless you have a special reason that is outside the scope of this question, should not be used as the basis as a primary key.

Instead, use one of the variations of the identity column, selecting the smallest one that meets your data’s needs. This way, you can ensure that index created by the primary key is as small as it can, helping to ensure overall better performance of your database, and at the same time ensuring entity integrity of your database tables.

Source : http://www.intrafusion.co.uk/blog/sql-primary-key-int-vs-uniqueidentifier

Real Programmers code in binary

August 5th, 2010 Jamshid Hashimi 1 comment

Var mı hala böyle programcılar :)

Developer Neden Fazla Mesai Yapar?

June 26th, 2010 Jamshid Hashimi No comments
  • İşe projeyi planlamak ile değil, işe direkt kod yazmakla başlıyorsa. (Bknz. guerilla coding, spaghetti coding)
  • Müşterinin gazlamasıyla gelecekte gerekli olabilecek veya hiç gerekli olmayacak modüller için fazladan kodlama yapıyorsa.
  • Her zaman her isteğe cevap verebilecek, tam donanımlı, mükkemmel bir yazılım çıkarma egosu varsa.
  • Her zaman en basit, en verimli, en hızlı çözümü sunmayı düşünmüyorsa.
  • Proje’nin ihtiyacı olan hızlı ve hatasız sistemi geliştireceğine proje için çok hayati olmayan “hata loglama sistemini” yazmaya kalkıyorsa.
  • Müşteri tarafında ne istediğini doğru anlatabilen bir partner bulamıyorsa.
  • Yazdığı programı başkalarına/müşteriye test ettirmeden, kendisi test ettikten sonra “tamam oldu release ediyorum” diyorsa.
  • Geri bildirime ve müşteri testlerine önem vermiyorsa.
  • Proje’de ki bug’ları sürekli erteleme eğilimi içindeyse.
  • Bir iş için tasarlayabileceği en basit modeli tasarlamaya çalışmıyorsa.
  • Müşterinin mantıklı ve saçma isteklerini analiz edip akıl süzgeçinden geçiremiyorsa.
  • Yanılmaktan ve yanlış yapmaktan korkuyorsa.
  • Ego’sunu sürekli sırtında taşıyorsa!
  • Yeni başlayan junior developer’dan da yeni şeyler öğrenebileceğinin farkında değilse.
  • Proje’nin nasıl işleyeceğini müşterisine en baştan öğretmiyorsa.
  • Projeyi bitirmek için sürekli kod yazmak gerektiğine inanıp, gerektiğinde dinlenmeyi  bilmiyorsa.
  • Müşteriyi projeden uzak tutmak gerektiğine inanıyorsa.
  • Müşteri tarafında ki partnerini iyi bir şekilde yönetemiyorsa.
  • Proje başlangıcında gereksinimleri belirlemeden hareket ediyorsa.
  • Proje’de özellikleri mümkün olduğu kadar ufak parçalara bölmekten kaçınıyorsa.
  • Artık teknik kararları da müşteri almaya başlamışsa.
  • Müşteriye “müşteriliğini bilmesi” gerekitğini açık ve net söylemeye çekiniyorsa.
  • İş planının ne kadar süreceğine kendisi değil, müşteri karar vermeye başlamışsa.

KAYNAK : http://www.oguzhan.info/bak.asp?513/Developer+Neden+Fazla+Mesai+Yapar%3F