31 Ağustos 2013 Cumartesi

Android Oyun Programlama Dersleri - Gün 3 - Daha Çok Temel








Android oyun programlama derslerimin 3. gününe hoş geldiniz. Bu gün java konusuna devam ederek değişkenlere yakından bakacağız. Bu konunun sizler için çok faydalı olacağını düşünüyorum. Lütfen atlamadan takip etmeye çalışın.

GÜN 3, DERS 1-0 : Değişkenlere yakından bakış

Daha önce yarattığımız telefon isimli sınıfı hatırlıyorsunuzdur. Hatırlamayanlar için :

public class Telefon{

 // Telefonun özelliklerini tanımlayan değişkenler yaratalım

 int agirlik = 0;
 boolean acildi = false;
 String renk = "turuncu";


      // Bu metod telefonun açılmasını kontrol edecek

 void TelefonuAc(boolean acildi){  
  if(acildi == true){
   acildi = false;
  }else{
   acildi = true;
  }
 }
}

ilk yarattığım üç değişken (agirlik, acildi, renk isimli değişkenler) integer, boolean ve String türünde yaratılmıştır. Bu gün bunların detaylarına bakacağız.

Temelde 4 tip değişken vardır (Değişken = Variable ! Unutmayın değişken, tür yada sınıf değil, değişken ! yani değişebilen şey...)

Temelde 4 tip değişken vardır :

Bir objenin yeniden yaratılmış kopyaları yani instance objeler. Örneğin yukarıdaki Telefon sınıfından türeteceğiniz bir obje, bu sınıfın kopyası yada instance versiyonu olacaktır. Dolayısı ile her üretilen telefon nesnesinin kendi agirlik, acildi, renk değişkenleri oluşacaktır. Ancak biz onları bir kez tanımladık ! Bu değişkenlere değer verdiğinizde sadece o telefon nesnesini etkileyecekler, diğer telefon objelerindeki ikiz kardeşleri bu durumdan etkilenmeyecektir.

Bu durumda şöyle diyebiliriz, bu 4 tip değişken ,

1. Instance Variable (Kopya Değişkenler) : Bir değişken static olarak tanımlanmadığı sürece kopya değişken olarak varsayılacaktır. bu durumda bu kopya değişkenlerden her biri kendi değerini alabilir.

2. Class Variable (Sınıf Değişkeni) : Değişken tanımlamasında static kelimesi kullanıldığında basitce bu değişkenden sadece bir tane olabilir demiş olursunuz. Kullandığınız sınıf birden fazla nesne yaratmış olsa dahi bu değişken tekil olmaya devam edecektir.

public class Telefon{

 // Telefonun özelliklerini tanımlayan değişkenler yaratalım

 static double versiyonNumarasi = 3.1;
 int agirlik = 0;
 boolean acildi = false;
 String renk = "turuncu";


      // Bu metod telefonun açılmasını kontrol edecek

 void TelefonuAc(boolean acildi){  
  if(acildi == true){
   acildi = false;
  }else{
   acildi = true;
  }
 }
}

Örneğin bu telefon sınıfından türetilecek tüm telefon objelerinin versiyon numarası tekil olacaktır. Java (veya başka bir programlama dili) ile gerçek dünyadaki olaylara yakın örnekler kurabiliriz.

Bunu daha gerçekçi bir örnek ile açıklayalım :

Diyelim ki ; Samsung bu gün bizim telefon sınıfımızı kullanarak 10 Android Telefon üretmiş olsun. Yarın 10 kullanıcı bu 10 telefonu satın aldığında telefonları tanıyabilmek için şu şekilde etiketleyelim : Telefon1, Telefon2, Telefon3 ............

Eğer Samsung bir yenileme (update) yayınlarsa bu durumda tüm telefonların versiyon numaralarının güncellenmesini isteyeceğiz. (Gerçekçi bir örnek oldu !)

Bunu java kodu ile anlatmamız gerekirse :

static void TelefonlariGuncelle(){
    versiyonNumarasi = 3.2;
}

(Not : Burada eşittir işareti matematiksel olarak düşündüğünüzde kafanızı karıştırabilir. Eşittir işareti java, c ve türevi programlama dillerinde eşitlik anlamına gelmez, eşit olsun anlamına gelir. Yani versiyonNumarasi 3.2 ye eşit olsun veya versiyonNumarasi 3.2 değerini alsın şeklinde düşünebilirsiniz.)

Dikkat ettiyseniz versiyonNumarasi değişkenimizi static olarak tanımlamıştık. Bu durumda bu değişkeni bir kez değiştirdiğimizde yani değerini yeniden tanımladığımızda tüm kopyalarının değeri tanımlanmış olacaktır. Ancak bir telefon sahibinin başka birinin telefonunu açıp kapatmasına izin vermek istemeyeceğimiz için acildi isimli değişkeni static olarak tanımlamadık.

Peki hangi telefonun açık hangisinin kapalı olacağını nasıl ayarlayacağız  ?
Çok basit, telefonları etiketlemiştik hatırladınız mı ? Bu etiketleri kullanacağız :

static void acmaKapamaDugmesineBasildi(){
 if(Telefon1.acildi == true){
  Telefon1.acildi = false;
 }else{
  Telefon1.acildi = true;
 }
}

Son değişken tipimizi hatırlarsak ( String renk = "Turuncu"; ) bu bir metinsel değişkendir. İçerisinde metinsel ifadeler tutabilir. Diyelimki bu değişken asla ama asla değişmeyecek. Bu durumda özel bir ek ile bunu javaya söylememiz gerekir ; final . Yani asla değişmeyecek olan değişkenlerimizi şu şekilde tanımlayabiliriz. final String renk = "Turuncu";

Burada 4 değişken tipinden bahsediyorduk. Hadi 3. değişken tipine bakalım ;

3. Local Variable (Yerel Değişken) : Bir metod içinde yarattığınız değişken o metot içerisine tanımlı olacaktır. Aynı ada sahip olsa bile o metod dışında yaratılan değişkeni hiç bir şekilde etkilemez. Bu tip değişkenlere yerel değişken deriz. Aynı şekilde Bir sınıf içinde yaratılan değişken de başka sınıfları etkilemez. Bu durumda o değişken o sınıfın yerel değişkeni (Local Variable) dir.

public class yerelDegiskenler{

 // Bu bir sınıf yerel değişkeni, tüm sınıf içinde erişilebilir

 static double pi = 3.14;

 public static void main(String[] args){
  // Bu bir metod yerel değişkeni.
  // Bunun anlami bu cap degeri sadece
                // bu metod içinde tanımlı dışaridakileri etkileyemez.

  double cap = 2.0;
  cap = (cap * cap) * pi;
 }

 static void ikinciMetod(){
  double cap = 18.0;
  cap = cap + pi;
 }
}

Buradaki örnekte gördüğümüz gibi;
1. pi bir sınıf değişkeni olarak tanımlanmış
2. main metodu içinde bir cap değişkeni tanımlanmış.
3. ikinciMetod içinde başka bir cap değiskeni tanımlanmış.

UNUTMAYIN : Bir metod içinde tanımladığınız ve kullandığınız değişken o metod için geçerlidir. Diğer metodları veya sınıf değişkenlerini etkilemez !

ve son değişken tipi olarak :

4. Parameter Variables (Parametre Değişkenleri) : Bir yerel değişkeni başka bir metod içinde kullanmak veya değerini değiştirmek için kullanılan parametre değişken tipidir. Değişkenlerin ve değerlerinin metodlar hatta sınıflar ve hatta uygulamalar arasında değiştirilebilmesini, kullanılabilmesini sağlarlar.

public class yerelDegiskenler{
 // Bu bir sınıf yerel değişkeni, tüm sınıf içinde erişilebilir
 static double pi = 3.14;

 public static void main(String[] args){
  // Bu bir metod yerel değişkeni.
  // Bunun anlami bu cap degeri sadece bu metod 
  // içinde tanımlı dışaridakileri etkileyemez.
  double cap = 2.0;
  cap = (cap * cap) * pi;

  // hadi buradan ikinci metodu çağırarak ona cap degerini gönderelim

  ikinciMetod(cap);

 }

 // simdi cap degiskenini metod icinde değil
 // parametre olarak tanimladik

 static void ikinciMetod(double cap){
  cap = cap + 5;
 }
}

Bu örnekte olduğu gibi bir metodu çağırdığınızda java sizden bir parametre isteyecektir. Tanımlanan özelliklerdeki parametre yerel bir değişken olarak o metod içinde işlenebilir ve onu çağıran sınıf veya metoda geri gönderilebilir.

Bir metodu çağırmak için şu kodu kullanıyorduk : metodAdi(); Eğer bu metod bir veya birden fazla parametre istiyorsa java hata vererek size bu durumu anlatacak ve parametre isteyecektir. Bu hatayı console panelinde görebilirsiniz. :



Peki biz ikinciMetod isimli metodu çağırdığımızda neler oluyor ?
main metod içinde tanımlanmış ve değer almış olan cap degiskeni parametre ile ikinciMetod fonksiyonuna geçiyor. (Hatırlarsanız metodlara fonksiyon da diyebiliyoruz, METOD = FONKSİYON) ikinciMetod fonksiyonu içinde tekrar yeniden işlenerek değer alıyor. Sonuç olarak hala iki farklı yerel cap değişkeni var, bir tane değil !

Bunun anlamı nedir ?
main fonksiyonu içindeki cap değişkeninin değeri : 12,56 dır.
ikinciMetod fonksiyonu içindeki cap değeri ise : 17,56 dır.
Karışık mı geldi ? Son paragrafları birkaç kez okuyun. Daha anlaşılır hale gelecektir.

4. günde görüşmek dileğiyle....








Dip Not : Sizinde fark ettiğiniz gibi bir ders hazırlamak gerçekten zor. Bu yüzden internette Türkçe kaynak bulmak gerçekten zor hale geliyor. Bir dersin hazırlanma süresi sizin onu okuma sürenizden defalarca kez fazla. Derslerin devamı ve ücretsiz kalması için desteğinizi lütfen esirgemeyin.

Destek olmak için :

1. Bağışta bulunabilirsiniz. Sağ taraftaki "PAYPAL DONATE" butonunu kullanarak bağış yapabilirsiniz.
2. Derslere yorum yazabilirsiniz. Farkettiğiniz hataları, Eleştirilerinizi veya takdirinizi belirtmekten çekinmeyin.
3. Dersleri facebook, twitter gibi sosyal medya ortamlarında ilgisini çekeceğini düşündüğünüz arkadaşlarınız ile paylaşın.
4. Emeğime saygı gösterin ve metni kopyalayıp forumlara yapıştırmayın. Bunun yerine dersin linkini yayınlayın. Merak etmeyin o forumu okuyabilen insanlar bu sayfayı da okuyabilirler...

Teşekkürler.

25 Ağustos 2013 Pazar

Android Oyun Programlama Dersleri - Gün 2 - Temel Java








Android oyun programlama derslerinin ikinci gününe hoşgeldiniz. Umarım bu yazı dizisini takip ederek sizin için çok faydalı olacağına inandığım bazı ip uçları ve yöntemlerden yararlanacaksınız. 

GÜN 2, DERS 1-0 : Java İncelemesi

Bu gün birlikte ilk java sınıfımızı yacağız. bazılarınız için bu ilk kez program yaratmak anlamına geliyor...

Ama önce Eclipse hakkında söylemek istediklerim var.

Geçen derste Eclipse hoşgeldiniz ekranında bizi karşılamıştı. Bu ekranı sürekli olarak görmenize gerek yok. Eclipse içindeki "Wellcome" tabını kapatarak bu ekrandan kurtulabilirsiniz. 


Artık Eclipse editörünü her açtığınızda karşınıza gelecek olan ekran ile tanıştınız, Eclipse : Workbench (Eclipse Çalışma Alanı). Bir sürü panel ve komut gözünüzü korkutmasın. Hangisinin ne işe yaradığını ve nasıl kullanıldığını anlatmaya çalışacağım. Şimdilik aşağıdaki maddelere bir göz atalım.

1. Eclipse farklı görevler ve çalışma şekilleri için farklı görünümlere bürünebilir. Bu görünümlere Perspective denilmektedir. Şu anda kullanılan perspective JAVA olmalı. Eğer Java değilse aşağıdaki komut seti ile Java olarak ayarlayabilirsiniz.

Window > Open Perspective > Other > Java.



2. Ekranın en altındaki panele bakın, orada "Console" adında bir sekme varsa devam edin.
Sekme yoksa Window > Show View > Console komutu ile görünmesini sağlayabilirsiniz.


Artık Eclipse kullanarak programlama yapmaya hazırız !

"Package Explorer" başlıklı panele bir göz atın. Ekranın sol tarafında olmalı. Bu panel sizin Eclipse projelerinizi takip edeceğiniz, organize edeceğiniz Paket Göstericisi. Artık kodlamaya hazırsanız başlayalım !

1. File > New > Java Project komutunu verin.
2. Projeniz için bir isim verin (İsimde boşluk ve Türkçe karakter kullanmamanız gerektiğini söylememe gerek yoktur umarım.)


3. Finish yazan butona basın. Böylece yeni projenizi "Package Explorer" alanında görmeye başlamanız gerekiyor.
4. "Package Explorer" içindeki projenize çift tıklayın. Aşağıdaki gibi bir ekran görüntüsü olmalı.


5. src klasörüne sağ tuş ile tıklayın, New > Class komutunu vererek yeni bir Java Class dosyası yaratın. Bu dosyaya bir isim vermelisiniz ve genelde bu isim "MerhabaDunya" olur.(Programcı Jargonuna göre isim vermek zorunda değilsiniz ama genelde iki kelimeden oluşan dosya isimlerinde ilk ve ikinci kelimelerin ilk harflerini büyük yazarız. Ayrıca ilk programa MerhabaDunya isimini koymak Hakkı ÖCAL hocamızın bize öğrettiği ilk şeydir.


6. ve nihayet aşağıdaki ekranı görüyor olmalısınız.


Hızlıca java yazım kurallarına yada gramerine bir göz atalım.

1. Bordo renkli "public class" kelimeleri kendilerinden sonra gelen "MerhabaDunya" adında bir sınıf oluşturulduğunu anlatır. Bu sınıf public yani diğer sınıflar tarafından ulaşılabilir bir sınıftır.

2. Süslü parantezler sınıfın başlangıç ve bitiş noktalarını belirlerler. Tüm sınıfınız bu iki parantez arasında olmalıdır. Java dili yazarken çift tırnak ( " " ), tek tırnak ( ' ' ), süslü parantez ( { } ) ve noktalı virgül ( ; ) karakterlerini çok yoğun olarak kullanırız. Bir miktar pratik yaptığınızda süslü parantezler ve noktalı virgül artık farkında bile olamadan her satır sonunda gerekli yere eklemeye başlayacağınız birer refleks haline gelecektir.

Peki nedir bu sınıf ?

Sınıfları anlamak için önce objeleri anlamamız gerekir.

Programlama dilinde objeler gerçek dünyadaki objeler gibidir. 

Gerçek dünyada objeler belirli özellikleri tanımlanabilir. Örneğin telefonunuz bir objedir ve çalışma durumu : Açık / Kapalı olarak tanımlanabilir. Objelerin alt özellikleri de olabilir. Telefonunuz açık ve bir müzik çalıyor, Açık ve Şarj oluyor durumda olabilir.

Programlama dilindeki objeler buna çok yakındır. Durumları, alt durumları, özellikleri bulunur. Hatta değişkenleri, fonksiyonları v.b.

Bir sınıf objenin temel özelliklerini tanımlayan plan/proje dosyası gibidir. Sınıflar ile objeler yaratılır, özellikleri ve durumları eklenir.

Daha önce yarattığımız "MerhabaDunya" sınıfı iyi bir örnek sayılmaz. Bu sebeple aşağıda size bir Telefon Sınıfı yaratarak demek istediğimi anlatmaya çalıştım.

public class Telefon{

     // Telefonun özelliklerini tanımlayan değişkenler yaratalım
     int agirlik = 0;
     boolean acildi = false;
     String color = "turuncu";

     // Bu metod telefonun açılması durumunu kontrol edecek
     void TelefonuAc(boolean acildi){
          if(acildi == true){
               acildi = false;
          }else{
               acildi = true;
          }
     }

}

(Bu mükemmel bir program örneği değil. Yukarıdaki kodun büyük ihtimalle hiçbir anlamı yok ancak size yazım kurallarını ve obje mimarisini anlatır diye umuyorum)

Hadi bu sınıfı inceleyelim ; Parantezlere özellikle dikkat etmenizi istiyorum. Kaç tane parantez açıldı ise o kadar parantez kapatılmıştır. Hiyerarşiyi daha iyi anlayabilmek için yazımda tab boşlukları kullanılmıştır. Böylece kodu okumak daha kolay hale gelir. Parantezler bilgisayar dünyasında çok önemli karakterlerdir. Yazım sıraları, yazılış şekilleri görevlerini değişken hale getirir. Örneğin burada süslü parantezlerin bir tanesi eksik kaldığında yazılım hata verecektir.

Eğer daha önce hiç programlama ile uğraşmadıysanız bu durum size çok karmaşık gelecektir. Sonuçta bu yeni bir dildir. Bugün ingilizce veya portekizce öğrenmeniz ile java öğrenmeniz arasında hiç bir fark yok..

Biraz daha açıklayıcı olmaya çalışalım :

// ile başlayan satırlar açıklama satırlarıdır. Yazılım kodunun içine notlar almanızı sağlarlar. Bu notları kendinize hatırlamak için alabileceğiniz gibi programcıların da kodu okuduklarında anlamalarına yardımcı olacak notlar alabilirsiniz. // ile başlayan satırlar dil yorumlayıcısı tarafından kod olarak yorumlanmazlar.

ilk açıklama satırından sonra 3 durum (bizim dilimizde cümle) görüyorsunuz. noktalı virgül ile bitiyorlar. Bunlara kod satırı diyebilirsiniz.

     int agirlik = 0;
     boolean acildi = false;
     String color = "turuncu";

Bunlar değişkenlerdir. Değişkenler basitçe içinde belirli bir tipte veri tutabilen kaplar gibidir. Burada sizlere temel programlama konusunu anlatmak istemiyorum. O yüzden ilerlemeye devam edeceğiz.

Büyük ihtimalle her satırın noktalı virgül ile bittiğini fark etmişsinizdir. Java dilinde noktalı virgül satır sonu anlamına gelmekte, yeni bir komut satırının başlayacağını, mevcut satırın bittiğini ifade etmektedir.

Burada büyük dikkat gerektiren başka bir konu ise java dilinin case sensitive bir dil olmasıdır. Yani java büyük ve küçük harf duyarlıdır. Bir çok acemi programcı asla bulamadıkları hataları bu yüzden almaktadır.

Yani "MerhabaDunya" ile "merhabadunya", "Merhabadunya" ve "merhabaDunya" farklı nesnelerdir.

Neyse, java hakkında sık sorulan sorular ve cevaplarına şu bağlantı ile ulaşabilirsiniz.

http://www.javacoffeebreak.com/faq/

GÜN 2, DERS 1-1 : İsimlendirme Hakkında Hızlı Ders

Java kullanırken sınıf, nesne ve değişkenlere isimler vermek zorundasınız. İsimlerin ne olacağına ve nasıl yazılacağına siz karar vereceksiniz. (Türkçe karakter ve boşluk kullanamazsınız. Bazı özel karakterleri kullanamazsınız. Program sizi zaten uyaracaktır) buna rağmen bazı özel kelimeleri isim olarak kullamazsınız. (Ör : public, static, int, void gibi komutları isim olarak kullanamazsınız.)

Sınıflar genelde şu şekilde isimlendirilir :

OrnekSinifAdi

Metodlar ise şu şekilde isimlendirilir :

ornekMetodAdi()

ve değişkenler de bu şekilde isimlendirilir :

ornekDegiskenAdi

Komik gelecek ama buna "Camel Casing" yani "Deve Adlandırması" denilir. Bu bir kural değildir ve zorunlu değildir ancak her dilin olduğu gibi javanın da jargonu vardır ve jargona uymak sizi diğer programcıların gözünde daha saygıdeğer gösterir.

GÜN 2, DERS 1-2 : İlk Program

Evet şimdi MerhabaDunya adında bir sınıfımız var.
public class MerhabaDunya {

}

Bu sınıf içerisine bir metot ekleyeceğiz. Bu metot "main" adında özel bir metot. main metodu java programı çalıştırıldığında ilk çağrılan metottur. Yani çalıştır tuşuna bastığınızda bu metot çalışmaya başlayacaktır.

Main Metot Tanımlanması

public static void main(String[] args){

}

1. public, static, void : Java tanımlayıcıları

Daha öncede anlattığım gibi java dilinde bazı kelimeler özel anlamlar taşıyan komutlardır. Bu kelimelerin belirli bir sıra ile yazılması sonucu kendi sınıf, obje ve metodlarınız belirli özellikler kazanır. Burada çok fazla java dersine girmek istemiyorum. Sonuçta buraya Oyun Programlama öğrenmek için geldiniz. Ancak bazı temel konulara mutlaka göz atmamız gerekiyor. Neyse şu özel kelimelere bir bakalım :

public : Diğer sınıflar tarafından görülebilir. Bir java uygulaması birden fazla sınıftan oluşabilir. Bazen bu sınıflardan birinin diğerinin içindeki bir veriyi, değişkeni okuması veya bir metodu kullanması gerekebilir. Bu durumda bu koda erişim vermek üzere public tanımlanır. Tam zıttı private dir ve erişimi kesinlikle yasaklamak anlamına gelir.

static : Anlamı bu sınıftan sadece bir tane olduğudur. main sınıfının tekil olduğunu anlatır. static olmayan sınıflardan birden fazla yaratılabilir, böylece her kopya kendi değerlerine sahip olabilir. Bu durumda programınızın nasıl dengesizleşeceğini tahmin edebilirsiniz. Örneğin bilgisayarınızda birden fazla başlat menüsü olsaydı veya iki fare imleci olsaydı ne kadar zorlanırdınız değil mi ? Aynı şekilde bazı sınıflardan program içinde sadece bir tane olması gerekir. static kelimesi bu tekilliği sağlayacaktır.

void : Bir metot çağırdığımızda (Çağırmak çalıştırmak anlamına gelir) program o metottan bir sonuç dönmesini bekleyecektir. void tanımlanan metodun/fonksiyondan bir sonuç dönmeyeceği anlamına gelir. (Bunu şöyle örnekleyelim : Evinizde anneniz size birşey söylediğinde sonuç dönmesini beklerken babanız void çalışmaktadır. Anne : Oğlum yemeğini ye, yemeğini yedinmi, tabağın bittimi gibi sorular sorarak verdiği komutun sonucunu öğrenmek istemektedir ancak Baba : Kapıyı kapat ! dedikten sonra kapatıp kapatmadığınızı sormaz) Aynı şekilde bazen programınızın sonucunu zaten bildiğiniz birşeyi yapmasını istersiniz. Bu durumda sonucu zaten bildiğinizden bir sonuç döndürmesi gerekmez.

Bu anlaması zor gelen bir bölüm oldu. Ama merak etmeyin zaman içerisinde yazdıkça anlayacaksınız. Kimse dünyaya programcı olarak gelmiyor. (Sanırım ben hariç....)

2. Metotlar ve Fonksiyonlar : Parametreler

Bazı metotlar çağrılırken bir parametreye gerek duymazlar (Kapı örneğini ele alalım, baba kapıyı kapat dediğinde çocuk sokak kapıyı kapatacaktır. Bir parametreye gerek yoktur)

metotBir()

Bazı metotlar ise çalışmak için parametrelere ihtiyaç duyarlar. (Annenize çoraplarım nerede diye sorduğunuzda alacağınız cevap "Çekmecede" şeklinde olur ve siz parametreye ihtiyaç duyarsınız "Hangi çekmecede ?")

metotIki(int cekmeceNo)

fonksiyon ve metotların parametre alması demek o metoda bir veri göndereceksiniz ve o veri ile bir şey yapacak demektir. Programı yazdıkça bu bölümü daha iyi anlayacaksınız.

3. main metodu ve parametreleri

main(String[] args)

Bildiğimiz gibi (veya sizin yeni öğrendiğiniz gibi) main metodu çalışmak için bazı argümanlar yani parametreler istemekte. Bu parametreler string türünde yani metin formatında olmalı. Buradaki köşeli parantezler ( [ ] ) ise bu parametrelerin bir array yani dizi olduğunu anlatmakta. (Array yani dizi, tv dizisi gibidir sürekli olarak sonu gelmeden yeni bölümler eklenebilir. Burada string array ise birden fazla metin türünde veri alabileceği anlamına gelir. "Parametre bir", "parametre iki", "isim", "çalıştır beni", "tırmala beni şakir" gibi bir metin dizisi olabilir.)

Şu anda bu anlattıklarımın neden veya nasıl olduğunu anlamanız gerekmiyor. Güvenin bana ilerledikçe daha anlaşılır şekilde ve örnekler ile bunların tamamını zaten deneyeceğiz.

Aşağıdaki main metodu eklenmiş olan MerhabaDunya sınıfını kopyalar ve Eclipse penceresine yapıştırıp çalıştırırsanız çalışacaktır.
public class MerhabaDunya {
	
	public static void main(String[] args){
		
		
	}

}

Ancak bir problemimiz var. Main fonksiyonu (bundan sonra metod yerine fonksiyon kelimesini kullanalım daha anlaşılır oluyor) hiçbir görevi yerine getirmiyor. Yani hiçbirşey yapmıyor. Bu durumda çalışıp çalışmadığını anlayamayacağız.

Bu yüzden main fonksiyonumuza bir görev vermeliyiz.

public class MerhabaDunya {
	
	public static void main(String[] args){
		
		System.out.println("Selam. XD");
		
	}

}

Böylece main fonksiyonuna bir görev vermiş olduk. Ekran çıktı alanına bir satır yazmasını söyledik. Eğer herşey yolunda gitti ise Eclipse araç çubuğundaki play tuşuna bastığınızda size dosyaları kaydetmeniz gerektiğini söyleyecek ve kayıt işleminden sonra programı çalıştırarak console panelinde "Selam. XD" yazacaktır.


Biliyorum bu noktaya kadar çok sancılı bir konu oldu, hatta bazılarınızın şimdiden gözü korktu bile ama en azından şunu söylememe izin verin. Bilgisayar programcılığı hele hele oyun programcılığı kolay bir iş değildir. Sadece bir çıktı penceresine "Selam" yazabilmek için ne kadar efor sarfettiğinizi düşündükten sonra lütfen şunu hatırlayın ; Oynadığınız oyunların yanında bu denizde bir kum tanesi bile etmez !

Bu yüzden oyun/uygulama geliştiricilere yaptıkları iş hakkında bir cümle kurmadan önce lütfen iki kere düşünün.

Zor kısmı geçtik, bundan sonrası kolay kısım. Söz veriyorum bu yazı dizisini takip ederseniz sizin için hem eğlenceli hem de geliştirici ve faydalı olacak. 3. günde görüşmek üzere.

Okuduğunuz için teşekkür ederim.






Dip Not : Sizinde fark ettiğiniz gibi bir ders hazırlamak gerçekten zor. Bu yüzden internette Türkçe kaynak bulmak gerçekten zor hale geliyor. Bir dersin hazırlanma süresi sizin onu okuma sürenizden defalarca kez fazla. Derslerin devamı ve ücretsiz kalması için desteğinizi lütfen esirgemeyin.

Destek olmak için :

1. Bağışta bulunabilirsiniz. Sağ taraftaki "PAYPAL DONATE" butonunu kullanarak bağış yapabilirsiniz.
2. Derslere yorum yazabilirsiniz. Farkettiğiniz hataları, Eleştirilerinizi veya takdirinizi belirtmekten çekinmeyin.
3. Dersleri facebook, twitter gibi sosyal medya ortamlarında ilgisini çekeceğini düşündüğünüz arkadaşlarınız ile paylaşın.
4. Emeğime saygı gösterin ve metni kopyalayıp forumlara yapıştırmayın. Bunun yerine dersin linkini yayınlayın. Merak etmeyin o forumu okuyabilen insanlar bu sayfayı da okuyabilirler...

Teşekkürler.


24 Ağustos 2013 Cumartesi

Android Oyun Programlama Dersleri - Gün 1 - Kurulum










Android oyun programlama derslerine hoşgeldiniz ! Bu dersleri takip etmeyi istediğiniz için çok memnun oldum. Oyun progralama/geliştirme konusu gerçekten zor ama bir o kadar da eğlenceli ve geliştirici bir konudur. Bu yüzden size tavsiyem asla kendinizi tıkanmış veya yalnız hissetmeyin. Ben her zaman buradan sizlere yardımcı olmaya çalışacağım. Yorum yazarak veya e-posta ile sorularınızı sormaktan çekinmeyin. Elimden geldiğince sizlere cevap vermeye çalışacağım. 

Okuduğunuz için teşekkür ederim, umarım bu çalışmalar sizin içinde faydalı olacak...

GÜN 1, DERS 1-0 : Java nedir ?

Java : Sürekli duyduğumuz bir isim fakat gerçekten nedir bu java ?
Sizi java konusunda derin anlatımlara girerek sıkmayacağım. Bu konuda zaten binlerce sayfa yazıya online olarak ulaşabilirsiniz. Nede olsa siz buraya oyun geliştirmek için geldiniz.

Bu konumda bilmeniz gereken kısım şu ; Java bir programlama dilidir. (Sizin bilgisayar ile konuşmanızı sağlar) Böylece bilgisayara ne yapması gerektiğini anlatabilirsiniz. Ayrıca java bir platformdur. (Bilgisayarın sizin verdiğiniz komutları işlemesini sağlar) Böylece bilgisayar söylediklerinizi anlayabilir.

Java, her ortamda çalışabilmesi için tasarlanmıştır. Telefonlar, otomobiller, bilgisayarlar ve bilgisayarlaştırılmış olan binlerce farklı nesne üzerinde çalışabilir. Geliştiriciler "Bir kere yaz, her yerde çalıştır !" mantığını kullanabilmek için java platformunu aşırı derecede esnek tasarlamıştır. Keza, çok yakın geçmişe kadar mobil cihazlar dahil olmak üzere bir çok cihazın işletim sistemi platformu java tabanlı veya java destekli olmuştur.

Son birkaç yıl içinde ise yeni bir oyuncu sahneye çıktı : ANDROID. Google tarafından geliştirilen ve desteklenen ücretsiz işletim sistemi ANDROID şu anda otomobiller, masa üstü - diz üstü bilgisayarlar, tabletler, telefonlar, buz dolapları, otobüs eğlence sistemleri ve hatta fotokopi makineleri üzerinde işletim sistemi olarak kullanılmaktadır. Gelecekte daha başka hangi aygıtlarda olacağını kim bilir ?

Sonuç olarak ANDROID java mimarisini tam olarak desteklediği için ve java cihazları gibi yaygın bir kullanım alanı olduğu için Android Uygulama/Oyun geliştirme konusuna başlamadan önce java ile tanışmamız gerekiyor.

Eğer zaten java biliyorsanız bu bölümü atlamayı tercih edebilirsiniz. Ben dersleri olabildiğince anlaşılır tutmaya çalışacağım. İleri seviye programcılar ve Android Geliştiricileri bu bölümlerde sıkılabilir. 

Şimdi geliştirme ortamımızın kurulumuna geçeceğiz. Bu uygulama/oyun geliştirme konusunda en sıkıcı bölüm ancak bir şekilde yapılması gerekiyor...

Son Not : Aşağıdaki anlatım Mac ve Windows kullanıcıları için ortaktır.

GÜN 1, DERS 1-1 : Java ve Eclipse İndirme

Java programlamaya başlamadan önce bir geliştirme ortamına ihtiyacımız var. Bunun için bilgisayarımızı geliştirici bilgisayarı olarak belirleyeceğiz ve bazı yazılımları kuracağız.

Java Geliştirme Kiti (JDK - Java programları yazmanızı sağlayan geliştirme ortamı) kurabilmek için aşağıdaki adımları izleyin.


Mac Kullanıcıları : Genellikle bilgisayarınızda jdk zaten kuruludur. Bu adımı atlayabilirsiniz.

1. Aşağıdaki JDK indirme linkini tıklayarak jdk indirme sayfasına bağlanın. (Bu yazıyı gelecekte okuyanlar, jdk linkleri değişmiş olabilir. Güncel jdk linklerini arama motoru üzerinde "JDK DOWNLOAD" şeklinde arayarak bulabilirsiniz.)

http://www.oracle.com/technetwork/java/javase/downloads/index.html

2. Açılacak olan sayfada "Java SE 7u25 (veya üst sürüm)" başlığını bularak "JDK DOWNLOAD" indirme linkine tıklayın.


3. Java SE Development Kit 7u25 (veya üst sürüm) listesinde şartları kabul ettiğinize dair "Accept License Agreement" işaret kutusunu işaretleyerek listeden işletim sisteminize uygun olan JDK sürümünü indirin. (Burada windows kullanıcıları x86 ve x64 ayrımına dikkat etmelisiniz. Eğer x86 veya x64 size birşey ifade etmiyorsa yanlış dersi okuyorsunuz demektir. Öncelikle Temel Windows Kullanımı derslerini okuyup tekrar gelmelisiniz...)


4. Jdk indirmesi tamamlandığında kurulumu başlatarak ekranda çıkacak olan talimatları izleyerek JDK  kurulumunu yapınız. JDK yı kurduğunuz dizin daha sonra lazım olacak, bunu hatırlamanız faydalı olacaktır. (Ben C:\Program Files\Java\jre7\ dizinine kurulum yaptım.)

Şimdi Eclipse Kurmamız gerekiyor. İnternette Eclipse hakkında araştırma yapmanız faydanıza olacaktır. Eclipse bir kez kullanmaya başladığınızda vazgeçemeyeceğiniz üstün geliştirici araçları ile birlikte gelen bir IDE(Integrated Development Environment) dir.

Eclipse Kurulumu için aşağıdaki adımları izleyin : 


Eclipse kodlarınızı derleyen, yazılımı paketlemenizi sağlayan, kod ve projelerinizi organize eden bir programcı aracıdır. Oldukça kullanışlı ve güçlü bir IDE olarak bahsedebiliriz. Üstelik ücretsiz !!!

1. Aşağıdaki bağlantıyı kullanarak eclipse indirme sayfasını açın.

http://www.eclipse.org/downloads/

2. Açılan indirme sayfasında işletim sisteminize uygun olan "Eclipse Standart 4.3 (veya üst sürüm)" linkine tıklayarak kurulum dosyasını indirin.






3. Eclipse bir .zip dosyası şeklinde gelecektir ve kurulum istemez. Sadece çalışmasını istediğiniz yere çıkartın ve eclipse.exe yi çalıştırın. (Size eclipse.exe ye masa üstünde bir kısayol oluşturmanızı veya programı başlat çubuğuna sabitlemenizi tavsiye ederim.)

Böylece geliştirme ortamımız kurulmuş oldu. Artık java yazmaya hazır sayılırız. Şimdi eclipse için biraz ayar yapmamız gerekecek.

GÜN 1, DERS 1-2 : Eclipse Ayarlarının Yapılması

1. Eclipse ilk defa çalıştırıldığında size "workspace" ayarını yapmanızı söyleyecektir. Workspace (Çalışma Alanı) Eclipse tarafından projelerinizin, dosyalarınızın ve kaynakların kayıt altına alınacağı bir dizindir. (Ben E:\eclipse-workspace\ klasörünü çalışma alanım olarak belirledim.)



2. Eğer tüm kurulumu başarılı şekilde yaptıysanız aşağıdaki gibi bir ekran görüntüsü ile eclipse çalışmaya hazır hale gelecektir.



Bir sonraki derse buradan devam edeceğim. Okuduğunuz için teşekkürler.

1. Gün Değerlendirmesi :


Bu gün java, android ve program geliştirme hakkında basit bir giriş yaptık. Android geliştirmenin en önemli tabanı olan JDK ve Eclipse programlarını indirerek kurulumlarını gerçekleştirdik.

Yarın ilk Java programımızı yazmaya başlayacağız ve Java Jargonu hakkında konuşacağız.



Dip Not : Sizinde fark ettiğiniz gibi bir ders hazırlamak gerçekten zor. Bu yüzden internette Türkçe kaynak bulmak gerçekten zor hale geliyor. Bir dersin hazırlanma süresi sizin onu okuma sürenizden defalarca kez fazla. Derslerin devamı ve ücretsiz kalması için desteğinizi lütfen esirgemeyin.

Destek olmak için :

1. Bağışta bulunabilirsiniz. Sağ taraftaki "PAYPAL DONATE" butonunu kullanarak bağış yapabilirsiniz.
2. Derslere yorum yazabilirsiniz. Farkettiğiniz hataları, Eleştirilerinizi veya takdirinizi belirtmekten çekinmeyin.
3. Dersleri facebook, twitter gibi sosyal medya ortamlarında ilgisini çekeceğini düşündüğünüz arkadaşlarınız ile paylaşın.
4. Emeğime saygı gösterin ve metni kopyalayıp forumlara yapıştırmayın. Bunun yerine dersin linkini yayınlayın. Merak etmeyin o forumu okuyabilen insanlar bu sayfayı da okuyabilirler...

Teşekkürler.


23 Ağustos 2013 Cuma

Android Oyun Programlama Dersleri - Giriş

Hepinizin bildiği gibi, (veya bazılarınızın bilmediği gibi) android işletim sistemi mobil dünyada en yaygın olarak kullanılan işletim sistemlerinden biridir. Şimdi burada android nedir ? ne işe yarar gibi gereksiz konulara girmeden direk olarak "ANDROID OYUN PROGRAMLAMA DERSLERI" başlıklı yazı dizimin tanıtımını yapacağım.



Android ile oyun geliştirebilmek için öncelikle oyun programlama mantığını ve java dilini iyi öğrenmek gerekiyor. Bu konuda bana sürekli sorulan sorulara cevap vermek ve insanlık açısından faydalı bir örnek oluşturmak için bir yazı dizisi hazırlamaya karar verdim. Her gün bir ders olacak şekilde "ANDROID OYUN PROGRAMLAMA DERSLERI" yazı dizisini takip etmeniz durumunda mutlaka sizler için faydalı bölümler ile karşılaşacağınızdan eminim.

JAVA / OYUN PROGRAMLAMAYA BAŞLAMADAN ÖNCE....

Sık sorular sorular : 
Son dersleri ve yenilikleri nasıl takip edeceğim ?
1. Özellikle son yenilikleri takip etmek için beni takip etmelisiniz. Buradan facebook ile veya buradan twitter ile beni takip edebilirsiniz.

2. Ayrıca bu blog adresini sık kullanılanlar listenize ekleyerek blog üzerinden de takip edebilirsiniz. Son yayınlanan ders ana sayfada görüntülenecektir.

Bu dersler kimler için faydalı ?
Başlangıç seviye programcılar, ileri seviye programcılar, java öğrenmek isteyenler ve kendi oyununu tasarlamak isteyen herkes için bu dersler faydalı olacaktır.

Bu dersler ücretsiz mi ?
Evet. Bu derslerin tamamı ücretsiz olarak yayınlanacaktır. Size bir faydası olduğunu düşünüyorsanız ve bunun gibi içeriğin sürekli yayınlanmasını istiyorsanız bana bağış yapabilirsiniz.

Nasıl yardımcı olabilirim ?
Derslerin ücretsiz olması için bağış yaparak yardımcı olabilirsiniz. Ayrıca eğer dersleri beğenirseniz arkadaşlarınız ile paylaşarak ve onlara tavsiyede bulunarak yardımcı olabilirsiniz.


Nasıl yardım alabilirim ?
Eğer özellikle bir bölüm ile ilgili sorularınız var ise bunları bana contact@mesutaslan.com.tr adresini kullanarak veya ders altına yorum yaparak sorabilirsiniz. Mümkün olduğunca kısa süre içerisinde cevap vermeye çalışacağım.

Evet hazırsanız yarın (24.08.2013) ilk dersimize başlayacağız.


28 Haziran 2013 Cuma

Junior Yazılımcıların En Sık Yaptığı Hatalar

Aşağıdaki maddelerde mutlaka dikkat etmeniz gereken ama atladığınız, nerede yanlış yaptığınızı düşündüğünüzde içinden çıkamadığınız bazı noktaları yayınladım. Bunlara geliştirdiğiniz projenin büyüklüğü ne olursa olsun mutlaka dikkat etmelisiniz...

Olabildiğince açık ve kısa tutmaya çalıştım :D

Kullanıcı girdilerinin yanlış doğrulanması (Form Kontrolleri)
Çıktıların doğru şifrelenmemesi yada değiştirilmemesi
SQL dilinin yapısının bilinmemesi
HTML kodlarının sayfa akışı içinde doğru kullanılamaması (W3C)
İşletim sisteminin komut yapısının anlaşılamaması (Unix, Linux veya NT)
Hassas verinin normal text olarak taşınması/saklanması
Siteler arası isteklerde session çalınması (CrossSite Scripting)
Hata mesajlarında alt yapının ele verilmesi
Matematik işlemlerinde mevcut hafıza dışına taşılması (OverFlow)
State verilerinin harici kontrolü (ViewState)
Dosya ismi yada dizinlerin harici kontrolü (Fileread veya Streaming)
Güvensiz arama yolu (Server Path)
Kod üretici sistemlerin yetersiz denetimi (Wrong Back Coding)
Ne olduğu bilinmeyen kodların indirilip kontrolsüz kullanılması (Copy Paste Scripting)
Kaynakların zamansız ortadan kaldırılması veya serbest bırakılması (Disposing)
Gereksinimlerin yetersiz karşılanması
Hatalı hesaplamalar
Erişim kontrollerinin ve kullanıcı haklarının yetersiz kontrolü
Zaten kırılmış bir şifreleme algoritması kullanmak
Kod içinde direk olarak şifre kullanmak
Yanlış atanan kullanıcı hakları
Aslında random olmayan random veri kullanmak
Gereksiz erişim hakları ile çalışan kod
Sunucu tarafında kontrol edilmesi gereken güvenlik unsurlarının istemci tarafında kontrolü


4 Haziran 2013 Salı

Gezi Parkı Gözlemleri - Göknur Gündoğan

Göknur Gündoğan'ın kaleminden "Gezi Parkı Gözlemleri" olduğu gibi yayınlıyorum, lütfen yorum yapmaktan ve paylaşmaktan çekinmeyin !!!

Arkadaşlar ;

Üç gündür yaşanan olaylar sonucunda, yaptığım gözlemleri ivedilikle sizinle paylaşmak isterim. Çünkü bu sabah uyandığınızda, muhtemelen elinize yandaş medyanın gazetelerini alacak, büyük medya patronlarının etliye sütlüye dokunmayan internet sitelerine girecek ve sonuçta ;

Gezi Parkı Direnişi’nin bir REZİLLİK’ten ibaret olduğuna ve “milli kıymetlere” büyük zarar verdiğine İNANDIRILACAKSINIZ .

Bunu dün akşam kendi babamın ağzından duymak en hafifinden son derece sinir bozucu ve üzücüydü. Ama ona sakince şu cevabı verdim;

- “Seninle bu konuyu, telefonda tartışmayacağım. Çünkü sen orada yoktun, bu sebeple yaşadıklarımı bilemezsin. Tek bir şey söyleyebilirim. Fena halde kandırılıyorsun baba.”

Taksim Gezi Parkı Direnişine destek olanlar, bu ülkenin “aydın insanları” falan değildi. Hepsi Atatürkçü, laik beyaz Türkler falan da değildi. Kimse hayal görmesin. aralarında evet, memleketin gidişatından huzursuz, bunalmış çağdaş insanlar, Atatürk’ü sevenler vardı ancak, bununla beraber; çevreciler, tepkili mimarlar, üniversite öğrencileri, muhafazakar insanlar, son derece apolitik, ömründe eylem nedir görmemiş liseli gençler, özellikle genç kızlar ve kadınlar (çünkü bu memlekette erkeklerden çok kadınların özgürlükleri, %90’ı erkek erkler tarafından pazarlık meselesi yapılıyor!), cesur sanatçılar, yazarlar, üniversite hocaları, kimi zaman Apaçi diye adlandırılan belki lise seviyesinde okulu terk etmiş binlerce genç, futbol takımlarının tutkulu taraftarları, toplum tarafından seçimleri dolayısıyla aşağılanan veya dışlanan marjinaller, kimi milletvekilleri, beyaz veya mavi yakalı çalışanlar da vardı. Homojen bir topluluk değildi yani.

Bildiğiniz halktı. Herkesi bir araya getiren sabit bir politik düşünce yoktu.


Bu karışık topluluğun tek ortak noktası, her birlikte büyük bir “tepki” vermesiydi. 

Bu cümleyi okurken aklımızın bir köşesinde şu gerçeği de hatırlayaduralım, ülkemizdeki eğitim sistemi seneler boyunca çoğumuza “tepki vermenin, karşı çıkmanın ne feci bir şey” olduğunu öğretiyor. “Sen sus çocuuum ! Öğretmen bilir, büyüğün bilir, baban bilir, anan bilir. Sus patlatırım yoksa.” “Sen genç adamsın, üniversitelisin ne işin var eylemde, sus alırım içeri yoksa!”

Bu şartlanmalara rağmen tepki verebilmek, yürekli bir davranış değil mi ? İşte bugün, bu sus patlatırımların, sus yoksa içeri alırımların, sus yoksa işini kaybedersinlerin, ben senin hayatına müdahale ediyorum ama sus yoksa başını ezerimlerin tıkandığı noktadayız. İnsanlar muhafazakar, kaygısız, concon, modernist, marjinal, liseli, üniversiteli, apaçi, zengin, fukara, bilgili, bilgisiz ayrımı olmaksızın “yetti artık !” dediler. “Yetti. Bizi azarlamandan, ne yapmamız gerektiğini söylemenden, doğayı gönlünce katletmenden, İstanbul’u beton cehennemine çevirmenden bezdik artık. Biz huzur içinde azarlanmadan yaşamak istiyoruz.” Dün mesela, 3 gündür, İstanbul’da kıyamet koparken, Nişantaşı’ndaki kafelerde oturup, bana dokunmayan yılan bin yaşasın tavrı takınan, çoğumuzun « concon » tabir edebileceği insanlar, akşam polis TOMA’larının Beşiktaş’a inişini durdurmak için oturdukları yumuşak koltuklardan kalkıp, Nişantaşı’na bariyer kurdular. İnanabiliyor musunuz ? Bu sebeple, Gülse Birsel’in « Eeah !Yetti be ! » yazısı, popüler bir gözden, durumu eğlenceli bir şekilde resmeden bir metindir, okumanızı tavsiye ediyorum.


YORMADAN, KISA KISA GÖZLEMLER


  • Tepki gösterenler arasında gençler çoğunluktaydı. Neden ? Gençler sanal ağlar üzerinden iletişim kuruyor, birbirlerine olayları, whatsapp gibi uygulamalar üzerinden eş zamanlı olarak görüntülü, sesli ve yazılı bir biçimde ulaştırıyorlar. Bu sebeple bilinçli değilse bile, konvansiyonel medyalardan haber aldığını sanan, orta yaş ve üstü kesime göre daha “haberdarlar”.
  • Evet, özellikle dün akşam saatlerinde, kimi küçük gruplar işin dozunu biraz kaçırarak fevri tavırlar içine girdiler. Ancak sizi temin ederim sokaktaki insanların büyük çoğunluğu,birbirlerine « aman abi dikkat et, cam mam kırılmasın, sakın kavga etme, itekleme kimseyi ! » diye defalarca uyarıda bulunuyordu. Onbinlerce insanın katıldığı, güvenlik kuvvetlerinin bile-isteye gözümüzün önünde oraya buraya salladıkları bombaları, bu bombaların açtığı hasarların faturasının gösteri yapanlara kesilmesini saymıyorum bile !
  • İnsanları sanırım sonsuza dek “koyun modunda” tutamıyorsunuz. Dün umutla Gezi Parkı’nın kalbinde şarkı söylerken sevdiğim bir yazarın sözünü hatırladım “sen hiç sıkılan aşık ya da eylemci gördün mü?” Evet aşık sıkılmaz, eylem insanı da. Neden? Bir davası vardır çünkü. Köküne kadar inandığı. Günümüzde gençler de aslında inandıkları, savundukları birşey olsun istiyorlar. Ama bunun “ne olduğunu” dikkatleri sürekli başka yönlere çekildiğinden, ne yazık ki çoğunlukla bulamıyorlar. Geçtiğimiz 3 gün boyunca facebook ve twitter’ın ilk kez, dedikodu ya da geyik yapmak için değil “bir direniş aracı olarak veya astım krizi geçiren bir eylemciye doktor, sığınma noktası bulmak için” kullanılabileceğini gördüler mesela. TV, gazete, dergi, radyo yayını, internet, facebook, twitter, instagram gibi medya (aracı) veya sosyal medya (aracı) ları içleri boşaltıldığında kısır bir döngüye saplanıp kalan bir hiçtir. Onların anlamını biz bulmak zorundayız. Onları anlamlandırmak mühendislerin veya dahi yazılımcıların değil, bizim işimiz !
  • Biraz önce de yazdığım gibi gösteri grubunun içinde, Ümraniye’den, Dudullu’dan, Üsküdar’dan Taksim’e akan sosyo-ekonomik sınıfı son derece farklı genç insanlar vardı... Diyeceksiniz ki, onlar “eğlence var, olay var” diye “öylesine” gelmişlerdir. “Goygoy yapmaya”. Hepsi mi goygoycuydu peki? Farz edelim ki goygoycular, sizce bir goygoycu “çimlere basma Tayyip, çimleri eziyorsun...Kusura bakma Tayyip... !” “Sık bakalım, sık bakalım biber gazı sık bakalım...!”, “At, at, saldır, sen attıkça büyüyoruz!” diye saatlerce haykırdığında, hayatında hiç mi bir şey değişmez? Yani devletin kendi sivil, pasif ve eğlence dolu direnişine binlerce ton biber ve portakal gazıyla tepki verdiğini, orantısız güç kullandığını gören genç bir zihin, sizce bunları unutur mu?
  • Cuma gecesi Çamlıca tepesinde sakin sakin çay içen insanlar ağlıyorlardı arkadaşlarım. Nedeni elbette mutluluk falan değildi. Taksim’den, Harbiye’den, Beşiktaş’tan rüzgarla Çamlıca’ya dek ulaşan kavurucu biber gazıydı... Yöneticilere sövdüklerini duyuyordunuz. “İstanbul’un üstünü biber gazıyla örttü insafsızlar” diyordu herkes. Bu baskıdan “tepkili olmayan amca ve teyzeler” de etkileniyorlardı yani. Taksim ve Şişli civarında kalan ve otellerine gazdan ve varolan dehşet ortamından ulaşamayan binlerce turistin çektiği çileyi de unutmamalı... Sonuç olarak, “Her İstanbullu bir gün biber gazını tadacaktır” diye bir cümle, slogan olarak yerleşti diyebiliriz. Ne utanç verici değil mi?
  • 31 Mayıs ve 1 Haziran 2013 günü Türk Medyasının ve özellikle de Türk Televizyonculuğunun ölüm tarihidir. (Halk TV’yi ve Okan Bayülgen’in yayınlarını bir köşeye koyuyoruz.) Aşağıdaki fotoğrafları, vicdan terazinize bırakıyorum. 


31 mayıs günü ve gecesi, 01 haziran sabahı İstanbul ve diğer onlarca ilimiz olaylarla çalkalanır, Ankara’da ODTÜ’l¨ler ve vatandaşlar toplanıp Türkiye Büyük Millet Meclisi’ne yürürken, Türk televizyonlarından screen shoot’lar...



01 haziran 2013 sabah 04:00’da binlerce insan, Kadıköy’den Beşiktaş’a yardım için karşıya yürüyor... Ve Hiç bir haber kanalı bunu göstermiyor !


BBC televizyonuna Lily isimli biri, Avrupa’ya geçen bu güruhu bildiriyor, ve BBC yayınlıyor.Türk haber kanallarında tüm gece olduğu gibi, bu olaylar yaşanırken de hiç bir haber yok.

***Bilmem haberiniz var mı, dün akşamüstü (01.06.2013) basına olan tepkiden dolayı, eylemciler, Taksim meydanında olan ama yayın yapmayan!, hele Beşiktaş’taki keşmekeşi hiç göstermeyen NTV’nin yayın aracındaki muhabirleri kovup, aracı devre dışı bıraktılar.


Polis pasif ve eğlenceli eylemlere müdahale etmeden önce “Taksim Gezi Parkı Direnişi” buydu. Bunu asla unutmayalım


ÖNEMLİ SONUÇLAR, ÇIKARIMLAR:



  • TÜRK MEDYASINA KESİNLİKLE İNANMA. 
  • GÖZLEMLE, ARAŞTIR VE ANLAYIŞLA ANLAT.
  • TEPKİ VER, SAKIN SUSMA.
  • SEN DE BU ÜLKENİN EVLADISIN, ÖTEKİ yani « ayyaş, kindar, serseri, işe yaramaz, terörist vs. » DEĞİLSİN ! BU GERÇEĞİ ASLA UNUTMA !
  • ÇEVRENE, İNSANLARINA, SOSYAL UYGULAMALARA veya YAPTIRIMLARA YÖNELİK SORUMLULUK AL !


Bir insan olarak, yarınlarımız için biraz olsun sorumluluk almak adına, son günlerde yaşadıklarımızı çevremizdekilere sakince, doğru bir şekilde anlatalım, aktaralım.

Üç gündür yaşanan olayların “bir grup densizin işi” olmadığını ve bu “ortak tepkinin” altında çok daha büyük sorunlar ve baskılara dayanan bir altyapı bulunduğunu söyleyelim. Yanlış gördüğümüz, vicdanımızı rahatsız eden her şey için, lütfen ses verelim. Birlikte ol-mazsak, “hiç” olmayı kabullenmişiz demektir.

Göknur Gündoğan

25 Nisan 2013 Perşembe

Satış ve Pazarlama


Bürokratın biri, fakir bir adamın yanına gider ve;
- Oğlunun evlenmesini sağlayabilirim... der.
- Oğlumun hayatına asla karışmam...
- Ama, kız filanca partinin başkanının kızı...
- Haaa! o zaman başka...

Bürokratın ikinci durağı, filanca partinin başkanının yanıdır.
- Kızınız için bir kısmet buldum başkanım..
- Benim kızım evlenmek için henüz çok küçük...
- Ama, bu delikanlı halihazırda dünya bankası başkan yardımcısı..
- Bak o zaman başka...

Bürokrat , başkanın yanından ayrıldıktan hemen sonra soluğu dünya bankası başkanının yanında alır.

- Size başkan yardımcısı olarak tavsiye edeceğim, çok iyi bir delikanlı var.
- Şu an zaten ihtiyacımdan çok başkan yardımcım var, gerekmez.
- Ama, bu çocuk filanca partinin başkanının damadı?
- Bak o zaman oldu... Yarın gelsin başlasın...



İşte buna satış ve pazarlama denilir...
Bunu başarılı şekilde yapana da manüplasyon uzmanı...

4 Nisan 2013 Perşembe

Facebook profillerinizi virüs gibi kullanarak spam mesaj yayınlıyorlar

Facebook profillerinizi virüs gibi kullanarak spam mesaj yayınlıyorlar ve siz sanal bir saldırının SUÇ ORTAĞI OLUYORSUNUZ.

Peki ama nasıl oluyor ? İşte bu gün farkettiğim bir yöntemi uygulaması ile anlatıyorum.

Facebook spam mesajı yayınlayanlar profillerinizi çalmaya, sizin üzerinizden para kazanmaya devam ediyorlar.


MUTLAKA ve DİKKATLİCE okuyunuz....

Profilinizde bir arkadaşınızın bir videoyu beğendiğini gösteren bir mesaj ile karşılaşacaksınız. Bu mesaj genelde ingilizce ve "İnanılmaz, 17 yaşındaki kız videoya kaydedildi" manasına gelen bir başlık ile birlikte gayet dikkat çekici bir resim taşıyor olacak.


Peki bu videoyu izlemek üzere tıkladığınızda neler oluyor ?

Öncelikle sahte bir video player içeren sayfaya yönleniyorsunuz. Player içindeki tuşa bastığınızda ise genellikle bir bağlantı veya sayfayı otomatik olarak beğeniyorsunuz. Böylece kendi profilinizde yukarıdaki aynı içerik yayınlanmış oluyor. O esnada siz videonun yükleneceğini söyleyen bir reklam görüyorsunuz. Bu arada bazen sizden telefon numaranızı isteyen bir sayfa ile karşılaşıyorsunuz. Eğer telefon numaranızı girerseniz kayıt için 15$ ve mesaj başı 5$ ücret tahsil eden bir hizmete üye oluyorsunuz. 

Eğer sizi abone edebileceği bir ülkede değilseniz (Türkiye gibi) bu seferde sizi youtube üzerinde alakasız bir video linkine yönlendiriyor. Böylece siz videoyu izlediğinizi zannederken kendi profiliniz üzerinden bu spam reklamı yaymaya devam etmiş oluyorsunuz.

Sonuç :

İnternet üzerinde her gördüğünüz bağlantıya tıklamamanızı öneriririm. Dikkatli olun...



13 Mart 2013 Çarşamba

Yeni Facebook Tasarımı Geliyor...


Facebook, 7 Mart’ta yapacağı toplantıda yeni tasarımını tanıtacak.



Anlaşılan o ki Facebook denilen fenomenenin aslında ne kadar boş iş olduğunu anlayan Mark Zuckerberg kardeşimiz tasarımı değiştirerek siteye bir canlılık getirmenin uygun olacağı fikrinden yola çıkarak facebook'un tasarımını yeniletmeye karar vermiş.

En son 'Graph Search' uygulamasını tanıtan Facebook, basına dağıttığı davetiyelerde 7 Mart’ta yeni tasarımını tanıtacağını duyurdu.

Yeni tasarımla değişecek 'Haber Kaynağı', Facebook’un kurucusu Mark Zuckerberg’e göre, arama özelliği ve kullanıcı profilleri ile birlikte sitenin önemli bölümleri arasında yer alıyor.

Facebook’un tasarımı en son 2011’de köklü bir değişime girmişti. ‘Zaman Tüneli’ uygulamasını hayata geçiren site, son iki yıldır mobil uygulaması üzerine çalışıyor.

Sosyal ağlara erişimin gün geçtikçe akıllı telefonlar üzerinden gerçekleştiğini gözlemleyen Facebook’un yeni tasarım hamlesiyle mobil uygulamasını geliştirmesi bekleniyor. Kullanıcıların yeni tasarıma vereceği tepki ise merak konusu.

Sonuç olarak : Zaten amele kaynıyo, bende kapatacaaam. Beh beh beh beh....

5 Mart 2013 Salı

EŞEK ! Deyip geçmeyin ...


Kızınca bağırırsınız "EŞŞOĞLU EŞŞEK !". yada "EŞŞEK SIPASI !".

Her ne kadar insanoğlu türlü akılsızlıkları eşeklik ile nitelendirse de en güzel gözlere sahip bu sevimli hayvan, yerine göre çoğu insandan daha akıllıdır...

Örneğin "Eşek, iyi bir yol mühendisidir. Yokuşları en fazla % 7 eğimle ve kısa mesafelerde virajlar alarak çıkar" dediklerinde ben de inanmamış ve internette ufak bir araştırma yapmıştım. Sonuç ilginç !

Hani bu konuda çoğumuzun bildiği meşhur bir Anadolu fıkrası vardır:

1950 li yıllarda Amerikalı mühendisler gelmiş Türkiye''ye. Bir kısım imar çalışmalarına rehberlik ediyorlarmış. O zamanlarda yol güzergahı belirleyecek alet yok, eleman yok. O zamanın kara yolları mühendisleri eşeği yokuşa sürüyorlar, arkasından elemanlar ip çekiyor ve eşeğin ayak izlerine kazık çakıp istikamet belirliyorlarmış . Bunu gören Amerikalı mühendis, pratiği kavrayamamış ve sormuş:

- Ne yapıyorlar böyle?
- Rampada yolun güzergahını belirliyorlar.
- Nasıl yani, anlayamadım?
- Eşek % 7 eğimin üstüne çıkmaz, biz de eşeğin izinde kazık çakıp rampada yol güzergahı belirliyoruz .

Amerikalı katılarak gülmeye başlamış. Yatışınca da sormuş:

- Peki, eşek bulamayınca ne yapıyorsunuz?
- Amerika''dan mühendis getirtiyoruz.


Eşek iyi bir kılavuzdur: Gittiği bir yolu hiç unutmaz ve o yoldan şaşmaz. Bu nedenle deve veya katır kervanlarının önüne daha önce bu yoldan gitmiş bir eşeği kılavuz olarak koyarlarmış.

Evet, eşek akıllıdır... düştüğü çamura bir daha, asla düşmez. "Eşek bir defa çamura düşer !" Deyimi bundandır.

Biz eşek miyiz diye düşündüm, genele vurursak o kadar bile olamamışız, çamurdan çıkamıyoruz...

18 Şubat 2013 Pazartesi

insan sağlığı ile kumar oynamak...

E-Posta grubundan gelen bir yazıyı paylaşmak istiyorum sizler ile. Ayrıca burada kolesterol olayından bahsediliyor ama ben ülkemiz için yüksek tansiyon konusunda da aynı şeyi düşünüyorum. Yorum size kalmış....


300 Milyar Dolarlık Yalan

Dünyaca ünlü kolesterol uzmanı Philippe Even, "kötü kolesterol"ün ilaç endüstrisinin ürettiği bir yalan olduğunu iddia etti. İlaç şirketlerinin son 15 yılda "kolesterol yalan"ı ile 300 milyar dolar kazandığı belirtildi.

"Kolesterol sanıldığı gibi öldürücü değil, damarları tıkamıyor", "Kötü kolesterol ilaç endüstrisinin ürettiği bir yalan".

Bu ifadeler Fransa ve dünyanın en ünlü kolesterol uzmanlarından biri olarak gösterilen Profesör Philippe Even'e ait.

Even'in, 21 Şubat'ta Fransa'da piyasaya çıkacak "Kolesterol Hakkında Gerçek" adlı kitabı daha şimdiden büyük tartışma ve şaşkınlık oluşturmuş durumda.

Zira Even, kitabında, kolesterolün kesinlikle sanıldığı gibi insan sağlığı için zararlı olmadığını, damarları tıkamadığını, kalıtsal ve aşırı olanları dışındakilerin ölüme yol açmadığını tam tersine vücüt için kesinlikle gerekli olduğunu savunuyor.

'KÖTÜ KOLESTEROL' KAVRAMI YOK
Fransız profesör kötü kolesterol diye bir kavramın olmadığını da söylüyor. Profesör Even'e göre, kötü kolesterol ilaç endüstrisinin yarattığı bir yalandan başka bir şey değil.

Profesör Even kolesterol düşürücü olarak kullanılan ve statin olarak tanınan hapların da vücüt için yaşamsal öneme sahip olan kolesterol üretimini engellediğini ve bu nedenle yüksek dozda alınması halinde bünye için olumsuz sonuçlara yol açacağını belirtiyor.

'İLAÇ ŞİRKETLERİ İÇİN ÇALIŞIYORLAR'
Dev ilaç firmaları ve laboratuarları kolesterol konusunda yalan söylemekle suçlayan Profesör Even, kolesterol düşürücü ilaçlar sayesinde ilaç endüstrisinin son 15 yılda 300 milyar dolar kazandığını söylüyor. Fransız uzman, kolesterolün zararları üzerine bilimsel makalelere imza atan bilim insanlarının da "ilaç endüstrisi hesabına çalıştıklarını" iddia ediyor.

'BU ADAM YA ÇILGIN YA DA...'
Profesör Even'in ifadelerini bu haftaki sayısında kapağına taşıyan Fransız Le Nouvel Observateur dergisi, konu hakkında "Bu adam ya bir çılgın ya da tüm ilaç tarihinin en büyük teşhis hatasıyla karşı karşıyayız" yorumunda bulundu.

Geçmişte Fransa'nın en ünlü tıp fakültesi olarak bilinen Necker'de yıllar boyu dekanlık yapmış olan Profesör Even, şu anda Necker Tıp Enstitüsü'nü yönetiyor.

'KOLESTEROL ŞÜPHECİLERİ'
Kolesterolün sağlığa zararlı olmadığı tezi sadece Profesör Even'e tarafından değil dünya genelinde ilaç endüstrisinden bağımsız çalışan çok sayıda bilim insanı tarafından savunuluyor. Bu bilim insanları 2002 yılında "Kolesterol Şüphecileri" (Thincs) adı altında dünya genelinde bir şebeke oluşturmuştu.

8 Şubat 2013 Cuma

Yazılımcı / Geliştirici Reaksiyonları

Biz yazılımcı / geliştiricilerin bazı durumlarda verdiği tepkilere komik örnekler :






SUNUCUNUN YENİDEN BAŞLAMASINI BEKLEMEK....








PROJENİN PRODUCTION SÜRÜMÜNDE HATA OLUŞMASI






ÇOK ÖNEMLİ BİR BUG İLE UĞRAŞILIRKEN, OFİSE GELMEK...








PRODUCTION SÜRÜMÜ DURDURMA TEHLİKESİ
OLAN BİR GÜNCELLEMEYİ UPLOAD EDERKEN...










HAFTASONU EVDEN GÜNCELLEME YAPARKEN OFİSİN ADSL BAĞLANTISI KESİLİR












ÇÖMEZ YAZILIMCIYA ALGORİTMASININ YANLIŞ OLDUĞUNU GÖSTERMEK










DEVAM EDECEK ....





25 Ocak 2013 Cuma

C# ile masa üstü programınıza otomatik güncelleme özelliği eklemek


.net framework kullanarak (C#) yazdığım masa üstü yazılımlardan birine otomatik güncelleme özelliği eklemek istiyordum. Bu sebeple yaptığım çalışma gayet verimli oldu. Bende bu çalışmanın aşamalarını paylaşarak masa üstü program geliştiricilerin işine yarayacağını düşündüm. Bu bir ders veya konu anlatımı değil, sadece izlemeniz gereken yolu tarif edeceğim o kadar. Hazırsanız başlayalım ;

Problemimiz masa üstü programımızın kendi kendini update edebilme özelliği. Bunun birden fazla yolu olsa bile ben kendime göre en kolay olduğunu düşündüğüm versiyonu sizinle paylaşacağım.

Diagram şu şekilde olacak ;

1. Program çalıştırıldığında kendi sürümünü internet üzerinde bir sunucuda bulunan son sürüm ile karşılaştıracak.
2. Eğer yeni sürüm var ise yeni sürük kurulum programını download edecek.
3. Download tamamlanmış ise yeni sürümü yükleme yazılımını çalıştırarak kendisini update edecek.

Standart bir winform uygulaması oluşturarak işe başladığınızı farzediyorum. İlk yapmamız gereken şey programımızın kendi sürümünü bilmesini sağlamak. Bunun için ben "program.cs" içerisine aşağıdaki kodu ekledim.


buradaki "public static string versioncode" değişkeni ile programın versiyonunu tutuyorum. Daha sonra ana formun on load olayına update kontrolünü yapacak bir bölüm ekledim. Ayrıca hemen altında bulunan "updateme" prosedürü ile update işlemini yapacak olan formu çağırdığımı fark edeceksiniz. Burada thread kullanmaktaki amaç asıl formu kapatırken programın kapanmasını engellemek.


Uygulama ana formu yüklediğinde "checkupdate" fonksiyonunu çağırıyor. Basitçe fonksiyonun yaptığı şey web sunucumda bulunan bir php dosyasına kendi sürüm numarasını "v" değişkeni ile yollamak. Php dosyası eğer sürüm aynı ise "OK" eğer programın sürümü eski ise "UPDATE" değerini döndürüyor. CheckUpdate fonksiyonunun kodları şu şekilde;


Şimdi siz "Asıl iş PHP dosyasında. Tüm işi o yapıyor!" şeklinde düşüneceksiniz ama öyle değil. Php dosyası çok çok basit bir şekilde yayında olan versiyon ile programın yolladığı versiyonu kontrol ediyor o kadar. Aşağıda php dosyasının kodunu veriyorum. (Dilerseniz aynı şeyi .asp, .aspx, .asmx, .txt gibi dosyalar ile de yapabilirsiniz. kontrol işlemini masa üstü yazılımınıza yaptırabilirsiniz. Ben bu yolu seçtim)


Gördüğünüz gibi gayet basit bir kontrol. Buradan sonra program thread açarak güncelleme formunu yüklüyor ki asıl güncelleme işini yapan bu program. Güncelleme formunda basitce yerleştirilmiş iki label ve bir progressbar var. Bu sayede kullanıcıya güncelleme işlemi ile ilgili bilgi verebiliyor, işlemin ilerlemesini gösterebiliyoruz. Ayrıca ben sırf geyik olsun diye iki adet timer ekleyerek güncelleme işlemini toplamda 10 saniye kadar da yavaşlattım.

Formun tasarımı şu şekilde :


Güncelleme prosedürü ise şu şekilde :


Hızlıca özet geçmek gerekir ise ;

destPath değişkeni indirilecek olan dosyanın yolunu tutuyor. 1.timer ticklediğinde (aktif olup çalıştıktan sonra verdiğiniz süre kadar geçince timer nesnesinin tick olayı tetiklenir) ;
timer kendini kapatıyor
webclient nesnesi oluşturularak bu nesnenin downloadfilecomplete ve downloadprogresschange olayları yeniden yazılıyor. böylece indirmenin ilerlemesini ve bitip bitmediğini takip edebiliriz.
webclient downloadfileasync fonksiyonu ile uzak sunucudaki setup.exe yerel adrese indiriliyor.

bu esnada progresschange olayı ile progressbar update ediliyor.
indirme işlemi bittiğinde tetiklenen downloadfilecomplete olayı ile de program indirilen setup.exe yazılımını çalıştırarak kendisini kapatıyor. Buradan sonra kullanıcı normal bir kurulum yapar gibi güncellemeyi kuruyor.

Sorularınız için yorum atabilir, dilerseniz bana www.mesutaslan.com.tr adresindeki resmi sitemden ulaşabilirsiniz.

Umarım faydası olur....



Not  : Bu arada şunu söylediğinizi hissediyorum "Lan bu örnek kodları niye kopyalanır şekilde vermedin de resim şeklinde verdin dingil !", asıl dingil sizsiniz, eğer programcı olmak istiyorsanız önce yazmaya alışmanız gerekiyor, kopyalayıp yapıştırmaya değil !










21 Ocak 2013 Pazartesi

Androidli Huawei Ascend G510 Tanıtıldı


Hepimizin bildiği (yada bazılarımızın bilmediği) gibi huawei çok tanınmış bir android telefon üreticisi. Bizler Türkiyede bu firma ile cep telefonu operatörleri adına ürettiği cihazlar ile tanıştık. Huawei Turkcell için T10-20 gibi T serisi telefonları üreten firma. Ayrıca bir çok operatörün WINN adı altında sattığı usb gprs modemlerin üreticisi. Huawei kesinlikle kaliteli ürünler üreten bir çin firması ve şimdi telefon pazarına kendi adı girmeye niyetli.

Gelelim yeni ürünleri Ascend G510'un özelliklerine :

134 mm uzunluğunda, 64.7 mm genişliğinde, 9.9 mm kalınlığında ve 150 gram ağırlığında tasarlanan Ascend G510‘a, 1.2 GHz saat hızında görev yapan çift çekirdekli (ARM Cortex-A9) MediaTek 6577 platformu, PowerVR SGX531 grafik birimi ve 512 MB RAM eşlik ediyor. Google’ın mobil işletim sistemi Android‘in 4.1 ”Jelly Bean” versiyonunu kullanan akıllı telefon, 4.5-inç boyutunda dokunmatik kapasitif IPS ekrana sahip. 4.5-inç’lik ekranda, 480 x 854 piksel (FWVGA) çözünürlük sunuluyor.

Akıllı telefonun ön yüzünde 0.3 megapiksel çözünürlüğünde, arka yüzünde ise 5 megapiksel çözünürlüğünde, LED flaşlı kamera yeterli görülmüş. Ana kamera aynı zamanda 1280 x 720 piksel çözünürlüğünde saniyede 30 kare video kaydı yapabilmekte.

4 GB‘lık dahili depolama alanı, microSD kartlar aracılığıyla yükseltilebilen Ascend G510‘nun batarya kapasitesi ise 1.700 mAh olarak açıklanmış durumda. Ascend G510‘u, Ascend G500 ile karşılaştırmak gerekirse;

  • Ekran boyutu 0.2-inç artmış.
  • Ekran çözünürlüğü 540 x 960 pikselden, 480 x 840 piksele düşmüş.
  • İşletim sistemi versiyonu Android 4.0′dan, Android 4.1′e güncellenmiş.
  • İşlemci saat hızı 200 MHz artmış.
  • RAM, 1 GB‘tan 512 MB‘a düşmüş.
  • Batarya kapasitesi 1.930 mAh’den 1.700 mAh’e düşmüş.
Ascend G510‘un 200 Euro civarında fiyatlandırılması beklenirken, akıllı telefonun çıkış tarihi konusunda bilgi verilmemiş.

17 Ocak 2013 Perşembe

Flash Oyunlar


Flash oyunlar internette çok büyük pazar olarak büyümeye devam ediyor. Her gün yüzlerce internet sitesi açılıyor, yeni oyunlar yazılıyor ve yayınlanıyor. Sonuç olarak ücretsiz flash oyunlar yayınlayan birçok site olmasına rağmen bizim ülkemizde ne yazıkki yeni oyunlar geliştirilmiyor.

Bunun yerine web geliştiricilerimiz oyun indexleri yaratmayı tercih ediyor. Sonuç olarak çocuklar için eğitici ve eğlendirici flash oyunları içeren sitelerin oranı gittikçe artıyor.

İlk kullanmaya başladığım günden beri flash teknolojisinin bu konuda çok ilerleyeceğini düşünüyordum. Bu gün bu düşüncemde yanılmamış olmaktan mutluyum.

Yaşı ne olursa olsun tüm çocuklara iyi oyunlar....