Başı-Boş Satırlar – IntelliJ ile Bahar Temizliği (Bölüm 2)

Geçenlerde IntelliJ’de tek bir hamlede tüm Java kodumuzun biçimsel düzenini sağlamanın yöntemine göz atmıştık: Kodunuza İyi Bakın – IntelliJ ile Bahar Temizliği

Şimdi ise Java kodumuzdaki tüm gereksiz boş satırları silmenin yolarına göz atacağız. Birinci bölümdeki yöntemi uyguladıktan sonra “Edit > Find > Replace in Path…” özelliğini uygun regexler ile kullanarak şunlardan kurtulabiliriz:

Kodun herhangi bir yerinde yer alan ard arda iki boş satırdan…

Text to find:
\n\n\n

Replace with:
\n\n

Metot gövdesi başlangıcındaki boş satırdan…

Text to find:
\) \{\n\n

Replace with:
\) \{\n

Metot gövdesi sonundaki boş satırdan…

Text to find:
;\n\n    }

Replace with:
;\n    }

Kodunuza İyi Bakın – IntelliJ ile Bahar Temizliği

Java derleyicisi kodunuzu biçimsel olarak nasıl düzenlediğinize karışmaz, kodunuzun derlenebilmesi için Java söz dizim kurallarına uymanız yeterlidir. Ancak kodunuzun okunabilir olması için kodunuzun biçimlendirmesine (format) dikkat etmeniz gerekir. Özellikle birden fazla kişinin çalıştığı büyük/orta ölçekli projelerde okunabilir kod eşittir bakımı yapılabilir kod denebilir.

Elbette kodun biçimsel düzeni okunabilir/anlaşılabilir kodun tek ön koşulu değil, yine de özenli olma yolunda iyi bir başlangıç olacaktır. (Yeri gelmişken okunabilir/anlaşılabilir kod yazmak üzerine müthiş tavsiyelerde bulunan şu kitaba göz atmanızı şiddetle tavsiye ederim: Clean Code: A Handbook of Agile Software Craftsmanship)

Özellikle birden fazla kişinin çalıştığı projelerde zaman zaman acele yetişmesi gereken işlerden, kafa dağınıklığından yada basitçe kişisel ihmalden kaynaklı olarak -kodun hacminin de büyümesiyle- kodun biçimsel düzeni bozulmaya başlar. İşte burada bu bozuklukları topluca düzenlemede kullanabileceğiniz basit bir yöntemden bahsedeceğim. Favori Java editörüm olan IntelliJ IDEA‘da şu iki adımla tüm *.java dosyalarımızı topluca düzene sokmamız mümkün:

Adım 1: Tüm Java sınıflarımızı barındıran “src” dizinine (başka türde dosyalar da içerebilir elbette) sağ tıklayıp “Reformat Code” seçeneği seçilir:

reformat-them-all-step-1

Adım 2: Açılan “Reformat Code” penceresinde aşağıdaki seçenekler uygulanıp “Run” denilerek, tüm *.java dosyalarımızın düzenlenmesi yanında kullanılmayan ‘import’ deyimlerinden de arındırılması sağlanır:

reformat-them-all-step-2

“Sonra”, “Asla” Demektir

Düzenli olmak, yapılacakları planlamak, yapılacak “çok şey” olduğunda yapılacak en mantıklı harekettir (?) Eee ben de kendi çapında mantıklı ve yapacak çoook şeyleri olan bir birey olarak yapacaklarımı/yapmak istediklerimi yazacağım, unutmamak için kenara not edeceğim bir yapılacaklar listesine sahip olmadığım bir hayat düşünemezdim elbette.

Yapılacaklar Listesi Meydan Muharebesi

Not defterime kalemle yazarak oluşturduğum ilk “TODO list”imi kısa bir zaman sonra-mesleğimin de gereği olarak- elektronik ortama taşıdım. Daha sonra listem o kadar şişti ki düzeni yeniden tesis etmek üzere işe önce kullandığım araçta (Google Keep) farklı konulara özel farklı başlıklı yapılacaklar listeleri oluşturarak düzenli olmak için oluşturduğum yapılacak listemi düzenleyerek başladım (!)

“TODOs – günlük”, “TODOs – genel”, “expercise TODOs”, “n11 TODOs” yapılacak listelerimden sadece birkaçı.

Çok fazla yapılacak olunca önceliklendirme de yapmak gerekiyor elbet. Bazı listelerin Google Keep’te üste çıkarılması, listelerdeki öncelikli maddelerin liste içinde yukarılara taşınması, bazı acil olanlarının yapışkanlı not kağıtları üzerine yazılıp sürekli göz önünde tutulması…

Zurnanın “ZIRT” dediği yer

Geçen dedim ki kendi kendime, “Ya bu listelere yazıp yazıp duruyorum ama baya şişti bu listeler, bir göz atsam aslında bir çoğu geçerliliğini yitirmiştir bile çoktan. Oturup yarım saat bi’ saat elden geçireyim şunları… (ZIRT)”

Siz de duydunuz değil mi “ZIRT” sesini.

“Later equals never.”

Üniversitedeyken sanırım bir yerlerden duymuş yada okumuştum:

Later equals never.

LeBlanc’s Law

Yani “sonra”, “asla” demektir.

Öyle bir hale gelmiş ki yapılacaklar listelerim, artık “asla” yapmayacağım bazı şeylerle dolup taşmış. Sonra yapmak üzere not aldığım şeyleri “sonra” unutmuşum, hatta bazılarını ne amaçla hangi kafayla not aldığımı dahi unutmuşum.

Bir ara Google Keep’teki her şeyi silip, tek bir not içine “Later equals never.” yada “Just do it.” yazmayı düşündüm. Boş sınav kağıdına “Risk budur.” yazıp çıkan öğrenci gibi çok havalı olacağımı düşündüm. Öyle ya, bir yanlışı ortaya koy ve tüm benliğinle tam karşısında dur.

“Suçumuz neydi bizim?” (AYNA’dan gelsin)

Suç benim miydi? Çok fazla şey yapmak isteyip bir çoğunu ertelememde miydi? Yada eriyen kar sularının gazına gelmiş nehir gibi akan zamanın mıydı?

Zaman herkes için aynı hızda aktığına göre tabikisi suç benimdi beybiler.

Bir Barış ve Aydınlanma Çağı

“Yapılacaklar Listesi Meydan Muharebesi” ardından Orta Dünya’da yeni bir barış ve aydınlanma çağı başlar. Gandalf ve Galadriel emekli olup Ege’ye yerleşir ve hayallerindeki bi’ çiftliği inşa ederler. Frodo ve beraberindeki tüm Hobit’ler ise yapılacaklar listelerini Hüküm Dağı’nın alevinde yakıp bir bir Sam’in düğününe koşturur…

Yüzüklerin Efendisi: Kralın Dönüşü, Kayıp Son Sayfa

İlk iş yapılacaklar listelerimi “iki” listeye indirgedim:

  1. Yapılacaklar
  2. Yapmak istediklerim

Sonra “Yapmak istediklerim” listesindeki her şeyi sildim (!) Evet evet yanlış okumadınız. “X kitabını oku” yada “Kitap oku” yada “Daha fazla bisiklete bin” yada “Kilo ver” yada “Kendi işini kur”… Bunların hiçbirinin yapılacaklar listelerinde işi yok. Bunlar “o an” yapılmaya başlanması gereken şeyler. Bazıları sonlu, bazıları bir ömür sürecek istekler/hayaller/dilekler/temenniler. Ama hepsi de “o an” başlanabilecek/bir ucundan tutulabilecek şeyler.

Ve eğer bir şeyi unutmamak, kendimize hatırlatmak için not almamız gerekiyorsa, belki de hiçbir zaman yapmamamız gereken bir şeydir (?)

Hayat her şeyi yapmak için çok kısa, ama yine de “çok şey” yapabiliriz. Hemen yapmaya başla(yalım).

TEDxIstanbul ardından

11 Haziran 2016, çok güzel bir gündün. Bir günden başka ne istenebilir ki. Teşekkürler.

Tamam tamam, hergünün kendince bir güzelliği vardır pek tabii. Alarmın nahoş sesine rağmen, gözünü odanın dört duvarına değilde, hayallerine bakan bir pencereye açtıysan eğer.

Yok yok hayal olmadan olmaz. O kadar da değil. Tek hayali iyileşmek olan bir hasta iyileşse neye yarar. Hastayız hepimiz. Duruyor olduğumuzu bilmiyor haldeyiz, ağlayanımız yok. Yetmezmiş gibi durduğumuz yerde türlü şekil şemail, kime ki havamız anlamadım.

durdugu-yerde-turlu-sekiller

Buramıza geldi artık. Sözleştik. Bugün TEDxIstanbul’da tüm hastalar buluştuk. İyileşmek için bir umut. İyileşmek, hareketimizi başlatmak için.

Ebru Kurbak “hareketi başlatmak için önce durduğumuzun farkında olmak gerek” diye hatırlattı bize.

Teşhis kondu. Ama herkes kendi ilacını kendi yapmalıydı. Tek bir ilaç olsa tek bir konuşmacı yeterdi TEDxIstanbul’a. O çıkar anlatırdı herkese. İyileşir dönerdik evimize.

Aynı noktadan başlamış olsak, aynı noktaya varacak olsak, aynı yoldan giderdik elbet…

İyi mi, yine iyileşmeden döndük evlere. Ama dedim ya, teşhis kondu. İlacı “içimizde”. Oraya kadar içimizde gitmişiz meğerse. Bundan sonrası çocuk oyuncağı. Çocuk oyuncağı dediysem kolay demek demedim. İşin sırrı çocuklara doğru oyuncakları vermekte:

  • Köy okulunda okuyan Selçuk R. Şirin ve kardeşleri için, anne babalarının evlerinde kütüphane kurması gibi
  • Yasin Sert‘in babasının daha küçükken “ne yaparsan yap bir değer kat” demesi gibi
  • Ahmet Naç öğretmenin öğrencilerine tarihi “rap” şarkısı ile, coğrafi bölgeleri ve onların özelliklerini tiyatral öykülerle öğretmesi gibi
  • İzzet Pinto’nun babasının, daha ilkokula gidiyorken onu pazarda saat satmaya yollaması ve arkadaşıyla birlikte kazandığı 100 liranın 50 lirasını saatlerin maliyeti olarak onlardan alıp, kalan 50 lirayı 25-25 iki arkadaşa paylaştırması gibi…

Öyle olmasaydı, köy okulunda okuyan Selçuk R. Şirin’in anne babasının evinden 3 doktora 2 yüksek lisans sahibi evlat çıkabilir miydi? Yasin Sert çaputlara değer katabilir miydi? İzzet Pinto Türk dizilerini 75 ülkeye satabilir miydi?

Çok güzeldin 11 Haziran 2016. Durduğumuzu hatırlattın bize. İtiraz etmemiz gerektiğini. Değer katmanın değerini. Okumaya devam et

“Mobil Oyun Geliştirme Stratejileri” Sunumundan Notlar

Yaklaşık bir yıl önce katıldığım “Mobil Oyun Geliştirme Stratejileri” başlıklı sunumda bir hayli not almış, notlarımı bazı arkadaşlarımla paylaşmış ve güzel geri dönüşler almıştım. Geçenlerde notlarıma göz attarken -biraz daha düzenleyerek- buradan da paylaşmamın yerinde olacağını düşündüm:

  • Konuşmacı: Sertaç Pıçakçı
  • Mobil vs. Tablet: Tablet oyunlarının geliri daha azmış. Ama önce tablet sürümünü çıkarıp, UX’i, oyun mekaniklerini vb. iyileştirip sonra mobil (akıllı telefon) versiyonunu çıkartıyorlarmış.
  • En büyük mobil oyun pazarı Asya-Pasifik’miş. Ve bu pazarda “casual” (“ev hanımlarının bile oynayabildiği” diye tanımladı) oyunlardan ziyade daha çok vurdulu kırdılı oyunlar seviliyormuş.
  • Çinli oyun firmalarında “retention” (bağlılık) “monetization”dan (gelir yaratma) daha önemli.
  • Oyuncular arası iletişim ve sosyal medya entegrasyonları çok önemli. “Bir oyun ‘oyun’ olmaktan çok sosyal mecra aslında” diyor. Sosyal mekanizmaların üstüne oyunu inşa ediyorlarmış. Voice chat (sesli mesajlaşma) dahi varmış bazı oyunlarda. Batıda bunun tam tersi yapılıyormuş; önce oyun sonra sosyal mekanizmalar.
  • Uygulama marketlerinde üst sıralarda yer alan bir oyun ayda 80 Milyon $‘dan fazla kazanıyormuş. Örneğin Clash of Clans:
    clash-of-clans-logo
  • Genel kabul görmüş gelir modeli: F2P. Onun dışında “premium” (oyunu yüklerken para ödediğin) ve “advertisement” (reklam) gibi gelir modelleri var.
  • F2P oyunlarda oyuncu kitlesinin ortalama %0.1-%0.3’lük kısmı bolca para harcıyormuş. Ve bu kitle gelirin %70-%80’ini sağlıyormuş.
  • Çinli firmaların “retention”a verdiği öneme çarpıcı bir örnek: Bolca para harcayan oyuncularla oyun moderatörleri arkadaş olup (tabii moderatör olduğunu hissettirmeden) oyuncunun doğru şekilde para harcaması için yönlendirmelerde bulunuyor ve böylece oyuncunun oyundan soğumamasını sağlamaya çalışıyorlarmış.

Okumaya devam et

Java 8 Sertifikasyonu (OCAJP 8) – Bölüm 1: Java’nın Temelleri

Bu birinci bölümden itibaren sınavda karşımıza çıkacak konulara değinmeye başlıyoruz. Verilen bilgilerin bazıları zaten bildiğiniz şeyler olacak, ancak bir sınava gireceğimizi ve pek çok yanıltıcı soru olacağını unutmayalım. Bazılarına önceleri benim de dikkat etmediğim, sınavda çeldirici olabilecek bazı özel noktaları “DİKKAT!” etiketiyle belirtiyorum. Verilen bilgilerin çoğunu bu kategoriye girmeye aday olanlardan seçmeye çalıştım. Eğer tamamını okumaktan sıkılırım diyorsanız sadece “DİKKAT!” etiketli kısımları okuyabilirsiniz.

Java Sınıf (Class) Yapısı

  • Java sınıflarının iki temel elemanı vardır: metotlar (methods) ve alanlar (fields).
  • Bunlara aynı zamanda sınıfın üyeleri (members) da denir.
  • Metotlar fonksiyon (function) yada prosedür (procedure) olarak da ifade edilebilir.
  • Alanlar değişkenler (variables) olarak da bilinir.
  • Alanlar sahip oldukları değerler itibariyle sınıf örneğinin (instance) durumunu (object’s state) belirlerken, metotlar sınıf örneğinin durumu üzerinde işlem (operation) yapar ve sınıfın davranışlarını tanımlar.
  • Bir sınıf bu sınıf üyelerinin hiçbirini barındırmayabilir, yada birini veya her ikisini barındırabilir. Yani şu üçü de geçerli sınıf tanımlarıdır:
class Animal {
}
class Animal {

    String name;

}
class Animal {

    String name;

    public String getName() {
        return name;
    }

    public void setName(String newName) {
        name = newName;
    }

}
  • Bir başka sıklıkla karşımıza çıkan kod parçaları ise yorumlardır (comments). Yorumlar kod içerisine eklediğimiz açıklamalardır ve derleyici (compiler) tarafından dikkate alınmaz. Tek satırlı, çok satırlı ve Javadoc tipinde yorumlar mevcuttur:

Okumaya devam et

Java 8 Sertifikasyonu (OCAJP 8) – Bölüm 0: Giriş

Java 8 sertifikasyon sınavına (OCAJP 8) hazırlanırken aldığım notlardan derlemelerimi içeren yazı dizisine hoş geldiniz. 5 yıldan uzun süredir Java programlama dili ile geliştirme yapan birisi olarak burada paylaşacağım notlar haliyle daha çok “highlights” (önemli noktalar) tadında olacak.

java8-logo

Lafı uzatmadan…

OCAJP 8 nedir?

  • Açılımı “Oracle Certified Associate, Java SE 8 Programmer”.
  • Oracle Sun’ı satın almadan ve kapsamını bölerek iki ayrı sertifikasyon programı haline getirmeden önceki adı “Sun Certified Java Programmer (SCJP)” olan sertifikasyon programının birinci aşaması.
  • Java’nın temel/görece basit konularının ele alındığı bu programın bir büyüğü ise OCAJP 8 (Oracle Certified Professional, Java SE 8 Programmer)
  • Bu iki program da Java SE konularını kapsamaktadır ve Java EE ile ilgili sertifikasyon programlarının ön koşuludurlar.
  • Kapsamı, giriş ücreti (şu sıralar 612 TL / 210$ civarı) ve sınav merkezi lokasyon bilgisi için (Türkiye’de pek çok test merkezi mevcut): http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=5001&get_params=p_exam_id:1Z0-808

OCAJP 8 konuları?

Yukarıda paylaştığım linkte de bulabileceğiniz konu başlıklarını buraya ufak açıklamalar eşliğinde ekledim:

  • Java Basics:
    Değişkenlerin kapsamları (scope of variables), bir Java sınıfının (class) yapısı, “main” metodu ve çalıştırılabilir (executable) Java uygulamaları…
  • Working With Java Data Types:
    Java veri tipleri, ilkel tipler (primitive data types), nesne (object) referans değişkenleri ve ilkel tip değişkenler arasındaki farklar, nesne yaşam döngüsü…
  • Using Operators and Decision Constructs:
    Operatörler, karar yapıları (if, switch…), eşitlik kontrolü (== ve equals())…
  • Creating and Using Arrays:
    Bir ve çok boyutlu diziler oluşturma ve kullanma…
  • Using Loop Constructs:
    Döngü yapıları (for, while, do+while), döngü yapılarının karşılaştırması, “break” ve “continue” anahtar kelimeleri…
  • Working with Methods and Encapsulation:
    Metotlar, kapsülleme (encapsulation) yani sınıfın iç işlerini dış mihraklardan gizleme, “static” anahtar kelimesi…
  • Working with Inheritance:
    Kalıtım (Inheritance), soyut (abstract) sınıflar, arabirimler (interfaces), çok biçimlilik (polymorphism), “casting”, “this” anahtar kelimesi, üst sınıf davranışını ezme (overriding)…
  • Handling Exceptions:
    İstisna (Exception) yönetimi, “try-catch” blokları, “checked” ve “unchecked” istisnalar arasındaki farklar, temel istisna tipleri: “NullPointerException”, “ArithmeticExcpetion”, “ArrayIndexOutOfBoundsException”, “ClassCastException”…
  • Working with Selected classes from the Java API:
    “String”, “StringBuilder”, “java.time.LocalDateTime”, “java.time.LocalDate”, “java.time.LocalTime”, “java.time.format.DateTimeFormatter”, “java.time.Period”, “ArrayList” gibi temel Java API sınıfları ile çalışma, basit Lambda deyimleri yazabilme…

Gördüğünüz gibi OCAJP 8’in pek çok konu başlığı bir Java programcısının (hatta pek çok programcının) ekmeği suyu olan konular. Peki neden hazırlık yapmaya ihtiyaç var? Çünkü bu bir sınav ve doğası gereği kısıtlı bir zaman diliminde (150 dakika) sorulan soruların (77 adet soru) belli bir kısmını (%65’lik bir kısmını) doğru cevaplamamız istenmekte. Bunun için de ilgili konuların kafamıza net bir şekilde oturmuş olması ve soruları şak diye cevaplayabiliyor olmamız gerekmekte.

OCPJP 8 ise, günlük hayatta çokta dikkat etmediğimiz “Thread” gibi kavraması daha güç bir çok konuyu kapsamakta. Yani OCAJP 8’i atlattığımızda asıl macera bizi orada bekliyor olacak. :)

Neden sertifikasyon?

  • Birincil sebep:
    Yıllardır kullandığım bu programlama dilini gözümden kaçan, gündelik hayatta kullanmadığım (çoğu zaman alışkanlıklarımıza uygun şekilde, neredeyse ezbere diyebileceğimiz yöntemlerle kodlama yaparız) fakat faydalı olabileceğini keşfettiğim özellikleri ve konseptleriyle birlikte tam olarak kavramak, ve tabiki bunları sizlerle paylaşmak.
  • İkincil sebep:
    Neye faydası olur bilmiyorum ama, öz geçmişime bir satır daha eklemek. :)