Social Icons

Pages

Featured Posts

26 Şubat 2013 Salı

İşaretçiler ( Pointers ) !


Programlamaya başlayan herkesin er yada geç karşılaştığı bir konu olan işaretçilere(pointers)  kısa bir bakış atmak istedim. İşaretçilerin tanımı ile konuya başlayalım. İşaretçiler, bir nesnenin bellek adresini tutan değişkenlerdir.  Oldukça basit bir şekilde tanımladığımız işaretçilere neden ihtiyaç olduğunu bir örnekle açıklamak istiyorum. Elinizde 100 MB lık bir nesne olsun, bu nesne ile ilgili programınızda işlem yapmak istediğinizde işletim sistemi size bu nesnenin bir kopyası üzerinde işlem yapmanıza izin verir. Dolayısıyla belleğe fazladan bir 100 MB eklemiş olursun. Ancak işaretçi kullanır isek nesnenin adresi ile direk nesneye ulaşarak üzerinde işlem yapabiliriz. Benim 8 GB belleğim var diyenleri duyar gibiyim bende size bu nesne üzerinde 1000 tane işlem yapmanız gerektiğini söylersem işaretçilerin neden bu kadar önemli olduğu anlayabilirsiniz. Performansın olmazsa olmaz olduğu programlarda işaretçi kullanımı neredeyse zorunludur. Şimdi madalyonun diğer tarafına bakma zamanı geldi. İşaretçilerin kullanımı hataya son derece açıktır. Derleme zamanında hata vermeyen programınız çalışma zamanında hatayla karşılaşabilir. İşte bu sebepten yeni nesil programlama dillerinden Java işaretçi kullanımını tamamen kaldırmıştır. Dot net platformunda ise geriye doğru uyumluluk adına işaretçi kullanımı desteklenmiş fakat platformu geliştirenler tarafından kullanımı tavsiye edilmemiştir. Yeni nesil programlama dillerinin işaretçilere bakış açısını belirleyen en önemli faktör ise bir işaretçinin işaret ettiği adreste bir nesnenin olduğunun garantisini verememesindendir.

25 Şubat 2013 Pazartesi

Coder Programcı Farkı


Sıra geldi başka bir internet fenomenini irdelemeye. Yıllardan beri internette tartışılan coder mi programcı mı tartışması kuşkusuz teknoloji ile ilgilenenlerin sıkça karşılaştıkları bir olgu. Öncelikle her iki olguyu tanımlayarak başlayalım. Programcı, program geliştirme işini profesyonel olarak yapan ve hayatının bu meslek ile idame ettiren kişidir. Programcı, müşterinin veya işverenin istediği şekilde programı geliştirip onlara sunar. Coder ise bu meslekle profesyonel olarak ilgilenmez. Geliştirdiği ya da geliştireceği programı kendi özel zamanında geliştirir. Üzerinde müşteri istekleri ya da işveren baskısı yoktur. Programlamayı sadece kendi istediği için yapar. Bazen geliştirdiği programı kendinden başka kimse kullanmaz. Programcı yaptığı programa sadece gereken düzeyde katkı sağlar. Coder ise programını herkesin kullanıp beğenmesi için özel bir çaba sarf eder. Daha önce denenmemiş bir takım teknikleri deneye çalışır. Coderlar genelde yaptığı programın herkes tarafından kullanılabilmesi hedefledikleri için kod optimazyonu üzerinde özel bir gayret gösterirler. Fakat suda unutulmamalı ki programcı aynı zamanda coder da olabilir. Bu durumun birçok örneği mevcuttur. Sonuç olarak iki tarafta ortaya çalışan bir program sunarlar tek farkları programın hazırlanması sırasındaki yaklaşımlarıdır.

23 Şubat 2013 Cumartesi

Ekran Kartı Seçimi



PC'lerde oyun oynamak için olmazsa olmaz donanımlardan biri olan ekran kartı seçiminde bize kıstas olacak kriterleri tek tek inceleyelim;

Marka : nVidia,AMD ve intel'in grafik çözümleri yaygın olarak kullanılmaktadır. Hangi markayı tercih etmek istediğinize fiyat/performans olarak bakmanız gerekmektedir. ( Niyetiniz oyun oynamak ise İntel'i direk listeden silebilirsiniz ).

Api Desteği : Hangi ekran karını alırsanız alın aldığınız ekran kartı eğer oyunun DirectX versiyonuna desteği yoksa oynayamazsınız. Ekran kartı alırken mümkün olan en son DirectX versiyonun destekleyen bir model seçmeniz ekran kartının kullanım süresini uzatacaktır.

VRAM Miktarı : VRAM. Oyunlardaki grafik dosyalarının(texture) depolanıp işlendiği birimdir. Bu birimin miktarı, Oyun oynarken lag ve takılmaların önüne geçer. ( tabiki sadece vram miktarı tek başına performsta etkili değildir. Vram'in fazla olması ekran kartının diğer bileşenlerininde gücü oranında etkilidir.)

Veriyolu : Ekran kartı piyasasında birçok ekran kartı bulunmaktadır. Çeşitli boyutlarda ramlerle gelen bu kartların GPU ile haberleşmesini veriyolları sağlamaktadır. Ram miktarı ne kadar fazla olursa olsun düşük veriyolu performansı büyük oranda düşürecektir. Belli başlı veriyolları olarak 64 bit,128 bit, 256 bit gösterebiliriz. Veriyolunun önemini şu şekilde açıklarsak sanırım daha iyi anlaşılacak. 1 GB 128 bit bir ekran kartı ile 512 MB 256 bit ekran kartı arasında GPU nun Ram e ulaşması açısından farklılıklar mevcuttur. 1 GB 128 bit ekran kartında GPU ram'e her seferinde 128 bitlik veriler gönderir. Diğer yandan 512 MB 256 bitlik ekrankartında ise GPU ram'e her seferinde 256 bitlik veri gönderebilir yani ilk örnektekinin 2 katı kadar. Tabiki yukarıda vermiş olduğumuz örnekte ekran kartlarının ram cinslerinin aynı tip olduğu varsayılmıştır.

VRAM Cinsi : GDDR3.GDDR5 olamk üzere iki adet ram cinsi şuan piyasada yaygın olarak kullanılmaktadır. İkisi arasındaki fark bellek modüllerinin hızlarıdır.(GDDR5 GDDR3 den daha hızlıdır )

GPU Hızı : Ekran kartlarında VRAM miktarı ve veriyolu kadar önemli olan diğer özellik GPU hızıdır. GPU hızı performansı önemli ölçüde yükselten diğer bir özelliktir.

Darboğaz(bottleneck) : Darboğaz, ekran kartının işlemci tarafından limitlenmesi olayına denmektedir. Son model bir ekran kartının veri işleme kapasitesi oldukça yüksektir fakat işlemci eski bir model yada düşük hızlı ise ise ekran kartı tam performans veremez. Bu durumla ilgili olarak verilebilecek en iyi tavsiye ekran kartı almadan önce mevcut işlemcinizin göz önüne bulundurmaktır.

Torrent nedir?


Son yıllarda internette adını sıkça duyduğumuz bu terim aslında bir paylaşım protokolünü ifade etmektedir. Kısaca tanımlarsak P2P(peer to peer) tabanlı bu protokolün çalışma şekli indirme yapan kullanıcının indirme yapabilmesini ve indirdiği kısmı diğer kullanıcılara gönderebilmesine dayanır. Söz gelimi kullanıcı 300 MB lık bir dosyanın 100 MB nı indirmiş olsun, bu durumda kullanıcı kalan 200 MB ı indirmeye devam ederken hali hazırda indirmiş olduğu 100 MB ı henüz indirme yapamamış kullanıcılara gönderebilir. Direkt download indirme işlemine göre avantajı bantgenişliğini korumak ve kullanıcılara hızlı bir internet deneyimi sunmaktır. Bugün pek çok Linux dağıtımı bu protokol ile kurulum dosyalarının kullanıcılara sunarak büyük oranda sunucu masrafından kurtulmaktadır. Gelelim torrent ile ilgili bazı terimlere Tracker (izleyici ), paylaşıma sunulan dosya ile ilgili olarak, dosya bilgilerini ve kullanıcıların birbiri ile iletişim kurmasına sağlayan bir yapıdır. Peer ise paylaşımda olan dosyanın tamamına sahip olan kullanıcı sayısının göstermektedir. Leech, paylaşıma sunulan dosyayı henüz bitirmemiş olan kullanıcıların bulunduğu grubu ifade eder. Yüksek hızlar için peer sayısı hayati bir öneme sahiptir. Torrent ile ilgili olarak bazı terimleri öğrendiğimiz göre şimdi torrenti nasıl kullanacağımıza değinelim. Öncelikle torrent indirebilmek için bilgisayarımıza bir adet torrent istemcisi yüklemeliyiz. Bu programlardan bazıları şunlardır ; uTorrent, qbittorrent, azure, bitcomet. Bu programlardan herhangi birini bilgisayarınıza yükleleyerek  torrent indirmeye başlayavilirsiniz.. İkinci olarak torrent dosyalarını indirebileceğimiz siteleri bulmalıyız. Bu sitelerde kendi içinde Private trackers, public trackers olarak ikiye ayrılıyor. public tracker olarak ifade edilen siteler herhangi bir üyelik gerektirmeden torrent dosyalarına ulaşabildiğiniz sitelerdir ne var ki bu sitelerdeki torrent dosyalarının indirme hızları düşüktür ve fake(yanlış) dosya, virüs gibi riskler taşımaktadırlar. Private trackerler torrent dosyalarını sadece üyelerin indirimine sunarlar. Fakat üyelerin indirdiklerinin en az yarısı kadar paylaşımda olmasını zorunlu kılarak public trackerlara göre çok daha hızlı bir dosya indirme olanağı sunarlar. Paylaşılan dosyaların fake çıkma ya da virüslü olması durumu bu trackerlarda neredeyse hiç olmaz. Private bir trackera üye olmakta başlı başına bir sorundur üye olabilmek için davetiye sistemi kullanan bu trackerlar nadirende olsa üyeliklerini kısa bir süre için kullanıcılara açabilirler.

21 Şubat 2013 Perşembe

PC vs. Konsol


PC oyunculuğu ve konsol oyunculuğu forumlarda devamlı tartışılan bir konu ve ben bu konudaki naçizane görüşlerimi sunmak istiyorum. Öncelikle iki platformunda kısa bir tanımını yapalım;
PC birbirinden farklı konfigürasyonlarla oluşturulabilen üzerinde oyun oynamak dışında birçok başka işleminde yapılabilmesini sağlayan bir platform. 
Konsol sabit bit konfigürasyon olarak üretilen ve amacı sadece oyun olan bir platform.
Rakipleri tanıdığımıza göre konumuza dönebiliriz. Konsol oyuncuları her zaman konsolların rahatlığından dem vurular aslında haklıdırlar. Mesela konsollar, yeni modelleri çıkana kadar konsola çıkan her oyunu tatmin edici bir performansla oynayabilirler. Aynı zamanda oyun ile ilgili herhangi bir ayar yapmak zorunda kalmazlar. Her şey ayarlıdır. PC kullananlar ise bir oyunu oynayabilmek için öncelikle oyunun sistem ihtiyaçlarına cevap veren bir PC’ye sahip olmalıdırlar. Oyun ile ilgili ayarlarımda kendi bilgisayarlarına göre tekrar ayarlamak zorundadırlar. Madalyonun diğer yüzünden olaya bakar isek konsol oyunları konsolun konfigürasyonu ile sınırlı iken PC için bu sınır kolay bir şekilde(yeni donanım yani para) çözülebilir. Şuanda oldukça popüler olan Battlefield 3 oyununun konsol ve PC screenshootlarına bakar iseniz aradaki farkı görmeniz mümkün. Diğer yandan konsollarda korsan içerik kullanmak bir hayli sıkıntılı iken PC’ler için böyle bir sıkıntı hemen hemen yoktur. (aslında bu bakış açısı oyun yapımcıların konsollara yönelmesinin en önemli nedeni,  PC’nin avantajı gibi görünen korsan kullanım aslında PC oyunculuğunun önündeki en büyük engel).
 Aslında bu karşılaştırmada diğer karşılaştırmalar gibi gereksiz, PC mi konsol mu diye düşünüyorsanız önceliklerinizi belirleyip seçiminizi ona göre yapmak zorundasınız.

AKK Adil Kullanım Kotası Saçmalığı !


Ülkemizin güzide servis sağlayıcıları tarafından biz kullanıcılara uygulanan bir uygulama. Uygulamanın amacı olarak lanse edilen -herkesin bağlantı kalitesi yüksek tutmak- mottosu neresinden tutarsan tut elde kalıyor. Sevgili servis sağlayıcı firmamız, altyapı kalitesini kullanıcı sayısı ile orantılı olarak artırmayarak maliyetten kısmakta, diğer taraftan insanları hali hazırda kullanmış oldukları internet bağlantısı üzerinden hak iddia etmekteler. İnsanların interneti korsan materyal için kullandığı algısı sanırım tüm servis sağlayıcılarımızda mevcut. Bu arada ben ülkemizde korsan kullanım yoktur diyemeyeceğin zira yüksek oranda bir kullanım söz konusu fakat ya korsan kullanmayan kesim onları nasıl ayırmayı düşünüyorsunuz. Pire için yorgan yakarken gerekli yasal düzenlemeler ya da daha doğrusu orijinal ürünlerin fiyatlarının ülkenin gelir düzeyine göre belirlemiyorsunuz. Şahsen ben elimden geldiğince orijinal yazılım kullanmaya özen gösteriyorum. Sıkı bir oyuncu olarak maalesef oyunları Türkiye’den almaya kalktığımda fahiş fiyatlar beni bezdiriyor ve haliyle beni alternatiflere yönlendiriyor.(steam, origin gibi ) Örnek olması hasebiyle benim steam üzerinden almış olduğum oyun Max Payne 3’ün yaklaşık dosya boyutu 35 GB (oha).  Şimdi haliyle bu oyunu steam üzerinden orijinal olarak aldım ama iş oynamaya geldiğinde servis sağlayıcı firma bana “dur arkadaş kotayı aştın al sen şu düşük bağlantı ile idare et” diyor. Sonuç ne olursa olsun adil kullanım kotası kendi içinde saçma olan ve olması gerekeni geciktirmek için servis sağlayıcısı firmalarımız tarafından yapmadıkları altyapının faturasının biz kullanıcılara kesilmesinden başka bir şey değildir.

En hızlı programlama dili!



Bu soru uzun zamandır forumlarda tartışılıyor ama halen cevabı bulunamadı… Bir cevap olmamasının yegâne sebebi sanırım en iyiden kastın ne olduğunun tam olarak belirlenememesi, en iyi nedir? En hızlı olan mı, en güvenli olan mı, en çok kullanılan mı? Şimdi sizi bir forumdaki mesaj kuyruğunda gördüğüm mesajı aktarayım;
İlk mesajda soruyu soran arkadaş gayet masumane programlamaya ilgi duyduğunu ama hangi programlama dilini kullanması gerektiğini bilmek istediğini belirtmiş. Şimdi gelelim birbirinden fantastik cevaplara ( bundan sonraki yazdıklarım forum mesajından aklımda kalanlar birebir aynı olamayabilir )
C# ya da .net tabanlı bir dilden başlaması gerektiğini belirten bir mesaj var. Hemen altında zıpkın bir Java’cı, c# ın Java’dan arak olduğunu ve platform bağımsız olmadığını belirtmiş. ( aslında doğru bir tespit ) Bir sonraki mesajda C/C++ dilleri tavsiye edilmiş ve sebep olarak performans verilmiş, ardından gelen mesajda asambleye tavsiye edilmiş performs olarak en iyisinin bu olduğu söylenmiş. Ve gelelim mesajın en fantastik cevabına konuyu açan arkadaş konuyu kapatmak adına aynen şunları yazmış “ cevaplarınız için teşekkürler Makine Dilini öğrenmeye karar verdim” .
Aslında yukarıdaki mesajlarda geçen ifadelerin hepsi doğru fakat ortada mutlak bir doğru olamadığı için sorunun cevabı muallakta kalmış. Söz gelimi Windows için uygulama geliştiriyorsanız .net sizin için iyi bir seçim olabilir. Ya da hazırladığınız programın birçok platformda çalışmasını istiyorsanız Java birinci tercihiz olabilir. Ya da oyun veya sistem yazılımı gibi performansın önemli olduğu konularda C/C++ iyi bir seçim olabilir.
Aslında en iyi programlama dili yerine hedeflerin iyi belirlendiği ( hangi platform, yazılım türü gibi ) durumlarda en iyi programlama dilini aramak daha mantıklı. Soru şu şekilde olsaydı “Windows sisteminde çalışacak programlar yazmayı düşünüyorum sizce en iyi programlama dili nedir? “ bu sorunun cevabı soruyu soranı daha iyi yönlendirebilirdi.