Merhaba dünya!

Bir blog yazma girişimim daha başlasın “Merhaba Dünya!” diyerek. Neşet Ertaş’ı da bir kez daha anmaya sebep olsun bu girişim. Merhaba dünya, Ah yalan dünya…

Faydalı Bilgi - Masaüstü Klasörünün Konumunu Değiştirebilirsiniz

“Bir gece ansızın Windows’unuz çökebilir! Buna hazır mısınız?” sorusuyla başlayayım yazıya :) Bilgisayarınızda sakladığınız belgeler gerçekten güvende mi? En azından işletim sisteminiz açılmadığında dosyalarınızı kurtarabilecek durumda mısınız?

Windows’un durduk yere yamuk yapma ihtimaline karşı “Belgeler, Resimler, Videolar, Müzikler vs.” gibi gklasörleri Windows’un kurulu olduğu sürücüde saklamam. Böylece işletim sistemini çökerttiğimde ya da o benim yerime kendi kendini çökerttiğinde format atmaktan çekinmiyorum. Daha doğrusu çekinmiyordum. Ta ki masaüstümde de can alıcı dosyaları kaybetmenin eşiğine gelinceye kadar!

masaustu

Gelen e-postaların eklentileri, internetten bulduğum faydalı bilgiler, e-kitaplar, ders notları, yazdığım programcıklar vb. sık sayılabilecek aralıklarla kullandığım herşeyi masaüstüne atar oldum. O kadar ki, masaüstüm zaman zaman yukarıdakine benziyor. Bu dosyaları bir süre masaüstümde bekletir ve daha az kullanılır olduğum zaman ilgili klasörlere aktarırım. Ama geçen gün yaşadığım talihsiz olayla masaüstümdeki dosyalarımı her an kaybedebileceğim gerçeğiyle yüzleştim ve karar verdim: Windows kurduğun sürücüde önemli dosyalarını saklamayacaksın!

Masaüstünü dosyalarla doldurup taşırma alışkanlığımdan da vazgeçemeyeceğim için bu klasörü başka bir sürücüye taşıyabilecek miyim diye baktım. Evet taşıyabiliyormuşum :) Nasıl oluyor o iş bahsedelim.

Windows XP’de masaüstü klasörünün konumu “C:\Documents and Settings\Kullanıcı Adı\Desktop”, Windows Vista ve Windows 7’de “C:\Users\Kullanıcı Adı\Desktop” şeklindedir. Benim istediğim ise bunu D:\Masaüstü gibi başka bir sürücüdeki klasörde saklamak. Bunu yapmak için:

  • Çalıştır’a ya da başlat menüsündeki program arama bölümüne regedit yazıp kayıt düzenleyicisini açalım.
  • “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders” sırasını takip edip “Desktop” dizesinin değerine, masaüstünüzü koymak istediğimiz klasörün konumunu yazalım. (“%USERPROFILE%\Desktop” yerine “D:\Masaüstü” gibi birşey yazacaksınız.)

Bilgisayarınızı yeniden başlattığınızda masaüstüne kaydettiğiniz herşey “D:\Masaüstü” klasörüne gidecek. Windows sizi format atmaya zorladığında “Acaba masaüstünde gerekli birşey var mıydı?” diye düşünmenize gerek kalmayacak.

Sözün özü: “Eşeği sağlam kazığa bağlayın.” diyorum :)
Selametle…

Neden?

Bir üniversitenin görevi nedir? Öğrencilerine nasıl davranması gerekir? Onları teşvik mi etmesi gerekir? Yoksa yaptıklarını görmezden gelip, öğrencinin önüne aşılması güç engeller mi koymalıdır? Artık iyice emin oldum ki bizim okula bu sorular sorulmamış. Sorulduysa da hocalarımızın bazılarının -ne yazık ki- buna verecek yanıtı yok!

Daha önce burada yazmıştım. Sırf notumu yükseltmek amacıyla 1. sınıftan programlama dersini yeniden aldım. Zaten yapmış olduğum bir dönem ödevini, bu ders kapsamında tekrardan yapmak zorunda kaldım. Yaptım yapmasına… Çok da güzel yaptım hatta… Ama ne oldu? HİÇ! İsyan etmemek elde değil. Şiir gibi kodladığım projemin kodlarına bakma zahmetine bile girmeyen çok sevgili(!) hocam, kendi bilgisayarında eksik olan bir DLL dosyasından dolayı çalışmayan uygulamaya –kodlarda ne yazmışım diye bir bakma zahmetinde dahi bulunmadan-, asistanlarına “Benim notum belli arkadaşlar, isterseniz devam edebilirsiniz!” deyip çekip gitti odasından!

Şimdi size soruyorum:

  • Bilgisayarınızda hala Windows XP kullanıyorsanız ve bu bilgisayar benim yazdığım kodu çalıştıramıyorsa bunun suçlusu ben miyim? Yoksa siz biraz daha çağa ayak uydurup güncel bir işletim sistemi mi kullanmalısınız?
  • Eski sürümlerle çalışabilecek bir sürümü de yanımda bulundurmama ve isterseniz hemen açıp o sürümü çalıştırabileceğimi söylememe rağmen burun kıvırıp gidiyorsanız, size saygı duymamı gerçekten bekliyor musunuz?
  • “Sadece C sürücüsünde çalışacak uygulamalar istiyordum bunu hepinize söyledim!” diyorsunuz. Acaba farkında mısınız ki, bizler çok daha önemli ve zor derslerle uğraşırken, zaten geçmiş olduğumuz dersinize devam etmek zorunda mıyız?
  • Sınıfta söylediklerinizden haberdar olmamızı nasıl bekliyorsunuz? Derse girmediğimiz belli bir şey. Moodle, bölümün sitesi veya mail grubumuzdan, böyle can alıcı ayrıntıları haber vermeniz bu kadar mı zor?
  • Bu projelerdeki amacınız bizlere sadece Windows XP’nin C sürücüsünde çalışan programlar yazdırmak mı? Yoksa kodlamanın doğru ve eksiksiz olması mı? Canım isterse Linux’ta çalışacak sürümünü yazarım, sizi ne ilgilendirir ki? Beni bir platforma (özellikle güncelliğini yitirmiş bir platforma) bağlama hakkını nasıl olur da kendinizde bulabilirsiniz?
  • Yazdığım kodları açıp bakma zahmetinde bulunmadınız. Acaba aynı kodları benim yazdığım zaman dilimi içerisinde tasarlayıp yazmanızı istesem bunu başarabilir misiniz? Zira C dilinin, piyasadaki en yüzeysel kitaptan bakıp tahtaya yazılarak öğretilecek/tahtadan bakıp öğrenilecek bir dil olmadığını düşünüyorum. Bu konuda hemfikir olabilir miyiz? (Zannetmiyorum)
  • Programlama bir sanattır! Bu sözü her fırsatta söylerdiniz. Eminim ki hala söylüyorsunuz. Ama sanatçıya en ufak bir saygınız olmadığının bilmiyorum farkında mısınız? Benim emeklerimi hiçe sayıp odayı terk etmeniz bunun en açık göstergesi değil midir?
  • Visual Studio 2010 ile yazdığım 12 MB’lık projemi, verdiğiniz 2 MB alana yüklememe zorunlu tutmanız ne demek oluyor? Sadece kodları yazdığım .c dosyasını gönderince, nasıl bundan beni sorumlu tutabilirsiniz? Grafik dosyaları okuyan, kayıt yapıp yeni dosyalar oluşturan, çeşitli DLL dosyalarına gereksinim duyan bir proje ödevi verirken, bizi o 2 MB’lık alana mahkum etmek akıl karı bir iş midir?

Bu sorular sormakla bitmez. Dersten kalmak veya geçmek umrumda değil. Amaç bu olsa zaten geçtiğim bir dersi tekrardan almazdım. İsyanımın sebebi iyi bildiğim bir şeyi eksiksiz yapıp, gereksiz ayrıntıları takıntı yapan bir hoca yüzünden hakkımı alamamak.

Her neyse… Yine belli oldu ki istediğim notu alamayacağım. Yazdığım kodları inceleme zahmetinde bulunan araştırma görevlileri Fırat ve Esra hocalara teşekkür etmeden geçemeyeceğim. Kodlarımın gerçekten iyi olduğunu ve bu projenin araya gittiğini (not anlamında), daha iyisini hak ettiğimi söyleyip beni teselli eden ve yapabileceklerini yapıp notumu 70’e çıkartan bu hocalara teşekkür ediyorum. Kodlarıma baktıkları için, beğendikleri için, her şeyden önce insan yerine koyup diğer hocaya rağmen dinleme zahmetinde bulundukları için…

Neyse… Dilim daha da sivrilmeden son sözü söyleyip yazıya son vereyim. Hocam, üzerinize geçen bir zerre hakkımı dahi helal etmiyorum size. Bu kadar öğrencinin ahını almak nasıl bir duygu bilemem. Sadece bize çektirdiklerinizi çekmenizi ve bize uyguladığınız muameleyi görmenizi diliyorum…

Esen kalın…

Alttan Aldığın Dersin Projesiyle Uğraşmak :)

Yükseltme düşüncesiyle birinci sınıftan Algoritma ve Programlama dersini almıştım. Geçmiş yılların aksine bu sene proje ödevini laboratuar kısmına değil dersin kendisine vermişler. Haliyle biz yeniden alanlar da proje yapmak zorunda kaldık.

Geçen seneki Araba Yarışı projesi faciasından sonra, bu yıl da benim “kart açıp eşini bulmaca” diye tabir ettiğim Hafıza Oyunu çıktı şansıma :) Son güne bırakmadan ödev yapmam genelde öyle bir alışkanlığım var huyum kurusun. Ama artık bırakacağım sanırım, zira birkaç saat içinde 550 satır kod yazmak zorunda kalınca insanın devreleri yanıyor, beyni sulanıyor, gözleri pörtlüyor… Alışkın değilim bir anda bu kadar çok yüklenmeye :)

Velhasıl, oyunu tamamladım tamamlamaya. Birkaç ufak eksiği kaldı, puanları dosyaya yazmak gibi. Onu da bugün tamamlayıp Pazartesi günü teslim edeceğim kısmetse. Ama durduk yere oyun yazmak zorunda kalmak biraz canımı sıktı. Daha ciddi işlere ayırabileceğim saatlerim daha önce zaten proje yaptığım bir ders için araya gitti. Dediğim gibi alışkın değilim bir anda çalışmaya (ya da çalışmak zorunda kalmaya). Hele ki boşa olduğunu düşündüğüm şeyler için… Her neyse. Sonuçta aldım, yaptım, bitti. Ekran görüntüsü ve çalıştırılabilir dosya aşağıda sizleri bekliyor efenim, indirip oynayabilirsiniz, çalıştırabilirseniz :)

“Çalıştırabilirseniz” dedim, çünkü çalışmayabiliyor da :) Sebebini henüz çözemedim bazı bilgisayarlarda çalışıyor, bazılarında çalışmıyor mübarek :) Bir deneyip çalıştı/çalışmadı şeklinde dönüş yaparsanız aşağıdan sistem bilgilerinizle birlikte, ya da sebebini bilip söylemek isterseniz beni sevindirmiş olursunuz.

Ekran Görüntüsü:

HafizaOyunu

Buyrun buradan da dosyaları indirin.

Proje Yapımında Kullanılan Araç Gereç:

  • Microsoft Visual Studio 2008
  • Allegro kütüphanesi (4.2.2)
  • Dev-C++ (Yer yer deneme yanılma amaçlı)
  • Ulead PhotoImpact (kartları kes biç, ekrana yazı yaz işlemleri için)

Yararlanılan Site:

  • allegro.cc

Oynayıp test eden arkadaşlara teşekkürler!
Selametle…

C++, C# ve Java'da String İşlemleri

String Tanımlama ve Atama

Java ve C# dillerinde stringler referans veri tipi olarak tanımlıdır. C++’da ise stringler karakter dizisi olmak zorundadır. C++’da string.h kütüphanesi yardımı ile stringler, sınıflardan türeyen nesneler olarak oluşturulup kullanılabilmektedir. Her dil için string tanımlamaya örnek verelim.

Java:

String str = new String("Hasan Gok");

C#:

string str = "Hasan Gok";

C++:

char[10] str = "Hasan Gok\0";
string str = "Hasan Gok"; //(string.h kütüphanesi yardımı ile)

String İşlemleri

Bu üç dil için stringler üzerinde yapılan işlemlerden birkaç tanesine göz atalım. Tüm işlemlerde kullanmak için üç dil için de, içeriği farklı iki string değişkeni oluşturalım.

Java:

String str1 = new String("Hasan");
String str2 = new String("Gok");

C#:

string str1 = "Hasan";
string str2 = "Gok";

C++:

char[30] str1 = "Hasan\0";
char[30] str2 = "Gok\0";

Karşılaştırma: Yukarıdaki gibi tanımlanmış str1 ve str2, birbirinden farklı stringler içeriyor olsun. Her dil için karşılaştırma ifadeleri aşağıdaki şekilde olur:

Java:

if(str1 == str2) //bu şekilde iki stringin içeriği karşılaştırılır
	System.out.println("Stringler ayni");
else
	System.out.println("Stringler farkli");

Burada gördüğümüz gibi string türünden iki değişkeni, tıpkı tamsayılarda olduğu gibi karşılaştırmamız mümkün. Başta belirttiğimiz gibi stringler birbirlerinden farklı olduğundan bu kod parçası konsol ekranına “Stringler farkli” yazacaktır.

C#:

Java’da olduğu gibi bir if deyimi ile stringleri karşılaştırmaya C# dili de izin veriyor. Aynı örneği tekrarlamak yerine C#’ın String.Compare metoduna bir örnek verelim:

if (String.Compare(str1, str2) == 0)	//eşit ise
if (String.Compare(str1, str2) == -1)	//ilk string büyük ise
if (String.Compare(str1, str2) == 1)	//ilk string küçük ise

Burada büyüklük küçüklük kavramı ilk karakterin ASCII kodunun diğerinden önce veya sonra olması anlamındadır.

C++:

donus = strncmp (str1,str2,sayi);

Bu fonksiyon str1 içinde str2’nin “sayi” adet karakterini karşılaştırır. Fonksiyonunun dönüş değerleri, bize karşılaştırdığımız iki string arasındaki durumu verir. Dönüş değeri 0 ise iki string eşittir. str1, str2’den küçük olursa negatif bir tamsayı, büyük olursa pozitif bir tamsayı döner.

Birleştirme: Daha önceden tanımladığımız değişkenlerimizi birleştirmek için yapmamız gerekenlere de yine üç dil için de bakalım:

Java:

Java’da stringleri birleştirmek için “concat” metodu ve + operatörü kullanılabilir. Aşağıda her iki satırdaki kod da str3’ün değerini “Hasan Gok” yapacaktır.

String str3 = str1.concat(str2);
String str3 = str1 + str2;

C#:

Aynı şekilde + operatörü stringleri birleştirmek için kullanılır. str3’ün değeri “Hasan Gok” olacaktır.

string  str3 = str1 + str2;

C++:

C++ dilinde karakter dizisi olarak tanımladığımız stringleri strncpy() fonksiyonu yardımı ile birleştirebiliriz. Üç parametre alan bu fonksiyon ilk parametresine hedef stringi, ikinci parametresine kaynak stringi alır ve üçüncü parametrede belirtilen sayı kadar karakteri kaynaktan hedef stringe kopyalar. Yukarıdaki dillere kıyasla zahmetli bir işlemdir.

strncpy (str1,str2,4);	// \0 bitiş karakteri de dahil 4 karakter

Bu kod ile de str1 stringine str2’den 4 karakter kopyalanır. Programda bu satır çalıştıktan sonra str1’in değeri “Hasan Gok\0” olur.

Stringlerin Uzunluğunu Bulma: Tanımladığımız string değişkenlerinin sakladığı metnin kaç karakter içerdiğini kontrol etmek isteyebiliriz. Tanımlanan str1 ve str2 stringlerimizin kaç karakter içerdiklerini bulup, her üç dil için de karakterSayisi tamsayı değişkenine atayalım:

Java:

int karakterSayisi1 = str1.lenght();	//1. Stringin uzunluğunu alır
int karakterSayisi2 = str2.lenght();	//2. Stringin uzunluğunu alır

C#:

int karakterSayisi1 = str1.Length;	//1. Stringin uzunluğunu alır
int karakterSayisi2 = str2.Length;	//2. Stringin uzunluğunu alır

C++:

int karakterSayisi1 = strlen(str1);	//1. Stringin uzunluğunu alır

strlen() fonksiyonunu dizimizdeki karakterleri tek tek sayarak uzunluğunu bulur. C++’da bu fonksiyon aşağıdaki gibi tanımlanmıştır:

unsigned bizimStrLen(char * str)
{
	unsigned uzunluk;
	while (*str != "\0")
	{
		++uzunluk;
		++str;
	}
	return uzunluk;
}

Alt String Arama: Elimizdeki stringlerin birbirini içerip içermediğini kontrol etmemiz gerekebilir. str2’nin, str1 içinde yer alıp almadığını kontrol eden metod ve fonksiyonlara üç dil için de bakalım:

Java:

Java için alt string arama metodarından üç tanesine bakalım. Bu üç metod sırasıyla str1’in str2 ile başlayıp başlamadığını, str1 içinde herhangi bir yerde str2 olup olmadığını ve str1’in str2 ile bitip bitmediğini kontrol eder. Aşağıdaki örnekler için sonuç “True” ya da “False” olarak bir boolean değişkene yazılacaktır.

boolean  b = str1.startsWith(str2);
boolean  b = str1.endsWith(str2);
b = str1.indexOf(str2) > 0;

C#:

C# dili içinde de arama metodu bir boolean değer döndürür. Bizim örneğimiz için str1, str2’yi içermediği için b = False olacaktır. Kullanımı aşağıdaki gibidir.

bool b = str1.Contains(str2);

C++:

Alt stringler strstr() fonksiyonu ile aranabilir. Stringlerimizi karakter dizisi olarak tanımladığımızdan, str1’in içinde str2 varsa; str2’nin, str1 içindeki kaçıncı karakterden başladığını gösteren bir karakter işaretçisi (pointer) döner. Bulunamazsa NULL değer dönecektir.

char * baslangic = strstr (str1,str2);

Çok Önemli Not: Bu yazıyı programlama dilleri dersi ödevi için birkaç saatlik araştırma sonucunda yazdım. C++ ve Java hakkında hemen hemen hiçbir bilgim yoktur, o yüzden yazıda hatalar olması muhtemeldir. Lütfen görürdüğünüz hataları alta yorum yazarak gideriniz.