Kayıtlar

scala etiketine sahip yayınlar gösteriliyor

Play, Scala, sbt, Shading

Resim
Buyuk resmi gor yigenim. Gelin birlikte sifirdan bir scala ve sbt kullarak, multi project bir yapida Play projesi olusturalim. 1. Play  Play, JVM'de kabul gormus bir web application framework'u. Ilk baslangicta, kendi basina calisacak cok basit bir Play projesi olsutralim. IntelliJ kullaniyorum, yeni bir sbt projesi  olustuyorum. Daha sonra build.sbt uzerinde su sekilde eklemeler yapacagiz:      name := "play-standalone"      version := "0.1"      scalaVersion := "2.13.8"    lazy val root = (project in file ( "." ))      .enablePlugins( PlayScala )      .settings(      name := """cok sukseli api projesi""" ,      organization := "com.lombak" ,      version := "1.0-SNAPSHOT" ,      scalaVersion := "2.13.6" ,      libraryDependencies ++= Seq (      guice ,      "org.scalatestplus.play" %% "scalatestplus-play" % "5.0.0&qu

Data Patterns #1 - Data Summarization Pattern

Resim
Problem Verilen bir DNA dizesinde (mesela "AATGC..."), her bir bazin (A, C, G, T) kac kere gectigini bulunuz. Ornek dna dizilim dosyasi: https://ftp.ncbi.nlm.nih.gov/genomes/INFLUENZA/influenza.fna (1.3 Gb) Cozum Yani aslinda kabaca, verilen text icerisinde gecen distinct karakterleri saymamizi istiyor. Cok basit (kolay demedik) ve temel bir problem.  Ornek bir veri dosyasi icin https://ftp.ncbi.nlm.nih.gov/genomes/INFLUENZA/influenza.fna (1.3 Gb text dosyasi) Input sekline bakacak olursak: >gi|58576|gb|X52226|Influenza A virus (A/FPV/Rostock/34(H7N1)) gene for neuraminidase, genomic RNA AGCAAAAGCAGGAGTTCAAAATGAATCCAAATCAGAAAATAATAACCATTGGGTCAATCTGTATGGGGAT CGGAATAATCAGCCTAATATTACAAATTGGAAACATAATCTCAATGTGGGTTAGTCATTCAATTCAGACT GAAAATCAAAATCACCATGAAGCATGCAACCCAAGCATTGCTGGACAGGATGCAGCTTCAGTGGCACTAG CAGGCAATTCCTCTCTTTGTCCCATTAGTGGGTGGGCTATATACAGTAAAGACAATGGTATAAGAATTGG .... En basta, buyuktur isareti ile baslayan bir yorum satiri var ki bu satiri gozardi etmemiz gerekiyor. Ge

Testing #2: Testleri etiketleme ve fixture kullanimi

Resim
Scala-test bizlere testleri taglama ve daha sonra bu taglara gore filtreleyerek calistirma imkani sunuyor. Ornek olarak bazi testler yavas seklinde etiketlenebilir ve gerektigi zamanlarda bu testler calistirilmayabilir. Testi gozardi etme Default olarak tanimlanmis bir tag ise ignore . Bunu direk kullanmaya baslayabilirsiniz ve o test gozardi edilecektir.  ignore should "soyledir boyledir" in {     // baya bi testler ama ignore edilecek } sbt test ile calistirdigimizda bu testin yesil yerine sari olarak gectigini ve yaninda IGNORED yazdigini gorecegiz.  Kendi tagimizi uretiyoruz Tag tanimlamak icin Tag traitini extend eden bir object yaratmamiz yeterli. Daha sonra bunu teste eklerken her style trait (yani kullandigimiz test stili) kendi yontemini sunar. import org.scalatest.Tag object DatabaseTesti extends Tag("com.mycompany.tags.DbTest") Daha sonra ornegin FlatSpec'te bu tagi bir teste eklemek istersek: "Acayip database" should "degisik olaylar

Testing #1: Test stili ve assert

Resim
Bu dizide genel olarak scala ve spark projelerini nasil test ederiz buna deginecegiz.  Scala Test Gunumuzde scala projelerinde defacto testing kutuphanesi olarak  scala-test kutuphensini  kullaniliyor. Birkac noktaya burada deginelim: - Scala-test birden fazla testing stiline izin vermektedir. Ancak bir proje icerisinde bunlari karisik olarak kullanmak onerilmez. Proje baslangicinda secilen bir stil tum unit testlerde uygulanmasi daha verimli olur.  - Farkli test kategorileri icin (ornek olarak unit testing ve acceptance testing) farkli test stilleri kullanilabilir. Hatta bu sayede developer teste baktigi zaman bunun hangi tip test oldugunu daha iyi anlayabilir.  - Assertion, matcher, mixin ve trait gibi mekanikler tum test stillerinde ayni sekilde calismaktadir. Yani testin icini degistirmeye gerek yoktur.  - Scala-test'in dokumantasyonda onerdigi yontem unit ve intergration testing icin FlatSpec ve de acceptance test icin ise FeatureSpec seklinde. Bu testing stillerine bir goz at

Sbt #4 : Proje release ve CI

Resim
- Kalk yerine yat olm, boynun agrir Oncelikle proje artifactlarini package etmemiz gerekiyor. Bunun icin sbt-native-packager pluginini kullanacagiz. Birkac adim izlemek gerekiyor: 1. project/plugins.sbt dosyasina plugini ekle 2. Packaging formatini tanimla 3. plugin tarafindan saglanan Setting'i calistir Project klasoru altina plugins.sbt dosyasi olusturuyoruz. Icrigi su sekilde: addSbtPlugin("com.typesafe.sbt" %% "sbt-native-packager" % "1.3.21") Paketlemeye gecmeden son adim olarak da, build.sbt dosyasinda iki proje icin de enablePlugin metodu ile sbt-native-packager pluginini JavaAppPackaging formatini kullanacak sekilde konfigure ediyoruz.  lazy val sansOyunlari = project      .dependsOn(api)      .enablePlugins(JavaAppPackaging)      .settings(           libraryDependencies ++= Dependencies.sansOyunlariDependecies      ) Simdi stage komutu ile paketlemeye gecebiliriz. stage, sbt-native-packager tarafindan saglanan bir task.  sbt:hello_sbt> ;cl

Sbt #3 : Dependency Yonetimi

Resim
 Bu postumuzda sbt ile dependency'ler nasil manage edilir (konustugumz dile bak) konusunu isleyecegiz. Sub-projelerin birbirine depend etmesi soz konusu oldugu gibi 3rd party library kullanimina da deginecegiz.  3rd Party Library Daha once sayisal loto tahmin uygulamasi yapmistik. Simdi buna bir ek yaparak, doviz kurlarini da ekleyecegiz. Bunun icin http request yapmamizi saglayacak scala-request kutuphanesini projeye ekliyoruz. buid.sbt dosyasindaki proje tanimlamasina soyle bir ek yapacagiz: name := "hello_sbt" version := "0.1" scalaVersion := "2.13.4" val sansOyunlari = project.settings(      libraryDependencies ++= Seq(           "com.lihaoyi" %% "requests" % "0.6.5",           "org.scala-lang.modules" %% "scala-xml" % "1.2.0",      ) ) Sbt projesini reload ediyoruz. Gidip IntelliJ sbt plugin sekmesine bakarsak su sekilde dependency'lerin olsuturuldugunu gorebiliriz: Simdi requests cal