rayyildiz.com

java, play framework, scala, yeni teknolojiler

Scala Kata - FizzBuzz

02 Nov 2013 Yazan Ramazan AYYILDIZ

CodingKata Nedir?

İlk kez http://en.wikipedia.org/wiki/Dave_Thomas_(programmer) tarafından ortaya atılan Coding-Kata ifadesi bir programlama dilindeki yeteneklerinizi geliştirmek amacıyla yapılan örneklere denilir.

Burada ben de Scala ile aşağıdaki listede yer alan problemleri çözerek burada sizinle paylaşıyor olacağım:

Bugün yapacağımız ve bundan sonra yapacağımız çözümlerin kaynak kodlarını Github.com/rayyildiz/codekata-scala adresinden erişebilirsiniz.

FizzBuzz Problemi Nedir?

Scala ile yazmaya başladığım ilk CodingKata problemimiz FizzBuzz. FizzBuzz en az 2 kişi ile oynanan matematik geliştirmeye yönelik bir oyundur. 1’den başlayarak sırasıyla 1,2,3 diye saymaya başlanır. Eğer söylenen sayı 3’e tam bölünüyorsa Fizz, 5’e tam bölünüyorsa Buzz, hem 3 hem de 5 ‘e tam bölünüyorsa FizzBuzz denilir. Yanlış yapan elenir.

Buna göre sırasıyla aşağıdaki gibi söylenmesi gerekiyor.

1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23, Fizz, Buzz, 26, Fizz, 28, 29, FizzBuzz, 31, 32, Fizz, 34, Buzz, Fizz, …

Aynı oyunu sadece 10’luk düzenle değil, 8’lik , 16’lık düzende de oynanan halleri de vardır. FizzBuzz ile ilgili daha detaylı bilgiye Wikipedia adresinden erişebilirsiniz.

FizzBuzz Problemin Çözümü

FizzBuzz probleminin çözümü için scala da pattern-matching ile çok kolay çözebiliriz. Verilen sayının FizzBuzz problemini çözen kod şu şekildedir.

Burada (i % 3, i % 5) ile hem 3 hem de 5 bölünüp bölünmediği hesaplanır. Burada sonuç bir Tuple2 yani (Int,Int) olacaktır. Bu tuple2 ifadesi patern-matching işlemiyle aynı anda tüm durumları test edebiliyor olacağız.

def matchTest(i:Int): String = (i % 3, i % 5) match {
    case (0 , 0) => "FizzBuzz"
    case (0 , _) => "Fizz"
    case (_ , 0) => "Buzz"
    case  _      => i.toString()
  }

Bu örneği verilen sayıya kadar hesap ederek bir List String dönen çözüm ise şu şekilde olacaktır.

def findFizzBuzz(max:Int):List[String] = 
	(for ( i <- 1 to max) yield (matchTest(i))).toList

Test Kodu

Test işlemi için ScalaTest tercih ediyoruz. Yaptıımız çözümü test eden kod aşağıdaki gibidir.

import org.scalatest.FunSpec

class FizzBuzzSpec extends FunSpec {
  describe("A FizzBuzz"){

    import FizzBuzz.findFizzBuzz

    it("should correct for number is 15") {
      val expected = List("1", "2", "Fizz", "4", "Buzz", "Fizz", "7", 
	  		"8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz")
			
      val actual = findFizzBuzz(15)

      assert ( expected === actual)
    }
  }
}

Problemin çözümünü içeren uygulamayı https://github.com/rayyildiz/codekata-scala/tree/master/FizzBuzz adresinden indirebilirsiniz. Ayrıca github.com/rayyildiz/codekata-scala github hesabımda diğer coding-kota problemlerini çözümlerini de paylaşacağım.




Posterous, Google Reader ve Hayata Dair

25 May 2013 Yazan Ramazan AYYILDIZ

Google Reader

Google 13 Mart tarihinde bazı uyuglamarını kapatacağını duyurudu. Bu uygulamalardan birisi olan google reader kapatılması ise birçok kişi gibi ben de garip karşıladım. Bu sıralarda ise feedly yeni keşfetmiştim. Neyseki feedly bir çalışma yapaçağını duyurdu. Benim gibi günde 500 den fazla blog’u takip eden birisi için güzel bir haber bu.

Posterous

Ben uzun bir süre önce blog’umu wordpress’ten posterous taşımıştım. Posterous twitter tarafından satın alınmıştı. Bu nedenle posterous tercih etmiştim. Ne varki bir kapanış haberi de posterous’tan geldi. Bu esnada http://www.squarespace.com da inceledim. Ve hatta squarespace olduka başarılı bir proje olduğunu da düşünyorum. Özellikle Kevin Rose'un takıma katılmasıyla squarespace oldukça değişmiş. Ancak squarespace bir blog engine değil. Bu nedenle squarespace tercih etmedim. Tam bu esnada github pages keşfettim. jekyll ile tam istediğim hale geldi. Ücretsiz olması ise ayrı bir artısı.




FSTech'ten EGK Projesiyle Ödül ile Döndük

20 Apr 2013 Yazan Ramazan AYYILDIZ

Yeni Türk Ticaret Kanunuyle birlikte borsaya kote olan firmaların genel kurullarını elektronik ortamda yapma zorunluluğu geldi. Bu projenin geliştirimesi Merkezi Kayıt Kuruluşu verildi. Bu kapsama geliştirdiğimiz Elektronik Genel Kurul projesi FSTech te “Best Use of Online Service” finale kaldı. Bu kapsamda 17 Nisan tarihinde Gala gecesine katılmak üzere Londra’ya davetliydik. 17 Nisan tarihinde Londra’da yapılan gala gecesinde, “Best Use of Online Service” dalında ödülü bizim geliştirdiğimiz EGK projesi kazandı. Oldukça yoğun bir çalışma sonrasında böyle bir ödül kazanmak, bütün çalışmamıza değdi açıkcası.

Big Ben

Big Ben

London

London




Scala ile Asal Sayı Tespiti

27 Oct 2012 Yazan Ramazan AYYILDIZ

Scala ile bir asal sayının tespiti aşağıdaki gibi bir kod ile bulmak mümkün. Bu kod parçası scala’nın ne denli güçlü olduğunu göstermeye yeterli bence. Daha sonraki yazılarımızda scala ile daha detaylı bir yazı yazacağım.

def isPrime(n:Int): Boolean = (2 until n) forall (d => n % d !=0)




Griffon Başlangıç

29 Oct 2011 Yazan Ramazan AYYILDIZ

Chicago da gerçekleştirilen SpringOne2GX etkinliği kapsamında epey ilginç ve de güzel seyler gördüm. Etkinliğin son gunü, paralel giden konferanslardan sonuncusunda herhangi bir bilgimin olmadigi ve diğer konuları beğenmediğinden dolayı Griffon a katılmayı tercih ettim. Hakkında çok az şey biliyordum. Ancak sunu soylemeliyim ki etkinlik kapsamında bu kadar beni şaşırtan konu olmamıştı. Bu nedenle hakkında bazı bilgileri paylaşma gereği duyuyorum.

Eğer Groovy ile program yazdıysanız, hele de grails ile proje geliştirdiyseniz, griffon size çok kolay gelecektir.

Griffon grails gibi proje geliştirmek için gelistirilmis bir proje. Griffon JSR 295 ve JSR 296 uyumlu. Su an itibariyle 170 ten fazla plugin e sahip.

Griffon Başlangıç

Griffon indirdekten sonra, bazı ayarlar yapmanız gerekiyor. Buradan bilgi alarak bu işlemleri gerçekleştirebilirsiniz.

Grails de olduğu gibi griffon ile bir proje acmak çok kolay.

griffon create-app

Evet sadece bu kadar. Peki hatırlayalım, grails de bir projeyi çalıştırmak için ne yapıyorduk ?

grails run-app

Tahmin edebileceğiniz gibi griffon da bir proyi çalıştırmak grails de projeyi çalıştırmak gibi.

griffon run-app

Java da çeşitli uygulamaları denince applet de akla gelir. Peki bir griffon ile bir applet nasıl yazarız? Cevap çok kolay herhangi bir şey yapmanıza gerek yok: sadece uygulamanızı yazın ve calistirirken şu sekilde çalıştırın.

griffon run-applet

Aklınıza applet güzel ama biz bunu web den calistirabilir bir sekilde nasıl yazarız diye gelebilir. Hemen onun da cevabını söyleyeyim.

griffon run-webstart

Projenizi yazdınız ve deployment yapmak istiyorsunuz. Grails de olduğu gibi

griffon dev package

demeniz yeterli. Bu sizin için standolone, applet, webstart için paketleri olusuturacaktir. Hatta applet için self signed bir sertifika ile oluşturacaktir.

Griffon

Swing ve java ile ugrastiysaniz, jar dosyasını dağıtmanın hiç de mantıklı olmadıgını bilirsiniz. Size tavsiyem installer adında bir plugin var, onu kullanmanızı tavsiye ederim.

griffon installer-plugin installer

Plugin kurduktan sonra şu sekilde projenizi paket oluşturabilirsiniz. Bu size MAC OS, Windows ve debian için kurulum paketleir hazirlayacaktir.

griffon package dmg izpack deb

Griffon Archtype Eğer Groovy bilmiyorsanız, güzel bir haberim var: griffon scala, Java, jython … dillerini de destekliyor. Projenizi olustururken archtype belirterek projenizi istediğiniz bir dilde yazabilirsiniz.

griffon create-app -archtype=scala
griffon create-app -archtype=java

Bizi Ne Bekliyor

Proje su anda 0.9.4 sürümü mevcut. Yıl sonunda 1.0 gelecek. Proje epey iyi bir şekilde yoluna devam ediyor. Avusturalya da çok önemli bir şirket tüm uygulamalarını griffon ile yazmış. Amerika’da da epey bir şirket projelerini griffon ile yazmaya başlamış. Şu anda veri tabanı işlemi için datasource adındaki plugin i kullanabilirsiniz. Yalnız griffon 2 ile birlikte GORM birlikte gelecek. Bununla beraber griffon 2.0 da scaffold da geliyor.

Son söz olarak, bu projeyi oldukça başarılı bulduğumu tekrar belirtmek isterim. Desktop projelerimde griffon u kullanmayı hedefliyorum. Şimdilik bu kadar, eve gidince griffon ile geliştireceğim projeleri ve griffon hakkında daha detaylı calışmalarımı paylaşacağım.




SpringOne 2GX – KeyNote

27 Oct 2011 Yazan Ramazan AYYILDIZ

Uzun süredir beklediğim SpringOne 2GX ilk gunü geride kaldı. Katılımın yüksek olacağı bir etkinliğe benziyor. Bugün gerçekleştirilen “Keynote” çok kalabalıktı .Bu kadar kalabalık olacağını tahmin etmemiştim.

“Keynote” bir hosgeldiniz ve etkinlik kapsamında hangi konuların islenecegi bilgisinin verildiği bir toplantiydi.

Springone Keynote

SpringOne ilk süprizini Keynote da öğrendik. Rod Johnson kolunu kırmış olması ve doktorunun uçma yasağı nedeniyle etkinliğe katılamamasiydi. Ben SpringOne ilk kez katılıyorum ama ben bile etkinliğin Rod olmadan başladığını hatırlamıyorum. Bu Rod un katılmadığı ilk etkinlik olacak. Bunun yaninda Graeme Rocher soğuk algınlığı almış herhalde, sesi çok kötüydü.

Etkinlik kapsamında başlıca islenilecek konular: Spring data, grails, bulut mimariler. Özellikle bulut mimariler bu etkinliğin en önemli konularını içeriyor. Heroku, cloudfoundry, appfog etkinliğe sponsor olmuşlar.




SpringOne 2GX ve Chicago

25 Oct 2011 Yazan Ramazan AYYILDIZ

24 Ekim de başlayıp 28 Ekim tarihleri arasında sürecek olan SpringOne 2GX katılmak üzere Chicago ya geldim. Açıkcası Amerika gibi bir ülkeye gelmek bir nebzede olsa insanı geriyor. Bilmediğin bir yer oluşu, gerek yemek gerekse yasam tarzının farklılığı, dil gibi konularda dusunuyorsun. Bütün bunları düşünürken süren 11 saatlik uzun bir uçak yolculugu ise ayrı bir zorluk.

İlk geldiğim gün hiçbir yeri tanimayisimdan dolayı zorluk çektim elbette. O ilk gunün ardından ise sehri tanımaya başlayınca anladım ki çok da farklı bir yer değil burası. Tam tersine İstanbul da sahip olamadığımız o kadar çok güzellikleri var ki burada; kesinlikle görülmesi gereken yerlerden bir yer diye düşünüyorum. Su anda Lake Front adını verdikleri Michigan Lake yanında, Sturbucks’tan aldığım kahvemi yudumlarken yazıyorum bu yazıyı. Burada hemen hemen her yerde wi-fi noktası bulmak mümkün. Public alanların dısında At&t gibi firmaların sundukları güzel wifi noktaları var hızı ise oldukça güzel.

Chicago da ilk dikkatimi çeken nokta mimari yapısı oldu. Planlamaları çok iyi sekilde yapılmış , hemen hemen herseyi düşünmüşler. Birçok yerde katlı otoparklar var. Hatta bazı çok yüksek katlı binaların bile bir kısmı otopark olarak ayrılmış. Golün kenarları bir fırsat gibi gorulmeyip yaşanılanımız olmasına dikkat etmişler, İstanbul’daki gibi “yatırımımı toprak üstüne yaptım” gibi fırsatçılar yerine, planlama göz önünde bulundurulmus.

Burada bisiklet çok seviliyor, bisiklet yolları yapılmış. Sürekli yanından bisikletle birileri geçiyor. Tabi golün kenarında bu güzel manzarada bisiklet sürmek eğlenceli olsa gerek.

Spora da çok dikkat ediyorlar. Amerikaya gelmeden önce Amerikan halkı obez tabirini çok duymuştum , belki buraya has bir ozelliktir, ama herkes spor yapıyor. Birtek spor yapmayan benim gibi misafirler galiba :)

Trafik ise pek kalabalık görmedim; yalnız sabah erken saatte televizyona baktığımda hava durumu gibi trafik haberlerinin verildiğini gördüm. “The Loop” adı verilen bir tren sistemi var. Bugün yanlışlıkla bindigim hat ile sehir dısını da görme şansım oldu. Sehir merkezinin dısında güzel yerleşim yerleri var, 2-3 katlı müstakil evler. Muhtemelen insanlar şehir dısında yaşayıp, sehir merkezinde çalışıyor. Trafiğin nedeni bu olsa gerek.

Benim şansıma mı bilmiyorum ama geldiğimden beri hava güzel. Duyumlarına göre havası istanbuldan biraz soğukmuş.

İnanılmaz bir beyzbol, golf ve Amerikan futbolu sevgisi var. Sanırım dün bir derbi vardı, her yerde herkes beyzbol macını izliyordu.

Birde TV yi bakıyorum da , herhangi bir çikolata, deterjan, cocuk bezi … reklamı yok. Reklamların cogu teknolojik icerige sahip. Buna rağmen yerli halkın yolda cep telefonuna bakarak yürüdüğünü görmedim. Hatta Apple Store gittiğimde insanların bizim muhteşem diye tabir ettigimiz Apple in ürünlerine ince eleyip sık dokudugunu, almadan önce 50 sefer soru sordguna şahit oldum. Biz ise 2. sorumuzdan sonra kasaya yöneliyoruz :)

Yarın nasip olursa seminer SpringOne 2GX semineri başlıyor. Bu yazı daha çok chicago üzerine oldu. Daha sonra seminer hakkında fikirlerimi paylaşacağım. Eğer fırsat bulursanız, Chicago yu görmenizi tavsiye ederim.

Chicago

Chicago

Chicago

Chicago




Diğer Yazılar