2008-12-27

Bilgisayar Mühendisliği Bölümü Öğrencilerine Tavsiyeler

  • Hangi alanda çalışmak istediğinize karar verin
  • Yazılım geliştirmek istediğiniz platformu seçin
  • İhtiyacınız olan programlama dillerini ve veritabanlarını iyi öğrenin
  • Okul hayatı boyunca proje geliştirin
  • Stajlarınızı iyi şirketlerde yapın
  • Yazın muhakkak yazılım geliştiren şirketlerde ücretli/ücretsiz çalışın
  • Deneyim kazanmak için part-time çalışın.

Şimdilik benim aklıma gelenler bunlar. Yazdıklarıma eklemek isteyen arkadaşların Bilgisayar Mühendisliği bölümünde okuyan arkadaşlara katkılarını bekliyorum.

2008-11-01

NewSequentialID() ve NewID()

  • NewSequentialID() ve NewID() her ikisi de GUID oluşturur.
  • NewID() rastgele GUID oluşturur.
  • NewSequentialID() sıralı GUID oluşturur.
  • NewSequentialID() tabloda sadece default olarak kullanılabilir.
  • NewSequentialID() tahmin edilmesi daha kolaydır(sıralı gittiği için).
  • NewID() rastgele GUID oluşturduğu için güvenlik açısından daha tercih edilir.
  • Özellikle NewSequentialID() alanı clustered index içerisinde kullanılıyorsa NewID()'ye göre daha iyi performans gösterir. Çünkü NewID() rastgele GUID oluşturduğu için her seferinde yeni oluşturulan kayıt için clustered index yerleri değişecektir. Bu da INSERT zamanını uzatır. NewSequentialID() sıralı olduğu için index yeri ardışıl olarak devam edecektir.

2008-10-23

Transaction Blok İçerisindeki Lokal Değişkenlerin Durumu

Bana göre uzun sayılabilecek bir aradan sonra tekrardan sizlerleyiz efendim.

Bu sefer lokal değişkenlerin transaction yapısı içerisindeki durumunu hep birlikte inceleyeceğiz. Öncelikle hatırlayamanlar için transaction yapısını hatırlatalım:

BEGIN TRAN
--Ara işlemleriniz
COMMIT TRAN
--yada
ROLLBACK TRAN

Bu hatırlatmadan sonra asıl konumuz olan lokal değişkenlerin transaction yapısındaki durumuna dönelim. Bunun için birbirine çok benzer iki örnek üzerinde duralım:

Örnek-1:
DECLARE @OnlineZiyaretci INT
SET @OnlineZiyaretci = 10

PRINT @OnlineZiyaretci --OnlineZiyaretci değeri 10

BEGIN TRAN
SET @OnlineZiyaretci = @OnlineZiyaretci + 1
PRINT @OnlineZiyaretci --OnlineZiyaretci değeri 11
ROLLBACK TRAN

PRINT @OnlineZiyaretci -- Burdaki değeri tahmin edin?
GO

Örnek-2:
DECLARE @OnlineZiyaretci INT
SET @OnlineZiyaretci = 10

PRINT @OnlineZiyaretci --OnlineZiyaretci değeri 10

BEGIN TRAN
SET @OnlineZiyaretci = @OnlineZiyaretci + 1
PRINT @OnlineZiyaretci --OnlineZiyaretci değeri 11
COMMIT TRAN

PRINT @OnlineZiyaretci -- Burdaki değeri tahmin edin?
GO

Normal şartlarda bir kayıt yada kayıt kümesi için rollback olduğunda o kayıtlar eski haline döner; commit olduğunda ise transaction blok içerisinde aldığı son değerleri alır .
Eminim bir çoğunuz aynı mantıkla @OnlineZiyaretci değişkeninin örnek-1 için 10; örnek-2 için ise 11 alacağını tahmin etmişsinizdir. Kodu denerseniz tahminizde yanıldığınızı; her iki durumda da @OnlineZiyaretci değerinin 11 olduğunu göreceksiniz. Bunun nedeni lokal değişkenlerin Transaction yapısından etkilenmemeleri!

Bir sonraki yazıda görüşünceye dek bol SQL'li günler diliyorum.

2008-10-21

Yorum Farkı!

Yazının başlığına bakıp Mehmet Barlas ile Emre Kongar'ın sunduğu Yorum Farkı programına değineceğimi zanneden arkadaşları üzmek istemesemde bugün farklı bir Yorum Farkına değineceğim. Bugün daha önceleri almayı düşündüğüm fakat bir firma tarafından alınmış olan yorum.com domain name i satın almış olsaydım altında hangi sub domainleri barındıracağımı düşündüm. İşte kısa bir düşünmeden sonra aklıma gelen sub domainler:

1- ali.yorum.com (Alış, alıcı yorumları)
2- aci.yorum.com (Acıya, bibere dair yorumlar)
3- oku.yorum.com (Okuyucu, kitap yorumları)
4- ucu.yorum.com (Uçuş,uçak yorumları)
5- soru.yorum.com (Soru Merkezi)
6- baki.yorum.com (Bakıcı yorumları)
7- bulu.yorum.com (Arama Merkezi)
8- gulu.yorum.com (Gülmeye Dair)
9- suru.yorum.com (Sürüş, sürücü yorumları)
10-goru.yorum.com (Görmeye dair yorumlar)
11-gezi.yorum.com (Gezi yorumları)
12-kosu.yorum.com (Koşu yorumları)
13-gozlu.yorum.com (Göze dair, gözlüğe dair yorumlar)
14-oynu.yorum.com (Oyun yorumları)
15-sati.yorum.com (Satış, satıcı yorumları)
16-dusunu.yorum.com (Düşünceye dair yorumlar)
17-unutu.yorum.com (Unutkanlık üzerine yorumlar)
18-usutu.yorum.com (Soğuk algınlık ile ilgili yorumlar)
19-yuzu.yorum.com (Yüzmeye dair yorumlar)
20-bili.yorum.com (Bilgiye dair yorumlar)
21-calisi.yorum.com (Çalışma hayatına dair yorumlar)
22-odu.yorum.com (Ödemelere dair yorumlar)

Bakalım sizin aklınıza hangi varyasyonlar gelecek?

2008-09-26

Kadir Gecesi ve Ramazan Bayramı

Kadir Gecenizi ve Ramazan Bayramınızı tebrik ederek; bu mübarek gecenin ve bayramın hayırlara vesile olmasını gücü herşeye Kadir olan Cenab-ı Hak'tan niyaz ederim.

Ya Mütekebbir!
Ben acizim sen Kadir’sin
Ben fakirim sen Rahim’sin
Ben ölüyüm sen Hayy’sın
Ben çaresizim sen Ehad’sin
Ben muhtacım sen Samed’sin
Ben sağırım işiten sensin
Ben körüm gören sensin
Ben dilsizim konuşan sensin
Ben yaratılıyorum yaradan sensin
Ben yokum var eden sensin
Ben hiçim ama emellerim büyüktür
Ben yoksulum ama isteklerim çoktur
Ben isterim çünkü sen büyüksün
Şahit yaz büyüklüğüne bu küçük kalbimi!

2008-08-28

Temporary Table mı Table Variable mı Kullanmalıyız?

Aynı soru defalarca kez farklı yerlerden geldiği için sorunun cevabına değinme ihtiyacı hissettim.
  1. Eğer satır sayımız 100'ün altındaysa genellikle table variable'ı kullanırız. Satır sayısı 100 ün üzerindeyse temporary table kullanılmalıdır.
  2. Index oluşturma ihtiyacımız varsa kesinlikle temporary table kullanmalıyız.

Temporary table ile table variable arasındaki farklardan birisi temporary table sistem veritabanlarından birisi olan tempdb'de tutulur.Table variable ise sistem hafızasında(memory) yer alır.

Burdan hareketle her şeyi temporary table/table variable üzerinde tutup tempdb/memory ı şişirmeyin. Gerekli yerlerde gerektiği kadar kullanalım. Yazılım geliştirme ile uğraşan arkadaşların zamanı dar olduğu çoğunlukla bol temporary table kullanıp bu temporary table'lar üzerinde envai çeşit ekleme/çıkarma/güncelleme yaparlar.

Bir örnek vermek gerekirse: Maas tablosunu tamamını temporary table'a atıp personel maaşını %10 temp table üzerinde uygulayan bir arkadaş SQL kodunu aşağıdaki gibi yapacaktır:

SELECT Sicilno, Ad, Soyad, Ucret INTO #MaasTemp
FROM Maas

Update #MaasTemp
SET ucret=ucret*1.1

Bunun yerine Maas tablosundaki verileri temp tabloya atarken %10 zammı ekleyelim.

SELECT Sicilno, Ad, Soyad, Ucret*1.1 INTO #MaasTemp
FROM Maas

Temporary table için daha söylenecek çok şey var ama şimdilik benden bu kadar. SQL kodumuzu yazarken sistem performansına etkisini de gözönünde bulundurmayı unutmayalım.

Bol SQL'li günler diliyorum.

2008-08-07

SQL Server 2008 RTM Yayınlandı

Uzun bir süredir beklediğimiz SQL Server 2008 RTM sürümü nihayet yayınlandı. En son Şubat 2008'e yetişeceği bildirilmişti fakat Şubat 2008'e yetişemeyince ilerleyen dönemlerde Release olacağı söylenmişti. Bu bildiriden çoğu kişi SQL Server 2008 RTM'in Kasım 2008 gibi çıkacağını bekliyordu. Açıkçası SQL Server 2008 RTM'in çıkması beklediğimden erken oldu.

MSDN üyeliği bulunananlar SQL Server 2008 RTM'i aşağıdaki adresten indirebilir:
http://technet.microsoft.com/tr-tr/subscriptions/default(en-us).aspx

2008-07-29

Miraç Kandilinizi Tebrik Ederim

Bu mübarek gecede dualarınızın kabul olması dileklerimle Miraç Kandilinizi tebrik eder; siz ve sevdikleriniz hakkında hayırlara vesile olmasını dilerim.





2008-07-16

SQL Server'da İstatistikleri Görüntüleme

SQL Server'daki istatistiklerin isimlerini ve hangi alanlardan oluştuğunu görmek için sp_helpstats stored procedure'; istatistiklerin detay bilgilerine ulaşmak için ise DBCC SHOW_STATISTICS komutunu kullanabilirsiniz.

SQL'de Kodu Kısaltmak Her Zaman Yararlı Değildir!

SQL de tablo adlarını alias ile kısaltmak çoğu zaman yazacağımız kodu kısaltır ve kodun anlaşılabilirliğini artırır. SQL kısaltmalarını bir çok yerde desteklemekle birlikte sakıncalı olabilecek yerlerde de dikkat etmenizi öneririm.

SQL kodlayan yazılımcılar arasında sıklıkla yapılan hatalardan birisi de kısaltma hastalığı neticesinde yanlış tabloyu update etmektir. SQL kodunu kısaltayım derken iş ömrünüzü kısaltmayın!

Örnek: 1 nolu şirketteki personelin statu sunu 0 yapacak kodu yazmaya çalışalım:

update s
set statu=0
from personel p inner join sirket s ON P.sirketid=S.id
where S.id=1

Yazdığım kod kısa olduğu için hatayı hemen yakalamak mümkün ama SQL kodu çok uzunsa hatayı yakalamak zor olabilir. Yukarıda yapılan hata personel durumlarını update edeyim derken şirket durumu update edilmiştir. Her iki tablodada statu alanı olduğu için kod çalıştırıldığında düzgünmüş gibi çalışıp, kodu yazanın yanılmasına sebep olur.Bu konuda sizlere acizane tavsiyem update edeceğiniz tablo adını uzun bir şekilde yazmanız.

Şimdi hatamızı düzeltip SQL kodumuzu daha okunabilir bir şekilde yazalım:

UPDATE Personel
SET statu=0
FROM Personel INNER JOIN Sirket ON Personel.sirketid=Sirket.id
WHERE Sirket.id=1

Tabiki yapacağınız işleri TRANSACTION block içerisinde yazmak her zaman daha güvenli olacaktır ve yaptığınız hatadan dönme şansını size verecektir:

BEGIN TRAN

UPDATE Personel
SET statu=0
FROM Personel INNER JOIN Sirket ON Personel.sirketid=Sirket.id
WHERE Sirket.id=1


COMMIT TRAN

Herkese hatasız ve performanslı bol SQL li günler...

2008-07-03

Regaib Kandili

Mübarek Regaib Kandili'nizi tebrik eder, hayırlara vesile olmasını dilerim.

2008-06-30

Job Adımlarının-Komutlarının Detay Bilgileri

Hangi jobın hangi adımları var? Hangi adımlarda hangi komutlar çalıştırılıyor? sorularını siz de merak ediyorsanız aşağıdaki SQL kodu sorularınıza cevap olacaktır:

SELECT name, step_id , step_name, command
FROM msdb.dbo.sysjobs J INNER JOIN msdb.dbo.sysjobsteps JS ON JS.job_id=J.job_id


--SQL kodu SQL Server 2008 RC0 ve SQL Server 2005 sürümlerinde test edilmiştir.

2008-06-13

SQL Server 2008 ile Oracle'ın Bazı Özelliklerinin Karşılaştırılması

Geçen gün SQL Server 2008 White Papers ı okurken; SQL Server 2008 ile Oracle 11g nin bazı özelliklerinin karşılaştırılması dikkatimi çekti. Merak ettiğim bir konuyu sizlerle de paylaşmak istedim. Ayrıntılı bilgi için SQL Server 2008 Compared to Oracle Database 11g White Paper ını okuyabilirsiniz.

Hem SQL Server 2008 hem de Oracle 11g de olan bazı özellikler:
  1. Feature Microsoft OracleResource Governor
  2. Partition-aligned indexed views

Sadece SQL Server 2008'de olan özellikler:

  1. PowerShell
  2. Policy-Based Management
  3. Filtered indexes
  4. Advanced sparse columns
  5. Multithreaded partition access
  6. Column-prefix compression
  7. Module signing using certificates
  8. SQL Server Data Services

2008-06-12

SPARSE Column and Filtered Index

Merhaba Değerli Okuyucular,

Bugün de CTP5/CTP6 ve RC0 sürümlerini inceleyip, kurcalayıp, test edip bir yanlışlıklarını gördükce sevgili Microsoft amcamıza bugları arzı endam eylemeye çalıştığımız SQL Server 2008'i tanıma ve yeniliklerini keşfetme serüvenümüze kaldığımız yerden devam edeceğiz.

Elalem yapmış bana ne demiyoruz. Elalemin yaptığını bari keşfedip kullanalım diyoruz. İşimiz SQL Server olunca gücümüz de SQL Server oluyor haliyle. SQL ile yatıp SQL ile kalkıp SQL ile çay araları veriyoruz. Aranızdan kıs kıs gülüp alt üstü işiniz gücünüz 3 harfli bir kelime. Gelin görün ki bu 3 harf ile hangi kombinasyonlar ortaya çıkıyor(Dostlar arasında kalsın; düşmanlara çaktırmayın:) 3 harfli bir kombinasyonun en fazla 6 farklı çeşidi olur )?

Lafı fazla uzatmadan ve sizleri SQL'den soğutmadan edebi metinleri bırakıp işin teknik kısmına gelelim.

SQL Server 2008 ile birlikte sparse column ve filtered index geliyor. Bana ne demeyin bakarsınız işinizi kolaylaştırıp hızlandırır. Benden söylemesi ve uyarması gerisi size kalmış.

Sparse column ı özellikle entity yapısındaki kayıtlarımız için kullanabiliriz. Onlarca alanınız var ama bu alanlarınızın büyük çoğunluğu boş(null), çok az kısmı dolu ise sparse column özelliği tam size göre. Sparse column null değerli alanlar için 0 diğer alanlar için 2-4 byte arasında yer kaplıyor. Sparse column ile yerden %20-%40 oranında tasarruf sağlanabilir aynı şekilde %20 ye varan CPU performansında iyileşme görülebilir. Daha detaylı bilgi için bkz. Using Sparse Columns

SQL Server 2008 ile birlikte ilk defa tanışacağımız hatta severek kullanacağımız Filtered Index; klasik indexlerimize WHERE koşulunun eklenmiş hali. Filtered Index belirli koşullar altındaki kayıtları indexliyor.

Örneğin Vatandaslik tablomuzda 1953 yılından önce doğan vatandaşlarımızı bir indexte tutmak isteyelim:

CREATE NONCLUSTERED INDEX [indVatandas1953] ON [dbo].[Vatandaslik]
(
[DogumTarihi] ASC
)
WHERE ([DogumTarihi]<'1953-01-01')
ON [PRIMARY]

Peki iyi güzel de bu bize ne sağlayacak? Tabiki bu sayede index'imiz daha az yer kaplayıp daha hızlı olacak. Filtered index ile ilgili detaylı bilgi için bkz.Filtered Index Design Guidelines

Not:Filtered Index ile ilgili SQL kodu SQL Server 2008 RC0 ile test edilmiştir.

2008-06-10

SQL Server 2008 RC0 Yayında

Microsoft, SQL Server 2008 Release Candidate 0'ı yayınladı. SQL Server 2008 RC0'ı denemek isteyen okuyucular Microsoft sitesinden kendilerine uygun paketleri indirebilirler.

2008-06-02

SQL Server 2008: Table Valued Parameters

SQL Server 2008 ile birlikte stored procedure parametrelerinde tablo kullanabileceğiz. Bu oldukça güzel bir özellik; eminim bir çoğunuz benim gibi bu özelliği bekliyordu.

Şehir adlarını bir tablo üzerinden toplu bir şekilde bir SP sayesinde ekleyelim. SP miz parametre olarak tablo alacak. Bunun için öncelikle bir test tablosu oluşturalım:

CREATE TABLE TestCity(
[CityId] [int] NOT NULL,
[Name] [varchar](64) NOT NULL
)

Bir tablo tipi oluşturalım:

CREATE TYPE [CityType] AS TABLE(
[CityId] [int] NOT NULL,
[Name] [varchar](64) NOT NULL
)

TestCity tablosuna kayıt ekleyecek SP mizi yazalım:

CREATE PROCEDURE usp_InsCity
@TableParam CityType READONLY
AS
SET NOCOUNT ON
BEGIN
INSERT INTO TestCity Select CityID, Name from @TableParam
END

Şimdi de tem tabloya şehirleri ekleyip kayıt ekleyen SP mizi çalıştıralım:

DECLARE @tmpTest AS CityType

INSERT INTO @tmpTest(CityID,Name) VALUES(6,'İzmir'),(34,'İstanbul'), (63,'Şanlıurfa')
--Kayıt eklemelerini toplu şekilde yapıyoruz:)

EXEC usp_InsCity @tmptest

Not: Tüm Kodlar SQL Server 2008 CTP6 ile test edilmiştir.

2008-06-01

Bir Nesnenin Detay Bilgilerini Görme

Merhaba Değerli Okuyucular,

SQL Server'da bir nesne üzerinde bir şeyler yapmak istediğimde o nesnenin detay bilgilerini bilmek isterim. Örneğin bir tabloya yeni bir alan ekeleneceği zaman bu tablo ne zaman oluşturulmuş, en son ne zaman değişikliğe uğramış, üzerinde kaç Insert, Update, Delete triggerı var, kaç satırdan oluşuyor, fiziksel büyüklüğü ne kadar, tablonun alanları, tablo üzerindeki indexler ve constraintler vs gibi bilgileri anında görebilirsem tablo üzerinde daha sağlıklı bir değişiklik yapma şansım olur. Tüm bu özellikleri bir SP üzerinde yapıp tek noktadan tüm bilgilere erişme ihtiyacı hissettim. Diğer şekilde tablonun bu özelliklerine ulaşmak için tek tek ilgili yerlere bakmak bana sıkıcı ve hammalık gibi geliyor. Bu yüzden SQL server üzerindeki bir nesnenin detay bilgilerini öğrenmek için ObjectInfo adında bir SP oluşturdum. Sizlere de bir faydası dokunur diye günlüğümde yayınlıyorum:

CREATE PROCEDURE [dbo].[ObjectInfo]
@ObjectName [varchar](255) = null
WITH EXECUTE AS CALLER
AS
/*
Yazan : Mehmet GÜZEL
Tarih : 30.05.2005
Açıklama: İlgili nesnenin detay bilgilerini verir.
*/
SET NOCOUNT ON
DECLARE @Type VARCHAR(64)
BEGIN
SELECT @Type = type
FROM sys.objects
WHERE name=@ObjectName
IF @Type ='U'
BEGIN
SELECT OBJECT_NAME(O.object_id),
O.type Type,
O.type_desc AS TypeDesc,
O.create_date AS Create_Date,
O.modify_date AS modify_date,
MAX(S.rowcnt) AS Rows,
8.0*SUM(S.reserved) AS SizeKB,
(SELECT COUNT(1) FROM sys.trigger_events WHERE type_desc='INSERT' AND object_id =O.object_id) AS InsertTrCount,
(SELECT COUNT(1) FROM sys.trigger_events WHERE type_desc='UPDATE' AND object_id =O.object_id ) AS UpdateTrCount,
(SELECT COUNT(1) FROM sys.trigger_events WHERE type_desc='DELETE' AND object_id =O.object_id) AS DeleteTrCount
FROM sys.all_objects O LEFT OUTER JOIN sys.sysindexes S ON O.object_id =S.id
WHERE O.name=@ObjectName
GROUP BY O.object_id,
O.type,
O.type_desc,
O.create_date,
O.modify_date
END
IF @Type ='P'
BEGIN
SELECT type AS Type,
type_desc AS TypeDesc,
create_date AS CreateDate,
modify_date AS ModifyDate
FROM sys.procedures
WHERE name=@ObjectName
END
EXEC sp_help @ObjectName
RETURN 0
END


Not: SP, SQL Server 2005/2008 ortamında geliştirilip derlenmiştir, SQL Server ortamında syntax hataları verebilir.

2008-05-28

Bu Bildirinin Altına İmzamı Atıyorum

Sayıları binleri geçen ve başını akademisyenlerin çektiği aşağıdaki bildiriyi ben de imzalıyorum.

"Saygıdeğer Yargıçlar;
21 Mayıs 2008 günü, “adına yargı yetkisi kullanmaktan onur duyduğu Yüce Milletiyle paylaşmak gereğini duyduğunuz” bir bildiri yayınladınız. Adına yargı yetkisi kullandığınız bu milletin bir bireyi olarak, kullandığınız yetki ve sorumluluğunuzun çerçevesini hatırlatma ihtiyacı hissettim.
“Demokratik, lâik ve sosyal hukuk devleti” idealine bağlı, Cumhuriyetin temel niteliklerini benimsemiş bir birey olarak;
Toplumun çözüm bekleyen sorunlarının başında gelen yargısal sorunların çözümünde hiç bir katkı yapmayacaksanız,
İşgal ettiğiniz makamlarınızı siyasal görüşlerinize alet edecekseniz,
Toplumdan “anayasayı değiştireceğim” vaadiyle oy alan bir partinin yeni anayasa yapma girişimini ve Meclis’in Anayasa yapma yetkisini engellemeye kalkacaksanız,
Ve bunu millet adına karar verme yetkinizi kullanarak yapacaksanız,
Yayınladığınız bildiriyle halen Anayasa Mahkemesi’nde dava konusu olan, Anayasa maddeleri değişiklikleri hakkındaki davanın seyrini etkiyelecek şekilde doğrudan yargıya müdahale edecekseniz,
Ve hatta, Anayasa maddelerini değiştirmek gibi asli yetkisini kullanan yasama organını hedef gösterecekseniz,
Avrupa Birliği müzakereleri sürecinde öncelikli olarak yapılması gereken yargı reformuna pozitif katkı yapmak bir yana, sırf AB sürecini baltalamak için reformlara karşı çıkacaksanız,
Bireyi, devlet dahil her türlü otoritenin baskısına karşı koruyup, onun haklarını temin edecek bir hukuk anlayışını benimsemeyecek; devleti, bireyin ve milletin önünde ve üstünde tutacak ve kararlarınızı buna göre verecekseniz,
Benim adıma karar vermeyin.

Yukaridaki metni benimsiyorsaniz lutfen
Adinizi Soyadinizi yazip `bu bildiriye katiliyorum` ibareli bir emaili
benimadimakararvermeyin@gmail.com
adresine gonderiniz...
Benim Adima Karar Verme Platformu "

2008-05-24

sp_helptext

Merhaba Değerli Okuyucular,

Bugün SQL Server'ı kullanırken işimize çok yaracak bir SP ye değineceğim: sp_helptext. sp_helptext ile bir rule, default, unencrypted stored procedure(sp), user defined function(udf), trigger, veya view'ın text içeriğini görüntüleyebilirsiniz. Böyle yararlı bir sp olmadığı zaman tek tek ilgili nesneleri bulup scriptlerini almak ne kadar zahmetli olduğunu yaşayan arkadaşlara anlatmama gerek yok ama yaşamayan arkadaşlar zorluğu yaşadıktan sonra bana hak vereceklerdir.

sp_helptext in syntax'ı aşağıdaki gibidir:

sp_helptext [ @objname = ] 'name'

Şimdi bir örnek ile olayı daha iyi kavrayalım. spKonuyaPuanVer sp sinin içeriğini görüntülemek için

sp_helptext 'spKonuyaPuanVer '

yazmamış yeterli olacak. Bu komutun sonucunda ilgili SP nin text içeriği ekrana dökülür. SQL Server'da bir nesnenin SQL kodunu mu merak ediyorsunuz buyrun size sp_helptext. Tabi bu sp ile SQL Server'ın system sp, view ve diğer bileşenlerinin kodunu da görüntüleyebilirsiniz. Böylelikle merak ettiğiniz herhangi bir nesnenin nasıl kodlanğını görme şansınız olacak.

Geçen haftalarda sorduğum sorunun cevabı olan sp_databases SP nin kodunu böylelikle vermiş olayım:) Bunun için

sp_helptext 'sp_databases'

kodunu yazmamız yeterli olacak. Bu scriptin sonucundan sp_databases sp nin içeriğini aşağıdaki gibi alırız.

create proc sp_databases
as
set nocount on
declare @name sysname
declare @SQL nvarchar(600)
/* Use temporary table to sum up database size w/o using group by */
create table #databases (
DATABASE_NAME sysname NOT NULL,
size int NOT NULL
)

declare c1 cursor for
select name from master.dbo.sysdatabases
where has_dbaccess(name) = 1 -- Only look at databases to which we have access

open c1
fetch c1 into @name

while @@fetch_status >= 0
begin
select @SQL = 'insert into #databases
select N'''+ @name + ''', sum(size)
from ' + QuoteName(@name) + '.dbo.sysfiles'
/* Insert row for each database */
execute (@SQL) fetch c1 into @name
end
deallocate c1

select DATABASE_NAME,
DATABASE_SIZE = size*8,/* Convert from 8192 byte pages to K */
REMARKS = convert(varchar(254),null) /* Remarks are NULL */
from #databases
order by 1

2008-05-14

Bilgeliği Kimden Öğrendin?

Lokman Hekim'e "Bilgeliği kimden öğrendin?" diye sorduklarında ondan şu cevabı almışlar:
Körlerden öğrendim. Çünkü onlar elindeki değnekle tam araştırmadan adım atmazlar. Basacakları yerin sağlam olduğundan emin olduktan sonra adım atarlar... Bundan dolayı ben de bir şey yapacağım zaman düşünür, faydalı ise konuşur, yararlı ise yaparım... Faydasız ise bırakmayı ve susmayı tercih ederim.

Kaynak: Zafer

Bugün sabah servisi beklerden gözleri görmeyen birisinin yolda yürüşünü, karşıdan karşıya geçişini, ardından otobüs durağına gidip otobüse binişini hayret içerisinde izledim. Yolu bulması, durakta durması ve bineceği otobüsü bilmesi beni şaşırttı. Demek ki Allah herkese yolunu bulacak bir yöntem yada kalp gözü bahşediyor.

"SQL Server 2005'te Veritabanı İsimleri ve Fiziksel Büyüklükleri" Sorusunun Cevabı

Sevgili okuyucu SQL Server 2005 ile ilgili bu sorumun ağır olduğunu itiraf etmek zorundayım. Zira her üç cevap şıkkı da birbirine oldukça yakındı ve tüm şıklar itina ile seçilmişti.

Sorduğum sorunun doğru cevabı EXEC sp_databases olacaktı. Soruyu cevaplayan okuyucularımın %43 ancak doğru cevabı bilebildi. Doğru cevabı veren tüm okuyucularımı tebrik ediyorum ve diğer katılımcı arkadaşlara da katılımları için teşekkür ediyorum.

Cevap şıklarının arasındaki ince farkları görebilmek için kodları test etmenizi öneririm. Bir sonraki soru ve cevaplarda buluşuncaya dek bol SQL i günler diliyorum.

2008-05-13

SQL Server 2008'e Merhaba Dedik

print 'Merhaba SQL Server 2008 CTP ' --"Merhaba Dünya" vazgeçilmezimizden esinlenerek:)

Birkaç gün önce SQL Server 2008'in February 2008 CTP sini kurdum. SQL Server 2008 çıkmadan bir inceleyip test edeyim dedim. İlk ihtiyacım olan backup/restore ı test ettim. Yaklaşık 22 GB lık bir veritabanımın sıkıştırılmış backup'ı yaklaşık 10 dakika sürdü. Ve backup dosyamın boyutu 2 GB civarındaydı:) Aynı şekilde bu sefer backup'tan restore ettim; restore işlemi yaklaşık 8 dakika sürdü. Backup compress hem hız hem de yer bakımından SQL Server'a artı bir özellik katmış. Özellikle backup dosya boyutlarından dolayı yer sıkıntısı yaşan okuyuculara kullanmalarını tavsiye edebilirim.

2008-04-28

SQL Server'a Kurulan Bağlantıların Uygulamaya Göre Sayısı

SQL Server'a kurulan bağlantıların toplamını uygulamaya göre aşağıdaki SQL ile bulabilirsiniz:

SELECT Program_Name, COUNT(1) AS TotalConnection
FROM Master..sysprocesses
WHERE ecid=0
GROUP BY Program_Name
ORDER BY COUNT(1) DESC

2008-04-24

SP'nin Sonucunu Select İçinde Kullanabilme

Stored Procedure'dan dönen kayıt kümelerini SELECT ile alıp istediğiniz gibi kullanabilirsiniz. Böyle bir ihtiyaç için OPENROWSET i kullanabilirsiniz.

Örnek: DBA_TOP_Queries_Average SP'sinden dönen kayıtları AvgCPuTime'a göre sıralayalım

SELECT *
FROM OPENROWSET('SQLOLEDB', 'Trusted_Connection=Yes;Server=GuzelDB;Database=GuzelDEV', 'EXEC dbo.DBA_TOP_Queries_Average')
ORDER BY AvgCPuTime

OPENROWSET ile ilgili hata alan arkadaşların OPENROWSET kullanımı Enable değildir. OPENROWSET'i Start->Programs->Microsoft SQL Server 2005->Configuration Tools->SQL Server 2005 Surface Area Configuration'dan Surface Area Configuration For Features tıklayarak; Ad Hoc Remote Queries'te bulunan Enable OPENROWSET and OPENDATASOURCE support ı yetkilendirmeniz gerekir.

2008-04-22

2008 Blog Ödülleri

Değerli Günlük Sakinlerim,

Günlüğüm 2008 Blog Ödülleri'nde "Teknoloji" kategorisinde yarışmaya katılıyor. Oylama konusunda bazı katılımcılar gibi "bana oy verin" demeyeceğim. 2008 Blog Ödülleri'ne oy verecekseniz; lütfen katılımcı günlükleri inceleyip gerçekten oy vermek istediğiniz günlüklere oy veriniz. Bana göre bir yarışmanın gerçekçi ve işe yaramasının birinci kuralı seçim ve oylamanın tarafsız olmasıdır. Bu yüzden dostluğuma, arkadaşlığıma, günlük sakinliğime, kara kaşıma/gözüme bakıp diğer günlükleri incelemeden sırf hatır-gönül bağıyla günlüğüme oy verecek arkadaşların bana oy vermemelerini rica ediyorum.

Tarafsız olarak oylamaya katılacak arkadaşlar 5 Mayıs 2008 Pazartesi günü sonuna kadar 10 farklı kategoride en iyi bulduğu 10 günlüğe oy verebilecek. Unutmadan oy verebilmek için siteye üye olmak gerekiyor.

Hadi bakalım herkese tarafsız oylamalar.

2008-04-10

Tüm Tablolardaki Identity Alanlarının Değerlerini Bulma

SQL Server 2005'de veritabanınızda bulunan tüm tablolarınızdaki Identity olan alanların değerlerini bulmak için aşağıdaki SQL'i kullanabilirsiniz:

SELECT  OBJECT_NAME(OBJECT_ID) AS TABLENAME,
NAME AS COLUMNNAME,
SEED_VALUE,
INCREMENT_VALUE,
LAST_VALUE,
IS_NOT_FOR_REPLICATION
FROM sys.identity_columns
ORDER BY LAST_VALUE DESC

2008-04-05

Bir Ayrılık Yeni Bir Başlangıç

Dün itibariyle 13 aydır çalıştığım Belbim'den ayrıldım. Bundan böyle iş hayatımı bir bankada DBA olarak devam ettireceğim. Belbim'deki gerek çalışma arkadaşlarım gerekse ortam çok güzeldi fakat her gün ortalama 4-5 saatimin yolda geçmesi her geçen gün canımı daha da sıkıyordu. Yol derdi beni Belbim ile yol ayrımına getirdi.

Burdan sevgili proje yöneticim Tarık beye, danışmanımız Metin beye, çalışma arkadaşlarım Orhan hocaya; Mustafa, Celalettin, Fatih, Kasım beylere; Sevilay ve Münibe hanımlara ve ismini sayamadığım herkese gösterdikleri anlayış, iyiniyet, arkadaşlık, dostluk ve tüm paylaşımları için tekrardan teşekkür ediyorum. Sizlerle çalışmak benim için büyük bir onurdu.


Ayrılmadan bir gün önce Florya'daki tesislerde öğlen yemeğini hep beraber yemiştik. İnsanın güzel anılarının olması güzel. Hayat güzelliklerle dolu yeterki görmesini ve bakmasını bilelim.

Başka zaman ve zeminlerde görüşmek dileğiyle hoşçakalın, dostçakalın.

“Gideriz nur yolu izde gideriz
Taş bağırda sular dizde gideriz
Bir gün akşam olur, biz de gideriz
Kalır dudaklarda şarkımız bizim...”
N.Fazıl KISAKÜREK

2008-04-01

Operatör Önceliği ile İlgili SQL Sorusunun Cevabı

Operator önceliği ile ilgili olarak sorduğum SQL sorusunun cevabı İstanbul ilimizin plaka kodu yani 34 olacaktı. Katılımcı arkadaşların ezici bir çoğunluğu operatörlerin önceliği konusunda yeterli bilgiye sahip olduklarını gösterdiler. Umarım bu vesile ile soruya yanlış cevap veren arkadaşlar da operatörlerin önceliği konusundaki eksikliklerini giderirler.
Tüm katılımcı arkadaşlara teşekkürlerimi iletiyorum.

2008-03-24

Bir Devlet Hastanesi Macerası

Geçtiğimiz perşembe ve cuma günleri Tam Teşekküllü Sağlık Raporu almak için Bakırköy Dr. Sadi Konuk Eğitim ve Araştırma Hastanesindeydim. Bir heyet raporunun iki gün sürmesi çok uzun bir süre. Heyet Kurulu için ayrı bir kat buluyor ve muayene olunacak bir çok poliklinik bu katta bulunuyor. Röntgen alt katta, tahlil için yan binaya; tahlil sonuçları için karşıdaki binaya uğramanız gerekiyor. İlk gittiğimde benim gibi heyet raporu alacak 5-10 kişi ancak çıkar diye düşünmüştüm ama en az 150 kişi vardı sırada bekleyen:( Anlaşılan Avrupa yakasında oturan insanların azımsanmayacak bir oranı Bakırköy Dr. Sadi Konuk Eğitim ve Araştırma Hastanesini tercih ediyor. Heyet raporu alacak arkadaşlara birkaç tavsiye:
  1. Gitmeden yanınıza en az 124 YTL para alın(Tam teşekküllü heyet raporu için 124 YTL ödemeniz gerekiyor),
  2. Kimliğiniz ile birlikte elinizde bir vesikalık fotoğrafınız bulunsun,
  3. Sabah erkenden gidip kuyrukta ön sıralarda yer alın(Maalesef sıra için Q-maticler yok o yüzden sıranızı kaptırmamanız için uzun soluklu bir sıra macerasına hazırlıklı olun)
  4. Kayıt işlemlerinizi yaptırdığınız gibi röntgen ve tahlil sırasına koşunuz
  5. Tahliliniz öğleden sonra çıkacağı için Dahiliyede boşu boşuna kuyrukta beklemeyiniz.
  6. Kapı önünde kuyruğu az olan polikliniği tercih edin.
  7. Mümkünse bir yada birden çok kişi ile gidip farklı polikliniklerde sıra alın yoksa tek tek tüm doktorları gezip muayene olmak bir kaç gününüzü alabilir.
  8. Öğleden sonraları muayene yoktur bu yüzden boşu boşuna öğleden sonra beklemeyiniz.
  9. Çarşamba günleri Bakırköy Devlet hastanesinde heyet yoktur. Çarşamba günleri heyetten rapor almayı boşu boşuna beklemeyin:)
  10. Göz polikliniğinin kuyruğu her zaman çok olur bunu göz önünde bulundurun:)
  11. Psikiyatr için boşu boşuna kapıda beklemeyin evraklarınızı içerisdeki sektere verin.
  12. Genel Cerrahi 10:30 dan önce rapor alacaklara bakmaz boşu boşuna ne doktorun kapısında bekleyin ne de Genel Cerrahi Doktorunu rahatsız edin!
  13. Evraklarınızı her zaman 12:00 den önce tamamlayın zira 12:00 den sonra evrak teslimi alınmaz direk ertesi güne kalırsınız.
  14. 12:00 den önce evraklarınızı teslim ettiyseniz aynı günün öğleden sonrasında heyet toplanır ve raporunuzu imzalar.
  15. Heyet günü 13:30 da burda olun derler. Siz 14:00 den sonra gelin. Çünkü en az yarım saat boyunca boşu boşuna beklersiniz. Askeriyedeki mantık gibi insanları 14:00 de toplamak için herkese 13:30 da muhakkak burda olun denilir.
  16. Bu bu adımları sağlıklı bir şekilde aştıktan sonra Sağlam raporunuzu alıp hayırlı işlerde kullanırsınız:)

Burdan hastaneler için de bir kaç önerim olacak:

  1. İ.allah tüm devlet hastanelerine bir an önce online/telefon randevi sistemi gelir. Bahsettiğim hastenede diğer poliklinikler için online ve telefon ile randevu sistemi olmasına rağmen Heyet Raporu için henüz böyle bir güzellik yok maalesef.
  2. Heyet raporu için adam akıllı online bir sitem kurulur i.allah. Böylelikle sistem herkese hangi sırada hangi doktorda ne zaman sıra geldiğini bildirip tüm bürokratik ve eziyetlik işlemleri bitirmiş olur.
  3. Bu yapılamıyorsa hastane yönetimi Heyet Kurulunda kayıt işlemleri için bir Q-matic eklerlerde insanların saatlerce sıralarda sürünmelerini engellemiş olurlar. Kuyruklar saatlerce sürebiliyor ve sıranızı kaybetmemek için sıradan ayrılamıyorsunuz. Sıradan ayrılıp geldiğinizde tantanalar olabiliyor.
  4. Yönetim insanlara sıra numarası veremiyorsa en azından kayıt formuna sıra numarası versinler. Böylelikle insanlar kayıt formundan sıralarını takip ederler.
  5. Hastane döner sermeyesine bu kadar gelir sağlayan bir kurulun kayıt işlemlerini bir kişinin yapması doğru değil. Hem hizmet memnuniyeti hem de daha fazla gelir elde etmek için en azından 3 tane kayıt görevlisi görevlendirilmeli. Şu anki görevli hem tek başına hem de oldukça ağır iş yapıyor:(
  6. İşlemlerin nasıl ve hangi sırada yapıldığını web sayfalarında yada bir panoda güzelce izah edebilirler. Böylelikle gelen insanlar her bulduğu görevliye birden çok soru sorup onların da vaktini çalmamış olurlar, boşu boşuna yorulmamış ta olurlar.

Allah kimseyi hastanelere düşürmesin. Şimdilik hoşça kalın sağlıcakla kalın!

2008-03-19

2008-03-18

Tablolardaki Kayıt Sayısını ve Fiziksel Büyüklüğü Bulmak

Veritabanınızda bulundan tüm tabloların kayıt sayısını ve bu tabloların fiziksel olarak kapladığı yeri KB cisinden aşağıdaki T-SQL cümlecikleri ile bulabilirsiniz:

SET NOCOUNT ON

IF EXISTS(SELECT * FROM TempDb.dbo.SysObjects WHERE NAME = '##Space_Used') DROP TABLE ##Space_Used

CREATE TABLE ##Space_Used (
name nvarchar(128),
rows char(11),
reserved varchar(18),
data varchar(18),
index_size varchar(18),
unused varchar(18)
)

DECLARE @User_Table_Name varchar(200)

DECLARE User_Tables_Cursor CURSOR FOR
SELECT Name
FROM Dbo.SysObjects
WHERE XTYPE = 'U'

OPEN User_Tables_Cursor

FETCH NEXT FROM User_Tables_Cursor INTO @User_Table_Name
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO ##Space_Used
EXEC sp_spaceused @User_Table_Name

FETCH NEXT FROM User_Tables_Cursor INTO @User_Table_Name
END

CLOSE User_Tables_Cursor
DEALLOCATE User_Tables_Cursor

SELECT
TableName=LEFT(Name, 50),
"RowCount"=Rows,
Phys_Size_KB = CONVERT(int, LEFT(Reserved, PATINDEX('% KB', Reserved) - 1))
FROM ##Space_Used
ORDER BY Phys_Size_KB DESC

IF EXISTS(SELECT * FROM TempDb.dbo.SysObjects WHERE NAME = '##Space_Used') DROP TABLE ##Space_Used


Kaynak: SQLServerCentral

2008-03-17

Bir Parti Kapatma Davası Daha!

Cuma gününden bu yana konu ile ilgili haber dinlemekten ve yazı okumaktan sıkıldım. Ülke gündeminin bir anda değişmesine seyirci olup, ekonomide geçici kırılganlıkların yaşanmasını izledim. Tüm bunları izlerken "Bir ülkede hukuk ve yargı sistemi niçin vardır?" sorusuna cevap aradım.

Gündem başlıklarını aşağıdaki gibi sıraladığımda bu dava süpriz olmasa gerek:

-2001 şubat post-modern darbesinden bu yana demokratik açılımlar

-Türkiye'nin her geçen gün güçlenmesi, dış siyasetteki nüfusunun artması

-Ergenekon Operasyonu

-Doğu ve Güneydoğu ile ilgili açılımlar

-Dünya borsalarındaki ekonomik çalkantılar

-ABD nin Ortadoğu planları(Irak,Afganistan, Pakistan ve olası İran savaşı)

-AB de dönüşüm ve Rusya'nın eski gücüne kavuşması

vs.


Konu ile ilgili Salih Memecan yoruma gerek bırakmamış.

2008-03-13

Fıkra Faslı

Adam otoyolda giderken hız limitini aşmış, ancak tüm arabalar da onunla eşit hızda gidiyorlarmış...
Biraz gittikten sonra polis durdurmuş kendisini, ehliyet ve ruhsatı aldıktan sonra
'Radara yakalandınız ceza kesilmesi için lütfen ekip otosuna buyurun!' demiş...
'Biliyorum hızlıydım!' demiş adam..
'Fakat benden başka bir sürü hızlı giden vardı.. Onları neden durdurmadınız? '
'Hiç balığa gittiniz mi?' diye sormuş polis..
'Uhmm! Evet!' diye cevaplamış adam..
'Siz!' demiş polis, 'Hiç bütün balıkları yakaladınız mı?'

***

Kamyon şoförü otoyolda giderken 'Dikkat alçakköprü!' yazısını görmesiyle köprünün altına sıkışması bir olmuş...
Son derece sinirlenmiş ikaz levhasının daha köprüye gelmeden önce konulmamasına...
Otoyol kapanmış, arkasında kilometrelerce araç birikmiş, haber vermesine rağmen saatler sonra ekip gelmiş, içeriden ağır adımlarla sırıtarak bir polis inmiş, kamyonun yanına gelip ellerini beline koymuş,
'Sıkıştın ha!' demiş..
'Hayır Memur bey!' demiş şoför..
'Bu köprüyü taşıyordum, mazotum bitti..!'

Güzel fıkralar için sevgili dostum Mehmet Döner'e teşekkürler.

2008-03-12

2008 Microsoft Lansmanının Ardından

Bugün öğleden sonra Microsoft 2008 Sunucu ve Yazılım Platformu Lansmanının sunumlarına katıldım. SQL Server 2008 Gelişmiş Veri Platformunu Cem Güven; SQL Server 2008 ile Kritik İş Uygulamalarını Önder Yıldırım-Selçuk Uzun; SQL Server 2008 ile İş Zekasını da Cavit Yantaç -Mustafa Acungil sundular. Sunumlar genel itibariyle yararlı geçti fakat gerek sunumun yapıldığı salon gerekse SQL Server 2008 konusunda beklentilerimin altında kalan bir lansman oldu(Daha önceki lansmanlara göre). Bununla birlikte SQL Server 2008 ile birlikte gelen hoş özellikler de yok değil.

Lansman vesilesiyle Tekofaks'tan Yazılım Müdürüm Osman Özhancı, Türkiye Finans'tan Metin Karabiber, Bilge Adamdan Mustafa Acungil ve günlüğümün sıkı takipçilerinden Adil Erkan ile ayak üstü sohbet etme fırsatı buldum. Bunun yanında BT Akademi'den Sefer Algan ile Oğuz Yağmur ve Daron Yöndem'i gördüm fakat görüşme için zaman olmadı:( Salonda bir şekilde tanıştığımız bir çok insanı görmek güzeldi. Eminim zaman olsaydı ve dikkatli baksaydım bir o kadar daha tanıdık sima çıkardı. Bu tür lansmanların bir faydası da aynı sektörde benzer alanda uğraşan insanları bir araya getirmesi.

Bir sonraki lansmanlarda görüşmek dileğiyle herkese yenilik dolu günler diliyorum.

2008-03-10

T-SQL Sorusunun Cevabı

Sorunun doğru cevabı NULL idi. Ankete toplam 25 kişi katıldı. Katılımcı arkadaşlara teşekkürlerimi sunuyorum.

12 kişi soruyu doğru cevapladı. 10 kişi "Hata Verir" yanılgısına düştü. Benim ortaya çıkan sonuçtan anladığım; ankete katılanların yarısından çoğunun T-SQL bilgilerini gözden geçirmeleri yada T-SQL eğitimi almaları gerekiyor.

2008-03-06

İstanbul'da Anadolu'dan Avrupa'ya Uzun Bir Yolculuk!

İstanbul'da mesai saatlerinde Anadolu yakasından Avrupa yakasına geçmek baya pahalıya mal oluyor. E ne de olsa Avrupa birliğinin Avrupa yakasına geçmek bu kadar kolay olmasa gerek:) Bir sürü engel, uyum paketi, ev ödevleri bu yolculuğu yapacakları bekler.

Sabah uykudan geç uyanınca hergün işe gitmek için kullandığım servisi kaçırdım. Anadolu yakasında oturup ta Avrupa yakasında çalışan birisi için servis kaçırmak çok zorlu ve stresli bir yolculuğun uzun bir başlangıcı olabiliyor çoğu zaman. Neyse can havli ile kendimi otobüs durağında buldum. Duraktan Cevizlibağ'a giden halk otobüsüne bindim. Ön tarafta şoför yanında ayakta bir yer bulabildim. Ayakta da olsa bir yer bulmaya sevinmiştim. Çünkü o an gelen otobüste ayakta da olsa yer bulmamak vardı işin içinde.

Yol uzun -bir kıtadan başka bir kıtaya geçmek kolay mı?- ve yolda aşırı trafik olunca insan oturabileceği bir yer arıyor. Yer bulmanın algoritması belliydi. Mümkün oldukça arka taraftaki sıralara göz dikilmeliydi. Bunun için adım adım da olsa ilerlemiydi. Arka tarafa doğru ağır ama muhakkak yer bulağımı ümit edecek kadar emin adımlarla yürüdüm. Aradan yarım saat geçmeden inenler sayesinde oturacak bir yer buldum. Boş yeri bulmam ile annem yaşındaki bir teyzeye yeri vermem bir oldu. -Yer verme konusundaki dusturum belli bir yaşın üzerindkei yaşlılar, hamileler, özürlüler ve oturmaya benden çok ihtiyacı olan insanlara yer vermeye çalışırım. - Bir kaç adım daha arka tarafa doğru ilerledim. Gel zaman git zaman sol tarafta oturan bir beyefendinin inmesiyle onun yerinde kendimi buldum. Oturur oturmaz en ön tarafta biraz önce yer verdiğim yeyzeden baya yaşlı ve ayakta güçlükle durduğunu hissetiğim bir teyze gözüme ilişti. Yer vermek için niyetlensem de maalesef teyze beni görmüyordu. Beni görseydi küçük bir işaretle yer verecektim. Yerimden ayrılıp ön tarafa gidip teyzeye yerime oturur musunuz diye içimden geçirsem de yerimden ayrıldığım gibi yerimin dolacağından emindim. O yüzden sürekli teyzeyi gözleyip beni tarafa baktığı yada beni görebileceği anı bekledim. Bu arada içerisi yeterince havasızdı bu yüzden camı açayım diye düşündüm. Önce yanımdaki bey amcaya sonra da yer verdiğim hanım teyzeye camı açtığım takdirde içeri girecek hava akımından rahatsız olup olmayacaklarını sordum. Her ikisi de camın açılmasını memnuniyetle karşıladılar. Ben de içeriyi biraz olsun havalandırmak için camı açtım. Ve tekrar yaşlı teyzeye baktım. Baktım yavaş yavaş hareketleniyor. Arka tarafa doğru adım atmaya başladı. Bu duruma çok sevindim. Ardından görüş mesefesine gelince buyrun benim yerime oturmaz mısınız diye teklifte bulundum. Yaşlı teyze bu tekliften çok müteşekkir olup şükranlarını sunup Allah razı olsun dedi.

Yol uzun ve bitmiyor. Yolculuk ile ilgili bir şeyler karalayım dedim. Cebimde kalem ve kağıt var fakat ayakta olduğum için yazmam mümkün değildi. Bir yer olsa da şu yolculukla ilgili bir şeyler karalasam diye düşünürken sağ tarafımda bir koltuğun boşladığını gördüm. Oturup bir şeyler karalamaya başladım. beş on dakikalık bir yazı yazmadan sonra hamile bir bayanın otobüse binip benim oturduğum yere yakın bir yerde ayakta durduğunu gördüm. Anında ayağa kalkıp yerimi hamile bayana verdim. Çok geçmeden nihayet tekrar oturup karalamaya kaldığım yerden devam ettim.

Otobüsten inip tramvaya bindim ardından metbüse binip 3-5 dakika sonra Ataköy-Şirinevler durağından indim. Metrobüs gerçekten Avrupa yakası için bulunmaz bir nimet. Keşke Anadolu yakasında da metrobüslerden olsa da ulaşım hem rahatlardı ve daha hızlı olurdu. Büyük şehir belediyesi metrobüs seferlerini başlatmakla Avcılar-Cevizlibağ trafiğini oldukça rahatlatmış. Ataköy-Şirinevler durağından metroya binip 10 dakika içerisinde iş yerime vardım. Toplamda 3 saati bulan bir yolculuk oldu. Kimi anadolu şehirlerinde şehirlerarası yolculuk süresi bu kadar sürmüyor. Gerçi bu şehirlerarası bir yolculuktan çok kıtalar arası bir yolculuk olduğu için daha uzun sürmüş olabilir:) İ.allah kıtalar arası yolculuk ta olsa bu süreler can sıkmayacak bir süre zarfında biter.

Herkese tavsiyem öncelikle iş-okul servislerinizi kaçırmayın. Şahsi araçlarınız yerine toplu taşıma araçlarını tercih edin ki trafik kilitlenmesin, insanlarımız trafik çilesini daha az çeksin.

Bu trafik bir süredir ciddi bir şekilde canımı sıkıyor. Günde ortalama 4 saatim yolda geçiyor. Bazen anadolunun küçük, şirin ve trafiğin olmadığı sakin kentlerine gidesim geliyor. Bu trafik derdinden kurtulmak için ya İstanbul'dan kaçmalıyım yada evime yakın bir yerde iş bulmalıyım. Bakalım zaman ve trafik neyi gösterecek?

Bir sonraki yazı yolculuğunda görüşünceye dek herkese internet dünyasından hayırlı yolculuklar diliyorum.

2008-03-04

SQL Eğitim Konuları Anketi Sonucu

Ankete katılan tüm arkadaşların nerdeyse her konuda eğitime ihtiyacı olmakla birlikte Temel SQL, Güvenlik ve Yetkilendirme konularında daha çok eğitime ihtiyacı olduğunu görüyorum. Triggerlar, Replikasyon, Veri Transferi ve T-SQL konularındaki isteğin fazla olması da eğitimi almak isteye kişilerin profilini ortaya koyuyor. Herhangi bir konuda eğitim almak isteyen arkadaşlar SQL eğitimi sayfasından ulaşabilirler.

Uluslararası Sertifikalı Yazılım Test Eğitimi(ISTQB)

Geçen hafta Keytorc firmasından Koray YİTMEN'den şirketçe 3 günlük Uluslararası Sertifikalı Yazılım Test Eğitimini(ISTQB=International Software Testing Qualifications Board) aldık. Eğitime her proje grubundan birer kişi ile birlikte Test grubundan tüm arkadaşlar katıldı. Yazılım Geliştirme ekibinden de bendeniz eğitime iştirak ettim. Gayet zevkli ve bir hayli yararlı geçen eğitimin son gününde Yazılım Test ve Kalite Derneği nden görevli bir arkadaş eşliğinde 40 soruluk sertifikasyon sınavı yapıldı. Sertifika alabilmek için minimum 25 soruyu doğru cevaplamak gerekiyorduk. Sınava girerken bu kadar eğitimden sonra 25 doğru cevabımın çıkmaması endişesini taşıyordum. Bugün sınav sonucunu öğrendiğimde endişemin yersiz olduğunu gördüm. Zira 40 sorunun 36 sını doğru cevapladığımı öğrendim. Şükürler olsun.

Eğitimin İçeriği

Yazılım Testinin Temelleri
  • Yazılım hataları, hataların sebepleri ve sonuçları

  • Test kapsamının oluşturulması

  • Test projesinin başarısını etkileyen faktörler

  • Testin limitleri

  • Testlerin önceliklendirilmesi

  • Kalite Risk Analiz Teknikleri - Proje Risk Haritasının Hazırlanması

  • Test Senaryolarının (Test case) tasarlanması, yazılması ve dokümantasyonu

  • Örnek uygulama seçimi (Oracle Problem)

  • Test sonlandırma kriterlerinin belirlenmesi

Yazılım Geliştirme Döngüsünde Testin Yeri

  • Test psikolojisi

  • Temel test süreçleri

  • Farklı yazılım geliştirme süreçlerine testin entegrasyonu (Waterfall, Spiral, RAD, Extreme Programming, V-Model etc.)

  • Doğrulama ve onaylama (Verification and Validation)

  • Test derinliği (birim, sistem, entegrasyon, kullanıcı kabul testleri)

  • Test çeşitleri (fonksiyonel, performans, yapısal, onay testleri)

Test Projesinin Yönetimi

  • Roller ve sorumluluklar

  • Test takımının organizasyonu

  • Test ortamının kurulması (test laboratuarı)

  • Test stratejisi ve planının oluşturulması

  • Kapsam, test proje planı ve risklerin belirlenmesi

  • Test projesi çıktıları (testware)

  • Kritik perfomans göstergeleri

  • Test ve kalite control

  • Hataların önceliklendirilmesi ve raporlanması

Dinamik Testler

  • Kara kutu test teknikleri (Black Box Test Techniques)

  • Denklik sınıfı test tekniği (Equivalence Class Partitioning)

  • Uç nokta test tekniği (Boundary Value Analysis)

  • Karar tablosu test tekniği (Decision table testing)

  • Sistem durumu test tekniği (State transition testing)

  • İş senaryosu test tekniği (Use case testing)

  • Beyaz kutu test tekniği (White Box Test Techniques)

  • Araştırmacı test tekniği (Exploratory Test Techniques)

Test Otomasyon Araçları

  • Test otomasyonunda dikkat edilmesi gereken konular

  • Test otomasyon araçları seçim süreci

  • Test planlama ve yönetim araçları

  • Statik test otomasyon araçları

  • Dinamik test otomasyon araçları

Eğitimde Yapılacak Pratik Uygulamalar

  • Risk haritasının çıkartılması

  • Test planı yazılması

  • Test senaryosu (Test Case) yazılması

  • Fonksiyonel test

  • Performans testi

  • Kara kutu test tekniğinin uygulanması

  • Beyaz kutu test tekniğinin uygulanması

  • Hata girişi ve raporlanması

Microsoft 2008 Sunucu ve Yazılım Platformu Lansmanı



Tarih: 12 Mart 2008 Çarşamba, 09:00 - 18:00
Yer: Lütfi Kırdar Kongre ve Sergi Sarayı

Gündem

09:00 - 10:00 Kayıt
10:00 - 12:45 Windows Server 2008 Visual Studio 2008 SQL Server 2008
Lansmanı
10:00 - 10:40 Hoş Geldiniz: Microsoft Türkiye Genel Müdürü Çağlayan Arkan ve
Platin Sponsorlar
10:40 - 11:00 Dinamik IT - Microsoft MEA Vice President Ali Faramawy
11:00 - 11:50 Uçtan Uca: Windows Server 2008, SQL Server 2008, Visual Studio 2008
11:50 - 12:10 Ara
12:10 - 12:30 Başarı Hikayeleri
12:30 - 12:45 Kahramanlar Sahnede
12:45 - 13:45 Öğle Yemeği

Paralel Sunumlar aynı anda başlayıp farklı salonlarda yapılacaklardır.

Paralel Sunumlar
13:45 - 14:35
• Windows Server 2008 Geleceğin Platformu
• SQL Server 2008 Gelişmiş Veri Platformu
• Visual Studio 2008 Yeni Nesil Yazılım Platformu
• Platin Sponsor Sunumu: Tradesoft
14:35 - 14:50 Ara
14:50 - 15:40
• Windows Server 2008 Sanallaştırma Teknolojileri
• SQL Server 2008 ile Kritik İş Uygulamaları
• Visual Studio 2008 Yeni Nesil Web Uygulamaları
• Platin Sponsor Sunumu: Fujitsu
15:40 - 15:55 Ara
15:55 - 16:45
• Windows Server 2008 Güvenlik Özellikleri ve NAP
• SQL Server 2008 ile İş Zekası
• Visual Studio 2008 Yeni Nesil Akıllı İstemciler
• Platin Sponsor Sunumu: Intel
16:45 - 17:00 Ara
17:00 - 17:50
• Windows 2008 ve Yeni Nesil Web
• SQL Server 2008 ile Dinamik Uygulama Geliştirme
• Visual Studio 2008 Yeni Nesil office uygulamaları
• Platin Sponsor Sunumu: HP

Kayıt olmak için tıklayın.

Not: Etkinliğe gelecek arkadaşlar etkinlik öncesi haberdar ederlerse buluşabiliriz.

2008-03-03

Replikasyonu Silme

Replikasyonu sistem SP lerini kullanarak T-SQL ile silmek isterseniz aşağıdaki adımları izlemelisiniz:
  1. Tüm subscription'ları silin
  2. Tüm publication'ları silin
  3. Ardından distributor 'ü silin

Subscription Silme:
USE
GO
EXEC sp_dropsubscription @publication = N'', @article = N'all', @subscriber = N'all', @destination_db = N'all'

Publication Silme:
USE
GO
EXEC sp_droppublication @publication = N''

USE master
GO
EXEC sp_replicationdboption @dbname = N'', @optname = N'publish', @value = N'false'

Distributor Silme:
USE master
GO
EXEC sp_dropdistributor @no_checks = 1

Tüm bunların yanında replikasyon nesnelerinin tümünü aşağıdaki SP ile silebilirsiniz:

sp_removedbreplication ''

Not: Yukarıdaki silme işlemlerini Transactional Replikasyona göre yazdım. Diğer replikasyon türleri ve daha ayrıntılı bilgi için SQL Server Books Online kullanabilirsiniz.

Bir Hata Ve Çözümü

Msg 15466, Level 16, State 2, Procedure sp_addlinkedsrvlogin,
Line 91 An error occurred during decryption.

Msg 15185, Level 16, State 1, Procedure sp_addlinkedsrvlogin,
Line 98 There is no remote user 'sa' mapped to local user '(null)' from the remoteserver 'TEST'.


Yukarıdaki hata ile karşılaştığınızda aşağıdaki kod ile sorunu giderebilirsiniz:

ALTER SERVICE MASTER KEY FORCE REGENERATE

(Bu hatayı almışsanız kesin illegal bir işlem yapmışsınızdır: Sorunlu olan bir sistem database i düzgün çalışan bir sistem database ile değiştirmek gibi:) Bu tür durumlarda naçizane önerim tüm işlemlerinizi legal yoldan yapınız!)

2008-03-02

SQL Server 2008 İle Gelen Kolaylıklar

Değişkeni Tanımlarken Başlangıç Değeri Atama

SQL Server 2008'den önceki sürümlerde değişken tanımlarken değişkene bir başlangıç değeri atayamıyorduk. SQL Server 2008 ile birlikte bu eksiklik giderildi. Daha önceleri değişken tanımlamayı ve bu değişkene bir değer atamayı aşağıdaki gibi yapardık:

DECLARE @Sayi1 INT, @Sayi2 INT
SET @Sayi1=34
SET @Sayi2=63

Veyahut SET lemeyi SELECT cümleciği içinde aşağıdaki gibi yapardık:

SELECT @Sayi1=34, @Sayi2=63

SQL Server 2008 ile birlikte değişkeni tanımlarken değişkene ilk değeri de atayabileceğiz:

DECLARE @Sayi1 INT=34, @Sayi2 INT =63


Çoklu Kayıt Ekleme

Bu güzelliğin yanında INSERT cümleciğinde aynı anda birden çok kayıtı tek SQL kodu ile ekleyebileceğiz:

DECLARE @Tablom TABLE(Sayi1 INT, Sayi2 INT)

INSERT INTO @Tablom VALUES(1,2), (2,3), (3,4), (4,5)

SQL Serverın daha önceki sürümlerinde aynı işi yapmak için her kayıt ekleme için ayrı ayrı INSERT cümlecikleri yazmamız gerekirdi.

Üniversitelerde Kılık-Kıyafet Anketi Sonuçları


2008-02-26

T-SQL ile Kullanıcıya Yetki Verme

MS SQL Server'da yetkilendirme GRANT komutu yapılır. GRANT komutunun temel yapısı:

GRANT VerilecekYetkiler ON NesneAdi TO KullaniciAdi

Örnek : Mehmet kullanıcısına Kullanici tablosunda SELECT yetkisi verelim.
GRANT SELECT ON Kullanici TO Mehmet

Şayet yetkiyi Windows Authentication için verecekseniz domain ve kullanıcı adını iki köşeli parantez arasında yazmalısınız[]:

GRANT SELECT ON Kullanici TO [GUZEL\Mehmet]

Bir kullanıcıya birden çok yetki vereceksiniz yetkileri virgül(,) ile ayrıp dileğiniz kadar yetki çeşidini yazabilirsiniz:

GRANT SELECT, INSERT, DELETE, UPDATE ON Kullanici TO Mehmet

Bir kullanıcıya tüm yetkileri vermek için tek tek yetki isimleri yazmak yerine ALL deyimini kullanabilirsiniz:

GRANT ALL ON Kullanici TO Mehmet

Birden çok kullanıcıya aynı yetkileri vermek istiyorsanız aynı kodları her kullanıcı için tekrar yazmanıza gerek yok; sadece kullanıcılar arasına virgül(,) ekleyip dileğiniz kadar kullanıcıya yetki verebilirsiniz:

GRANT SELECT ON Kullanici TO Mehmet, Ahmet, Mustafa, Seyfettin


Merak edenler için GRANT komutunun söz dizimi:

GRANT [ ,...n ] ON
[ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
TO [ ,...n ]
[ WITH GRANT OPTION ]
[ AS ]
::=
ALL [ PRIVILEGES ] permission [ ( column [ ,...n ] ) ]
::=
Database_user
Database_role
Application_role
Database_user_mapped_to_Windows_User
Database_user_mapped_to_Windows_Group
Database_user_mapped_to_certificate
Database_user_mapped_to_asymmetric_key
Database_user_with_no_login

2008-02-23

SQL Eğitimleri Tamamlandı

Belbim A.Ş. OSM(Otomatik Satış Makineleri) Saha Ekibine iki grup şeklinde iki hafta boyunca verdiğim eğitimleri tamamladım. İtiraf etmek gerekirse eğitime katılım ve ilgi beklentimin üzerindeydi. Tüm arkadaşlar anlattığım konularla son derece ilgiliydiler. Benim için eğitim çok güzel geçti ve anlatmaktan çok zevk aldım. Her iki gruba da aşağıdaki konular aktarıldı:
  • Veritabanı Bilgileri
  • MS SQL Server 2005'in Kurulumu
  • Temel SQL Konuları
  • Replikasyon Teknolojisi ve Uygulama Alanları

2008-02-17

Trigger İle Insert, Update, Delete Yakalama

/*
Trigger içerisinde aşağıdaki T-SQL kod ile bir kaydın Insert, Update, Delete olduğunu yakalayabilirsiniz.
*/

DECLARE @IfDelete VARCHAR (1), @IfInsert VARCHAR (1)

SET @IfDelete =
(CASE WHEN EXISTS(SELECT * FROM inserted) THEN 'O' -- (O)ld record in update
ELSE 'D' -- (D)eleted record
END)

SET @IfInsert =
(CASE WHEN EXISTS(SELECT * FROM deleted) THEN 'N' -- (N)ew record in update
ELSE 'I' -- (I)nserted record
END)

Seneler önce yazılan bu kodun daha optimize edilmiş hali değerli arkadaşım Levent YILDIZ'dan geldi:

if exists (select * from inserted) and exists (select * from deleted)
select @type = 'U'
else if exists (select * from inserted)
select @type = 'I'
else
select @type = 'D'

2008-02-15

SQL Server 2005'te CLR Enable

SQL Server 2005 e CLR default olarak OFF gelir. Aşağıdaki T-SQL kodu ile CLR'ı enable yapabilirsiniz:

EXEC sp_configure 'clr enabled', 1;
RECONFIGURE WITH OVERRIDE;
GO


Aynı şekide CLR yetkisini tekrardan OFF konuma getirmek için aşağıdaki kodu kullanabilirsiniz:

EXEC sp_configure 'clr enabled', 0;
RECONFIGURE WITH OVERRIDE;
GO


Tüm bu değişiklikleri görsel olarak ta Başlat-> Programlar-> MS SQL 2005->Configuration Tools ->SQL Surface Area Configuration adımından da değiştirebilirsiniz(MSSQLServer->Database Engine->CLR Integration).

2008-02-14

Günlük Kardeşliği Anketi


Ankete ilgili gösteren herkese teşekkürlerimi sunuyorum. Günlük Kardeşliğime katılmak isteyenler kendi web sayfalarına günlüğümü ekledikten(Mehmet GÜZEL) sonra iletişim bölümündeki mail adresim aracılığıyla benimle irtibata geçebilirler.

2008-02-13

SQL'de Tarih Sorunlarını Gidermek

Bugüne kadar bir çok kişiden SQL Server 2005'te tarih ile ilgili sorunlarını dinledim ve sorunlarına bulduğum çözümleri sundum. Benden yardım isteyenlerin büyük kısmının istediği tarih formatlarından birisi de sadece yıl/ay/gün bilgisini alabilmek yada diğer bir ifadeyle zaman bilgisini sorgularında sıfırlamak(00:00:00) istemeleri. Yani bugünün tarihini şöyle almak istiyorlardı. 2008-02-13 00:00:00

Bu sonuca ulaşacak iki farklı SQL çözümüm var:

Çözüm-1:
SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS SMALLDATETIME)

Çözüm-2:
SELECT CAST(CAST(GETDATE() AS VARCHAR(12)) AS SMALLDATETIME)

MS SQL Server 2005 karşılaşılan bu vb sorunları MS SQL Server 2008 de çözmüşler. Dileyenler konu ile ilgili yazmış olduğum MS SQL Server 2008 - Yeni Tarih Veri Tipleri'ni okuyabilir.

2008-02-12

Beyin Kontrolü






Luhn Algoritması

Kredi kartı numarası, sosyal güvenlik numarası gibi seri numaralar Luhn Algoritması ile oluşturuluyor. Bu numaralar bir süredir merak ettiğim bir konu idi. Benimle aynı merakı paylaşan arkadaşların merakını gidereyim dedim. Bu arada kontör kartı seri numalararı ve diğer seri numalararın hangi algoritmadan yola çıkılarak üretildiğini bilen arkadaşlar varsa bu bilgilerini paylaşırlarsa makbule geçer.

Luhn Algoritması ile ilgili işe yarar T-SQL kodlar:

CREATE FUNCTION dbo.fnIsLuhnValid
(
@Luhn VARCHAR(8000)
)
RETURNS BIT
AS

BEGIN
IF @Luhn LIKE '%[^0-9]%'
RETURN 0

DECLARE @Index SMALLINT,
@Multiplier TINYINT,
@Sum INT,
@Plus TINYINT

SELECT @Index = LEN(@Luhn),
@Multiplier = 1,
@Sum = 0

WHILE @Index >= 1
SELECT @Plus = @Multiplier * CAST(SUBSTRING(@Luhn, @Index, 1) AS TINYINT),
@Multiplier = 3 - @Multiplier,
@Sum = @Sum + @Plus / 10 + @Plus % 10,
@Index = @Index - 1

RETURN CASE WHEN @Sum % 10 = 0 THEN 1 ELSE 0 END
END


CREATE FUNCTION dbo.fnGetLuhn
(
@Luhn VARCHAR(7999)
)
RETURNS VARCHAR(8000)
AS

BEGIN
IF @Luhn LIKE '%[^0-9]%'
RETURN @Luhn

DECLARE @Index SMALLINT,
@Multiplier TINYINT,
@Sum INT,
@Plus TINYINT

SELECT @Index = LEN(@Luhn),
@Multiplier = 2,
@Sum = 0

WHILE @Index >= 1
SELECT @Plus = @Multiplier * CAST(SUBSTRING(@Luhn, @Index, 1) AS TINYINT),
@Multiplier = 3 - @Multiplier,
@Sum = @Sum + @Plus / 10 + @Plus % 10,
@Index = @Index - 1

RETURN @Luhn + CASE WHEN @Sum % 10 = 0 THEN '0' ELSE CAST(10 - @Sum % 10 AS CHAR) END
END

Peter Larsson
Helsingborg, Sweden

Bir Hata ve Birkaç Öneri

Microsoft OLE DB Provider for SQL Server error '80004005'

The transaction log for database 'ceturkdb' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases

Hatalar:


  1. Hatada database ismi vermek güvenlik nedeniyle sakıncalı
  2. Database yada programsal hataların üyelere yansıtılması sakıncalı

Öneriler:

  1. Genel hatalar için error sayfaları düzenlenip kullanıcılara hatayla ilgili genel bilgiler verilebilir. Böylelikle hem hatayı gören kişiler sizi basite almamış olur hem de sisteminiz hakkında hatadan bir şey yakalama imkanı bulmaz.
  2. SQL Server ile ilgili Auto Shrink yapılabilir yada database boyu kısıtlı ise Transation Log a maximum size verilebilir. Yada tüm bunların yerine gecenin bir saatinde çalışan joblar düzenlenebilir. Bu joblar shrink te yapabilir yada dosya size ı belli bir seviyeye ulaşmışsa e-mail, cep telefonu vb iletişim aracılığıyla yönetici uyarılabilir. Bunu yapmadığınız zaman siz hatayı görene kadar saatler geçebilir sitenizi ziyaret eden ziyaretçiler çoktan sıkılmış ve kaçmış olabilir.

Hatayı bazen dostlar "post" eder, bazen yöneticiyi tanıyan üyeler. Tüm bu ücretsiz kaynaklarınız yoksa bilin ki bu size belli bir "cost" eder. Siz siz olun birileri tarafından hatalarınız için uyarılmayı beklemeyin; hatalarınızdan herkesten önce siz haberdar olun ve hemen müdahale edin. Hatta öyle bir zamanlama ve düzen ile müdahale edin ki kimsenin ruhu duymasın, sesi çıkmasın.

Hatalar hepimizin başına gelebilir fakat hatalardan ders alıp hatanın neresinden dönersek kardır. Siz siz olun hatalardan uzak durun. Hata sizi çok sıkıştırdığında; ha bre size yakınlaşmak istediğinde en fazla onu hata sayfasına yönlendirip hataya haddini bildirin! Hataya haddini bildiremiyorsanız bilin ki hata size haddinizi bildiriyordur.

2008-02-10

CETURK Forum Sorumluları Belirlendi

Merhaba Değerli Arkadaşlar,

Uzun süren bir görüşme trafiğinin ardından nihayet forum sorumlularını belirledim.
Forum Koordinatörlüğü görevini birkaç gün önce bıraktığım bir kısmınızın malumu. Artık malumu olmayanlar da bu vesile ile öğrenmiş oldular. CETURK Forum Koordinatörü iken üzerimde yük olarak duran bu son görevi de yerine getirmek istiyorum. Bu görevde iken
forumlarda beraber çalışmayı düşündüğüm arkadaşlar aşağıdaki gibidir:



Forum Adı


Sorumlu

ASP


Ali S. KAN


Genel- Güncel


Aycan AYHAN


Delphi / Kylix


Bahadır EKİCİ


Network


Barış İÇEN


PHP


Bünyamin KOPDUR


SQL Server


Emre ÇALIŞIR


Üniversitelerden


Hasan Erdem YANT


Diğer Programlama Dilleri


Hayriye TANYILDIZ


Proje Havuzu


Hüseyin Fatih KARAKOÇ


Diğer .NET Teknolojileri


İbrahim ERSOY


Windows


Kadir BOZKURTOĞLU


Visual Basic


Kurtman ÇELİK


MySQL


Levent MENEKŞE


Java


Mehmet ÖZCAN


XML - XHTML


Mehmet Zahir SOLAK


Pascal


Merve GENCER


Oyun Programlama


Mesut GÜLER


Diğer Veritabanları


Mustafa DEMİRBİLEK


Faydalı Linkler


Mustafa ŞAHİN


Elektronik / Donanım


Mustafa YAZAR


Photoshop-PaintshopPro-Fireworks


Mustafa ZENGİN


VB.NET


Nazmi DUMAN


HTML/ DHTML CSS Scripts


Nedim ŞAHİN


Güvenlik - Virüs


Olcay KÜK


C / C++

Oya ŞİMŞEK


CGI / PERL


Ömer GÖK


3D Modelleme / Animasyon


Özgür AL


C#


Sadullah KELEŞ


Yapay Zeka


Sedat GOLGİYAZ


Veri Madenciliği


Serdar GÖREGEN


Web Editörleri


Serkan ÖNCE


Oracle


Tonguç YILMAZ


Unix / Linux


Tutku DALMAZ


Flash


Yağmur MERAL


ASP.NET


Yavuz ÇOŞAR


Kariyer ve İnsan Kaynakları


Yıldırım ÖZSUBAŞI


Proje Tanıtımı


Yücel DAĞLAR


Multimedia


Yüksel Berk YAVUZ


Algoritma


Zafer YAVUZ


Şu an Forum Koordinatörlüğünü bıraktığım için bu arkadaşları ilgili forumlara atama yetkisi yeni kurulacak yönetimde olup bu seçtiğim ekibin de yeni yönetimle çalışıp çalışmayacağı kendi şahsi kararlarına bağlıdır.

Sevgi ve saygı ile duyurulur.

.::YASAL UYARI::.

©2004-2023 Mehmet GÜZEL, www.mehmetguzel.net

Site içeriği kaynak gösterilmek koşuluyla yayınlanabilir. Yazılan yazı ve yorumlar sadece yazı ve yorum sahiplerini bağlar.