27 Aralık 2010 Pazartesi

Arama Stratejisi Oluşturma


İnternette arama yapılmadan önce bir arama stratejisi kullanmak verimli sonuca ulaşılmasını sağlar. Arama motorlarında aramaya başlanmadan önce araştırılacak olan konuyla ilgili anahtar kelimelerin belirlenmesi ve bu kelime veya kelimelerin kullanılması istenilen sonuca en yakın bilginin karşımıza çıkmasında önemlidir. Arama motoruna girdikten sonra, sitede arama yapmak için gösterilen kutuya arama yapılması istenen kelimeler girilir ve yanında bulunan "Ara", "Ara-Bul", "Arama" düğmesine tıklanır. Arama için önce bir kelime, eğer aranılan bulunamadıysa aranılan kelimeyle ilgili birkaç kelime veya cümle girilir. Bu arama kelimelerini girerken "ve, veya, net" gibi olağan kelimelerden uzak durulmalıdır. O kelimeler her sitenin içeriğinde bulunan kelimelerdir ve sonuç olarak doğru arama sonucunu getirmez.

"using computers to manufacture cars'' konusu ile ilgili şöyle bir anahtar sözcük çalışması yapılabilir:

Anahtar Sözcükler Anahtar Sözcüklerin Diğer Biçimleri Eş Anlamlı ve İlgili Sözcükler
computers computer, computing
technology, automation, robots
manufacture manufacturing, manufacturer, manufacturers build, construct, produce
cars car automobiles, automobile, vehicles

Kelimelerin yazılma biçimi arama sonuçlarını büyük bir oranda etkiler. Anahtar kelimelerin doğru biçimde yazılması çok önemlidir. Hatalı heceleme veya yazım tarama sonuçlarını değiştirebilir. Kelime yanlış yazılır veya hecelenirse ihtiyaç duyulan kaynaklar bulunamaz.

Arama yaparken, özel olmaya, mümkün olduğunca aranılan bilgiyi belirtecek sıfatlar kullanmaya, arama yapılacak konu ile ilişkili en az üç kelime kullanmaya dikkat edilmesi gerekir. Bu şekilde, araştırılan konu hakkında daha detaylı ve ilişkili bir bilgiye sahip olunabilir.
Arama yapılacak olan konu genel bir konu olabileceği gibi daha özel de olabilir. Aranılan konu özel bir bilgi ise, arama motorlarını, genel bir konu hakkında ise, Web dizinini kullanmak en yakın sonuca ulaşılmasında daha faydalı olur. Ayrıca, arama motorlarında kullanılan bazı operatör ve işaretler de sonuca ulaşmada etkilidir.

Özel olarak, Windows Vista, daha fazla anahtar kelime kullanarak da "Windows Vista işletim sistemi" 'ni ele alabiliriz:

•( + ): Öncesinde kullanıldığı kelimeyi vurgular: +Windows +Vista +işletim +sistemi

•( “ ” ): Anahtar olarak yazılan kelime birden fazlaysa ve kelimelerin yanyana aranması isteniyorsa kelimelerin iki tırnak arasına alınması yeterlidir. “Windows Vista” gibi.

•( * ) ya da ( ? ): Tam olarak hatırlanmayan bir kelimenin devamının bulunmasını ya da onunla bağlantılı kelimelerin bulunmasını sağlar.
•( - ): Arama sonucunda istenmeyen bir kelime varsa arama sonucundan o kelimeyi çıkartmak için kullanılır: Windows–Vista
•filetype: Dosya uzantılarına göre arama yapılan bu komutla, arama kriterini içeren bilgilere ait dokümanlara ulaşabilir. Örneğin: [filetype: pdf ‘MacOS X’] yazıldığında MacOS X kelimesinin geçtiği 11.700 adet .pdf dosyasına ulaşılabilir.
•allintitle: Bu komut, arama kriterinde yer alan kelimelerin tamamının, İnternet tarayıcısının başlık çubuğunda yer almasını şart koşar. Örnek olarak, [allintitle:’Flash Movies’] şeklindeki arama kriterinin sonucu olarak, Web sayfasının başlık bilgisi üzerinde "Flash Movies" kelimeleri geçen sayfalar listelenir.

•intitle: "allintitle" komutundan farklı olarak, ilk arama kriterini başlık satırında aranır, diğer kelimeler ise metin içerisinde kontrol edilir.

•allinurl: Bu operatör, arama kriterine ait kelimeleri İnternet adres satırındaki kelimeler içerisinde arar.

•inurl: İlk arama kriterini adres satırında arar.

•cache: Listelenen Web sayfalarına ait sunuculara ulaşılamadığı durumlarda, "cache" operatörü kullanılarak ilgili sayfaya arama motorunun daha önce indekslediği bilgiler üzerinden ulaşılabilir.

•site: Bu operatör kullanılarak herhangi bir Web sitesi içerisinde arama yapabilir. Örneğin: [site:www.macline.com.tr Adobe] kriteri girildiğinde, "Macline" Web sitesi içerisinde "Adobe" kelimesi geçen sayfalara ulaşılabilir.

•Link: Bu komut kullanılarak herhangi bir Web sitesine hangi sayfalardan link verildiği öğrenilebilir.
Bu operatörler tek başlarına kullanılabildiği gibi, bir arada da kullanılabilmektedir. Örnek vermek gerekirse:
[intitle:Fiyat Listesi filetype: pdf]
[intitleVD Video filetype: pdf]
[site:edu intitle:science]


Kaynak Site : http://www.halilsunter.com/category/Arama-Stratejisi-Olusturma.aspx
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

23 Aralık 2010 Perşembe

c# ile Singleton Tasarım Deseni


Önce Design Pattern ı kısaca açıklamak gerekirse,günümüz nesne yönelimli programlama aşamalarında ortaya çıkan problemler için uygulanan çözümlerdir diyebiliriz.

Bu yazımda kısaca Singleton Tasarım Deseninden(Singleton Pattern) bahsedicem.
Temelinde nesneleri birden çok kez oluşturulmasındansa birkez oluşturup sonraki aşamalarda bu oluşturulan nesnenin örneğini kullanmamızı sağlayan desendir.
Şimdi bunu bir örnek ile açıklayalım :

Bazen uygulamalarımızda nesneleri(Sınıfları) bir çok kez çağırır onlarla işlem yaparız.Mesela Windows uygulamalarında user control kullandığımız bir windows form uygulaması düşünelim, kullanıcı her tıkladığında UserControl ü tekrar oluşturup içerik kısmına yükleriz.Ve o formdaki bütün nesneler gridler tekrardan oluşturulur.

Bu tasarım deseni ile bunun önüne şu şekilde geçebiliriz :

Bir windows form u düşünelim adı "KitapKayit" olsun.
Birde buton olsun her tıklandığında "KitapKayit" formunu oluşturan ve show ile gösteren..

//Normalde uygulanan yöntem

private void BtnKitapKayitGoster_Click(object sender, EventArgs e)
{
//KitapKayit nesnesi butona her tıklandığında oluşuyor.
KitapKayit formKitapKayit =new KitapKayit();
formKitapKayit.Show();
}

//Singleton Tasarım Deseni ile

KitapKayit.cs içerisine aşşağıdaki kod satırı eklenir:

//Yanlızca bu sınıfta çağrılabilmesi için private olarak içinde bulunduğumuz form türünden bir nesne tanımlıyoruz.
private static KitapKayit instance;

public static KitapKayit Instance()
{
//Eğer sınıf ilk defa oluşturuluyor ise bir kez oluşturuluyor.Eğer null deil ise daha önce oluşturulmuş instance(KitapKayit nesnesi) gönderiliyor.
if(instance==null)
{
instance = new KitapKayit();
}

return instance ;

}

şimdi tekrar formu çağırdığımız yere butonun click olayını yazalım :

private void BtnKitapKayitGoster_Click(object sender, EventArgs e)
{
//KitapKayit nesnesinin örneği sınıf içerisinden çağrılıyor.İlk defa butona tıklanmış ise form oluşturulucak.Daha sonraki tıklamalarda ilk aşamada oluşan form un örneği getirilicek. :)
KitapKayit formKitapKayit =KitapKayit.Instace();
formKitapKayit.Show();

}

Bu tasarım desenini uygulamalarınızda geliştirerek kullanırsanız eminim belli bir ölçüde performans artışı olduğunu göreceksiniz.

Umarım Faydalı Olmuştur.
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

9 Aralık 2010 Perşembe

Stored Procedure ' e Out parametresi Ekleme


Bir stored procedure yazarken eğer output parametre eklemek istersek output anahtar sözcüğünü kullanarak şu şekilde bunu kullanabiliriz.
Örnek olarak bir ürün tablosuna ürün ekleyen bir procedure yazıcaz.
procedure Adı : spUrunEkle
bu procedure de @outProductID geriye ürünID si olarak bir değer döndürücektir bize çalıştıktan sonra.


CREATE PROCEDURE spUrunEkle
(
@urunKodu int,
@urunAdi nvarchar(50)
@outProductID int output--eklenecek ürünün ID si
)
AS
BEGIN
INSERT INTO Urun (urunKodu,urunAdi) VALUES(@urunKodu,@urunAdi)

SELECT @outProductID = Scope_Identity()--yeni eklenen ürünID si out parametresine atanıyor

END


Normalde ürün ekleyen bir stored procedure de direk değer geriye döndürülür output parametre olarak verilmez ama benim aklıma en basit bu geldiği için bir hello world yapmak istedim. :)

Umarım Faydalı olmuştur.
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

30 Kasım 2010 Salı

Sql " GROUP BY " , "CAST" İşlemleri


"GROUP BY" :
Sql de zaman zaman bazı alanlarımızı gruplayarak listelemek isteyebiliriz.
Örneğin bir stok takip uygulamasında, birden çok depomuz var ve bu depolardaki toplam stok miktarlarını görmek istiyoruz..Bunun için şöyle bir sorgu yazabiliriz.

Önce Bu Testi Yapabiliceğiniz tablo bilgilerini veriyorum :
Tablo adımız : STOKLAR
Alanları da : urunID,StokMiktari,StokDepo


Oluşturduğumuz tablo için Sql Sorgusu :

SELECT urunID,StokMiktari FROM STOKLAR WHERE StokDepo IN(1,2,3)

bunun sonucunda her ürün için 3 adet satır dönücektir(herdepo stok bilgisi için ayrı satır) ve 3 depodaki stok miktarları ayrıca yazıcaktır.Fakat biz toplam stoğu görmek istiyoruz.3 tanesini topla çıkar yapmak zorunda değiliz deyil mi..

Onun içinde şöyle bir sorgu yazmalıyız :

SELECT urunID,SUM(StokMiktari) FROM STOKLAR WHERE StokDepo IN(1,2,3)
GROUP BY stokID

Şeklinde yazarsak her ürün ürün için 3 deponun toplam stok miktarını görmüş oluruz.


" CAST " :

Sql de bazen istediğimiz alanlarda tip dönüşümü yapmak isteyebiliriz.Örneğin integer bir alanı decimal yapmak gibi.Bu gibi işlemleri CAST anahtar sözcüğü ile yapabiliriz.
örnek yapalım :
SELECT CAST(StokMiktarı AS DECIMAL) FROM STOKLAR

umarım faydalı olmuştur.
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

11 Kasım 2010 Perşembe

Yazılım Projelerinde Hayır Demeyi Öğrenin


Bir yazılım projesi talebiyle size gelen herkez,şüphesiz sizden bir sürü özellik istiycektir.Ve eğer her söylenene evet abi,yaparız tabi,tabi canım onu yapmaya nevar,olur olur ...gibi cvplar verir her istenene evet der iseniz.o proje yi ya çıkartamazsınız yada olması gerekenden çok daha uzun bir zamanda çıkartırsınız.

Bunun yöntemi şöyle olmalı ;proje de evet denecek özellikler birçok müşterinin istekleri sonucu ortaya çıkmış evetler olmalı ve bunlar genelde projenin sonraki versiyonlarında yapılmalı.Herzaman hayır demesini bilmek ve kısa sürede projeyi ortaya koyduktan sonra o baştaki hayırları önem sırasına göre evet yapmak gerekir.Aksi durumlarda o evet denen bütün özellikler proje sürecinde hayır a çevrilebilir ve bu karşı tarafta bir memnuniyetsizlik ve beraberinde güvensizlik yaratır.
Bunun yanında baştan hayır denip sonradan evet e çevrilen özellikler ise zamanla karşı taraftan size sürekli memnuniyet ve güven olarak geri dönecektir.

Umarım faydalı olmuştur..
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

Biri Scrum mu dedi ? 8 Dakikanız var mı ? :)


Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

10 Kasım 2010 Çarşamba

Sql Hatası : " The data types ntext and varchar are incompatible in the equal to operator. "


bu sabah böyle bir hata ile karşılaştım ilk defa karşıma çıktı :)
Mesela "SELECT * FROM urunler WHERE Aciklama = 'HP NOTEBOOK' " şeklinde bir arama yaptığımızı düşünelim.Eğer "Aciklama" ntext bir tanım ise veri tabanında bu sorgu şu hatayı veriyor :

"The data types ntext and varchar are incompatible in the equal to operator."

Çözüm Basit :) arama işlemini "LIKE" ile yapıcaksınız :)
Bu hatayı zaten kolayca çözüp giderebilirsiniz ama gördüğü her hatayı direk google a yazan arkadaşlar için bir kaynak olsun dedim :D

Yeni Sorgu :
SELECT * FROM urunler WHERE Aciklama LIKE 'HP NOTEBOOK'



Umarım faydalı olmuştur.
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

Performance Counter "Bytes Sent/sec , Bytes Received/sec , Get Requests/sec" counter 'ları 0 değer üretiyor ise


Sorun : Performance Counter ile web service kategorisindeki "Bytes Sent/sec" , "Bytes Received/sec" , "Get Requests/sec" Counter isimlerinin değerleri alınmak istendiğinde 0 değer üretiyor ise..

Çözüm : Bu değerler ilk istendiğinde 0 değer üretebiliyor.Bunu bir döngüyle yaklaşık 10 kez çağırmayı denerseniz ve tabi bu döngüde çağırmadan önce System.Threading.Thread.Sleep(2) değerini de vermeyi unutmayalım çünkü yapılan istek normal bir for döngüsünde aynı anda yapılmış gibi oluyor.En azından araya 1-2 mili saniye bekleme koyarsak isteği farklı zamanlarda yapmış oluyoruz.
Örnek Kod :
PerformanceCounter perCounter = new PerformanceCounter("Web Service", "Bytes Sent/sec", "_Total");
float nextValue=perCounter.NextValue();
if(nextValue<1) i =" 0;"> 0)//Eğer deneme sonucunda değer alınmışsa döngüye son veriliyor
break;
//2 milisaniye bekleme
System.Threading.Thread.Sleep(2);
//Bytes Sent/sec ,değeri alınıyor.
nextValue = perCounter.NextValue();

}//End Foreach

}//End If

Umarım faydalı olmuştur.:)
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

6 Kasım 2010 Cumartesi

app.config içerisinden appSettings ayarı ve web.config içerisinden connectionString Getirme


app.config içerisinden appsettings ayarı getirme .

public static string GetSetting(string settingKey)
{
string settingValue = string.Empty;

if (ConfigurationSettings.AppSettings[settingKey] != null)
settingValue = ConfigurationSettings.AppSettings[settingKey]; //appsettings ayarını getiren satır
return settingValue;

}//End Method

Connection String Getirme :

public static string GetConnectionString(string connStringName)
{
string connectionString = ConfigurationManager.ConnectionStrings["connStringName"].ConnectionString;

return connectionString ;

}//End Method

size direk metod şeklinde yazdım umarım faydalı olur:)
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

24 Ekim 2010 Pazar

Yazılım geliştirmeye farklı bir bakış


Programcılıkta sabahlamanın verdiği huzur ve tatmin çok meşhur. Programcılar sabaha kadar çalışma konusunda herkesi şaşırtan derecede istekli ve beceriklidir. Bu gece çalışması boyunca beyin bir "akış" yakalayarak saatlerin su gibi geçtiği bir çalışma ortamı oluşur. Bu çalışma sırasında beyin en derin konsantrasyon düzeylerine erişir ve genellikle zor programlar bu kesintisiz, onlarca saat süren çalışmalarda ortaya çıkar. Beyin bu stilde çalışırken kişilerin mutlu oldukları, mutluluk düzeylerinin arttığı bilimsel çalışmalarla gözlemlenmiştir. Bu çalışmalar eski Chicago Üniversitesi Psikoloji Bölüm Başkanı Mihaly Csikszentmihalyi tarafından yapılmıştır. Çalışmalarda çeşitli disiplinlerden yüzlerce kişinin günlük uğraşları incelenmiş ve bu sırada "mutluluk" düzeyleri gözlemlenmiştir. Bu çalışmaların programcılar tarafındaki bulguları ise ilginçtir. Her ne kadar programcılık bir bilim dalı (Computer Science), bir mühendislik (Software Engineering) olarak düşünülse de programcıların beyninin sanatçıların çalışma stiline sahip olduğu ortaya çıkmıştır. Programcılık sırasında beyin bir "akış" moduna geçmekte, etraftan ilişkisini kesmekte ve bir probleme günlerce konstantre olabilmektedir.

Başarılı programcıların çoğu konsantrasyon yetenekleri ile çevrelerini şaşırtır. Saatlerce sıkılmadan bir ekran başında vakit harcayabilirler. Bu saatler bir çok kez günlere kadar uzayabilir. Yaşamsal faaliyetler dışında hemen hemen her şeyden izolasyon gereklidir. Microsoft'ta Office yazılım geliştirme ekibinden bir programcının kendini odasına kilitleyip "bitmeden çıkmayacağım" demesi, Bill Gates'e bile kapıyı açmaması meşhurdur. Bu olay daha sonra Douglas Coupland'ın Microserfs (1996) kitabına konu olmuştur. Bu sırada kendini odaya kilitleyen programcının arkadaşlarının süper marketten gidip yassı yiyecekler alması ve kapının altından odaya atmaları, programcılar arasındaki dayanışmanın güzel ve sevimli bir örneği.

Bu çalışma sırasında programcı en derin düşüne moduna geçer ve etraftan kendini izole etmeye çalışır. Bir çok programcı bu amaçla müziği kullanır. Ancak müziğin programcılık sırasında beyne olan etkileri üzerine yapılan çalışmaların bulguları şaşırtıcıdır. Kreatif programlama ile müzik dinleme sırasında kullanılan beyin bölgesi aynıdır. Beyin bir müziğe konsantre olmuşken çok derin programcılık yapılamıyor. Ya da yeteri kadar iyi yapılamıyor. Programcının müziği kapatınca etraftaki gürültünün etkisi ile müziği dinlediğinde beynin gerekli bölgesinin meşgul edilmesi arasında bir tercih yapması gerekir. Tahminen bu nedenle izolasyon amaçlı müzik kullanımında elektronik müziğin, hard rock, alternatif rock ve heavy metal gibi müzik türlerinin daha fazla tercih edildiği görülür. Müzik, beyin ve programcılar üzerinde çalışmalar halen sürüyor, bu derin konu araştırılmaya devam ediyor. Şu anki bulgular, kritik kodların geliştirilmesi ve müzik dinleme sırasında kullanılan beyin bölgelerinin aynı olduğunu gösteriyor. Monoton kodlama (maintenance) diyebileceğimiz program geliştirme kısmı ise beynin başka bir bölümünde gerçekleşir. Bu tür kodların geliştirilmesi sırasında müziğin programlamaya herhangi bir negatif etkisi görülmemiştir.

Programcının kritik kodları yazmak için ihtiyaç duyduğu "akış" modunu koruyabilmesi için izolasyona ihtiyacı bulunur. Bu izolasyon arttıkça çalışma derinleşir, ilk önce beyinde yazılmak istenen programın çatısı oluşur, problem önce beyinde çözülür, daha sonra beyinde çözülen bu problem koda çevrilir. Programcının beyni pencereden dışarıyı seyrederken ya da gözler sabit bir yere bakıp dalıp gittiği zaman bu problem çözülmeye çalışılır. Hatta programcının beyni bu problemi uyurken, araba sürerken ve diğer başka monoton işleri yaparken ele almaya devam eder. Bu durumda sıfırdan ve baştan yazılan bir programa bakıldığında kodlama toplam sürenin oldukça az bir bölümünü almaktadır.

Bu çalışma sırasında beyin son derece karmaşık bir aktivite içerisine girmiştir. Var olmayan bir çözümü oluşturmak için "kreatif" süreç başlamıştır. Bu süreç duyu organlarını izole etmiş ve yaratıcılığa yoğunlaşmıştır. Bu süreç sırasında programcı onlarca konuda karar vermektedir. Değişken isimlerinden, akış yöntemlerine, parametrelerin cinsinden, kullanıcı ara birimine kadar bir programcı sürekli bir "karar alma" uğraşısı içerisindedir. Programcılar bu nedenle bir günde yüzlerce kararın altına imza atma becerisine sahip iyi birer karar vericidirler.

Tam bu yoğun programlama sırada birisinin programcının omzuna dokunduğu zaman bir "ara verme" operasyonu başlar. Bu ara verme operasyonu tam gaz giden bir arabada aniden frene basma gibidir. Derinleşen "kreatif" süreç derinliğini yitirir ve duyu organları "açılarak" omuza dokunan kişi ile iletişime geçilir. Bu geçiş çoğu zaman o kadar kolay olmamakta ve programcılar bu nedenle zor iletişim kurulan kişiler olarak görülmektedir. Bir soru sorulmaktadır. Eğer bu soru şu an üzerinde çalışılan konuyla ilgili ise mevcut kreatif süreç bu soruyu cevaplamakta kullanılır. Sorunun "bağlam" ile ilgili olması, sürecin durdurulmasını gerektirmez. Örneğin bir veri tabanı tasarımında yandaki programcı bir tablodaki alanın ne işe yaradığını sorduğunda süreç durdurulmadan cevap verilebilir. Cevabın verilmesi için gerekli bütün malzeme, zaten o sırada beynin çalışma bölgesine getirilmiş hazır halde bulunmaktadır.

Ama eğer bu soru bambaşka konularla ilgiliyse: "Bu iş ne zaman bitecek"ten tutun da , "dün maçı seyrettin mi?" ye kadar değişik açılardan gelen bir soru olabilir. Bu durumda ancak bu kreatif süreç durdurularak bu soruya cevap verilebilmektedir. Ya da çoğu programcı bu soruyu "duyacak" ama "algılamayacaktır". O an durumu kurtaracak bir cevap vereceklerdir: "yarına biter" vs gibi. Yapılan basittir: kreatif süreç bölünmeden çalışmaya devam etmek istenmektedir. Bu sırada soruyu soran kişi doğal olarak programcıların zor iletişim kurulan kişiler olduğunu düşünecektir. Oysa programcının beyni hız kesmemeye çalışmaktan başka bir şey yapmamaktadır.

Programcılar çoğu zaman konuşmayı pek sevmeyen ve zor iletişim kuran kişiler olarak bilinmektedir. Bu yanlış inancın temelinde, programcıların konsantre olma yetenekleri ve bölünmelere karşı geliştirdikleri iletişim "önlemleri" yatmaktadır. Oysa yazılım geliştirme ekipleri oldukça konuşkan olabilirler. Fark konuşulan konularda yatmaktadır... "Windows mu iyidir, Linux mu?" tartışmalarını dinleseniz programcıların az iletişim kurdukları konusundaki fikirleriniz tam tersi yönde değişecektir.

Eğer bölündüğü sırada programcı soruyu tam olarak algılayıp doğru bir cevap vermeye çalışırsa, soru "bağlam" dışı ise kreatif sürecin durması gerekmektedir. Duran bu akışın yeniden eski kaldığı noktaya geri dönebilmesi, kişiye çok bağlı olmakla beraber, on beş dakikaya kadar çıkabilmektedir. Konsantre olma yeteneği yüksek olan programcılar bölünen bu süreci daha hızlı bir sürede eski noktaya getirebilmektedir.

Programcılık sırasında beynin bu çalışma stilinin anlaşılması programlama ortamlarının ne kadar özenle seçilmesi gerektiği konusunda önemli ipuçları sağlamaktadır. Programcıların bu bölünmelerden korunması gereklidir. Daha da önemlisi programcıların kendilerini bu bölünmelerden korumaları gerekmektedir. Csikszentmihalyi ve ekibin yaptığı çalışmalar bu derin çalışma sürecinin ne kadar kırılgan olduğunu ve izolasyona ihtiyaç duyduğunu açığa çıkarmaktadır.

Kanımca bir çok yazılım hatası (bug) bu bölünmeler sırasında ortaya çıkmaktadır. Televizyonda bir motor yağı reklamını izlediğimi hatırlıyorum. Reklamda "motor ısınıncaya kadar olan sürede aşınır yıpranır oysa bu motor yağı mıknatıs özelliklerine sahiptir ve motor çeperine yapışık kalarak ısınma sırasında bile motorun yıpranmasını önler" diyordu. Bu reklamda anlatılan olayı programcılıkta çok gördüğümüzü düşünüyorum. Yeteri kadar ısınmadan, soğuk bir "beyinle" yapılmaya başlanılan programcılık sonucunda oldukça "hatalı (bogus)" kodlar üretildiğini düşünüyorum.

Meslek hayatımda karşılaştığım binlerce yazılım hatasını masaya yatırdığımda bu tür hatalarla karşılaştığımı görüyorum. Hataların bu kreatif sürecin hangi aşamasında yazılmış olabileceğini tahmin etmeye çalışıyorum. Bir programcı bölünme ile karşılaştığı zaman -üstelik bu bölünme bir SMS mesajı yazmak gibi zor ve zahmetli olup, beyni oldukça uğraştıran cinsten ise- programlama sürecinin beyinde eski aktivite düzeyine yükselmesi çoğu zaman yaklaşık 15 dakika sürecektir. Bu süreç sırasında hatasız bir kod üretimi için programcının kritik bir kod yazmaması gereklidir. Konsantrasyonun tam sağlanamayacağı bu ısınma dönemi, unutulan kontroller, atlanan olasılıklar ve hiç kodlanmayan program akış dallarına neden olacaktır.

Çağımızda bu bölünmelerin başlıca sebepleri cep telefonları, gelen SMS mesajları ve Instant Messaging programlarıdır. Bölünmemek için iletişimsizliğe ihtiyacımız varken çağımız bir iletişim çağı olmuştur. Watts Humprey, Software Engineering Institute tabanlı Personal Software Process'in (Kişisel Yazılım Süreci - PSP) geliştiricilerinden birisidir. Kendisi uzun yıllar IBM'de çalışmış, OS390 projesinde yer almış ve yazılım geliştirmenin önemli duayenlerinden birisi olmuştur. PSP bir programcının iyi program yazması konusunda kendini nasıl geliştireceğinin ana hatlarını çizer. Humprey'in PSP'yi anlattığı "Introduction to PSP" kitabını aldığımda şaşırdığım bir konu olmuştu. Kitabın ilk bölümlerinin zaman yönetimi ve bu bölünmelere karşı mücadele olduğunu görüp şaşırmıştım. Humprey, programcıları bu bölünmelerle mücadele konusunda bilinçlendirmeye çalışıyordu.

Yazılım geliştirme sürecinin tam verimiyle çalışması için bu sürecin korunmaya ihtiyacı olduğu çok açık. Bir programcının etrafında oturanlar, yöneticileri, ona SMS gönderenler bu sürecin geç cevap alacaklarının farkında olmalıdır. Böyle bir zihinsel durumdaki yazılım geliştirmeciyle olan iletişim senkron (eş zamanlı) değil asenkron (farklı zamanlarda) olmalıdır. Şu sıralar programcılıkta popüler olan yeni bir akım var. Entegre edilen sistemlerin birbirleriyle senkron bağlantılar yerine "loosely coupled" (gevşek eşleştirme) dediğimiz asenkron yöntemlerle bağlanması. Sanırım "akış" anını yakalamış bir programcı ile iletişimin de en sağlıklısı "loosely coupled" türden olacaktır.

Kaynak : http://www.btinsan.com/1114-04.asp
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

22 Ekim 2010 Cuma

Microsoft Vs Java Trailer :)


Mikrosoft mu java mı ? :)


Microsoft Vs Java Trailer - Watch more Funny Videos
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

20 Ekim 2010 Çarşamba

Mail Olarak Yüksek Boyutlu Dosya Gönderimi


Yüksek boyutlu dosyalarımızı (1-2gb gibi) mail olarak göndermek istediğimizde.
https://www.wetransfer.com/ adresine girip dosyamızı upload edip göndereceğimiz mail adresini girdiğimizde göndereceğimiz dosya bir yere upload ediliyor ve mail göndereceğimiz kişiye gittiğinde dosya nın upload edildiği link de gidiyor.Bu link üzerinden rahatlıkla dosya indirilebiliyor.Henüz beta olarak yayınlanan bu hizmet şu an ücretsiz olarak çalışmaktadır.


Umarım faydalı olmuştur.
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

13 Ekim 2010 Çarşamba

Google un kendini süren arabası


Google ın testini yaptığı kendisini süren araba california sokaklarında test aşamasında :)

Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

Sql de Tarih ve Saat Almak


Sql Serverda Tarihi (gün/ay/yıl) ve (saat) şeklinde almak isterseniz aşşağıdaki kodu kullanabilirsiniz..

select convert (char(12) , getdate() , 103) AS TARIH , convert (char(5) , getdate() , 108) AS SAAT

Ekran Çıktısı :

TARIH--------SAAT
13/10/2010 10:24


Umarım faydalı olmuştur.
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

7 Ekim 2010 Perşembe

URL Kısaltma


Bir yere gireceğiniz URL uzunluğu fazlaysa ve o URL yi gireceğiniz alan küçükse ,Örneğin : twitter da olduğu gibi yazı alanınız 255 karakter ile kısıtlandığında :) bu hizmeti kullanabilirsiniz.




URL yi Yazıp Enter a Basınız :





Butona bastıktan sonra açılan pencerede :http://tinyurl.com/39pwcvy şeklinde bir URL çıkıcaktır.o urlyi artık kısaltılmış url olarak kullanabilirsiniz.

Umarım işinize yarar...
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

30 Eylül 2010 Perşembe

c# ,VisualBasic Translator


C# kodunuzu VisualBasic e ,Visual Basic kodunuzu da c# a çevirmek için güzel bir site.
http://www.carlosag.net/Tools/CodeTranslator/
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

29 Eylül 2010 Çarşamba

XML Web Servislerinde Ön Bellekleme


Şöyle bir XMLWebServis yazdımızı Düşünelim

Online Ticaret Sitemizdeki Sipariş Datasını DataSet Olarak Getiren;

[WebMethod(Description = "Sipariş Bilgisini Getirir",MessageName="SiparisGetir")]
public DataSet GetOrdersByIDy(DateTime startDate,DateTime endDate)
{
using (SqlConnection con = new SqlConnection("data source=SERVERIP;database=e-commerce;integrated security=true"))
{
SqlCommand cmd=new SqlCommand("Select * From Orders Where orderID=@orderID",con);
cmd.Parameters.AddWithValue("@startDate",startDate);
cmd.Parameters.AddWithValue("@endDate",endDate);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}

Bu şekilde bir sipariş bilgisi WebServis den her çekildiğinde veri tabanına sorgu tekrardan gönderilip sorgu sonucu dönen data DataSet e doldurulup gönderilecektir.Bu da uygulamamıza belli bir yük getirir.

Bu WebServis Metodumuzu ÖnBellek ile çalışır duruma getirmek istersek.

"[WebMethod(Description = "Sipariş Bilgisini Getirir",MessageName="SiparisGetir",
CacheDuration = 300)]"
metodumuzun üzerine yukarıdali ifadeyi ekler isek yain "CacheDuration = 300" kısmını
istemciden bir talep geldiğinde data 300 saniye önbellekte tutulacaktır.Aynı Zaman aralığındaki data tekrar istenir ise o data tekrar oluşturulmayacak önbellkten gönderilecektir.Parametre Olarak verilen her zaman aralığı için önbellekte 300 saniye yani 5 dakika o data tutulur ve bu şekilde tekrar o kadar sipariş bilgisi veri tabanından çekilmek zorunda kalınmaz..
Mesela sitenizden entegrasyon ve benzeri bir amaç ile bir çok yerden sipariş datası çekiliyor ise bu bir avantaj olabilir...
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

Teknoloji ve Tabi Yazılımdaki Günceli Takip Edilebileceğiniz Siteler


Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

Çevik yazılım Geliştirmek için


Çevik yazılım Geliştirme için süreçleri :

1.Sürekli Entegrasyon -> Yazılımın sürekli gerçek test edilebilir ortama aktarılması böylece testlerin daha hızlı geri dönüşlerinin alınabilmesi.
2.TDD -> önce testlerinin yazılması,snra kodun yazılması ve test edilmesi,
3.Refactoring ->Kodun Yeniden gözden geçirilip tekrar yazılması.


Büyük yazılım projelerinde bu 3lü yü bir döngü şeklinde kullanılır..

Yazılan kodun test edilmesi ve çıkan hatalar doğrultusunda refactoring yapılıp tekrar yazılması,sonra gerçek ortam a entegre edilmesi ve son kullanıya da test ettirilmesi şeklinde


Kaynak : http://www.acm-software.com/Agile/AgileEngineeringPractices
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

ÇEVİK YAZILIM GELİŞTİRME / “AGILE”


Agile Çevik yazılım geliştirme teknikleri hakkında güzel bir yazıya buradan ulaşabilirsiniz..

http://www.acm-software.com/Agile/AboutAgile

Umarım faydalı olur..
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

27 Eylül 2010 Pazartesi

Page Rank Kontrol









Sayfanızın Page Rank kontrolünü buradan yapabilirsiniz :







This page rank checking tool is powered by Page Rank Checker service



Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

24 Eylül 2010 Cuma

Site IP Bilgilerini Bulma


İstediğiniz sitenin IP ve bütün bilgilerini(satın alan kişi,adresi vb.) öğrenebilmek için.
http://centralops.net/co/ adresine girip sol panelden "Domain Dossier" kategorisine tıklayıp istediğiniz adresi yazıp bilgilerine ulaşabilirsiniz.
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

28 Ağustos 2010 Cumartesi

Basit SQL HATALARI


HATA 1 :
"error 602:could not find row in sysindexes for database ID 11,object ID 1,index ID 1 Run DBCC CHECKTABLE on sysindexes."
Bu hata Sql server 2000 veri tabanınızı alıp 2005 e iliştirdikten sonra tekrar alıp sql server 2000 veri tabanınıza geri attach etmeye çalıştığınızda karşınıza çıkabilir.
Çözüm Yoktur.Çünkü artık Sql server 2005 e attach ettiğiniz veri tabanınız 2000 formatına uygun değildir.

Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
Açıklama : Muhtemelen böyle bir hata ile karşılaştığınızda örneğin veri tabanına bir kayıt ekliyorsanız ;parametleri eksik yada yanlış vermiş olanbilirsiniz.
yani
string cmd="INSERT INTO Kitap(Adi,Yazar,Sayfa) VALUES(TextBox1,TextBox2.Text,TextBoxt3.Text)"
Bu insert into Komutunda TextBox1 ile gösterilen Alan da hata alınabilir.Çnkü .Text denmemiş.
yada
string cmd="INSERT INTO Kitap(Adi,Yazar,Sayfa) VALUES(@Adi,@Yazar,@Sayfa)"
Şeklinde bir komut da values kısmında belirtilen parametlerden bir tanesini eksik yazarsanız böyle bir hata alabilirsiniz.


HATA 2 :
A query parameter cannot be of type 'System.Object'.
Açıklama : Bu hata alındığında muhtemelen Sql de bir kayıt eklerken verdiğiniz parametrelerden bir tanesi null değer içeriyordur.
Çözüm :Null gelen değeri bulup düzeltmek yeterli olucaktır.
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

23 Ağustos 2010 Pazartesi

Logo (LOJECTS.exe ve LOBJECTS.dll) Register İşlemleri


LOBJECTS.dll register işlemi :
başlat-> çalıştır -> cmd yazıp konsole ekranına geçiyoruz

REGİSTER İÇİN :
regsvr32 logoDosyaYolu\LOBJECTS.dll yazıyoruz ve dll imizi register ediyoruz

UNREGISTER İÇİN :
regsvr32 -u logoDosyaYolu\LOBJECTS.dll ile de unregister edebiliriz.


LOBJECTS.exe register işlemi :
başlat-> çalıştır -> cmd yazıp konsole ekranına geçiyoruz

REGİSTER İÇİN :
logoDosyaYolu\LOBJECTS.exe -REGSERVER yazıyoruz ve LOBJECTS.exe mizi register ediyoruz.

UNREGISTER İÇİN :
logoDosyaYolu\LOBJECTS.exe -UNREGSERVER yazıyoruz ve LOBJECTS.exe mizi unregister ediyoruz.
Umarım yararlı olmuştur.
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

Çocukardan Tanrı ya :) (Biraz Makara)


Cocuklardan Tanri'ya mektuplar:)))
Cocuk iste:))

Avrupa ve Amerika’da 2-9 yaş çocuklara Tanrı’ya ilişkin düşünceleri...ni sormuşlar. Dinsel eğitimin bir parçası olarak çocuklara Tanrı’ya bir mektup yazın ve duygularınızı isteklerinizi anlatın demişler.

1) Sevgili Tanrı, şu andaki eksiklerimi yazıyorum: Yeni bir bisiklet, bir kimya seti, köpek, film makinesi, beyzbol eldiveni. Hepsini gönderemezsen birazı da olur.
Seni seven Eric --5 yaşında-
Not: Noel Baba’nın olmadığını biliyorum.

2) Canım canım Tanrı,
Astronotları öyle yukari firlatip firfir döndürmelerinden ödüm kopuyor. N’olur onların bizim evin çatısına düşmelerine izin verme.
Dostun Norman --4.5 yaşında-

3) Sevgili Tanrım,
insanlarin ölmelerine izin verip yenilerini yapmak yerine neden elindekileri tutmuyorsun? Jane --6 yaşında-

4) Sevgili Tanrı,
Lütfen bana bir midilli gönder. Senden şimdiye kadar hiçbir şey istemedim. Bunu da herhalde unutmazsın.
Bruce --4 yaşında-

5) Sevgili Tanrı,
Babam çok aksi. Onu bu huyundan vazgeçirmeni istiyorum. Ama lütfen canını yakma. Sevgilerle.
Martin --5 yaşında-

6) Sevgili Tanrı,
Bulutlardan biri yüzünü öyle korkunç yaptı ki ödüm koptu. N’olur söyle ona bi’ daha öyle yapmasın.
Ellen --3 yaşynda-

7) Sevgili Tanrı,
Sahiden var mısın? Bazıları buna inanmıyor: Eğer varsan gecikmeden bir şeyler yapmanda fayda var.
Harriet Ann --6 yaşında-

8) Sevgili Tanrı,
Eğer hiç kimse bilmeyecekse iyi olmanın ne yararı var?
Mark --8 yaşında-

9) Tanrı’cım,
Üst kattakiler durmadan bağıra çağıra kavga ediyorlar. Bence yalnızca çok iyi arkadaşların evlenmesine izin vermelisin.
Nan --5 yaşında-

10) Sevgili Tanrım,
Ne diye bu kadar çok insan yarattın. Başka bir dünya daha yapıp fazlalıkları oraya koyamaz mısın?
J.B. --7 yaşında-

11) Tanrım,
Insanlara ruhları her zaman doğru mu dağıtıyorsun? Yanlış yapabilirsin.
Audrey --8 yaşında-

12) Sevgili Tanrı,
Sen tuhaf ne yaparsan yap herkes hayran oluyor; ama ben ufacık bir şaka bile yapsam yiyorum fırçayı.
Jodie --6.5 yaşında-

13) Sevgili Tanrı,
Bizi hiç merak etme çünkü bizimkiler çok dindar.
Teddy --9 yaşında-

14) Sevgili Tanrı,
Bende senin dışında bütün liderlerin resmi var. Norman --6 yaşında-

15) Tanrım,
Şişman olunca kimse senin arkadaşın olmak istemiyor.
Billy Jean --9 yaşında-

16) Sevgili Tanrım,
Oğlanlar kızlardan daha mi üstün? Biliyorum sen de onlardansın ama gene de dürüst olmaya çalış.
Sylvia --5 yaşında-

17) Sevgili Tanrı,
Kitabını okudum ve beğendim. Bütün o fikirler nereden geldi aklına?
John --8 yaşında-

18) Sevgili Tanrı,
Zürafaların görünümünü isteyerek mi böyle yaptın, yoksa yanlışlıkla mı oldu?
Norman --4 yaşında-

19) Tanrım,
İncil’de neden hiç karının adi geçmiyor? Yoksa İncil’i yazarken daha evlenmemiş miydiniz?
Larry --6 yaşında-

20) Sevgili Tanrım,
Tamam incil’de öbür yanağını çevir dedin biliyorum; ama kardeşim gözüme vurunca ne yapacağım?
Sevgiler, Teresa --5 yaşında-

21) Sevgili Tanrı,
Tanry oldugunu nasıl bilebildin?
Charlene --3 yaşında-

22) Sevgili Tanrı,
Senin yaşına geldiğimde tıpkı senin gibi olmak istiyorum. Tamam mı?
Tommy --4 yaşında-

23) Sevgili Tanrım,
Eger Tanrı ben olsaydım bu kadar iyi olmazdım. Bunu aklından çıkarma.
Michelle --6 yaşında-
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

9 Ağustos 2010 Pazartesi

MultiThreading(Çok Kanallılık)


Vücudumuzda, yaşamamızı devam ettirebilmemiz için aynı anda birçok görev birbirine paralel bir şekilde gerçekleştirilir. Solunum, kan dolaşımı, enerji üretimi, her an, her saniye birbirleriyle uyumlu bir şekilde devam eder. Aynı durum bilgisayarlarımızda da söz konusudur. Bir taraftan müzik dinlerken, diğer taraftan internetten dosya indirebilir, bunların yanında yazıcımızdan çıktı alabilir, favori kelime işlemcimizde yazı yazıyor olabiliriz. Hatta tek bir program dahi birçok işi eş zamanlı olarak gerçekleştirebilir. Örneğin kelime işlemcimizde yazı yazarken, programımız, yazdıklarımızı biçimlendirmekle ne kadar meşgul olursa olsun, klavye ve fareyle yaptığımız işlere her zaman duyarlıdır. İşte aynı anda birden fazla görevi gerçekleştirebilen yazılımlara eş zamanlı (concurrent) yazılımlar, bu görevlerin eş zamanlı gerçekleştirilmesine de eş zamanlılık (concurrency) diyoruz. Bu da bizi asıl konumuza getiriyor: multithreading, yani çok kanallılık. Çok kanallılığımız :)Çok kanallılığın tanımını yapmadan önce iki terimi bilmekte yarar vardır: işlem (process) ve kanal/işlemcik/izlek (thread).

İşlem (process): Kısaca çalışmakta olan program demektir. Kendi bellek alanları, işlemci durumu kayıtları ve çalışma zamanı kaynakları (run-time resources) olan uygulama ortamlarıdır. Çoğu zaman program ve uygulama (application) kelimeleriyle eş anlamlı olarak da kullanılırlar. Ancak kullanıcının gördüğü tek bir uygulama, birçok işlemden oluşmaktadır.
İşlemcik (thread): İzlek veya kanal olarak da anılır. Çoğu zaman hafif işlemler olarak adlandırılırlar; ancak sistem gereksinimleri işlemlere göre daha düşüktür; çünkü kendi işlemci durumu kayıtları olmasına rağmen, sistem kaynakları ve bellek alanlarını yaratıldıkları işlemden alırlar. Bir işlemin eş zamanlı görevleri gerçekleştirebilmesi amacıyla yazılmış ve genellikle tek bir görevi çalıştıran kod parçalarıdır.
İşlem ve işlemcikleriTanımlarımızı yaptıktan sonra artık çok kanallılığa geçebiliriz. Çok kanallılık, adından da anlaşılacağı üzere birçok işlemcikin eş zamanlı bir şekilde işlem yapabilmesidir; bir başka deyişle, bir işlemi, kendi içinde birbirine paralel biçimde daha küçük alt birimlerle (thread) çalıştırma şeklidir.
Bir de çok görevlilik (multitasking) vardır ki, belli yönlerden çok kanallılıktan ayrılır. Çok görevlilik, işletim sisteminin aynı anda birden fazla program çalıştırabilmesidir, ancak gerçek bundan biraz farklıdır. İşletim sistemi, çalışacak programları öncelikle sıraya sokar ve sonra sırası geleni çalıştırır. Bu işlem sonucunda programları aynı anda çalışıyorlarmış gibi görürüz, büyülü bir şey yani :) Ayrıca çok görevlilikte görevler aynı belleği paylaşamazlarken, çok kanallılık’de paylaşabilirler. Çünkü çok görevlilik işlemler üzerinden işlerken, çok kanallılık işlemcikler üzerinden gerçekleşir.

Çalışma Prensibi
Bilgisayarımızda çalışan her bir işlemcik için bellekte belirli bir yer, işlemci tarafından belirli bir zaman ayrılır. Bunlara ek olarak tüm işlemciklerin belirli öncelikleri (priority) vardır. İşletim sistemleri, uygulamalar içinde çalışan işlemcikleri önceliklerine göre sıralayarak çalıştırırlar, ancak bazı yöntemlerle belirli bir dereceye kadar akışları değiştirilerek de kullanılabilirler. Aksi belirtilmedikçe bir işlemcik, başka bir işlemcikin çalışmasına karışamaz, bu yüzden birçok işlemciğin aynı anda, aynı verileri kullanma ihtimalleri vardır ki, bazen bu durum tehlikeli sonuçlara neden olabilir. Bu şekilde birçok işlemcik tarafından paylaşılabilen verilere, “kritik bölge verileri” (critical region) adı verilir. Kritik bölgede birden çok işlemcik çalışıyorsa, işlemciklerin hafızaya ve işleme zarar vermeden çalışabilmeleri için senkronize olmaları şarttır. Örneğin, hatalı ve bilinçsizce yazılan kodlar sonucunda deadlock (kilitlenme) meydana gelebilir. Bu durumda, iki ya da daha fazla işlemcik, birbirlerini bekleyerek, sonsuza kadar çalışabilirler. (Kilitlenmeyle ilgili daha detaylı anlatım için Mayıs sayımızdaki "Ölümcül Kilitlenme" yazımıza göz atabilirsiniz.)
Tam tersine, eğer bir işlemcik, paralel çalıştığı diğer işlemciklerin “oyun sahasına” karışmıyor ve onların kritik bölgeleriyle işlem yapmıyorsa bu durum, güvenli işlemcik (thread safe) olarak ifade edilir.

Kullanım Alanları
İşlemcikler yanlış kullanıldığında bazı tehlikelere yol açmasına rağmen, bugün neredeyse bütün sistemlerde çok kanallılık, yüksek düzeyde performans sağlamak amacıyla yaygın olarak kullanılmaktadır. Örneğin büyük çapta, çok fazla istemciye hizmet veren bir haberleşme ağı kurduk, sonuçta hepsine aynı anda cevap verebilmek için çok kanallılıktan yararlanmak zorundayız; aksi halde, istemciler, sistemimizden geç haber alma ya da hiç alamama durumunda kalabilirler. Bunun dışında hepimiz çok oyunculu (multiplayer) oyunlar oynamışızdır. Eğer oyunlarda çok kanallılık kullanılmasaydı, aynı anda hem oyunumuzu oynamamız, hem de diğer oyuncularla bağlantımızı sürdürebilmemiz mümkün olmazdı. Çok kanallılık ayrıca GUI (Graphical user interface, grafiksel kullanıcı arayüzü)‘lerde de kullanılmaktadır. Mesela bir butona bastığımızda, arka planda bilmediğimiz birçok işlem gerçekleşir. Eğer yine çok kanallılık kullanmamış olsaydık butona bastığımızda GUI donup kalır, bilgisayar başında öylece kalırdık :)

Hangi Programlama Dilleri Destekliyor
Amerikan Savunma Bakanlığı tarafından geliştirilen ADA programlama dili, yazılım geliştiricilerine, komut ve kontrol sistemlerini geliştirebilmeleri olanağı sağlamak amacıyla, çok kanallılık desteği sunacak biçimde tasarlanmıştır; ancak ADA günümüzde hava elektronigi programlamasi ve askeri programlar gibi standartlaştığı alanlar dışında yaygın olarak kullanılan bir programlama dili değildir. Popüler diller arasında, JAVA, C#, Python ve Ruby ile çok kanallı tasarımlanmış programlar oluşturmak mümkündür. Özellikle JAVA, çok kanallılık içeren uygulamalar yazmak açısından oldukça zengin bir dildir. Monitör ve durum değişkenleri (condition variables) gibi, JAVA'nın çok kanallılığı desteklemek amaçlı ve kullanıcı dostu olarak sağladığı yapılar vardır. JAVA’da yazılan her uygulama en az bir tane ya da daha fazla işlemcik içerir, ancak her zaman tek bir işlemcik ile işe başlarsınız: “ana işlemcik”i (main thread) ve bu işlemciğin başka işlemcikler oluşturma gibi bir özelliği vardır.
C/C++, Perl ve Visual Basic gibi diller ise çok kanallılığı dilin kendi özelliği olarak desteklemezler, bu yüzden bu dillere tek izlekli (single-threaded) diller adı verilir. Ancak C ve C++ özel kütüphaneler yardımıyla çok kanallılığı destekleyen programlar yazmak mümkündür.

Uzun Sözün Kısası…
Çok kanallılık teknolojisinin ortaya çıkmasıyla birlikte, uygulamalar daha farklı, daha güçlü bir kimlik kazandılar ve kullanıcının ihtiyaçlarına daha iyi cevap verir oldular. Günümüz teknolojisinde kullandığımız hemen hemen her programda çok kanallılığın izlerini görebiliriz. Gelişen teknolojiyle birlikte, yazılım geliştiricileri çok kanallılığa daha da ihtiyaç duyacağa benziyor.

Kaynak : http://e-bergi.com/2008/Temmuz/Cok-Kanallilik
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

5 Ağustos 2010 Perşembe

"String or binary data would be truncated."


Eğer Sql de bu hata ile karşılaştıysanız.
Bir alana atanan veri boyutundan fazla bir veri girmişsiniz demektir.
Örnek :
nvarchar(3) olarak tanımlanmış bir alana 4 karakter bir değer girmeye çalışırsanız böyle bir hata alırsınız.
Umarım Faydalı olmuştur.
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

20 Temmuz 2010 Salı

"Microsoft Office Outlook başlatılamıyor.Outluk penceresi açılamıyor" Hatası


" microsoft outlook başlatılamıyor. outlook penceresi açılamıyor "

Bu sorunu yaşadıktan sonra ufak bir araştırma yaptım ve
Başlat > Çalıştır bölümüne aşşağıdaki cümleyi yazıp ,bu sorunun çözümüne ulaştım.
"Outlook.exe /resetnavpane"

Umarım faydalı olmuştur..
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

5 Temmuz 2010 Pazartesi

Sql Case when Kullanımı


Sql de zaman zaman c#,visual basic dillerinde kullandığımız if else komutlarını kullanmak isteyebiliriz.
Ben bu zamana kadar pek karşılaşmamıştım aslında ama bugün birlikte çalıştığım takımda bi arkadaşım sorguları arasına böyle bir kısım eklemiş benimde ilgimi çekti bir kaç küçük araştırmadan sonra birşeyler yazayım dedim :)

Araştırma yaptığımda herkez cinsiyet örneğini vermiş.Bana Biraz basit geldi ama öncelikle işin abc si olarak ona benzer bir sorgu yazayım . . .:)

Kitap Tablomuzdaki ,kitap durumu alanı "NULL,1 VE 0" değerlerini alabiliyor olsun.


SELECT ID,KitapAdi,CASE WHEN KitapDurum = '0' THEN 'Kitap_Kirada'
WHEN KitapDurum = '1' THEN 'Kitap_Mevcut'
ELSE 'Kitap_Henuz_Kütüphanemize_Ulasmadi' END
FROM Kitap

burada eğer 0 değeri atanmış ise kitap yoktur 'Kitap_Kirada' mesajını gösteriyoruz,1 değeri atanmış ise 'Kitap_Mevcut',Eğer Farklı bir değer ise bununda Null olduğunu düşünüyüruz ve Kitabın sadece kendi kaydının girildiği henüz kütüphaneye ulaştı bilgisinin atanmadığını düşünerek 'Kitap_Henuz_Kütüphanemize_Ulasmadi' mesajını veriyoruz.

Bunu gerçek hayatta kritik olarak, örneğin şöyle bir sorguda kullanabilirsiniz:

Şöyle bir tablomuz olsun:
'CREATE TABLE [dbo].[StokHareketleri](
[ID] [int] IDENTITY(1,1) NOT NULL ,
[StokHareketTip] [smallint] NULL,--0.Stok Giriş,1.Stok Çıkış
[StokKodu] [nvarchar](50) NULL,
[StokHareketMiktari] [int] NULL,
CONSTRAINT [PK_StokHareketleri] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
'
Yukarıdaki sorguyu aynen çalıştırarak tabloyu oluşturabilirsiniz

Burada amacımız Stok hareketleri tablosundan toplam stok miktarını almak olsun .Yani Stok Girişi ve çıkışı bu tabloda tutuluyor.Biz yapılan girişlerden çıkış miktarını çıkarıcaz ve elimizde kalan stok miktarını öğrenicez.

SELECT st1.StokKodu,
ISNULL((SELECT
ISNULL(SUM(CASE WHEN StokHareketTip = 0 THEN StokHareketMiktari END),0)-
ISNULL(SUM(CASE WHEN StokHareketTip = 1 THEN StokHareketMiktari END),0)
FROM StokHareketleri AS st2 WHERE st1.StokKodu = st2.StokKodu),0)AS StokMiktarı
FROM StokHareketleri AS st1

Yukarıda Stok hareket tipi giriş olan stok miktarının toplamından ,çıkış olan stok miktarının toplamını çıkar şeklinde bir sorgu yazdık ve sonuç olarak Urun Kodu ve o Ürün için Stok Miktarını elde ettik.

Ayrıca Sorguda "ISNULL" kelimesininde kullanıldığını görüyoruz.
örnek : ISNULL(DEGER,0) ->Bunun anlamı eğer "DEGER" alanı "null" gelir ise null yerine "0" yaz demek oluyor.

umarım faydalı olmuştur.
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

2 Temmuz 2010 Cuma

Sql " FREETEXTTABLE " ile full text search arama yapmak


Fulltext search kullanarak Sql de karakter bazlı arama yapmak ve aradığınız kelime ile eşleşen kayıtları ve eşleşme oranlarını almak için bu arama yöntemi kullanılabilir.

Bu makalemizde 'Northwind' databese indeki 'Product' tablosundaki istediğimiz bir markadaki ürün için açıklama satırlarında arama yapıcaz.

Sorgumuz şöyle olucak :

USE Northwind;

--Arama yapıcağımız değişkeni tanımlanıyoruz
declare @Description nvarchar(200)
declare @Manufacture nvarchar(100)

--Bu kısımda arama yapıcağımız değişkenimize değer atıyoruz
set @Description = 'ipod'
set @Manufacture

SELECT p.ProductName
,p.Description
,FREETXT_TBL.RANK AS Eslesme_Orani
FROM dbo.Product AS p
INNER JOIN FREETEXTTABLE(dbo.Product, Description,
@Description) AS KEY_TBL
ON p.ID = FREETXT_TBL.[KEY]
WHERE p.Manufacture = @Manufacture order by FREETXT_TBL.rank desc

GO
sorgumuz çalıştırıldığında; Ürün adı açıklaması ve eşleşme oranı bilgileri listelenicek.
FREETEXTTABLE 'ın formatına göz atıcak olursak:

FREETEXTTABLE(Tablo_Adı, Aramayapılıcak_Alan,
Aramak_yapılıcak_text) şeklindedir.
ürün tablosu ile de bağlantı kurup marka filtrelemesi yapılıyor.

Umarım faydalı olmuştur arkadaşlar.
Not : Sqlde fulltext search yapabilmek için fulltext katalog tanımlamak ve fulltext için index oluşturmak gerekmektedir.
Kaynak :http://msdn.microsoft.com/en-us/library/ms177652.aspx
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

4 Haziran 2010 Cuma

İyi bir yazılımcı olmak


İyi bir yazılımcı olmak ,Junior developer dan senior 'a terfi etmek ile ilgili bir yazı yazmak için araştırmaya koyuldum fakat bunu çok iyi bir şekilde anlatmış bir yazıya rastladım..Ve uzun uzun yazmaktansa hemen bunu yayınlayayım dedim :)
Daron Yöndem in makalesi..Bu link ten ulaşabilirsiniz : http://daron.yondem.com/tr/PermaLink.aspx?guid=12a1a086-9f1c-42bb-990e-4ffeddcbed4b


umarım faydalı olmuştur..
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.