Burak RAMAZANSoftware Engineer

REGULAR EXPRESSIONS (DÜZENLİ İFADELER)

Burak 2016-09-04

Regular expressions, bir string içerisinde değer aramak, karşılaştırmak ve değiştirmek gibi işlemleri yapmamızı sağlayan ifadelerdir. Örneğin, sisteminize bir kullanıcı kayıt olacak ve siz bu kullanıcıdan çeşitli bilgiler isteyeceksiniz. Girdiği mail adresi doğru formatta mı? yani bir kullanıcı adı ardından “@” karakteri ve sonrasında domain adı.com gibi bir ifade olması gerekir. Kullanıcı mail adresini girerken “@” ifadesini kullanmaması yanlış bir giriş yapıldığının göstergesidir. Biz de bu durumu kontrol altında tutabilmek adına kullanıcıya bunu bir hata olarak döndürerek doğru girişi yapmasını sağlamamız gerekir. Bu gibi durumlar için regular expressions kullanacağız. EN başta da söylediğim gibi bu ifadelerle arama, karşılaştırma ya da değiştirme gibi işlemler yapabiliyoruz. Elbette tüm bunları yapabilmek için system.text.regularexpressions sınıfını projeye dahil etmeliyiz.

Şimdi biraz özel karakterlerden, ardından da bazı metodlardan bahsedelim.

Özel Karakterler:

String içerisinde arama yaparken bu karakterlerden yararlanacağımız için bu karakterle iyi geçinmek gerekiyor.

$: Metnin bitişini gösteren ifadedir.

*: Kendisinden önce belirtilen karakterin metin içerisinde hiç olmadığını ya da bir ve ya daha fazla olduğunu ifade eder.

+: Kendisinden önce belirtilen karakterin birden fazla tekrarlanabileceğini gösterir

.: Herhangi bir karakteri belirtir.

^: Karşılaştırma işleminin başlayacağı ilk karakteri belirtir.

?: Kendisinden önce belirtilen karakterin olup olmadığını gösterir.

REGEX SINIFI:

Bu sınıf yardımıyla karşılaştırma, arama ya da düzenleme işlemlerini yapıyoruz.

ISMATCH METODU:

Aradığımız kelime grubunun bir metnin içerisinde yer alıp almadığını öğrenmemizi sağlar. Bolean tipinde bir değer döndürür.

Aşağıda yer alan örnekte Regex sınıfının IsMatch metodu ile word değişkeninin boş olup olmadığını kontrol ediyoruz.

^\s ile boşluk tuşunun başlangıç olduğunu, * ile birden fazla boşluk karakteri olabileceğini ve $ ile de aramanın bittiğini ifade etmiş olduk. Eğer herhangi bir değer girilmezse true olarak değer dönecek ve ekrana “Herhangi bir değer bulunamaadı” yazısı çıkacaktır. Aksi durumda ise “Değer Girilmiş” yazısı ekrana çıkacaktır.

MATCH METODU:

Bir diğer örnekte de kullanıcı: yazısından sonra girilen ifadeyi sonuc değişkenine atayarak ekrana yazdırdık. Bu işlemi yaparken Match metodunu kullanırız. Bu metod bize aranan metin bulunursa geriye aranan metni döndürür.

MATCHES METODU:

Match metodu ile aynı işleve sahiptir. Farkı bulunan tek sonucu değil de tüm sonuçları getirmesidir.

Yukarıda görüldüğü gibi bir döngüyle Adı: ifadesinden sonra gelen karakterleri ad dizisine aktardık. RegexOptions.Multilins ise metin birden fazla satırda arama yapılacağı durumlarda kullanılmaktadır.

REPLACE METODU:

Metnin içerisinde yer alan ifadeyi değiştirmek amacıyla kullanılır. Aşağıda görüldüğü gibi önce bir metin girdik ardından cümlemizde yer alan “bir” yazısını “iki” olarak replace metodu sayesinde değiştirdik.

SPLIT METODU:

Split metodu metni istediğimiz bir ayraç sayesinde bölmemizi sağlamaktadır. Daha önce dizilerde anlattığım bu metod Regex sınıfı içerisinde de benzer bir kullanıma sahiptir.

Bunun dışında Github linkinden Regex sınıfının Matches metodunu kullanarak herhangi bir web sitesinin kodlarını kontrol ederek, sayfada bulunan mail adreslerinin listelenmesini sağlayan uygulamayı indirebilirsiniz.

C# – Hata Kontrolleri

Hatasız kul olmaz!

Burak 2016-08-17

Hatalar, bildiğimiz gibi bazen girilen bir değerden bazen farklı bir nedenden dolayı oluşarak, programımızın çalışmasını engeller. Bizim yapmamız gereken kullanıcıların bu hatalardan etkilenmemesi adına mümkün olduğunca bu hataları kontrol edebilmek olacaktır. Örneğin; web sitelerinde çok sık karşılaştığımız bir hatadır; 404 hatası. Bu hata hepimizin bildiği gibi istenilen adresin bulunanamamasından kaynaklıdır ve yazılımcının bu hatanın alınmasını önlemek elinde değildir. Fakat bu hatayı kontrol etmek elimizdedir. Bu hata alındığında kullanıcıya “Aradığınız sayfayı bulamadık” tarzında bir bilgi vermek, ana sayfaya ya da geldiği sayfaya yönlendirmek, yeniden arama yapmasını istemek gibi işlemleri sunarak hata kontrolünü sağlamalıdır. Peki biz C# ta hataları nasıl kontrol edeceğiz? Bu arada C# ta nasıl kullanacağız derken bu hata kontrol mekanizmaları C++, Java vb. dillerde de bulunuyor fakat biz C# kullanarak bu örnekleri yapacağız.

Hataları yakalayabilmek ve kontrol edebilmek adına Try-Catch yapısını kullanmamız gerekiyor. Bu yapıda Try bloğu içerisine hata oluşabilecek kod yazılırken, Catch bloğu içerisine aldığımız hatalara göre içerik üretiriz.

Yukarıda görüldüğü gibi bir yapıda kullanılır. Try bloğu içerisinde kullanıcıdan integer bir değer girmesini istedik. Kullanıcı örneğin harf girmeye çalışırsa ekrana “Hatalı giriş yaptınız” yazısı çıkarılacaktır. Yine sayının integer değer aralığını aşması durumu gibi diğer tüm hatalarda da aynı hatayı alacağız.Çünkü yukarıda biz catch ifadesi ile herhangi bir hataya özel olarak değil, tüm hatalar için içerik ürettik. Peki hataya göre özelleştirilmiş mesajları nasıl yazacağız? Yani, sınır değerleri aşan bir değer girildiğinde bu durum için kullanıcıya şu değerler arasında bir giriş yapınız gibi bir uyarı verecekken eğer farklı tipte bir değer girilmeye çalışmışsa “lütfen, integer tipinde bir değer girin” gibi bir sonuç üretilmesini nasıl sağlayacağız?

Biz bu durumlar için Exception nesnesinden yararlanacağız. Çünkü hatalar, bu nesneden türetiliyor. Doğal olarak bizim aldığımız hata hangi sınıfa ait öğrenebilmek için de bu nesneden yararlanmamız lazım. Aşağıda yer alan ifade de gördüğünüz gibi exception nesnesini kullanarak hatayı yazdırdık. Burada int yerine string bir değer girdiğimizde exception metodu bize hata ile ilgili bilgiler sunacaktır. integer bir değer girmemiz gerekirken “f” değerini girdiğimizde aşağıda görüldüğü gibi bir hatayı bize getirecektir.

Exception nesnesinin bazı özellikleri bulunuyor. Hataya dair tüm içeriği yazdırmaktansa sadece hata mesajını ya da hata kaynağını yazdırmak daha mantıklı gelebilir. Bu durumda aslında Console.WriteLine(ex.ToString()); yerine Console.WriteLine(ex.Message.ToString()); yazdığımızda sadece hata mesajı ekrana gelecektir. Yine exception nesnesinin Source, TargetSite,HelpLink, StackTrace,InnerException ve HResult gibi özellikleri bulunuyor. Bunlar da gerektikleri durumlarda kullanılabilir.

Bir diğer nokta ise Catch bloğunu birden fazla kullanabiliriz. İstediğimiz her farklı hata için farklı bir catch bloğunda hata içeriği oluşturabiliriz.

Gördüğünüz gibi OverFlowException hatası alındığında ayrı bir mesaj, FormatException hatasında ayrı bir mesaj görüntüledik.OverFlowException, taşma hatasıdır. Bildiğiniz üzere her veri tipinin belirli aralıklarda değer alabilmesi mümkündür. Eğer bu değerlerden büyük ya da küçük bir değer girilmeye çalışılırsa OverFlowException hatası alınacaktır. FormatException ise veri tipiyle alakalı hatadır. Eğer siz int tipinde bir değer girmeniz gerekirken double,bool ya da farklı bir tipte değer girerseniz bu hata ile karşılaşacaksınızdır.

Temelde bahsedebileceğim hatalar bunlarken bir çok farklı hata türü mevcuttur. Bu hataların hepsini burada anlatmak pek mümkün değil. Bu nedenle diğerlerini sizin bakmanız ve aklınıza takılan yerlerde benimle iletişime geçmeniz daha sağlıklı bir çözüm olacaktır. Eğer exception nesnesinde yer alan hatalara bakmak isterseniz buradan ulaşabilirsiniz.

FINALLY:

Finally ifadesi ise try-catch yapısında hata olsa da olmasa da çalışacak kod için kullanılır.

THROW:

Throw deyimi, exception nesnesinden kendi hata durumumuzu oluşturmamızı sağlar.

Yukarıda görülen örnekte eğer girilen sayı değeri 1000’den büyükse taşma hatası meydana gelmesini sağladık.

EXCEPTION.DATA:

Exception.Data, tanımlamış olduğumuz hataları koleksiyona atarak buradan ulaşmamız için kullanılan bir özelliktir. Bu özellik içerisinde stringInfo adında hatayla ilgili bilgi verebilir, intInfo ile hatanın hangi satırlarda bulunduğu gibi bilgileri tutabiliriz.DatetimeInfo, itarih ve saat bilgisini, ExtraInfo daha ayrıntılı bilgi verebilmemizi, MoreExtraInfo ise daha fazla bilgi vermemizi sağlamaktadır.

Aşağıda yer alan örnekte kullanıcıdan 1 ile 1000 arasında bir sayı girmesini istedik. Kullanıcı eğer 1000 ‘den büyük bir değer girmeye çalışırsa throw ile overflowexception hatası almasını sağladık. catch bloğunda ise eğer aldığımız hata overflowexception ise exception.data özelliğini kullanarak hata hakkında bilgi verdik ve hatanın alındığı tarihi yine koleksiyona kaydettik. Ardından koleksiyonları anlattığım yazıda da yer verdiğim (buradan yazıya ulaşabilirsiniz) DictionaryEntry yapısını kullanrak değerleri ekrana yazdırdık.

Bir diğer değineceğimiz olay ise exception.filters. Bu özellik c# 6 ile gelen bir özellik. Yukarıdaki örnekte if bloğu ile yaptığımız filtreleme işlemini catch ifadesini yazarken de kullanabiliriz. Bu durumda catch bloğunu aşağıdaki şekilde düzenlediğimizde bize aynı sonucu üretecektir.

Son olarak bahsedeceğim konu ise kendi programımız için özel bir hata üretmek istersek bunu nasıl yaepacağımıza bakarak bu yazımı sonlandıracağım. Öncelikle projemize bir class eklemeliyiz. Projemizin adına sağ tıklayıp add->Class diyerek ekleme yapabiliriz. Ardından, aşağıda yer verdiğim ilk ekran göörüntüsünde olduğu gibi sınıfımızın ApplicationException sınıfından kalıtım almasını sağlıyoruz. Böylelikle bu sınıfın özelliklerini kullanabileceğiz. Hemen altında ise bir metod oluşturuyoruz ve string olarak bir değer alıyoruz.

Diğer ekran görüntüsünde ise görüldüğü gibi oluşturduğumuz YeniException nesnesini çağırıyoruz ve hatayı yazdırıyoruz. Böylece kendi yazmış olduğumuz özel exceptionu da kullanmış olduk.

Diziler ve Koleksiyonlar – 2

Gelişme

Burak 2016-08-16

İlk yazımda dizilerden bahsetmiştim. Bu yazımda da koleksiyon çeşitlerinden olan non-generic koleksiyonlardan, sınıflarından ve metodlarından bahsedeceğim. Diğer koleksiyon türlerini ise bir sonraki yazımda anlatmaya çalışacağım. Koleksiyonları tamamen bitirdikten sonra da genel olarak dizi ve koleksiyon farklılığından bahsederek yazı dizisini bitireceğim.Eğer diziler konusuna dönerek bilgilerinizi tekrar etmek isterseniz buradan ulaşabilirsiniz.

KOLEKSİYONLAR:

Koleksiyonlar, system.collections namespace ‘inde yer alıyor. Genel olarak bahsedecek olursak; koleksiyonlar, yine dizilerde olduğu gibi veri gruplamaya yarıyor. Fakat dizilerde biliyorsunuz ki sadece aynı türden verileri gruplayabiliyorduk. Koleksiyonlarda ise hem aynı türden hemde farklı türden verileri gruplayabiliyoruz. Bir diğer farklılığı da eleman sayısını belirtmeden tanımlama yapabiliyoruz. Yine diziler, koleksiyonlar farklılığına değineceğimizden bu kadar farkını açıklamak yeter şimdilik.

Koleksiyonları biz temelde 3 çeşide ayırıyoruz. Generic, non-generic ve specialized koleksiyonlar.

Şimdi non-generic koleksiyonlara başlayalım.

NON – GENERİC KOLEKSİYONLAR:

Bu koleksiyon türü, farklı tipteki verilerin bir arada tutulabilmesine olanak sağlıyor. Yani integer ya da string değere sahip olup olmadığı önemli değil, istediğimiz türdeki veriyi non-generic koleksiyonlarla saklayabiliriz. Her türde veriyi tutmamız nasıl oluyor derseniz ? bu koleksiyonlar veriyi boxing işlemine tabii tutarak object türüne dönüştürerek tutuyor. Bu koleksiyonların kullandığı sınıflardan ve metodlardan bahsedecek olursak,

ARRAYLIST:

Arraylist non-generic koleksiyonlara ait bir sınıftır. Nasıl tanımlandığına ve metodlarına bakalım.

Yukarıdaki gibi tanımlama Numara adında bir koleksiyon tanımladık. Daha sonra Add metodu ile diziye ekleme yapıyoruz. Gördüğünüz gibi string,int, double ya da farklı bir türde olup olmaması önemli değil. Hepsi dönüştürülerek object tipinde Numara koleksyionuna kaydediliyor. Yine koleksiyonun bir elemanını çağırmak istersek numara[2] gibi bir ifadeyle numara koleksiyonunun 2.indexinde yer alan değeri geitiriyoruz. Fakat bu metodun bir yönü var ki bu bize bazen problem olabilir. Add metodu ile eleman eklerken istediğimiz index içerisine eleman atayamayız. Add metodu ile elemanı direkt olarak koleksiyonun sonuna ekleriz. Biz eğer istediğimiz index içerisine değer atamak istersek bunu insert metodu ile yapmamız gerekiyor.

Yukarıda gördüğünüz gibi Numara koleksiyonunda 5.indexe “Merhaba” değerini ekledik. Eğer add metodu kullansaydık 3.indexe bu eklemeyi yapabilecektik. İnsert metodunun diğer bir özelliği de eğer daha önce bir değer eklediğimiz indexe atama yapıyorsak diğer eleman silinmez, bir sonraki indexe ilerler. Aşağıda bunun bir örneğine ve çıktısına yer verilmiştir.

Görüldüğü gibi “Burak” değişkeni silinmemiş bir sonraki indexe gitmiştir.

Bir diğer metod ise sort metodu.Bu metod ise koleksiyon içerisinde yer alan elemanları sıralamamızı sağlıyor. Sıralama sayılar için küçükten büyüğe, string ifadeler için ise A’dan Z’ye yapılıyor.

Yine yukarıda sort metodunu gösterdiğimiz örnekte elemanları yazdırdığımız for döngüsünün eleman sayısı kadar işlemesi için count ifadesini kullandık. Koleksiyonlarda işimize yarayan sıradaki metod remove ve removeat metodları. Bu metodlar isminden de anlayacağınız gibi elemanları silmeye yarıyor.

Remove metodu 77 değerine sahip olan elemanı silerken removeat ile 3 no’lu indexte bulunan elamanı silebiliriz. Eğer tüm koleksiyonu silmek istiyorsak Numara.Clear(); yazarak tüm içeriği silebiliriz.

Capacity ifadesi ise bizim koleksiyonumuzun kaç eleman alabileceğini gösterir. 4’ün katları olacak şekilde artış gösterir. Örneğin; sizin 5 elemanlı bir koleksiyonunuz varsa kapasite 8 olacaktır. Eğer diziye 5 eleman daha ekleyip 10 elemanlı bir koleksiyon elde edersek kapasitemiz 16 olacaktır.

RANGE METODLAR:

Öncelikle söyleyeyim bildiğim kadarıyla böyle bir tabir yok 🙂 Şimdi bahsedeceğim metodların isimleri GetRange, AddRange, InsertRange ve RemoveRange olduğu için ben böyle bir ifade kullandım. Sırasıyla bu metodların kullanıldığı yerler;

GETRANGE:

Dizinin belirli bir kısmını geriye döndürür. Bu tanım pek anlamanıza yardımcı olmamış olabilir bu nedenle örnek üzerinden gidelim. Getrange metodu Sayi.GetRange(2,5); şeklinde kullanılır. Burada yapılan iş Sayi dizisinin 2.indexinden itibaren 5 elemanı getirmektir.

ADDRANGE:

Kısaca diziye, dizi eklememizi sağlar diyebiliriz. Sayi.AddRange(Numara); gibi kullanılabilir. Bu örnekte Numara dizisinin içerisinde yer alan değişkenleri Sayi dizisine ekledik.

INSERTRANGE:

AddRange metodu ile aynı işleve sahip fakat InsertRange metodu farklı olarak sizin verdiğiniz index değerinden itibaren diğer dizinin elemanlarını ekliyor. Örnek olarak; Sayi.InsertRange(3,Numara); ifadesinde Sayi koleksiyonunun 3 nolu indexinden itibaren Numara koleksiyonuna ait değerler eklenecektir.

REMOVERANGE:

Belirtilen index değerinden itibaren belirtilen silme işlemi yapmamızı sağlar. Numara.RemoveRange(1,3); ifadesindeki gibi kullanılır. Burada Numara adlı koleksiyonun 1 no’lu indexinden itibaren 3 adet elemanı silmemizi sağlar.

COPYTO METODU:

CopyTo metodu aslında sadece koleksiyonlarda değil dizilerde de kullanılıyor. Yani system.array sınıfında da böyle bir metod mevcut. Bu metod dizi içerisindeki elemanları farklı bir diziye kopyalamamızı sağlıyor.

Ekran Alıntısı

Yukarıda görüldüğü üzere önce Numara ve Sayi adında bir arraylist oluşturduk ardından da Sayi2 adında bir array. CopyTo metodu kullanılırken yukarıdaki gibi önce içeriğini kopyalayacağımız diziyi ardından copyto metodu ve içerisine de elemanları kopyalayacağımız yer olan array dizisini yazarız. Burada önemli olan nokta hedef dizinin tipinin array olmasıdır. Örneğin arraylist olarak tanımladığımız Sayi dizisine böyle bir atama yaparsak aşağıdaki hatayla karşılaşacağızdır.

Screenshot_1

CLONE METODU:

Clone metodu, CopyTo metodunda olduğu gibi bir diziyi başka bir diziye kopyalamamızı sağlar. Fakat bunu daha farklı bir yol ile yapıyor. Verileri object türünde kopyalıyor. Yani biz bir diziyi kopyalarken içerisinde eğer farklı türden değerler barındırıyorsa bu işlemi CopyTo metodu ile yapamayız. Bu işlemi Clone metodu ile yapmamız gerekiyor. Peki Clone metodu ile aslında CopyTo ile yaptığımız işleri yapabiliyorsak neden Clone metodunu kullanmıyoruz da CopyTo ile de kafamızı karıştırıyoruz? İşte bunlar hep performans…

Aşağıda yer verdiğim örnekte öncelikle 1 ile 100 arasında rastgele bir sayıyı numara koleksiyonuna ekliyoruz. Tam 100.000 elemanımız olana kadar. Şimdi Numara koleksiyonumuzda yer alan 100.000 elemanı önce Clone metoduyla, ardından CopyTo metoduyla dizilere aktarıyoruz. Bu işlemleri yaparken de süre tutuyoruz. En sonunda bakıyoruz ki Clone metodu bu işlemi 20,0252 ms sürede tamamlarken CopyTo metodu aynı işlem için Clone metoduna göre 4 ‘te birinden bile daha kısa bir süre harcıyor: 4,9747 ms. Söylediğim gibi aslında burada bu süreler bu gibi bir işlemde önemli gözükmüyor çünkü 4 kat gibi bir fark olsa da Clone metodu da çok hızlı. Fakat bunu tek bir işlem olarak düşünüyoruz. Sonuç olarak günlük hayatta çok daha kompleks uygulamar kullanıyoruz. Örneğin; web sitenizin 4 kat daha yavaş açılması müşteri trafiğini nasıl etkilerdi bir düşünün.

Screenshot_1 Screenshot_2

ToArray Metodu:

Bu metodun amacı ise istenilen veri türünde kopyalama işlemini yapmasıdır. Bu kopyalama işlemi için object tipindeki veri istenilen veri türüne çevrilerek saklanır.

Screenshot_3

Yukarıda görüldüğü gibi kulalnılır. Önce veri türü ardından kopyalama işlemini yapacağımız arraylist ile toarray metodunu ve yine veri türünü yazarak kopyalama işlemini yapıyoruz. Böylece int tipinde Sayi dizisine arraylist içerisindeki veriyi atamış oluyoruz.

ArrayList sınıfının bahsedeceğim metodları bu kadar. Kalan sınıflar:Hashtable ve sortedlist. Fakat bu sınıflara bu kadar uzun zaman ayırmayacağız. Devam edeliim…

HASHTABLE SINIFI:

Hashtable sınıfı yine farklı tür elemanları gruplandırmaya yarayan, system.Collections içerisinde yer alan bir sınıf. Temel farkı ise hashtable ‘da veriler index numarasına göre değil de anahtarlarına göre tutuluyor olmasıdır.

Screenshot_1

Yukarıdaki örneği açıklayarak gidelim. İlk önce hashtable sınıfından bir Sayi koleksiyonu üretiyoruz. Daha sonra add metodu ile bu koleksiyona eklemeler yapıyoruz. Ardından ICollection aracılığıyla Sayilar adında bir koleksiyon oluşturuyoruz ve bu koleksiyona Sayi koleksiyonumuzda yer alan elemanların anahtar değerlerini atıyoruz ardından bir foreach döngüsü yardımıyla bu anahtar degerleri ekrana yazdırıyoruz. Peki hem anahtarı hem de elemanın değerini yazdırmak istersek bunu nasıl yapabiliriz?

Bu durumda DictionaryEntry yapısından yararlanacağız.

Screenshot_2 Screenshot_1

Gördüğünüz gibi DictionaryEntry yapısı ile hem anahtarı hem de değeri yazdırabildik. Ayrıca bu durumda ICollection arayüzünü kullanarak bir koleksiyon tanımlamamız gerekmedi. HashTable içerisinde bahsedeeceğimiz son metod ise ContainsKey ve ContainsValue metodları. Bu metodlar, geççen yazımda dizilerde yer verdiğim contains metodunun aynısı.İsimlerini de dikkate alırsak yapılacak çıkarım ContainsKey metodunun, koleksiyon içerisinde anahtarın olup olmadığını; ContainsValue ise aradığımız değerin koleksiyon içerisinde bulunup bulunmadığını getirir.

Screenshot_1 Screenshot_2

Yukarıda ki örneklerde bu metodlar aracılığıyla Sayi koleksiyonunda girilen key ya da değer var mı kontrol ediliyor.

SORTEDLIST SINIFI:

Bu sınıfta da elemanlara erişim hem index numarası hem de anahtar değerlere göre yapılabilir. Ayrıca isminden de anlaşıldığı üzere bu sınıfta elemanlar sıralanarak tutulur. Kullanımını yine bir örnek üzerinde inceleyelim.

Screenshot_1

Öncelikle sortedlist sınıfı kullanılarak bir koleksiyon oluşturuyoruz. Ardından elemanları ekliyoruz. Ve IndexOfKey metodunu kullanarak anahtar değeri 6 olan elemanın index değerini yazdırdık. Burada ekrana 2 yazısı çıkacaktır. Çünkü söylediğim gibi sortedlist sınıfında değerler sıralanarak tutuluyor bu nedenle küçükten büyüğe sıraladığımızda 0 no’lu indexte keyi 3 olan, 1 no’lu indexte keyi 5 olan ve 2 no’lu indexte keyi 6 olan eleman tutulacaktır. IndexOfValue metodu da benzer bir işe yaramaktadır. Bu metod kullanılarak değerini yazdığımız elemanın indexini elde ederiz. Eğer koleksiyonda bu değere sahip bir eleman yoksa değer “-1” dönecektir.

Örneğin; Console.WriteLine(Sayi.IndexOfKey(6)); yerine Console.WriteLine(Sayi.IndexOfValue(56)); yazarsak sonuç yine 2 olacaktır.

Screenshot_1 Screenshot_2

Örneğimize yukarıda yer alan satırları ekleyelim.

GetByIndex ve GeyKey metodlarında biz index değerini girdiğimiz elemana ait bilgileri alıyoruz. GetKey metodunda 2 indexinde bulunan elemanın key’i olan 6 değeri çıktı olarak verilirken GetByIndex metodu 2 indexinde bulunan elemanın 56 olan değerini verir.

Bu arada tüm bunları anlatmışken belki kafa karışıklığına neden olabilir diye bir uyarıda bulunmak istiyorum. SortedList yine farklı türden veriler saklayabileceğiniz bir koleksiyon olması, hem elemanınızın değerini hem de anahtarını herhangi bir türden girebileceğinizi gösterir. Fakat sortedlist key değerine göre sıralandığı için biz keyi hangi tür giriyorsak diğer keyler de aynı tür olmak zorundadır. Aşağıda bu duruma ait bir örnek bulunuyor.

Biz Sayi koleksiyonumuza 3 adet eleman ekledik.Aslında bir problem yok gibi gözükse de SortedList sınıfının bu elemanları key değerlerine göre sıralaması gerekecek. Fakat “B104” string bir değer iken 5 int tipinde bir değer.Dopal olarak hangi eleman daha büyük bir karar veremeyeceğinden kodumuz hata üretecektir. Bu nedenle key değerini hangi tip değerinde giriyorsak girelim, diğer key değerleri de aynı tipte olmalıdır.

Screenshot_2 Screenshot_1

Son metodumuz TryGetValue. Bu metod keyini girdiğimiz elamanın değerini out ifadesi ile belirttiğimiz değişkene aktarmaktadır.Tabi bu metodu kullanabilmemiz için sortedlist sınıfını biraz farklı kullanmamız gerekiyor. Sortedlist ile koleksiyon oluştururken aşağıdaki örnekte olduğu gibi anahtar ve değerin değişken tiplerini girmemiz gerekiyor. Bu şekilde kullandığımızda TryGetValue metodunu kullanabiliriz. TryGetValue metodunun kullanımı da yine aşağıda gördüğünüz gibi. Metodu kullandığımız satırda 45 keyine sahip olan elemanın değeri 56 olduğu için bu değeri alıp Yeni adlı değişkene atıyor.

Screenshot_1

Saınırım şimdilik bu kadar yeter. Ne kadar basit konular olsa da yeni başlayanlar için buradan sonrası bilgi karışıklılığına yol açabilir. Bir sonraki yazımda generic ve specialized koleksiyonlar nelerdir. Bunlardan bahsedeceğiz. Görüşmek üzere…

Diziler ve Koleksiyonlar

Giriş

Burak 2016-08-14

Bugün C# ta dizilerin ve koleksiyonların kullanımından bahsedeceğim. Aslında bu konu da bir önceki yazım gibi temel programlama. Fakat bu yazıları tamamlayarak daha ileri seviye konular hakkında yazmaya karar verdiğim için şimdilik bunlarla idare edeceğiz 🙂 Tabii burada dizilerden ve koleksiyonlardan üstün körü bahsedip, en çok kullanılan ve herkesin bildiği metodları anlatıp geçmeyi düşünmüyorum. Çok bilinen, her yerde bulabileceğiniz kısımları elimden geldiğince hızlı bir şekilde anlatıp, nispeten daha az kullanılan metodlardan bahsetmeye çalışacağım. Tabii bir de işin koleksiyonlar kısmı var. Burada da yine 3 çeşit koleksiyon tipi, birçok sınıf ve metod olduğunu düşündüğümüzde sanıyorum ki tek bir post ile halledemeyeceğiz. Bu nedenle bu yazım diziler hakkında olacak.Temel dizi prensiplerinden ve kullanılan metodlar ile nasıl kullanacağımızı konuşacağız. Diğer yazımda ise koleksiyonları inceleyeceğiz. Elimden geldiğince koleksiyonlar yazısında özellikle performans testleri yaparak örnekler göstermeye çalışacağım. Çünkü, bugün kullandığınız basit projelerde fark etmesekte kompleks sistemlerin performanslarında ciddi farklara yol açabiliyor bu durum. Son olarakta diziler ve koleksiyonların artıları ve eksilerini konuşarak yazımı sonlandıracağım.

Her neyse uzun bir giriş yaptıktan sonra dizilere başlayabiliriz 🙂

DİZİLER:

Diziler, aslında adından da anladığımız gibi verileri gruplayarak, bir arada tutmamızı sağlar. En temel amacı budur. Diziler ile aynı türden verileri bir arada tutabiliyoruz.

Hemen nasıl tanımlandığına bir bakalım;

Yukarıda görüldüğü gibi türünü, ve kaç elemanlı bir dizi olacağını girerek, bu syntaxta bir dizi oluşturabiliyorsunuz. Diziyi oluşturtuktan sonra da dizinin elemanlarına 0. elemandan başlayarak değer ataması yapılır. Ve yine bu elemanlara bu index değeriyle ulaşılarak işlemler yapılır. Diziye eleman ekleme ve index değeri yardımıyla elemanları yazdırdığımız bir örnek ve çıktısı aşağıdaki gibidir.

Bu kısımlarda çok fazla örnek yapmayacağım. Zaten internette konuyla ilgili birçok örnek yer alıyor o nedenle temel bilgileri ve örnekleri geçiyorum. Herhangi bir sorunuz olursa yine üzerinden geçer ya da farklı örnekler yapabiliriz.

Peki, dizimizi tanımladık, değer atadık, değer okuduk, yazdırdık ama bu kadar mı? Hayır, tabii ki 🙂 Diziler belirli yönleriyle birbirlerinden ayrılır. Örneğin; boyutlarına göre. Nasıl yani? biraz bunu açıklayalım. Diziler, boyutlarına göre tek boyutlu ve çok boyutlu olarak ikiye ayrılır. Tek boyutlu diziler yukarıda tanımlamasını yaptığımız, örneğini verdiğimiz dizilerdir.Çok boyutlu diziler ise tek bir field üzerinde değil de birden çok field üzerinde tanımlama yapmamızı sağlar.Bir matris gibi de düşünebiliriz. Çok boyutlu dizileri dedikdörtgensel ve düzensiz diziler olarak ayırabiliriz. Buraya gelmeden önce çok boyutlu bir diziyi nasıl tanımlıyoruz ona bakalım.

Görüldüğü gibi aslında çok boyutlu dizilerin tek boyutlu olanlardan çok bir farkı yok. “,” koyarak eleman sayılarını belirtiyoruz. Örneğin yukarıda 2 boyutlu, 3’er elemanlı bir dizi tanımladık.

Şimdi diktörtgensel ve düzensiz olan dizilere gelebiliriz. Bu diziler, adlarından da belli olduğu kadarıyla, eğer her satırında eşit eleman varsa dikdörtgensel, eğer her satırındaki eleman sayısı farklılık gösteriyorsa düzensiz olarak adlandırılırlar. İkisi için de bir örnek ile bitirelim.

Dikdörtgensel diziyi aşağıdaki gibi tanımlayabiliriz.

Düzensiz Dizi;

Peki güzel, dizi oluşturuyoruz, eleman ekliyor, görüntülüyor, yazdırıyoruz fakat şu ana kadar hep dizimizi tanımlarken eleman sayımızı belirlemek durumundaydık. Doğal olarak önceden bizim için gerekli olan eleman sayısı kestirememiş olabiliriz. Bu durumda dizinin kapasitesini genişletmemiz gerekir. “Ben de diziyi tanımlarken gereğinden çok daha fazla boyutta bir dizi tanımlarım” diyebilirsiniz fakat bu da performans açısından hiçte uygun bir davranış değildir. O zaman nasıl genişleteceğiz dizileri?

Aslında birden fazla yöntemi var dizileri genişletmenin. Aşağıdaki gibi bir ifadeyle dizimize yeni bir boyut atayabiliriz.

Ama böyle bir atama yaparsak bu diziye daha önceden atamış olduğumuz tüm değişkenler silinecektir. Ya daha önceden kaydettiğimiz değişkenlerimizin silinmesini istemiyorsak? O zamanda Array.Resize metoduyla dizimizi genişletebiliriz. Kullanımı aşağıdaki gibidir.

Bizim diziler üzerinde kullandığımız tüm metodlar Array sınıfının metodlarıdır. Burada kullanılan metodların ne işe yaradığına değinelim.

CREATEINSTANCE:

Bu metod ile değişken tipini, eleman sayısını belirleyerek dizi tanımlamamızı sağlar. Aşağıdaki gibi bir kullanımı vardır.

ISARRAY:

Bu metod ile değişken dizi mi değil mi bunu kontrol ediyoruz. Bu metod bize boolean bir değer döndürüyor (True, false).

SETVALUE:

Bu metod dizimize yeni bir eleman eklemeyi sağlar. Aşağıdaki gibi kullanılır.

GETVALUE:

Bu metod ile dizide yer alan elemanlara ulaşabiliyoruz.

JOIN:

Dizi içerisindeki elemanları string bir değişken içerisinde birleştirmeyi sağlar. Elamanlar arasında bir ayırıcı karakterde kullanabiliriz.

COPY:

Bir dizi içeriğinin bir başka diziye kopyalanmasını sağlar. İki farklı şekilde kullanabiliriz.

CONTAINS:

Dizi içerisinde aradığımız elamanın olup olmadığını kontrol etmemize yarayan metoddur. Eğer aradığımız değer dizide mevcutsa “True” değilse “False” değer döndürecektir.

Bir diğer dizi içerisinde arama yapabileceğimiz metod da “IndexOf” metodudur. Bu metodun Contains metodundan farkı geriye aranan elemanın index değerini döndürmesidir. Eğer aranan değer bulunmuyorsa “-1” değerini döndürür. Buna menzer bir diğer metod da LastIndexOf metodudur. IndexOf metodundan farkı ise eğer aradığımız değer dizi içerisinde birden fazla indexte mevcutsa son bulunan index değerini verir.

Şimdilik aklıma gelen, genel olarak kullanılan metodlar bunlar. Kısa kısa değinmeye çalıştım. Eğer anlaşılmayan bir nokta varsa iletişime geçerseniz, elimden geldiğince farklı örneklerle de açıklamaya çalışırım.Birkaç gün içerisinde koleksiyonları da yayınlayacağım.

PAYPAL ‘A VEDA

Burak 2016-06-03

Birkaç gündür çeşitli spekülasyonlarla tarıtışılan Paypal, Türkiye operasyonlarını sonlandırma kararı aldı ve 6 Haziran itibariyle Türkiye’den işlem yapılamayacak. Yaklaşık 2 ay kadar önce TEB ile birlikte yürütülen Paypal Nakit projesini durdurmuşlardı. Şimdi de BDDK ile anlaşma sağlanamadı ve Paypal, Türkiye’den çekiliyor.

Şimdi Paypal kullanmayan, ne işe yaradığını bilmeyen, neden önemli olduğuna vakıf olmayan arkadaşlar için çokta önemli bir sorun değil elbette. Fakat özellikle bilişim sektörü için, aktif Paypal kullanıcıları için bu durumun tek bir açıklaması olabilir : SKANDAL

Neden skandal olarak nitelendiriyorum peki bundan bahsedelim.

E-ticarette haklı olarak hala bir güvensizlik söz konusu. Özellikle yurt dışından alışveriş yapan insanlar birçok problemle karşılaşabiliyor. Paypal bu konuda kredi kartlarının, internet sitelerinin asla yapamadığı bir şeyi yapıyor. Size gönül rahatlığıyla alışveriş yapma imkanı sunuyor. Bir problem olduğunda da sizin hakkınızı savunuyor ve paranızı iade ediyor. Doğal olarak bu durum e-ticarete olan güveni artırıyor ve insanlar alışveriş yapmaktan vazgeçmiyor. Paypal, tüm dünyada ödeme sistemlerinin tekelidir. Bugün Ebay, Aliexpress, DealExtreme gibi yurt dışı siteleri ile n11, Gittigidiyor,D&R, Çiçeksepeti gibi yerli firmalarda Paypal kullanıyor. En büyük avantajlarından birisi de zaten bu. Hiçbir ödeme sistemi Paypal kadar çok yerde kabul görmüyor. Anında para almanıza ve anında para göndermenize olanak sağlar. Screenshot_2 Özellikle yeni başlayan e-ticaret firmaları için mükemmel bir çözümdür. Hem sanal pos almak için uğraşmanız gerekmez hem de bir deneme yapmak istiyorsanız kolayca ödeme almanızı sağlar. Ayrıca Paypal ile ödeme alıyor olmanız müşterilerin gözünde güvenilirliğinizi artırır.

Eğer yurt dışına yazılım ya da bir hizmet satıyorsanız iki taraf için en uygun yöntem yine Paypal olacaktır. Burada da neden elbette güven. Düşünün! bir yazılım sattınız ödemeyi çek ile mi isteyeceksiniz ya da Garanti sanal pos mu tercih edeceksiniz? Müşteriniz hangi önerinize sıcak bakacaktır ?

Gelelim en çok Paypal tercih edilme sebeplerinden bir diğerine. Diğer maddelerde Paypal avantajlarından dolayı öne çıkıyor ve bu nedenle de 1 numaralı tercih oluyor dedik. Peki ya Paypal dışında bir seçeneğiniz yoksa? Evet, evet yanlış duymadınız Paypal, günümüzde bir çok sitede kullanılıyor. Bir çoğunda da ödemeler sadece Paypal üzerinden yapılabiliiyor.

Evet, şimdi bir düşünelim. 6 Haziran itibariyle tüm bu kolaylıklara elveda diyoruz. Sanıyorum artık yazımın başında durumu skandal olarak özetlemem konusunda hemfikiriz.

Çünkü;

Artık Amazon dışında yurt dışında yer alan hiç bir siteden alışveriş yapamayacağız.Bu durumda da önceden 20$ karşılığında yurt dışından aldığımız ürünü 200 Tl ‘lik ücretiyle yurt içinden alacağız,

Çok basit ve kolay bir işlem olan para alma, para aktarma gibi işlemler bundan sonra daha pürüzlü ve biraz daha gecikmeli gerçekleşebilir,

Yeni açmış olduğunuz bir e-ticaret siteniz varsa ya ürünlerinizi ucuza satarak müşterilerinizin risk almasını sağlayın ya da farklı tekniklerle onların güvenini kazanın,

Yazılım ihracatı yapıyorsanız küresel rekabette işiniz zorlaşacaktır. Kimse size amaann! ne olacak? diyerek bir çek vermez. Bu nedenle de müşteriniz sizinkinden daha fazla ücretle, daha güvenli bir firma ya da kişiyle anlaşabilir.

Eğer sadece Paypal ile ödeme yapan sitelerden birisinde mal ya da hizmet satışı yapıyorsanız (Udemy, Paypal) TEBRİKLER, BATTINIZ!

Eminim ki, ülkemizde ÜRETMEYEN, hala Paypal nedir bilmeyen, yasaya da uysaymış kardeşim diyen bir çok insan mevcut. Fakat, dünyada 180 milyon üyeye sahip evrensel bir sistem ile anlaşılamaması bana göre ironik bir durumdur.

Konuyla alakalı bir çok teori ortaya atılıyor. Bunlardan birisi de BKM ‘nin yeni ödeme yöntemi olan TROY. Bazı kişilere göre Paypal’ın lisans alamamasının nedeni bu yeni ve yerli ödeme sisteminin rakibi olan Paypal’ı ülkeden çıkararak yerine çözüm arayanların TROY ödeme sistemini kullanmaya yönlendirmek.

Konuyla alakalı BKM genel müdürünün açıklaması

https://youtu.be/TLYVf5nOjf4?t=102.

Bir diğer konu ise Paypal üzerinden elde edilen gelirlerin vergilerinin alınamıyor olması nedeniyle Paypal’a lisans çıkmadığı yönündeydi. Şimdi burada BDDK kurum ve yöneticilerine sormak lazım. Paypal üzerinden gelir elde eden insanlar ülkeye döviz girişi sağlıyor. Bu durumunda önemini kundaktaki bebekler bile bilir. Aynı zamanda bir çok insan buradan elde ettikleri kazançların vergisini ödüyor. Elbette, buradan ellde ettiği kazancın vergisini ödemeyen de insanlar bulunuyor. Peki soruyorum sen ödüyorsun, o ödüyor ama bak bu ödemiyor diyerek Paypal’ ı toptan ülkeden çıkartıp bu insanların ekmeğiyle oynamak hak mıdır? Buradan 3-5 bin tl gelir elde eden insanların vergilerinin takibi bu derece sık takip edilmek istenilirken neden milyon dolarlar kazanan şirketlerin vergilerinde bu şekilde hassas davranılmıyor? Kayıtdışıı ekonominin %39 olduğu ülkemizde kabak Paypal’a ve buradan 3-5 kuruş kazanan insanlara patlıyor.

BDDK konuyla ilgilii yaptığı açıklamada ise Paypal ‘dan veri merkezlerini Türkiye’ye taşımasını istemiş Paypal ise bu duruma istinaden herhangi bir çalışmada bulunmamış ve bundan dolayı izin verilmemiş.Bu açıklamaya ne demeliyim bilmiyorum açıkçası. Uluslararası ödeme sistemi hizmeti veren kuruma gelin sunucunuzu buraya kurun demek nasıl bir yaklaşımdır? Firma, sadece bir bölgeye dev bir veri merkezi kurmak varken her hizmet verdiği ülkeye ayrı bir veri merkezi kurması nasıl bir maliyet oluşturur bunu düşünüyorlar mı?

Sonuç olarak; AKIL TUTULMASI olarak nitelendirdiğim bu gibi kararlar umarım bir daha tekrar edilmez ve Paypal konusunda olumlu gelişmeler yaşanarak ülkemizde hizmet vermeye devam eder.

Paypal’ın para çekme konusunda 15 tl gibi bir alt limiti bulunuyor. Bu nedenle 6 Haziran tarihine kadar hesabınızdaki parayı 15 tl’ye tamamlamalısınız. Eğer tamamlayamazsanız Ekşi sözlükte Lösev ‘e destek kampanyası başlatılmış.Aşağıdaki linkten bağış yapabilirsiniz.

http://www.losev.org.tr/bagis/Losev_paypal.aspx

İyi niyetli “HACKER” cihan nalbant ve yalanları !

Hacker'ın iyisi?

Burak 2016-05-10

Bugünlerde fazlaca görmüş olmaktan sıkıldığım ve artık insanları göz göre göre kandırmanın bu kadar kolay olmaması gerektiğini düşündüğüm için böyle bir yazı yazma gereksinimi hissediyorum.

Sanıyorum birkaç gün önce “Kim milyoner olmak ister?” yarışmasına katılımıyla yalanlarını tüm ülkeye yayan bu arkadaştan bahsedersek; ilk olarak Twitter’da açık bulduğunu ve bu açığı detaylı şekilde Twitter’a rapor etmesi nedeniyle Twitter yönetiminden San Francisco’da düzenlenen Twitter Flight etkinliğine davet edildiğini iddia etmesiyle tanıdık. Bu konuyla ilgili yazısına buradan ve Bahçeşehir Üniversite’sinin sayfasında yer alan habere buradan ulaşabilirsiniz.

Şimdi, nedir bu Twitter Flight ? Burada bahsedilen San Francisco Flight organizasyonu, mobil geliştiricelere yönelik bir organizasyon ve konferansta daha çok mobil uygulamaların nasıl iyileştirilebileceği hakkında konuşulmuştu. Cihan, kendi sitesinde yayınladığı yazıda Twitter’dan gelen mail için çok sevindiğinden ve davet aldığından bahsediyor ve hemen altına gelen maili ve biletini paylaşıyor. İyi de arkadaşım Twitter Flight zaten 140$ ücreti olan ve bu ücreti veren herkesin katılabileceği bir etkinlik. Bilete zaten hiçbir şey diyemiyorum 😀 Özel davetlisiniz ama Eventbrite ‘ın yine bilet alan herkese gönderilen online biletini paylaşıyorsun. Hadi Cihan haklı ve ülkenin gururu bir Hacker, hem de iyi niyetlilerinden 😀 Peki nerede Twitter Flight? Özel davet alınan etkinliğe dair sonrasında hiçbir paylaşımını göremedik. Tabii herkesin konuştuğu şey belli… 2 türk Twitter’dan buldukları açıklar nedeniyle özel davet aldı. Dolayısıyla odak hemen kayıyor ve asıl soru bir anda ortadan kayboluyor. Raporu paylaştınız tamam o kadar da ekmeğini yediniz bu durumun. Peki ne hakkındaydı bu açık? Twitter bu açığı kapattı mı? bunlar konuşulmuyor. Ayrıca, Twitter ya da benzeri siteler bugüne kadar kim bilir kaç kez bir Bug Report ile açıklarını kapattı. Bu durumu çok büyüterek şuradan ulaşabileceğiniz gibi “Twitter’ı çökerten Türkler davet aldı” gibi başlıklara hayret ediyorum doğrusu. En fazla olan şey bir bug tespiti ve bunu raporlamanın karşılığında Twitter ekibinin teşekkür mahiyetinde 140 $ olan organizasyon biletini ücretsiz bu arkadaşlara göndermesi olabilir.

Twitter davet olayını bir kenara bırakacak olursak. Gelelim, Cihan’ın sayfasında yer alan ve Kim milyoner olmak ister? yarışmasında da dile getirdiği, Selçuk Yöntem ve seyircilerin içlerinden “helal olsun be” dediği bir başka olaya.Buradan sayfasındaki yazıya ve en altta yer alan videodan Kim miyoner olmak ister? diyaloglarına ulaşabilirsiniz. Blog sayfasındaki yazıdan devam edelim. Yazıyı okumayanlar için özetle diyor ki; Bir bankada açık buldum ve bunu rapor ettim 3 ay sonra çift kişilik sinema bileti gönderdiler bende bileti gönderdikleri firmayı hackleyerek 100 kişilik sinema biletini bankaya gönderdim.Fakat o sırada dikkatler yine olayda olduğundan asıl soru akıllardan çıkıyor? Kanıt nerede? Tabii alt kısımda da bir fotoğraf var ama okunmasın diye çaba sarf edilmiş sanki. Her neyse yakınlaştırarak okuyoruz ki bankanın müşteri hizmetleri telefon görüşmesine istinaden 2 tane tek kişilik bilet göndermiş olduğunu anlıyoruz. Peki bu bir kampanya ya da herhangi bir müşteriye özel uygulama olamaz mı? Cihan, yine banka adını sansürleyerek aralarında geçen diyaloğun tamamını paylaşsaydı daha inandırıcı olmaz mıydı? Yani herhalde Cihan dışında herkes böyle bir olay olduğunda bankanın müşteri hizmetleri tarafından gönderilen 2 kişilik sinema bileti mailini değil de buna cevap olarak gönderilen buyurun siz gidin içerikli o 100 kişilik sinema bileti mailini gönderirdi. Yani elimizde yine Cihan’ın anlatımlarından başka bir şey yok.

Bir başka dikkat çeken nokta ise Bahçeşehir Üniversitesi. Gerek blog sayfasında gerek Twitter, Youtube gibi sosyal mecralarda neredeyse iki cümlesinden birisini kurma sebebi BAU ve yetenek bazlı üniversiteye kabul eden bir program olan ApplyBau. Twitter Flight davetindeki içeriğe bakıyoruz ApplyBau reklamı ve rektör danışmanının attığı tweet ile üniversitenin reklamı karşımıza çıkıyor. Twitter’dan davet alıyorsun kardeşim sen ne ara bunlara bu kadarcık kısa yazıda değinebiliyorsun?

Yine bunun dışındaki yazılarına bakacak olursak Cihan, kendi anlattığı kadarıyla Twitter da açıklar bulan, Cinemaximum’u sırf bankaya artistlik olsun diye hackleyebilen ve de neredeyse her bankada açık bulup bunları raporlayan bir arkadaşımız. Peki madem işinde bu kadar yetenekli bir insansın. Neden her iki cümlenden birisi Bahçeşehir üniversitesi ve bu yetenek programı? Kendinizi Cihan’ın yerine koyun siz bu kadar yeteneklisiniz ne yapardınız? Bahçeşehir Üniversitesinin PR çalışmalarını yürüten paylaşımlarda mı bulunurdunuz yoksa uzman olduğunuz siber güvenlikle ilgili paylaşımlarda mı? Alt tarafta yer alan fotoğrafta da görebileceğiniz gibi son yazılarında 8 kez Bahçeşehir Üniversitesi ve programları hakkında konuşurken siber güvenlikle alakalı tek detay kimlik bilgileri çalınması olayı. Bu yazı da zaten bir haber niteliğinde yani siz siber güvenlikle hiç alakası olmayan bir insan olun kanalları gezerken gördüğünüz bir haberle böyle bir yazı yazabilirsiniz. Bir başka yazı da (buradan ulaşabilirsiniz) Yapı kredi cihazlarında açık olduğundan ama Yapı Kredi bankasının kendisine geri dönüş yapmadığından, ama aynı açığı BAU’da keşfettiğinde kendisine ödül olarak yetenek programına dahil ettiklerinden bahsediyor. Yani yine apaçık bir reklam çalışması. Ayrıca Yapı Kredi ‘ye bu açığı Twitter üzerinden bildirmeye kalkmasına mı yoksa bulduğu sözde açığı Yapı Kredi müşteri hizmetlerine tweetlemesine mi daha çok yanalım karar veremedim? Tabi bir de yine içerikte yer verdiği kendisini tehdit eden birisinin araması var. Twitter üzerinden yazıyı görmüş hemen arkadaşı arayarak tehdit etmiş. Peki sormak istiyorum Bay Hacker’a. Sizi arayan kişi telefonunuzu nereden buldu? Yoksa bir açık mı keşfetmiş 😀

Bir diğer konu da Cihan’ın Tedx İstanbul’a konuşmacı olarak katılması. Açık söyleyelim bunu beklemiyordum. TED, sanıyorum bilen herkesin güvendiği kaliteli bir organizasyon ve konuşmacıları da her daim yüksek bilgi birikimli insanlardan oluşur sanıyordum. Nasıl oluyor da böyle birisi Tedx’ e konuşmacı oluyor diye düşünürken bir bakıyoruz ki onun da arkasından kim çıkıyor? Tabii ki BAHÇEŞEHİR ÜNİVERSİTESİ. Buradan ulaşabileceğiniz Ted organizasyonunda gördüğünüz gibi ana sponsor Bau ve tabii ki organizasyonun yapıldığı yer yine Bau. Cihan’ın konuşmada bahsettiği konu ne? Eğitim sistemi ve yanlışları. Sizce de burada yine bir ApplyBau reklamı yok mu?

https://www.youtube.com/watch?v=1Zz9cuJok-A

Neyse, tekrar Cihan ve kod bilgisine dönelim 😀 Hakkıını yemişiz arkadaşın Youtube üzerinde 2 tane paylaşımı var birisi (buradan) bu. Zeka testinde ücretli olan ayrıntılı raporu ücretsiz olarak görelim biz diyor ama videonun sonunda hiçbir şey yok ? İnsanlarda Kali’nin konsolunda bir iki yazı yazınca arkadaşı Hacker sanıyor tabii.Ama sonuç olarak ayrıntılı sonucu göstermeden videoyu bitiriyor.

https://www.youtube.com/watch?v=SGrV34aACLA

Bir diğeri Çiçeksepeti’nin başka müşterilerin siparişini görmek üzerine olan sözde bug. Bilenler bilir geçen yıl Çiçeksepeti’nde yazılım uzmanı olarak çalışıyordum. Açıkçası şu videoyu izledikten sonra neresinden tutsam elimde kalıyor. Öncelikle Çiçeksepeti’nde sipariş detayı görüntülemenizin 2 yolu vardır. İlk yol üye girişi yaparsınız ve menüden sipariş takip kısmına girerek siparişlerinize ulaşırsınız. Bir diğeri de üye girişi yapmadan görmenizi sağlar. Fakat bu durumda sipariş bilgilerinizin yanında mail bilgilerinizi de girmeniz gerekmektedir. Cihan, visual studio’da bir c# uygulaması açmış. Ve sonuç olarak bir link alıp bunu tarayıcıya kopyaladığında sipariş geliyor. Tamam iyi de siparişin senin olmadığını nerden bilelim? Neden sadece 1 örnek var? ya da ben önceden aldığım linki konsol ekranında yazdıramaz mıyım? Bu beni hacker mi yapar? Arkada C# uygulaması açık. Neden kodlara hiç değinmiyor ? Zaten 2 tane bug ile ilgili video var. Onlarda da koda dair gram açıklama yok. Hadi açıklamayı geçtim kodun yarısını bile göremiyoruz.

https://www.youtube.com/watch?v=atAU-JOvhx8

Şimdi tekrar düşünelim. Sizce Cihan Nalbant gerçekten de yetenekli bir Hacker mı yoksa iyi bir hikaye anlatıcısı mı? Hatta bundan da önemlisi gerçekten bahsettiği gibi “iyi niyetli” birisi mi ?

Bonus:

Test Driven Development

Test mi? Ben testçi değilim ki!

Burak 2016-04-30

Birkaç yıldır gün geçtikçe daha fazla karşılaşmaya başladığım bu konu hakkında bir hayli ilgim artmıştı. Ben de bu yeni metodoloji neler söylüyor bir araştırayım dedim.Öncelikle çoğu yerde de “TDD” kısaltmasıyla gördüğümüz bu metodolojinin türkçe karşılığı test güdümlü geliştirmedir. O halde üzerine biraz düşünürsek karşımıza “Önce test et, sonra kod yaz” gibi bir mantalite çıkıyor. Bunu ilk düşündüğümde çok mantıklı bulmadığımı söylemeliyim. Hem henüz yazmadığım kod için bir test oluşturmak çok büyük bir zaman kaybı değil miydi ?

Bu düşüncelerim nedeniyle tam anlamıyla test güdümlü geliştirmeye yaklaşmayı düşünmedim. Fakat popülerleşmeye başladıkça merakım, ön yargımı yendi ve enine boyuna bu metedolojiyi inceledim. Şimdi görüyorum ki aslında hiçte zaman kaybettirmiyor aksine uzun vadede size zaman kazandırıyor. Peki bu nasıl oluyor ? Nasıl oluyor da biz test yazmadan daha çok vakit kaybediyoruz ? Öncelikle işin mantığına inelim. Test güdümlü geliştirme, küçük adımlı yazılım geliştirme döngülerinden oluşuyor. Test güdümlü geliştirme yaparken her bir sınıfımız için ayrı ayrı birim testler yazarız ve ardından bu testi geçebilecek kodumuzu yazarız daha sonra yazdığımız kodu iyileştirmek adına değişiklikler yaparız. Her test bu döngünün bir halkasını tamamlar. Tüm testleri tamamladığımızda ise elimizde gereksinimlerimizi karşılayan kodlar olacaktır. Asıl meselede buradan sonra başlayacak olandır. Uzun bir zaman sonra kendi yazdığımız koda bakıp yabancılık çektiğimizde saatlerce hatta bazen günlerce basit bir problemin nedenini araştırıyoruz. Oysa ki TDD ile bu durum sorun olmaktan çıkıyor. Çünkü elimizde projenin birim testleri var ve bu testleri çalıştırdığımızda sorun nerede kolaylıkla görebiliyoruz. Bunun yanında eğer test güdümlü geliştirme yöntemini kullanıyorsanız doğal olarak test edilebilir kodlar oluşturuyorsunuz. Bir kodun da test edilebilirliği ne kadar fazla ise kodun içerisindeki sınıfların birbirleriyle olan bağılılığı o kadar azdır. Böylece nesne yönelimli programlamanın temel amaçlarından biri olan “high cohesion and loose coupling” ilkesine de hizmet etmiş olursunuz. Ayrıca bu tarz bir yöntemle geliştirilmiş yazılımda, tasarım iyileştirme faaliyetleri daha kolay ve güvenli gerçekleştirilir. Çünkü kodda yaptığımız her bir değişiklikte tüm birim testlerini koşturarak yaptığı değişikliğin herhangi bir gereksinimi ezilip ezmediğini kontrol edebilecektir.

Tamam, test yazmak mantıklı, test yazmaya karşı değiliz ama neden daha önce test yazayım diye sorabilirsiniz. Bende aynı soruyu sormuştum çünkü 🙂

Testleri daha önce yazmamız önümüzü daha iyi görmemiz ve daha iyi bir kurgu oluşturmamıza olanak sağlar ki zaten kod yazmadan testini yazabiliyorsanız kafanızda kurguyu tamamlamışsınızdır. Kafanızda oturmuş bir kurgu da kodunuzun en ince ayrıntılara kadar planlamalarını yaptığınızı gösterir. Bu sayede de daha nitelikli kod yazmış olursunuz.Bu konuyu da Paul Graham’ın “Programlar yazılırken şekillendirilmelidir; tıpkı yazarlar, ressamlar ve mimarların yaptığı gibi.” sözleriyle çokta uzatmadan bitirelim.

Şimdi de gelelim teoride olayın nasıl işlediğine…

Test güdümlü geliştirme üç aşamadan oluşuyor, bunlar;

Red:

İmplementasyona değil gereksinime odaklan: Bu aşamada geliştirici kendisine verilmiş gereksinimlerden sıradaki gereksinime ait birim testi yazar. Yazılan test, daha öncesinden yazılmış olan tüm birime testlerle birlikte çalıştırılır. En son yazılan birim teste ait implementasyon henüz yapılmadığı için ilgili test başarısız (Red) sonuçlanır.

Green:

Basit düşün basit yap: Geliştirici, gereksinimi karşılayacak yazılımın implementasyonu en az kodla yapar. Yazılan kodun sadece şimdiye kadar birim testi yazılmış gereksinimleri karşılaması beklenir. Gelecekte yazılımı yapılacak durumların kodlaması önceden yazılmaz ve düşünülmez. Implementasyon tamamlandıktan sonra yazılımın gereksinimi karşılayıp karşılamadığını kontrol etmek için tüm birim testler çalıştırılır. Beklenen durum tüm birim testlerinin başarıyla geçmesidir. Bu testler başarıyla koştuğu takdirde yazılımcı bir sonraki aşamaya geçebilir aksi takdirde gereksinim ile yazılım arasında uyumsuzluk olduğunu gösterir.

Refactor:

Tasarımını iyileştir: Geliştirici, bu aşamada testlerinde değişiklik yapmadan kodunu yeniden gözden geçirerek tasarımını iyileştirmeye çalışır. Bu kapsamda geliştirici kullandığı methot, değişken ve sınıf isimlerini düzenler. Var olan kod tekrarlarını giderir ve kodunu daha test edilebilir hale getirir. Böylece kodunun bağımlılığını azaltırken amaca yönelik methot ve sınıfların ortaya çıkmasını sağlar. Bu aşamada dikkat edilmesi gereken nokta değişikliklerin adım adım yapılmasıdır. Ayrıca her bir adımda yazılımın derlenebiliyor olmasına özen göstermelidir. Bununla birlikte yazılımcı her değişiklik adımında tüm testleri çalıştırarak testlerin başarıyla geçtiğinden emin olmalıdır. Testler geçmediği sürece yeni değişiklikler yapmamalıdır.

Bugünlük test güdümlü geliştirmenin ne olduğundan, neden önemli olduğundan ve nasıl kullanıldığından bahsetmeye çalıştım. Bir sonraki yazımda örnek çalışmalarla birlikte test güdümlü geliştirmeyi detaylı bir incelemeye alacağım.

Bilgisayarın Açılmama Sorunu

Şartel attı galiba

Burak 2016-03-16

Merhaba Arkadaşlar,

Bu yazımı daha birkaç gün önce başıma gelmesinden dolayı yazıyorum. Aslında basit bir çözümü olmasına rağmen bilmeyen arkadaşlar için hayli korkutucu bir durum olabiliyor.

Bilgisayarımı daima açık ya da uyku modunda bırakanlardanım. Geçen akşam da yine bilgisayarım uyku modundayken elektrikler birkaç kez gidip geldi. Birkaç saat sonra bilgisayarımı açmak istediğimde kapandığını farkettim. Güç düğmesine bastım fakat değişen bir şey olmadı. O sırada elektrikler olmadığından şarjının bitip kapandığını bu nedenle bilgisayarımın açılmadığını düşündüm. Yaklaşık 1 saat sonra elektrikler geldiğinde ise tekrar güç düğmesine basarak bilgisayarı açmayı denedim. Fakat yine değişen herhangi bir şey yoktu. Ne bir ışık yanıyordu ne de fan sesi geliyordu. İşte bu durumda çoğu insan panikliyor. Acaba anakart mı yandı, yoksa ekran kartına mı bir şey oldu ? Neden açılmıyor ki ? Hele bir de bilgisayarınızın garantisi devam ediyorsa bilgisayarı açarsanız garanti devre dışı kalacağından (Çoğu markada uygulanıyor) riske girmek istemeyip servise göndermeyi düşünebilirsiniz. Bu durumda da belki birkaç gün bilgisayarınızı kullanamayabilirsiniz. Bazı insanlar için bu bir problem teşkil etmese de bizim gibi işini bilgisayar üzerinden yürüten insanlar için sıkıntılar yaratmaktadır.

Peki, bu durumda biz ne yapabiliriz ?

Öncelikle bilgisayarınıza bağlı ne kadar usb aygıt varsa çıkartın. (Yazıcı,fare,taşınabilir disk vb.)

Daha sonra bilgisayarınızın şarj adaptörünü hem bilgisayardan hem de fişten çıkartın.

Bir sonraki aşama da bilgisayarınızın elektrik bağlantısını kestikten sonra bataryayı yani pili çıkartın. Bilgisayarınızın altında pili çıkartmak için bir düğme benzeri parmağınızla sağa veya sola ittirebileceğiniz bir düzenek göreceksiniz bunu kullanarak pili çıkartın.

Şimdi bilgisayarınızın power(Açma-Kapama) düğmesine 10-15 saniye kadar basın. Bu sayede bilgisayarınızdaki elektrik yüklerini boşaltırsınız.

10 dakika kadar hiçbir şey yapmadan bekleyin ve ardından bilgisayarınızın pilini takmadan şarj adaptörünüzü takarak bilgisayarın güç düğmesine basın. (Bu problemi yaşayanların %90 ‘ı ani elektrik yüklenmelerinden kaynaklı bir sorun yaşadığından probleminiz bu şekilde düzelecektir. ) Eğer bilgisayarınız açıldıysa kapatın ve bilgisayarınızın pilini takın. Şarj adaptörünü tekrar takın ve 10 dakika kadar şarj olmasını bekleyin. Şimdi adaptörü çıkararak tekrar bilgisayarınızı açmayı deneyin

Eğer bu aşamalardan sonra bilgisayarınız açılıyorsa ani elektrik yüklerinden kaynaklı geçici bir problem oluşmuştur, eğer pil takıldığında açılmıyor fakat pilsiz çalışıyorsa piliniz bozulmuş demektir.

Birden fazla dosyanın uzantısını değiştirmek

Burak 2016-02-11

Merhaba arkadaşlar,

Bazen çok işimize yarayabilecek fakat nasıl yapacağımızı bilmediğimizde tabiri caizse bize hamallık yaptıran bir durumdur. Örneğin farklı dosya uzantılarına sahip birçok dosyanız var ve bunu kullanmak istediğiniz programa göre değiştirmek istiyorsunuz. Bu elbette sizin ihtiyacınıza göre farklı şekillerde kullanılabilir. Bu yazıyı paylaşmamda ki neden geçenlerde bir arkadaşım böyle bir programın olup olmadığını sorduğunda bu tarz ufak problemler için bilgisayarınızda gereksiz yer kaplayan 3.parti yazılımlara ihtiyacınızın kalmaması. Her neyse fazla uzatmadan konuya girelim 🙂

Bu işlemi elbette her uygulama uzantısında yapabilirsiniz. Ben örnek olması açısından bir html dosyasını visual studio mvc’de view dosyaları olarak kullandığımız cshtml uzantısına çevireceğim.

Öncelikle uzantısını değiştirmek istediğimiz klasörün içerisine bir metin belgesi açıyoruz. Açtığımız belgenin adının ne olduğu önemli değil.

Ardından açtığımız metin belgesinin içerisine gelerek ren *.html *.cshtml yazıyoruz ve dosyayı kaydediyoruz.

Kaydettiğimiz dosyanın uzantısını bat olarak değiştiriyoruz.

Eğer sizde dosya uzantısı görünür değilse bulunduğunuz klasörde üstte yer alan menüden Görünüm -> Dosya adı uzantıları kısmını işaretlemeniz yeterli olacaktır.

Son olarak tek yapmanız gereken bat dosyanıza çift tıklayarak dosyayı çalıştırmak olacaktır.

3D Yazıcılar

Geleceğin teknolojileri

Burak 2016-02-05

Son zamanlarda herkesin dilinde olan 3d yazıcılar birçok insan gibi beni de heyecanlandırıyor. Bugüne kadar yaptıkları, bundan sonra yapacaklarıyla 3d yazıcıların bugünü ve geleceğimizi şekillendireceğinden şüphemiz yok. Peki bu kadar sık duymaya başladığımız bu 3d yazıcılar nedir, ne işe yarar ? Biraz bunlardan bahsedelim.

3D Yazıcı Teknolojisi Nedir ?

https://www.youtube.com/watch?v=Llgko_GpXbI

3D Yazıcı teknolojisi, bilgisayar ortamında tasarladığınız 3 boyutlu objeleri somut hale dönüştürebileceğiniz araçlardır. .stl uzantılı dosya olarak kaydedilen 3 boyutlu tasarımlar, 3d yazıcıya gönderilerek katman katman gerçeğe dönüştürülür. Kısacası 3d yazıcı teknoloji ile artık aklınızda ne varsa ellerinizle de dokunabileceksiniz.

3d yazıcı teknolojisi aslında yeni bir teknoloji değil ilk olarak 1984 yılında bir uygulaması yapıldı ancak geçtiğimiz 20 yılda bu yöntem çok fazla ilgi görmedi. 2006 da başlayan Reprap projesi(açık kaynak donanım harekatı) ile çok daha geniş kitlelere ulaştı. Bu proje sayesinde bir çok sıradan kullanıcı ve kendin yap kültürüne sahip kişiler bir 3d yazıcıya sahip oldu. Hatta projenin başlangıcından 3 yıl sonra bir çok şirket açık kaynak 3d yazıcı üretmek ve satmak için Reprap projesinin getirdiklerinden faydalanarak teknolojiyi çok daha geniş bir kullanıcı kitlesine yaymayı başarmıştır.

Nasıl Çalışır ?

3d modelleme yapabilen tasarım programları kullanılarak stl uzantılı dosyalar elde edilir. Daha sonra 3d baskı işlemine geçilir. Burada obje katmanlar halinde üst üste serilerek oluşturulur. Son aşama olarakta 3D printer ile gerçekleştirilen objeler geleneksel teknolojiler ile karşılaştırıldığında boyutsal açıdan daha hatalı olabileceğinden dolayı kritik objelerde yüzey temizleme, iyileştirme ve son ölçüye getirme işlemi uygulanır.

Peki normal yazıcılarda kullanılan mürekkep yerine ne koyacağız ?

Bu sorunun cevabı aslında makinenin hangi 3d teknolojisini kullandığına göre değişiyor. Örneğin; FDM teknolojisini kullanan 3d yazıcılarda PLA ve ABS plastikleri yaygın olarak kullanılıyor. Fakat daha profesyonel makinalarda altın, platinyum,titanyum, seramik tozu, metal tozu, metal görünümlü-akrilik plastikler ve mumsu maddeler ile daha birçok farklı hammadde kullanılabiliyor.

Neler Yapılır ?

https://www.youtube.com/watch?v=dcX41EQ1JTo

Yukarıdaki videoda da görüldüğü üzere 3d yazıcı teknolojisi sayesinde birçok harika şey yapılabiliyor. Özellikle sağlık sektöründe düşük maliyetlerle çeşitli uzuvların üretilmesi çok önemli bir gelişme. Tabi gün geçtikçe hayatımıza daha çok giren robotların üretilmesinde de rol oynayacağa benziyor. Kim bilir, belki de bundan 10 yıl sonra hepimiz evlerimizde kendimiz için 3d yazıcılarda robot üretiriz.

3d yazıcılar elbette bunlarla yetinmiyor. Çin’li bir şirket endüstriyel atıklarla 1 günde sadece 12.000 tl maliyetle 200 metrekare bir ev yaptı. Üstelik bu sadece başlangıç. WikiHouse ise isteyen herkesin kendilerine bir ev yapabilmesi için açık kaynak ev projesini paylaştı. Site üzerinden bir evin modelini indirip bunu 3d makinenizde basabilirsiniz. Elbette her 3d yazıcı ile bu mümkün değil 😀 ) fakat 3d yazıcıların hem ekolojik olması hem de 1 gün gibi çok kısa sürede ve çok düşük maliyetlere ev üretebilmesi nedeniyle ilerleyen yıllarda inşaat sektöründe büyük değişimler gözlemlenebilir.

3d yazıcılarla üretilebilecek diğer bir şey ise kişisel eşyalar. Kendiniz için küçük maketler ya da sevgiliniz için bir hediye üretebilirsiniz. Hem hobi olarak hem de aklınıza gelen hemen her şeyi oluşturabilmeniz oldukça keyifli olacaktır. Bu saydıklarımız dışında 3d yazıcılarla elbette birçok şey üretilebiliyor. Aslında bu birazda bizlerin yaratıcılığına kalıyor. Şimdiye kadar elbise, çalınabilir keman, göğüs kafesi, süper spor otomobil, insansız hava aracı, çikolata, kek, uçak ve jet motoru, teleskop, jeneratör ve telefon gibi birçok farklı ürün üretildi. Bakalım bundan sonra neler olacak.

En iyi Visual Studio Eklentileri

Geliştiricinin yardımcıları

Burak 2016-01-14

Kod yazarken en önemli şeylerden biriside idelerdir. Kod bilgisinin yanında kullandığınız editörün kullanışlı olması gerekir. Bu nedenle ülkemizde geliştiricilerin oldukça sık tercih ettiği Visual Studio ‘yu nasıl daha kullanışlı hale getirebileceğinizden bahsedeceğim.

Sırasız bir şekilde işinize yarayacağını düşündüğüm Visual Studio eklentileri;

Productivity Power Tools 2015

Hatalarınızla ilgili açıklamalar, otomatik olarak parantez kapatma, dosyalarımızın hangi projede olduğunu karıştırmamanız için sayfaların farklı renkte açma, kodlarınızın karmaşasını önleme gibi daha birçok temel özelliği bir arada barındıran bir tool.

Snippet Designer

Bu eklenti, yazmak istediğiniz kod bloğunuzu otomatik olarak doldurmayı sağlıyor. Örneğin bir if bloğu yazacaksanız if yazıp Tab tuşuna bastıktan sonra if bloğu otomatik olarak oluşuyor. Aslında visual studio içerisinde temel snippetlar mevcut fakat bu eklenti sayesinde istediğiniz snippetları düzenleyebilir ya da kendiniz yeni snippetlar oluşturabilirsiniz.

Web Essential

Web essential birçok konuda visual studio ‘yu desteklemektedir. Css,Typescript, Html, Javascript,zen coding, modernizr gibi editör helperları bu desteklerden bazıları. Birden çok resmi birleştirebiliyor olması Ayrıca less, sass, json kodlarını yazarak otomatik olarak site içindeki css dosyanıza import ediyor olması da diğer katma değerleri. Hakkında tek başına bile bir makale yazılabilecek olan bu eklenti bana göre visual studio’nun en güçlü eklentilerinin başında geliyor.

Resharper

Eklentiyi kullanan herkesin ortak fikri sanırım “Çok güzel, çok kullanışlı ama çok ağır bir eklenti”. Eğer sisteminize güvenmiyorsanız kurmayın derim. Kasma sorunları yaşatabilir. Fakat olurda kurarsanız diye artılarından bahsedelim biraz. Kod yazmanıza yardımcı birçok toolbara sahip. Öncelikle sevmediğim şeylerden birisi reference eklemelerdir. Bu arkadaş reference olarak eklemediğiniz sistem dll dosyalarını bulup reference eklemenizi sağlıyor. Bunun dışında kendi kısayolları var. Bu kısayollar ile birçok iş yapabiliyorsunuz. Hatta biraz ileri gidersek ReSharper kullanıyorken aynı zamanda fare kullanıyorsanız eklentinin tam olarak hakkını veremediğinizi bile söyleyebilirim. Ayrıca çok fazla framework desteklemesi de iyi yönlerinden. Çeşitli hata verebilecek kodları tespit edip size bildirmesi falan şahane.

Sonuç olarak adeta kod yazarken eliniz, kolunuz konumuna gelen, asistanınız gibi davranan bir eklenti. Ülkemizde hala Resharper mı ? O ne ola ki ? gibi bir tavırla karşılaşsakta dünyada iş görüşmelerinde .net geliştiricilere eklentiyi kullanıp kullanmadıkları sorulan bu eklenti kendini çoktan kanıtlamıştır. Kasma sorunu yaşatmayacak bir sisteminiz varsa ve ücreti sizin için sorun olmayacaksa şiddetle tavsiye ettiğim eklentidir.

Ücretli miydi ? diye sorduğunuzu duyar gibi oldum 😀 Evet, ücretli. Buradan bilgi alabilirsiniz.

PHP Tools for Visual Studio

Php ile genellikle notepad++ ya da dreamweaver gibi ideler kullanılıyor. Bu idelere alışamamış ya da daha güçlü bir ide ile kod yazmak isteyenler için ideal bir eklenti PHP Tools. Eklenti kurulumu oldukça basit zaten. Eklentiyi kurduktan sonra templates kısmına php ekleniyor. Ayrıca herhangi bir ayar yapmadan kullanabiliyorsunuz. Bu eklenti de ReSharper gibi ücretli bir eklenti. Ücretleri hakkında buradan bilgi alabilirsiniz.

Aklıma gelen ve öne çıkan eklentilerden bahsetmeye çalıştım. Daha fazlası için Bu adresten işinize yarayacak eklentileri bulup, yükleyebilirsiniz. Yukarıda da belirttiğim üzere sisteminize göre bazı eklentiler kasma sorunlarına sebep olabilir. Hatta bazen visual studio açılmayabilir. Bu gibi durumlarda visual studio safe olarak açıp eklentileri kaldırabilirsiniz.

Const ve ReadOnly

Programlamaya giriş

Burak 2015-12-25

Uzun bir ara sonra basit bir konuyla tekrar blog yazılarına başlıyorum. Konumuz const ve readonly. Zaten çok anlatılacak bir şey yok bu konuda. Kısaca bahsederek birkaç örnek üzerinde kullanımlarına bakalım.

CONST:

Const türkçe karşılığı olarak sabit anlamına gelmektedir. Yani buradan anladığımız kadarıyla sabit değerleri tanımlarken const ifadesini kullanacağız. Peki sabit derken tam olarak ne kastediyoruz buna bakalım. Örneğin; bir dairenin çevresini hesaplayacağız. Burada doğal olarak Pi sayısını kullanmamız gerekiyor. Pi değeri ise değişkenlik gösterebilecek, duruma göre artırıp azaltılabilecek bir değer değil. Yaklaşık olarak 3.14 gibi bir değere sahip. Bu nedenle bizde uygulamalarımızda pi sayısını kullanıyorsak değerini sadece bir kez atayarak bir daha bu değeri değiştirmek istemeyeceğiz. Tabii burada örneğimiz pi sayısı olsa da birçok farklı amaç için sabit değerler tanımlayabiliriz. (Örneğin; bir ürünün fiyatı hesaplanırken kdv oranı sabit bir değer olabilir.)

Peki neden const ifadesini kullanmalıyız. Bu sorunun cevabını en başta verdik aslında. Burada amaç değişkenimizin değerinin değiştirilmemesi. Yine pi sayısı üzerinden devam edersek örneğin biz uygulamamızda pi sayısını 3.14 olarak kullanıyoruz. Eğer const ifadesini kullanmayarak değerini 3 olarak değiştirirsek hatalı sonuçlar elde edeceğiz.

Şimdi const ifadesini nasıl kullanacağımıza bakalım:

Tanımlamasını genel olarak yukarıdaki biçimde yapabiliriz. Biz burada Pi değerinin tanımlamasını yaptıktan sonra bir daha Pi değişkenine bir değer ataması yapmak istersek aşağıdaki şekilde hata alacağız.

Gördüğümüz gibi Pi’nin değerini 3.14 iken 3 olarak değiştirmek istediğimizde derleme zamanı hatası alıyoruz. Yani buradan da anlıyoruz ki const ile bir değişken tanımlanırken sadece değişkeni tanımladığımızda değer atayabiliriz. Daha sonrasında tüm atamalarımız hata verecektir.

Yukarıda olduğu gibi const ile değer atamadan sadece değişken tanımlayıp daha sonra değer atayalım dersek yine bir hata alacağız. Bu seferki hata ise const ifadeye bir değer ataması yapılmasının zorunlu olduğu ile alakalı olacaktır.

Velhasıl const böyle. Şimdi bir de Readonly nedir, ne değildir ona bakalım.

READONLY:

Readonly ifadesinin türkçesi ise sadece okunabilir anlamında. Yani yine burada da değişkene bir atama yapacağız ve bir daha o değeri değiştirmeyeceğiz. O zaman const ile arasında ne fark var ? Neden readonly kullanalım ?

Readonly’ nin const ile arasındaki en büyük fark değişkenin tanımlandığı anda değer ataması yapılması zorunlu değildir. Daha sonra da değer ataması yapabiliriz.

Gördüğünüz gibi hem yukarıdaki gibi const ifadesine benzer bir şekilde atama yaparak hem de çalışma zamanında değer ataması yaparak kullanabiliriz. Çalışma zamanına da bilmeyenler için bir örnekle değinecek olursak;

Yukarıdaki ifade de çalışma zamanında Yil değişkenine 2016 değeri atanacaktır. Bu ifadeyi const ile yazdığımızda ise yanındaki şekilde görüldüğü üzere hata alınacaktır. Aşağıda yer alan görselde de yine const ifadesi ile yapamayacağımız bir tanımlama bulunuyor. Readonly ile class constructor ‘ında değer ataması yapabiliriz.

Madem readonly ifadesi ile hem const gibi tanımlamalar yapabiliyoruz hem de bunun dışında çalışma zamanında ve class constructor’ ında da atama yapabiliyorum o halde neden const ifadesine ihtiyaç duyuyorum? Burada da neden const ile hem class içerisinde hem method içerisinde tanımlama yapabiliyorken readonly ifadesi ile yalnızca class içerisinde tanımlama yapabiliyoruz. Method içerisinde readonly ile bir tanımlama yapmak istersek aşağıdaki şekildeki gibi bir hata alacağız.

PHP mi ASP.NET mi ?

Just develop it

Burak 2015-12-25

Yıllardır web yazılımla uğraşan herkesin kendine sorduğu sorudur: Asp.Net mi yoksa Php mi kullanmalıyım ? Öncelikle şunu söylemeliyim ki bu yazının sonunda bir boks maçında olduğu gibi bir galip çıkmayacak. Bu yazıyı yazmamdaki neden önceden kendimin de yaşadığı bu kararsızlığı mantıksal sonuçlara dayandırarak karar vermenizi kolaylaştırmak. Ben de bilgisayar mühendisliğine ilk başladığım yıllarda bu ikileme çok düştüm. O zamanlar daha kolay öğrenebileceğimi ve de freelance çalışmalar için daha uygun olduğunu düşündüğümden dolayı Php ile yazılım geliştirmeyi tercih etmiştim. 2 yıl sonra bir iş görüşmesine gitmiştim. Burada neden php dilini kullandığımı ve Asp.Net ‘e göre kaliteli yazılım geliştirmede ne gibi faydaları olduğunu sorduklarında verebilecek bir cevabımın olmadığını farkettim. Sadece kolay öğrenebileceğimi düşündüğüm için Php kullanıyordum ve bu güne kadar hiç böyle bir soruyu kendime sormamıştım. Eve döndüğümde araştırmaya koyuldum ve dillerin avantaj ve dezavantajlarını yazdım. Hangi avantajların benim için önemli, hangi dezavantajların daha gözardı edilebilir olduğuna karar vererek yazılım konusunda kendi adıma yeni bir sayfa açmıştım.

Gelelim karşılaştırmaya. Birçok sitede Bu karşılaştırmalar bir taraftar edasıyla yapılıyor maalesef. Asp.net kullanıcıları Php’yi eleştirip dururken Php kullanıcıları da Php’yi yerlere göklere sığdıramıyor. Ben bu konuda elimden geldiğince tarafsız olarak dillerin avantajlarından ve dezavantajlarından bahsetmeye çalışacağım.

Hadi başlayalım ;

1.Derleyici

Microsoft’un geliştirdiği bir IDE olan Visual Studio herhalde bu konuyu tartışanların tek ortak noktası. Asp.Net ‘i ön plana atan en önemli özelliği Visual Studio gibi mükemmel bir IDE’ ye sahip olmasıdır. Php için de çeşitli geliştirme araçları olsa da Visual Studio alanının lideri ve tartışmaya yer bırakmayacak kadar iyi bir geliştirme aracıdır.

2. Performans ve Hız

Bu konuda bu daha iyi demek taraflı bir yorum olacaktır sanıyorum. Çünkü sitenizin performansı kullandığınız dilden ziyade birçok faktöre bağlıdır. Genellikle büyük web siteleri (Google, Facebook,Yahoo vb.) bu problemi açık kaynaklı ve her biri o dilin en iyi yaptığı işi yapması için seçilen birçok programlama dili kullanarak maksimum performans elde ediyor.

Performansı etkileyen önemli ölçütlerden birisi veritabanına bağlantı kurup burada sorguyu gerçekleştirerek sorguyu web sunucuya ordan da tarayıcıya aktarmaktır. Burada da programlama diliyle veritabanı arasındaki ilişki önem kazanmaktadır. Günümüzde Php ve MySql arasındaki iletişim Asp.Net ve MsSql arasındaki iletişime göre daha hızlıdır diyebiliriz. Yine de bu durum sitenizde gözle görülür bir fark yaratmayacaktır.

Diğer performans farklılıkları şu şekilde;

Php, çalışma anında hem derlenip hem çalıştırılırken Asp.net kodları çalıştırılmadan önce dll’lere derlenerek çalışmayı hazır hale getirilip saklanmaktadır bu nedenle sunucu tarafında Asp.net daha hızlı çalışır diyebiliriz. Kullanıcı taraflı çalışma ve sayfa yükleme hızları geliştiricinin tecrübesi ve kullandığı teknolojilere göre büyük ölçüde değişebilmektedir.

3. Web Site Hazırlama

Php kullanarak sıfırdan bir web sitesi hazırlamak zahmetli bir iş olacaktır. Asp.net bu konuda mevcut kontrolleri kullanarak ortalama ihtiyaçlarınızı karşılayacaktır. Fakat projeleriniz büyüdükçe Asp.net ‘in mevcut kontrolleri sizin için birçok sıkıntı da yaratabilir. Bu aşamada Php ‘nin çok sevilen bir yönü ortaya çıkmaktadır: Php tabanlı içerik yönetim sistemleri.

Nedir bu içerik yönetim sistemleri ?

WordPress, Joomla, Drupal, Oscommerce ve Magento gibi neredeyse her web yazılımı için geliştirilmiş açık kaynaklı bu sistemleri indirip ihtiyaçlarınıza göre kolayca kullanabilir ve geliştirebilirsiniz. Bu da Asp.net ‘te olmayan ve Php ‘nin tercih edilmesinde önemli rol oynayan maddelerden biridir.

4. Maliyetler

Geliştirme araçları, barındırma hizmetleri, çeşitli sertifikasyon ücretleri…

Maliyetler size şuan çokta önemli gözükmeyebilir fakat Firmaların ana amaçlarının karlılık olduğu düşünülürse yapılan işlere göre çok ciddi maliyetler ortaya çıkabilmektedir. Php, açık kaynaklı olması ve tercih edilirliğinden kaynaklı olarak hosting ücretlerinin daha uygun olması, ücretsiz ve cüzi fiyatlara IDE ‘lere sahip olması ile sertifikasyon ve lisans ücretleri gerektirmemesinden dolayı Asp.net ‘e göre oldukça ucuzdur. Özellikle firmalar için ciddi maliyet farklılıkları oluşturabildiğinden Php bu konuda tercih sebebidir.

5.Kullanım Oranı

Elbette dünyada birçok Asp.net ya da Php kullanan web sitesi mevcut. Genel kullanıma bakıldığında Php, Asp.net ‘e göre daha fazla kullanılıyor. Bunda da maliyetlerin ve wordpress, joomla gibi içerik yönetim sistemlerinin büyük etkisi bulunuyor. Fakat işin ticari boyutuna bakıldığında firmalar genellikle Asp.net kullanmayı tercih ediyor. Özellikle ülkemizde genellikle banka ya da önde gelen e-ticaret sitelerinin Asp.net kullandığını görebiliriz. Örneğin; Kariyer.Net ‘te şuan 325 Asp.net ilanı varken 149 Php iş ilanı bulunmaktadır.

Bu dilleri kullanan bazı popüler web siteleri;

Php: Facebook, Apple, Wikipedia, Yahoo, Flickr, Vimeo

Asp.net: MySpace, Msn, Ebay, Live, BankofAmerica, Jd