{"id":290,"date":"2017-04-07T23:12:09","date_gmt":"2017-04-07T21:12:09","guid":{"rendered":"http:\/\/antek.atthost24.pl\/?p=290"},"modified":"2017-04-09T21:03:22","modified_gmt":"2017-04-09T19:03:22","slug":"hello-kotlin","status":"publish","type":"post","link":"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/04\/07\/hello-kotlin\/","title":{"rendered":"Hello Kotlin!"},"content":{"rendered":"<p>W ko\u0144cu pora na kodowanie!<\/p>\n<p>Po kilku wpisach teoretycznych na temat mojej aplikacji przysz\u0142a pora, \u017ceby napisa\u0107 pierwsze linijki w Kotlinie! Postaram si\u0119 od razu przygotowa\u0107 projekt tak, aby m\u00f3g\u0142 by\u0107 dalej rozwijany i ostatecznie sta\u0107 si\u0119 gotow\u0105 aplikacj\u0105.<\/p>\n<h3>Struktura projektu<\/h3>\n<p>Aplikacja b\u0119dzie si\u0119 nazywa\u0107 plag-detector. B\u0119dzie ona podzielona na kilka modu\u0142\u00f3w. W tym wpisie zaczn\u0119 od podstawowego modu\u0142u mojej aplikacji, czyli cz\u0119\u015bci programu, kt\u00f3ra b\u0119dzie odpowiedzialna za wyliczanie prawdopodobie\u0144stwa plagiatu pomi\u0119dzy dwoma kodami \u017ar\u00f3d\u0142owymi.<\/p>\n<pre class=\"lang:default decode:true \" title=\"Struktura aplikacji\">plag-detector\r\n|--plag-algorithm<\/pre>\n<h3>Build tool<\/h3>\n<p>Przed napisaniem pierwszej linijki kodu warto wybra\u0107 narz\u0119dzie automatyzuj\u0105ce budow\u0119\u00a0aplikacji. Wyb\u00f3r pad\u0142 na klasyk\u0119, czyli stary i lubiany Maven \ud83d\ude09<\/p>\n<p>Konfiguracji parenta, czyli plag-detector, nie b\u0119d\u0119 pokazywa\u0142. Nie ma tam nic odkrywczego \ud83d\ude42<\/p>\n<p>Poni\u017cej przedstawi\u0119 pom.xml modu\u0142u plag-algorithm.<\/p>\n<pre class=\"lang:xhtml decode:true \">&lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n         xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\"&gt;\r\n    &lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\r\n    &lt;parent&gt;\r\n        &lt;groupId&gt;pl.lantkowiak&lt;\/groupId&gt;\r\n        &lt;artifactId&gt;plag-detector&lt;\/artifactId&gt;\r\n        &lt;version&gt;0.0.1-SNAPSHOT&lt;\/version&gt;\r\n    &lt;\/parent&gt;\r\n    &lt;artifactId&gt;plag-algorithm&lt;\/artifactId&gt;\r\n\r\n    &lt;properties&gt;\r\n        &lt;kotlin.version&gt;1.1.1&lt;\/kotlin.version&gt;\r\n        &lt;project.build.sourceEncoding&gt;UTF-8&lt;\/project.build.sourceEncoding&gt;\r\n    &lt;\/properties&gt;\r\n\r\n    &lt;dependencies&gt;\r\n\t\t...\r\n    &lt;\/dependencies&gt;\r\n\r\n    &lt;build&gt;\r\n        &lt;plugins&gt;\r\n            &lt;plugin&gt;\r\n                &lt;artifactId&gt;kotlin-maven-plugin&lt;\/artifactId&gt;\r\n                &lt;groupId&gt;org.jetbrains.kotlin&lt;\/groupId&gt;\r\n                &lt;version&gt;${kotlin.version}&lt;\/version&gt;\r\n                &lt;executions&gt;\r\n                    &lt;execution&gt;\r\n                        &lt;id&gt;compile&lt;\/id&gt;\r\n                        &lt;goals&gt;\r\n                            &lt;goal&gt;compile&lt;\/goal&gt;\r\n                        &lt;\/goals&gt;\r\n                        &lt;configuration&gt;\r\n                            &lt;sourceDirs&gt;\r\n                                &lt;sourceDir&gt;${project.basedir}\/src\/main\/kotlin&lt;\/sourceDir&gt;\r\n                                &lt;sourceDir&gt;${project.basedir}\/src\/main\/java&lt;\/sourceDir&gt;\r\n                            &lt;\/sourceDirs&gt;\r\n                        &lt;\/configuration&gt;\r\n                    &lt;\/execution&gt;\r\n                    &lt;execution&gt;\r\n                        &lt;id&gt;test-compile&lt;\/id&gt;\r\n                        &lt;goals&gt;\r\n                            &lt;goal&gt;test-compile&lt;\/goal&gt;\r\n                        &lt;\/goals&gt;\r\n                        &lt;configuration&gt;\r\n                            &lt;sourceDirs&gt;\r\n                                &lt;sourceDir&gt;${project.basedir}\/src\/test\/kotlin&lt;\/sourceDir&gt;\r\n                                &lt;sourceDir&gt;${project.basedir}\/src\/test\/java&lt;\/sourceDir&gt;\r\n                            &lt;\/sourceDirs&gt;\r\n                        &lt;\/configuration&gt;\r\n                    &lt;\/execution&gt;\r\n                &lt;\/executions&gt;\r\n            &lt;\/plugin&gt;\r\n            &lt;plugin&gt;\r\n                &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\r\n                &lt;artifactId&gt;maven-compiler-plugin&lt;\/artifactId&gt;\r\n                &lt;version&gt;3.6.1&lt;\/version&gt;\r\n                &lt;configuration&gt;\r\n                    &lt;source&gt;1.8&lt;\/source&gt;\r\n                    &lt;target&gt;1.8&lt;\/target&gt;\r\n                &lt;\/configuration&gt;\r\n                &lt;executions&gt;\r\n                    &lt;execution&gt;\r\n                        &lt;id&gt;default-compile&lt;\/id&gt;\r\n                        &lt;phase&gt;none&lt;\/phase&gt;\r\n                    &lt;\/execution&gt;\r\n                    &lt;execution&gt;\r\n                        &lt;id&gt;default-testCompile&lt;\/id&gt;\r\n                        &lt;phase&gt;none&lt;\/phase&gt;\r\n                    &lt;\/execution&gt;\r\n                    &lt;execution&gt;\r\n                        &lt;id&gt;java-compile&lt;\/id&gt;\r\n                        &lt;phase&gt;compile&lt;\/phase&gt;\r\n                        &lt;goals&gt;\r\n                            &lt;goal&gt;compile&lt;\/goal&gt;\r\n                        &lt;\/goals&gt;\r\n                    &lt;\/execution&gt;\r\n                    &lt;execution&gt;\r\n                        &lt;id&gt;java-test-compile&lt;\/id&gt;\r\n                        &lt;phase&gt;test-compile&lt;\/phase&gt;\r\n                        &lt;goals&gt;\r\n                            &lt;goal&gt;testCompile&lt;\/goal&gt;\r\n                        &lt;\/goals&gt;\r\n                    &lt;\/execution&gt;\r\n                &lt;\/executions&gt;\r\n            &lt;\/plugin&gt;\r\n        &lt;\/plugins&gt;\r\n    &lt;\/build&gt;\r\n&lt;\/project&gt;<\/pre>\n<p>W tej konfiguracje wa\u017cne s\u0105 w\u0142a\u015bciwie dwie rzeczy:<\/p>\n<ol>\n<li>Pluginy do kompilacji Kotlina i Javy. Wydaj\u0119 mi si\u0119, \u017ce nie ma za bardzo co tutaj si\u0119 rozpisywa\u0107 \ud83d\ude42<\/li>\n<li>Kolejno\u015b\u0107 plugin\u00f3w. Plugin Kotlina powinien by\u0107 przed pluginem do kompilacji kodu Javy. Dzi\u0119ki temu w kodzie Javowym b\u0119dziemy mogli u\u017cywa\u0107 naszych klas Kotlinowych<\/li>\n<\/ol>\n<h3>Hello world!<\/h3>\n<p>I w ko\u0144cu! Pierwszy kawa\u0142ek kodu w Kotlinie!<\/p>\n<pre class=\"lang:default decode:true\">package pl.lantkowiak.plagdetector\r\n\r\n\/\/ definiujemy nasza klase\r\nclass HelloKotlin {\r\n    \/\/ oraz nasza metode, ktora sie z nami przywita\r\n    fun sayHello() {\r\n        println(\"Hello Kotlin!\");\r\n    }\r\n}\r\n\r\n\/\/ ponizsza metoda jest odpowiednikiem metody main w Javie\r\nfun main(args: Array&lt;String&gt;) {\r\n    \/\/ tworzymy nowa instancje naszej klasy, a nastepnie wywolujemy metode\r\n    \/\/ warto zwrocic uwage, ze nowa instance tworzymy bez uzycia 'new'\r\n    HelloKotlin().sayHello()\r\n}<\/pre>\n<p>Po uruchomieniu powy\u017cszego kodu, tak jak mo\u017cna si\u0119 \u0142atwo domy\u015bli\u0107, otrzymujemy:<\/p>\n<pre class=\"lang:default decode:true \">Hello Kotlin!<\/pre>\n<h3>Kilka s\u0142\u00f3w na koniec<\/h3>\n<p>Dzisiaj w wpisie pokaza\u0142em szkielet mojej aplikacji. Uda\u0142o mi si\u0119 skonfigurowa\u0107 mavena, tak aby kompilowa\u0142 kody napisane zar\u00f3wno w j\u0119zyku Java, jak i w Kotlnie. Napisa\u0142em r\u00f3wnie\u017c pierwszy kod w Kotlinie, kt\u00f3ry si\u0119 \u0142adnie przywita\u0142 \ud83d\ude09<\/p>\n<p>W nast\u0119pnych wpisach b\u0119d\u0119 pokazywa\u0142 swoje kolejne zmagania z Kotlinem, przy rozwijaniu plag-detectora \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>W ko\u0144cu pora na kodowanie! Po kilku wpisach teoretycznych na temat mojej aplikacji przysz\u0142a pora, \u017ceby napisa\u0107 pierwsze linijki w Kotlinie! Postaram si\u0119 od razu przygotowa\u0107 projekt tak,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":291,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,20,19],"tags":[],"class_list":["post-290","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dsp2017","category-kotlin","category-plagdetector"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Hello Kotlin! - Lukasz Antkowiak&#039;s blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/04\/07\/hello-kotlin\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Hello Kotlin! - Lukasz Antkowiak&#039;s blog\" \/>\n<meta property=\"og:description\" content=\"W ko\u0144cu pora na kodowanie! Po kilku wpisach teoretycznych na temat mojej aplikacji przysz\u0142a pora, \u017ceby napisa\u0107 pierwsze linijki w Kotlinie! Postaram si\u0119 od razu przygotowa\u0107 projekt tak,...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/04\/07\/hello-kotlin\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukasz Antkowiak&#039;s blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-07T21:12:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-04-09T19:03:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.lantkowiak.pl\/wp-content\/uploads\/2017\/04\/kotlin.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"700\" \/>\n\t<meta property=\"og:image:height\" content=\"466\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"\u0141ukasz Antkowiak\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u0141ukasz Antkowiak\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minuty\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/04\/07\/hello-kotlin\/\",\"url\":\"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/04\/07\/hello-kotlin\/\",\"name\":\"Hello Kotlin! - Lukasz Antkowiak&#039;s blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.lantkowiak.pl\/#website\"},\"datePublished\":\"2017-04-07T21:12:09+00:00\",\"dateModified\":\"2017-04-09T19:03:22+00:00\",\"author\":{\"@id\":\"https:\/\/blog.lantkowiak.pl\/#\/schema\/person\/009bfc4db220c225786c59b1748ba1e6\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/04\/07\/hello-kotlin\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/04\/07\/hello-kotlin\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/04\/07\/hello-kotlin\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/blog.lantkowiak.pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Hello Kotlin!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.lantkowiak.pl\/#website\",\"url\":\"https:\/\/blog.lantkowiak.pl\/\",\"name\":\"Lukasz Antkowiak&#039;s blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.lantkowiak.pl\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.lantkowiak.pl\/#\/schema\/person\/009bfc4db220c225786c59b1748ba1e6\",\"name\":\"\u0141ukasz Antkowiak\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/blog.lantkowiak.pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e18e2bfe319da9b5757cf7f7ae1bfecf?s=96&d=monsterid&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e18e2bfe319da9b5757cf7f7ae1bfecf?s=96&d=monsterid&r=g\",\"caption\":\"\u0141ukasz Antkowiak\"},\"description\":\"dd\",\"url\":\"https:\/\/blog.lantkowiak.pl\/index.php\/author\/antek\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Hello Kotlin! - Lukasz Antkowiak&#039;s blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/04\/07\/hello-kotlin\/","og_locale":"pl_PL","og_type":"article","og_title":"Hello Kotlin! - Lukasz Antkowiak&#039;s blog","og_description":"W ko\u0144cu pora na kodowanie! Po kilku wpisach teoretycznych na temat mojej aplikacji przysz\u0142a pora, \u017ceby napisa\u0107 pierwsze linijki w Kotlinie! Postaram si\u0119 od razu przygotowa\u0107 projekt tak,...","og_url":"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/04\/07\/hello-kotlin\/","og_site_name":"Lukasz Antkowiak&#039;s blog","article_published_time":"2017-04-07T21:12:09+00:00","article_modified_time":"2017-04-09T19:03:22+00:00","og_image":[{"width":700,"height":466,"url":"https:\/\/blog.lantkowiak.pl\/wp-content\/uploads\/2017\/04\/kotlin.jpg","type":"image\/jpeg"}],"author":"\u0141ukasz Antkowiak","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"\u0141ukasz Antkowiak","Szacowany czas czytania":"4 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/04\/07\/hello-kotlin\/","url":"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/04\/07\/hello-kotlin\/","name":"Hello Kotlin! - Lukasz Antkowiak&#039;s blog","isPartOf":{"@id":"https:\/\/blog.lantkowiak.pl\/#website"},"datePublished":"2017-04-07T21:12:09+00:00","dateModified":"2017-04-09T19:03:22+00:00","author":{"@id":"https:\/\/blog.lantkowiak.pl\/#\/schema\/person\/009bfc4db220c225786c59b1748ba1e6"},"breadcrumb":{"@id":"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/04\/07\/hello-kotlin\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.lantkowiak.pl\/index.php\/2017\/04\/07\/hello-kotlin\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/04\/07\/hello-kotlin\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/blog.lantkowiak.pl\/"},{"@type":"ListItem","position":2,"name":"Hello Kotlin!"}]},{"@type":"WebSite","@id":"https:\/\/blog.lantkowiak.pl\/#website","url":"https:\/\/blog.lantkowiak.pl\/","name":"Lukasz Antkowiak&#039;s blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.lantkowiak.pl\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pl-PL"},{"@type":"Person","@id":"https:\/\/blog.lantkowiak.pl\/#\/schema\/person\/009bfc4db220c225786c59b1748ba1e6","name":"\u0141ukasz Antkowiak","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/blog.lantkowiak.pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e18e2bfe319da9b5757cf7f7ae1bfecf?s=96&d=monsterid&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e18e2bfe319da9b5757cf7f7ae1bfecf?s=96&d=monsterid&r=g","caption":"\u0141ukasz Antkowiak"},"description":"dd","url":"https:\/\/blog.lantkowiak.pl\/index.php\/author\/antek\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/posts\/290","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/comments?post=290"}],"version-history":[{"count":4,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/posts\/290\/revisions"}],"predecessor-version":[{"id":295,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/posts\/290\/revisions\/295"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/media\/291"}],"wp:attachment":[{"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/media?parent=290"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/categories?post=290"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/tags?post=290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}