diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..7b9bb1c86 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,23 @@ +[*] +charset=utf-8 +end_of_line=lf +insert_final_newline=true +indent_style=space +indent_size=4 + +[*.kts] +indent_style=space +indent_size=2 + +[build.gradle.kts] +indent_style=space +indent_size=4 + +[*.ts] +indent_style=space +indent_size=2 + +[*.tsx] +indent_style=space +indent_size=2 + diff --git a/.travis.yml b/.travis.yml index 66204bf84..254ca49ae 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,10 @@ language: node_js -node_js: 6 +node_js: 7 addons: ssh_known_hosts: kotlin.link + apt: + packages: + - oracle-java8-installer before_script: - npm test - openssl aes-256-cbc -K $encrypted_83630750896a_key -iv $encrypted_83630750896a_iv -in deploy@morty.enc -out ~/.ssh/deploy@morty -d @@ -12,3 +15,9 @@ script: - bash ./deploy.sh cache: yarn: true + directories: + - $HOME/.gradle/caches/ + - $HOME/.gradle/wrapper/ +before_cache: + - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock + - rm -fr $HOME/.gradle/caches/*/plugin-resolution/ diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc deleted file mode 100644 index f66069261..000000000 --- a/CONTRIBUTING.adoc +++ /dev/null @@ -1,21 +0,0 @@ -= Contribution Guidelines - - -== Adding to this list - -This awesome list contains two views: standard github page view, and nice website with search. -You can contribute in this list in few ways: - -1. Create issue with you link. - easiest way, if you doesn't have a lot time or you can't install node.js for some reason. -2. Edit ./app/Kotlin.ts directly, and then run `npm install` and `npm run readme`. - For regular users of node.js. - -I really appreciate any of this ways, so please feel free to create issues, -instead of spending time figuring out of how to install node.js for example. - -Any links will be check for their value for Kotlin. - -*Happy contributing!* - -== How to update webpage? - -Travis CI automatically updates webpage on pushes to master. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..5d758f013 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,16 @@ +# Contribution Help + +## Adding to this list + +This awesome list contains two views: standard github README page view, and nice website with search. + +**To contribute** to both places you need: + +TODO: Move to scripts +Edit **[links/](./links/)category.kts** directly, and then run `./gradlew run`. + +*Happy contributing!* + +## How to update webpage? + +Build on Travis CI automatically updates webpage on pushes to master. diff --git a/README.dev b/README.dev deleted file mode 100644 index 5bf10e126..000000000 --- a/README.dev +++ /dev/null @@ -1,20 +0,0 @@ -npm start - run dev server -npm run stars - generate LinksWithStars.json from Kotlin.js with starts -npm run readme - generate `README.adoc` from Kotlin.js -npm run pack - build project and put builded project in dist folder -npm run rss - generates rss feed from articles in articles directory in dist directory -npm run build - contains stars, readme, rss and pack tasks - - -TODO: -- [ ] Push Notifications on Changes - https://serviceworke.rs/push-simple_demo.html -- [ ] Offline. -- [ ] Make RSS smaller (limit size), but keep full version for new users who wan't full history or make an archive version of RSS. -- [ ] Make language specific links (with lang auto-detection) (router). -- [ ] Add router to search. - -// required: https! -serviceworker-loader -var registerServiceWorker = require("serviceworker!./sw.js"); -registerServiceWorker({ scope: '/' }).then(success, error); -view-source:https://serviceworke.rs/offline-fallback/ diff --git a/README.md b/README.md index 4d06f5a9c..d43d88c6a 100644 --- a/README.md +++ b/README.md @@ -41,10 +41,6 @@ Here awesome badge for your project: * [Configuration](#libraries-frameworks-configuration) * [Graphics](#libraries-frameworks-graphics) -### [Kotlin JavaScript](#kotlin-javascript) -* [JavaScript](#kotlin-javascript-javascript) -* [Frontend](#kotlin-javascript-frontend) - ### [Projects](#projects) * [Web](#projects-web) * [Build tools](#projects-build-tools) @@ -60,6 +56,10 @@ Here awesome badge for your project: * [Extensions](#android-extensions) * [Tools](#android-tools) +### [Kotlin JavaScript](#kotlin-javascript) +* [JavaScript](#kotlin-javascript-javascript) +* [Frontend](#kotlin-javascript-frontend) + ### [Kotlin User Groups](#kotlin-user-groups) * [Europe](#kotlin-user-groups-europe) * [America](#kotlin-user-groups-america) @@ -92,10 +92,6 @@ Here awesome badge for your project: * [February 2013](#articles-blog-posts-february-2013) * [January 2013](#articles-blog-posts-january-2013) -### [Webinars](#webinars) -* [November 2015](#webinars-november-2015) -* [September 2015](#webinars-september-2015) - ### [Videos](#videos) * [December 2016](#videos-december-2016) * [November 2016](#videos-november-2016) @@ -118,12 +114,16 @@ Here awesome badge for your project: * [April 2016](#slides-april-2016) * [May 2015](#slides-may-2015) +### [Webinars](#webinars) +* [November 2015](#webinars-november-2015) +* [September 2015](#webinars-september-2015) + ## Links [Back ⇈](#links-category) ### Official Links [Back ⇈](#links-official-links-subcategory) * [JetBrains/kotlin](https://github.com/jetbrains/kotlin) * [Home Page](http://kotlinlang.org/) * [Language Reference](http://kotlinlang.org/docs/reference/) -* [Slack (5500+ users)](http://kotlinslackin.herokuapp.com/) +* [Slack (6200+ users)](http://kotlinslackin.herokuapp.com/) * [Public chat archive of Kotlin's Slack](http://kotlinlang.slackarchive.io/) * [Try Kotlin!](http://try.kotlinlang.org/) * [Blog](http://blog.jetbrains.com/kotlin/) @@ -168,7 +168,7 @@ Here awesome badge for your project: * [sepatel/tekniq](https://github.com/sepatel/tekniq) - Full-feature HTTP DSL Framework, HTTP Client, JDBC DSL, Loading Cache and Configuration * [vert-x3/vertx-lang-kotlin](https://github.com/vert-x3/vertx-lang-kotlin/) - This module provides Kotlin language bindings including DSL and extension functions for vert.x 3 * [olegcherr/Aza-Kotlin-CSS](https://github.com/olegcherr/Aza-Kotlin-CSS) - Kotlin DSL for CSS -* [jooby/kotlin](http://jooby.org/doc/lang-kotlin): Jooby a scalable, fast and modular microframework. +* [jooby/kotlin](http://jooby.org/doc/lang-kotlin) - Kotlin idioms for Jooby microframework * [gimlet2/kottpd](https://github.com/gimlet2/kottpd) - REST framework in pure Kotlin, inspired by spark-java ### Tests [Back ⇈](#libraries-frameworks-tests-subcategory) @@ -186,8 +186,8 @@ Here awesome badge for your project: ### Dependency Injection [Back ⇈](#libraries-frameworks-dependency-injection-subcategory) * [SalomonBrys/Kodein](https://github.com/SalomonBrys/Kodein) - Painless Kotlin Dependency Injection . -* [kailan/kodeinject](https://github.com/kailan/kodeinject) - Constructor dependency injection for Kodein * [kohesive/injekt](https://github.com/kohesive/injekt) - (Deprecated, @see Kodein) Dependency Injection / Object Factory for Kotlin +* [kailan/kodeinject](https://github.com/kailan/kodeinject) - Constructor dependency injection for Kodein ### Functional Programming [Back ⇈](#libraries-frameworks-functional-programming-subcategory) * [MarioAriasC/funKTionale](https://github.com/MarioAriasC/funKTionale) - Functional constructs for Kotlin. @@ -303,24 +303,13 @@ Here awesome badge for your project: * [java-graphics/assimp](https://github.com/java-graphics/assimp) - Java Open Asset Import Library -## Kotlin JavaScript [Back ⇈](#kotlin-javascript-category) -### JavaScript [Back ⇈](#kotlin-javascript-javascript-subcategory) -* [andrewoma/reakt](https://github.com/andrewoma/reakt) - Reakt is a Kotlin wrapper for facebook's React library. -* [pixijs/pixi-native](https://github.com/pixijs/pixi-native) - The aim of this project is to provide a fast lightweight 2D library that works across all devices. -* [bashor/ts2kt](https://github.com/bashor/ts2kt) - Converter of TypeScript definition files to Kotlin declarations (stubs) -* [shafirov/klogging](https://github.com/shafirov/klogging) - Kotlin logging, both js and jvm. - -### Frontend [Back ⇈](#kotlin-javascript-frontend-subcategory) -* [olegcherr/Aza-Kotlin-CSS](https://github.com/olegcherr/Aza-Kotlin-CSS) - Kotlin DSL for CSS - - ## Projects [Back ⇈](#projects-category) ### Web [Back ⇈](#projects-web-subcategory) * [sdeleuze/spring-boot-kotlin-demo](https://github.com/sdeleuze/spring-boot-kotlin-demo) - Basic Spring Boot app in Kotlin. * [IRus/kotlin-dev-proxy](https://github.com/IRus/kotlin-dev-proxy) - Simple server for proxy requests and host static files written in Kotlin, Spark Java and Apache HttpClient. * [ratpack/example-ratpack-gradle-kotlin-app](https://github.com/ratpack/example-ratpack-gradle-kotlin-app) - An example of a Kotlin Ratpack app built with Gradle. * [mariomac/codebuilder](https://github.com/mariomac/codebuilder) - Demo app about asynchronous architectures for long-response-time web applications. -* [rocketraman/kotlin-web-hello-world](https://github.com/rocketraman/kotlin-web-hello-world) - This project shows how to do a web-based "Hello World!" with Kotlin in combination with various JVM-based web frameworks. +* [rocketraman/kotlin-web-hello-world](https://github.com/rocketraman/kotlin-web-hello-world) - This project shows how to do a web-based "Hello World!" with Kotlin in combination with various JVM - based web frameworks. * [ivanpopelyshev/vertx-facebook-messenger](https://github.com/ivanpopelyshev/vertx-facebook-messenger) - Seed project for facebook messenger bots. Vertx, Kotlin. * [corda/corda](https://github.com/corda/corda) - Corda is a distributed ledger platform designed to record, manage and automate legal agreements between business partners. * [spolnik/JAlgoArena](https://github.com/spolnik/JAlgoArena) - JAlgoArena is a highly scalable programming contest platform which you can host on own infrastructure. It allows to define new problems and solve them in Kotlin and Java. @@ -346,7 +335,7 @@ Here awesome badge for your project: * [wangjiegulu/KotlinAndroidSample](https://github.com/wangjiegulu/KotlinAndroidSample) - Android sample with kotlin. * [dodyg/Kotlin101](https://github.com/dodyg/Kotlin101) - 101 examples for Kotlin Programming language. * [dkandalov/kotlin-99](https://github.com/dkandalov/kotlin-99) - Solve 99 problems with Kotlin! -* [dkandalov/rosettacode-kotlin](https://github.com/dkandalov/rosettacode-kotlin) - Repository with source code from [RosettaCode](http://rosettacode.org/). +* [dkandalov/rosettacode-kotlin](https://github.com/dkandalov/rosettacode-kotlin) - Repository with source code from [RosettaCode](http://rosettacode.org/) * [sanity/pairAdjacentViolators](https://github.com/sanity/pairAdjacentViolators) - A Kotlin implementation of the Pair Adjacent Violators algorithm for isotonic regression. ### Idea Plugins [Back ⇈](#projects-idea-plugins-subcategory) @@ -360,8 +349,7 @@ Here awesome badge for your project: * [Kotlin/anko](https://github.com/Kotlin/anko) - Pleasant Android application development. * [JakeWharton/kotterknife](https://github.com/JakeWharton/kotterknife) - View injection library for Android. * [MarcinMoskala/ActivityStarter](https://github.com/MarcinMoskala/ActivityStarter) - Activity starter generator and arguments injection library for Android. -* [MarcinMoskala/KotlinPreferences](https://github.com/MarcinMoskala/KotlinPreferences) - Kotlin Android Library, that makes preference usage in Kotlin simple and fun. -* [MarcinMoskala/PreferenceHolder](https://github.com/MarcinMoskala/PreferenceHolder) - Kotlin Android Library, that makes preference usage in Kotlin simple and fun using object with fields binded to SharedPreferences. +* [MarcinMoskala/KotlinPreferences](https://github.com/MarcinMoskala/KotlinPreferences) - Kotlin Android Library, that makes preference usage simple and fun. * [nsk-mironov/kotlin-jetpack](https://github.com/nsk-mironov/kotlin-jetpack) - A collection of useful extension methods for Android. * [pawegio/KAndroid](https://github.com/pawegio/KAndroid) - Kotlin library for Android providing useful extensions to eliminate boilerplate code. * [chibatching/Kotpref](https://github.com/chibatching/Kotpref) - Android SharedPreference delegation for Kotlin. @@ -404,6 +392,17 @@ Here awesome badge for your project: * [kiruto/debug-bottle](https://github.com/kiruto/debug-bottle) - Debug Bottle is an Android runtime debug / develop tools written using kotlin language. +## Kotlin JavaScript [Back ⇈](#kotlin-javascript-category) +### JavaScript [Back ⇈](#kotlin-javascript-javascript-subcategory) +* [andrewoma/reakt](https://github.com/andrewoma/reakt) - Reakt is a Kotlin wrapper for facebook's React library. +* [pixijs/pixi-native](https://github.com/pixijs/pixi-native) - The aim of this project is to provide a fast lightweight 2D library that works across all devices. +* [bashor/ts2kt](https://github.com/bashor/ts2kt) - Converter of TypeScript definition files to Kotlin declarations (stubs) +* [shafirov/klogging](https://github.com/shafirov/klogging) - Kotlin logging, both js and jvm. + +### Frontend [Back ⇈](#kotlin-javascript-frontend-subcategory) +* [olegcherr/Aza-Kotlin-CSS](https://github.com/olegcherr/Aza-Kotlin-CSS) - Kotlin DSL for CSS + + ## Kotlin User Groups [Back ⇈](#kotlin-user-groups-category) ### Europe [Back ⇈](#kotlin-user-groups-europe-subcategory) * [Kotlin Developers in Manchester](http://www.meetup.com/Kotlin-Manchester/) - United Kingdom @@ -432,249 +431,253 @@ Here awesome badge for your project: ## Articles, Blog Posts [Back ⇈](#articles-blog-posts-category) ### January 2017 [Back ⇈](#articles-blog-posts-january-2017-subcategory) -* [I wrote my website in Kotlin](http://kotlin.link/articles/I-wrote-my-website-in-Kotlin.html) - Lewis Rhine -* [Introducing Kotlin support in Spring Framework 5.0](http://kotlin.link/articles/Introducing-Kotlin-support-in-Spring-Framework-5-0.html) - Sébastien Deleuze -* [How I built my first Kotlin-VertX-Hibernate stack](http://kotlin.link/articles/How-I-built-my-first-Kotlin-VertX-Hibernate-stack.html) - Jan Vladimir Mostert -* [Kanvas: generating a simple IDE from your ANTLR grammar](http://kotlin.link/articles/Kanvas-generating-a-simple-IDE-from-your-ANTLR-grammar.html) - Federico Tomassetti * [Why I prefer Kotlin](http://kotlin.link/articles/Why-I-prefer-Kotlin.html) - Graham Cox * [Leveraging TornadoFX to the fullest](http://kotlin.link/articles/Leveraging-TornadoFX-to-the-fullest.html) - Edvin Town +* [How I built my first Kotlin-VertX-Hibernate stack](http://kotlin.link/articles/How-I-built-my-first-Kotlin-VertX-Hibernate-stack.html) - Jan Vladimir Mostert +* [Kanvas: generating a simple IDE from your ANTLR grammar](http://kotlin.link/articles/Kanvas-generating-a-simple-IDE-from-your-ANTLR-grammar.html) - Federico Tomassetti +* [Introducing Kotlin support in Spring Framework 5.0](http://kotlin.link/articles/Introducing-Kotlin-support-in-Spring-Framework-5-0.html) - Sébastien Deleuze +* [I wrote my website in Kotlin](http://kotlin.link/articles/I-wrote-my-website-in-Kotlin.html) - Lewis Rhine ### December 2016 [Back ⇈](#articles-blog-posts-december-2016-subcategory) -* [Kotlin, rockin’ in production](http://kotlin.link/articles/Kotlin-rockin’-in-production.html) - Nabeel Ali Memon -* [Kotlin 1.0.6 is here!](http://kotlin.link/articles/Kotlin-1-0-6-is-here.html) - Yan Zhulanow -* [The Reactive Scrabble benchmarks](http://kotlin.link/articles/The-Reactive-Scrabble-benchmarks.html) - Dávid Karnok -* [Write a lightweight, cross-platform HTML5 desktop app with Kotlin](http://kotlin.link/articles/Write-a-lightweight-cross-platform-HTML5-desktop-app-with-Kotlin.html) - Lorenzo Angelini -* [Kotlin is cheating on me...](http://kotlin.link/articles/Kotlin-is-cheating-on-me-.html) - Andrea Franceschini -* [Concurrency Primitives in Kotlin](http://kotlin.link/articles/Concurrency-Primitives-in-Kotlin.html) - Egor Andreevici +* [Data Binding in Anko](http://kotlin.link/articles/Data-Binding-in-Anko.html) - Lewis Rhine +* [Upgrade your workflow with 0-installation kotlin scriptlets](http://kotlin.link/articles/Upgrade-your-workflow-with-0-installation-kotlin-scriptlets.html) - Holger Brandl +* [Kotlin: как сделать жизнь Java-разработчика легче?](http://kotlin.link/articles/Kotlin-Как-сделать-жизнь-Java-разработчика-легче.html) - Stanislav Sinitsky, Alexander Mikhalchenko +* [Kotlin: How to Make a Java Developer's Life Easier?](http://kotlin.link/articles/Kotlin-How-to-Make-a-Java-Developer-s-Life-Easier.html) - Stanislav Sinitsky, Alexander Mikhalchenko +* [Thinking Functionally](http://kotlin.link/articles/Thinking-Functionally.html) - Lewis Rhine +* [Building microservices with Kotlin and Spring Boot](http://kotlin.link/articles/Building-microservices-with-Kotlin-and-Spring-Boot.html) - Gabriel Francisco * [Kotlin 1.1-M04 is here!](http://kotlin.link/articles/Kotlin-1-1-M04-is-here.html) - Ilya Chernikov * [Kotlin in Practice with Spring Boot and Vaadin](http://kotlin.link/articles/Kotlin-in-Practice-with-Spring-Boot-and-Vaadin.html) - Philipp Hauer -* [Building microservices with Kotlin and Spring Boot](http://kotlin.link/articles/Building-microservices-with-Kotlin-and-Spring-Boot.html) - Gabriel Francisco -* [Thinking Functionally](http://kotlin.link/articles/Thinking-Functionally.html) - Lewis Rhine -* [Kotlin: How to Make a Java Developer's Life Easier?](http://kotlin.link/articles/Kotlin-How-to-Make-a-Java-Developer-s-Life-Easier.html) - Stanislav Sinitsky, Alexander Mikhalchenko -* [Upgrade your workflow with 0-installation kotlin scriptlets](http://kotlin.link/articles/Upgrade-your-workflow-with-0-installation-kotlin-scriptlets.html) - Holger Brandl -* [Data Binding in Anko](http://kotlin.link/articles/Data-Binding-in-Anko.html) - Lewis Rhine +* [Concurrency Primitives in Kotlin](http://kotlin.link/articles/Concurrency-Primitives-in-Kotlin.html) - Egor Andreevici +* [Write a lightweight, cross-platform HTML5 desktop app with Kotlin](http://kotlin.link/articles/Write-a-lightweight-cross-platform-HTML5-desktop-app-with-Kotlin.html) - Lorenzo Angelini +* [Kotlin is cheating on me...](http://kotlin.link/articles/Kotlin-is-cheating-on-me.html) - Andrea Franceschini +* [The Reactive Scrabble benchmarks](http://kotlin.link/articles/The-Reactive-Scrabble-benchmarks.html) - Dávid Karnok +* [Kotlin 1.0.6 is here!](http://kotlin.link/articles/Kotlin-1-0-6-is-here.html) - Yan Zhulanow +* [Kotlin без магии](http://kotlin.link/articles/Kotlin-без-магии.html) - Mike Gorunov +* [Kotlin, rockin’ in production](http://kotlin.link/articles/Kotlin-rockin’-in-production.html) - Nabeel Ali Memon ### November 2016 [Back ⇈](#articles-blog-posts-november-2016-subcategory) -* [Using the Kotlin Language with Apache Spark](http://kotlin.link/articles/Using-the-Kotlin-Language-with-Apache-Spark.html) - Thomas Nield -* [Solutions to multiple inheritance in Kotlin](http://kotlin.link/articles/Solutions-to-multiple-inheritance-in-Kotlin.html) - Renato Athaydes -* [Kotlin ternary operator](http://kotlin.link/articles/Kotlin-ternary-operator.html) - naixx -* [Non-volatile vs volatile captured refs by default](http://kotlin.link/articles/Non-volatile-vs-volatile-captured-refs-by-default.html) - Roman Elizarov -* [5 small things you probably don’t know about Kotlin](http://kotlin.link/articles/5-small-things-you-probably-don’t-know-about-Kotlin.html) - Piotr Ślesarew -* [Kotlin 1.1-M03 is here!](http://kotlin.link/articles/Kotlin-1-1-M03-is-here.html) - Ilya Chernikov -* [Exploring an Either Monad in Kotlin](http://kotlin.link/articles/Exploring-an-Either-Monad-in-Kotlin.html) - Alex Hart -* [App State as a tree](http://kotlin.link/articles/App-State-as-a-tree.html) - Lewis Rhine -* [Kotlin Configuration Scripts: An Introduction](http://kotlin.link/articles/Kotlin-Configuration-Scripts-An-Introduction.html) - Hadi Hariri +* [Our Experiment Building a Multiselection Solution for Android in Kotlin](http://kotlin.link/articles/Our-Experiment-Building-a-Multiselection-Solution-for-Android-in-Kotlin.html) - Artem Kholodnyi +* [Quick dive in Kotlin extensions](http://kotlin.link/articles/Quick-dive-in-Kotlin-extensions.html) - Piotr Ślesarew +* [Беглый взгляд на Async-Await в Android](http://kotlin.link/articles/Беглый-взгляд-на-Async-Await-в-Android.html) - Макс Ровкин +* [Kotlin 1.0.5 is here](http://kotlin.link/articles/Kotlin-1-0-5-is-here.html) - Dmitry Jemerov +* [Погружение в Async-Await в Android](http://kotlin.link/articles/Погружение-в-Async-Await-в-Android.html) - Макс Ровкин +* [Why You Must Try Kotlin For Android Development ?](http://kotlin.link/articles/Why-You-Must-Try-Kotlin-For-Android-Development.html) - Amit Shekhar +* [400% faster layouts with Anko](http://kotlin.link/articles/400-percent-faster-layouts-with-Anko.html) - Simon Vergauwen * [A clean status bar with Android System UI and QuickDemo](http://kotlin.link/articles/A-clean-status-bar-with-Android-System-UI-and-QuickDemo.html) - David Schreiber‑Ranner * [Getting started with Kotlin and third-party libraries Glide, Dagger 2, Retrofit 2, Realm, MVP and RxJava on Android](http://kotlin.link/articles/Getting-started-with-Kotlin-and-third-party-libraries-Glide-Dagger-2-Retrofit-2-Realm-MVP-and-RxJava-on-Android.html) - Yaroslav Polyakov -* [400% faster layouts with Anko](http://kotlin.link/articles/400-faster-layouts-with-Anko.html) - Simon Vergauwen -* [Why You Must Try Kotlin For Android Development ?](http://kotlin.link/articles/Why-You-Must-Try-Kotlin-For-Android-Development-.html) - Amit Shekhar -* [Kotlin 1.0.5 is here](http://kotlin.link/articles/Kotlin-1-0-5-is-here.html) - Dmitry Jemerov -* [Quick dive in Kotlin extensions](http://kotlin.link/articles/Quick-dive-in-Kotlin-extensions.html) - Piotr Ślesarew -* [Our Experiment Building a Multiselection Solution for Android in Kotlin](http://kotlin.link/articles/Our-Experiment-Building-a-Multiselection-Solution-for-Android-in-Kotlin.html) - Artem Kholodnyi +* [Kotlin Configuration Scripts: An Introduction](http://kotlin.link/articles/Kotlin-Configuration-Scripts-An-Introduction.html) - Hadi Hariri +* [App State as a tree](http://kotlin.link/articles/App-State-as-a-tree.html) - Lewis Rhine +* [Exploring an Either Monad in Kotlin](http://kotlin.link/articles/Exploring-an-Either-Monad-in-Kotlin.html) - Alex Hart +* [Kotlin 1.1-M03 is here!](http://kotlin.link/articles/Kotlin-1-1-M03-is-here.html) - Ilya Chernikov +* [5 small things you probably don’t know about Kotlin](http://kotlin.link/articles/5-small-things-you-probably-don’t-know-about-Kotlin.html) - Piotr Ślesarew +* [Non-volatile vs volatile captured refs by default](http://kotlin.link/articles/Non-volatile-vs-volatile-captured-refs-by-default.html) - Roman Elizarov +* [Solutions to multiple inheritance in Kotlin](http://kotlin.link/articles/Solutions-to-multiple-inheritance-in-Kotlin.html) - Renato Athaydes +* [Kotlin ternary operator](http://kotlin.link/articles/Kotlin-Ternary-Operator.html) - naixx +* [Using the Kotlin Language with Apache Spark](http://kotlin.link/articles/Using-the-Kotlin-Language-with-Apache-Spark.html) - Thomas Nield ### October 2016 [Back ⇈](#articles-blog-posts-october-2016-subcategory) -* [Easy DSL design with Kotlin](http://kotlin.link/articles/Easy-DSL-design-with-Kotlin.html) - Nicolas Fränkel +* [Mocking Kotlin with Mockito](http://kotlin.link/articles/Mocking-Kotlin-with-Mockito.html) - Hadi Hariri +* [Extension Functions Can Be Utility Functions](http://kotlin.link/articles/Extension-Functions-Can-Be-Utility-Functions.html) - Duncan McGregor +* [More Kotlin Extension Fun](http://kotlin.link/articles/More-Kotlin-Extension-Fun.html) - Duncan McGregor +* [PultusORM : Sqlite ORM for Kotlin](http://kotlin.link/articles/PultusORM-Sqlite-ORM-for-Kotlin.html) - Sakib Sami +* [Experimenting with “mutation testing” and Kotlin](http://kotlin.link/articles/Experimenting-with-mutation-testing-and-Kotlin.html) - Ian Clarke +* [Taking Kotlin for a ride](http://kotlin.link/articles/Taking-Kotlin-for-a-ride.html) - Hadi Tok +* [Extension functions for more consistent APIs](http://kotlin.link/articles/Extension-functions-for-more-consistent-APIs.html) - Nicolas Fränkel +* [A new hope for the JVM: Kotlin](http://kotlin.link/articles/A-new-hope-for-the-JVM-Kotlin.html) - Giacomo Bresciani +* [Swift vs Kotlin for real iOS/Android apps](http://kotlin.link/articles/Swift-vs-Kotlin-for-real-iOS-Android-apps.html) - Angel G. Olloqui +* [Functions as Data](http://kotlin.link/articles/Functions-as-Data.html) - Mark Galea +* [Kotlin 1.1-M02 is here!](http://kotlin.link/articles/Kotlin-1-1-M02-is-here.html) - Denis Zharkov +* [DSL builder in Kotlin](http://kotlin.link/articles/DSL-builder-in-Kotlin.html) - Piotr Ślesarew +* [The Road to Gradle Script Kotlin 1.0](http://kotlin.link/articles/The-Road-to-Gradle-Script-Kotlin-1-0.html) - Rodrigo B. de Oliveira +* [Kotlin: How to Make Your Java Code Base Cleaner and More Readable](http://kotlin.link/articles/Kotlin-How-to-Make-Your-Java-Code-Base-Cleaner-and-More-Readable.html) - Kenneth Ford +* [Composing functions in Kotlin with extensions and operators](http://kotlin.link/articles/Composing-functions-in-Kotlin-with-extensions-and-operators.html) - Daniele Conti * [Zero boilerplate delegation in Kotlin](http://kotlin.link/articles/Zero-boilerplate-delegation-in-Kotlin.html) - Piotr Ślesarew * [A Whirlwind Tour of the Kotlin Type Hierarchy](http://kotlin.link/articles/A-Whirlwind-Tour-of-the-Kotlin-Type-Hierarchy.html) - Nat Pryce * [Kotlin for Data Science](http://kotlin.link/articles/Kotlin-for-Data-Science.html) - Thomas Nield -* [Composing functions in Kotlin with extensions and operators](http://kotlin.link/articles/Composing-functions-in-Kotlin-with-extensions-and-operators.html) - Daniele Conti -* [Kotlin: How to Make Your Java Code Base Cleaner and More Readable](http://kotlin.link/articles/Kotlin-How-to-Make-Your-Java-Code-Base-Cleaner-and-More-Readable.html) - Kenneth Ford -* [The Road to Gradle Script Kotlin 1.0](http://kotlin.link/articles/The-Road-to-Gradle-Script-Kotlin-1-0.html) - Rodrigo B. de Oliveira -* [DSL builder in Kotlin](http://kotlin.link/articles/DSL-builder-in-Kotlin.html) - Piotr Ślesarew -* [Kotlin 1.1-M02 is here!](http://kotlin.link/articles/Kotlin-1-1-M02-is-here.html) - Denis Zharkov -* [Functions as Data](http://kotlin.link/articles/Functions-as-Data.html) - Mark Galea -* [Swift vs Kotlin for real iOS/Android apps](http://kotlin.link/articles/Swift-vs-Kotlin-for-real-iOS-Android-apps.html) - Angel G. Olloqui -* [A new hope for the JVM: Kotlin](http://kotlin.link/articles/A-new-hope-for-the-JVM-Kotlin.html) - Giacomo Bresciani -* [Experimenting with “mutation testing” and Kotlin](http://kotlin.link/articles/Experimenting-with-“mutation-testing”-and-Kotlin.html) - Ian Clarke -* [Taking Kotlin for a ride](http://kotlin.link/articles/Taking-Kotlin-for-a-ride.html) - Hadi Tok -* [Extension functions for more consistent APIs](http://kotlin.link/articles/Extension-functions-for-more-consistent-APIs.html) - Nicolas Fränkel -* [PultusORM : Sqlite ORM for Kotlin](http://kotlin.link/articles/PultusORM-Sqlite-ORM-for-Kotlin.html) - Sakib Sami -* [More Kotlin Extension Fun](http://kotlin.link/articles/More-Kotlin-Extension-Fun.html) - Duncan McGregor -* [Extension Functions Can Be Utility Functions](http://kotlin.link/articles/Extension-Functions-Can-Be-Utility-Functions.html) - Duncan McGregor -* [Mocking Kotlin with Mockito](http://kotlin.link/articles/Mocking-Kotlin-with-Mockito.html) - Hadi Hariri +* [Easy DSL design with Kotlin](http://kotlin.link/articles/Easy-DSL-design-with-Kotlin.html) - Nicolas Fränkel ### September 2016 [Back ⇈](#articles-blog-posts-september-2016-subcategory) -* [Kotlin in Production - What works, Whats broken](http://kotlin.link/articles/Kotlin-in-Production-What-works-Whats-broken.html) - DripStat -* [Why Kotlin is the next big thing for Java developers](http://kotlin.link/articles/Why-Kotlin-is-the-next-big-thing-for-Java-developers.html) - Nitin Y -* [An in-depth look at Kotlin’s initializers](http://kotlin.link/articles/An-in-depth-look-at-Kotlin’s-initializers.html) - AJ Alt -* [Kotlin 1.0.4 is here](http://kotlin.link/articles/Kotlin-1-0-4-is-here.html) - Dmitry Jemerov -* [The power of templating in a DSL](http://kotlin.link/articles/The-power-of-templating-in-a-DSL.html) - Eugene Petrenko -* [Kotlin NetBeans plugin beta is out!](http://kotlin.link/articles/Kotlin-NetBeans-plugin-beta-is-out.html) - Dmitry Jemerov -* [Kotlin vs Java: Compilation speed](http://kotlin.link/articles/Kotlin-vs-Java-Compilation-speed.html) - AJ Alt -* [Crafting Log4j Configuration DSL](http://kotlin.link/articles/Crafting-Log4j-Configuration-DSL.html) - Eugene Petrenko -* [A Developer’s Look at Kotlin](http://kotlin.link/articles/A-Developer’s-Look-at-Kotlin.html) - David Bolton -* [Building a compiler for your own language: validation](http://kotlin.link/articles/Building-a-compiler-for-your-own-language-validation.html) - Federico Tomassetti -* [Building DSL Instead of an IDE Plugin](http://kotlin.link/articles/Building-DSL-Instead-of-an-IDE-Plugin.html) - Eugene Petrenko * [Kotlin census: call to action](http://kotlin.link/articles/Kotlin-census-call-to-action.html) - Roman Belov +* [Building DSL Instead of an IDE Plugin](http://kotlin.link/articles/Building-DSL-Instead-of-an-IDE-Plugin.html) - Eugene Petrenko +* [Building a compiler for your own language: validation](http://kotlin.link/articles/Building-a-compiler-for-your-own-language-validation.html) - Federico Tomassetti +* [A Developer’s Look at Kotlin](http://kotlin.link/articles/A-Developer’s-Look-at-Kotlin.html) - David Bolton +* [Crafting Log4j Configuration DSL](http://kotlin.link/articles/Crafting-Log4j-Configuration-DSL.html) - Eugene Petrenko +* [Kotlin vs Java: Compilation speed](http://kotlin.link/articles/Kotlin-vs-Java-Compilation-speed.html) - AJ Alt +* [Kotlin NetBeans plugin beta is out!](http://kotlin.link/articles/Kotlin-NetBeans-plugin-beta-is-out.html) - Dmitry Jemerov +* [The power of templating in a DSL](http://kotlin.link/articles/The-power-of-templating-in-a-DSL.html) - Eugene Petrenko +* [Kotlin 1.0.4 is here](http://kotlin.link/articles/Kotlin-1-0-4-is-here.html) - Dmitry Jemerov +* [An in-depth look at Kotlin’s initializers](http://kotlin.link/articles/An-in-depth-look-at-Kotlin’s-initializers.html) - AJ Alt +* [Why Kotlin is the next big thing for Java developers](http://kotlin.link/articles/Why-Kotlin-is-the-next-big-thing-for-Java-developers.html) - Nitin Y +* [Kotlin in Production - What works, Whats broken](http://kotlin.link/articles/Kotlin-in-Production-What-works-Whats-broken.html) - DripStat ### August 2016 [Back ⇈](#articles-blog-posts-august-2016-subcategory) -* [Natural testing with Kotlin](http://kotlin.link/articles/Natural-testing-with-Kotlin.html) - Vardan Torosyan -* [Writing Kotlin Idiomatic Code](http://kotlin.link/articles/Writing-Kotlin-Idiomatic-Code.html) - Denis Trailin -* [Ten Kotlin Features To Boost Android Development ](http://kotlin.link/articles/Ten-Kotlin-Features-To-Boost-Android-Development.html) - Ivan Kušt -* [Getting started with Kotlin in Android development](http://kotlin.link/articles/Getting-started-with-Kotlin-in-Android-development.html) - Dmitry Chyrta -* [Kotlin: val does not mean immutable, it just means readonly, yeah](http://kotlin.link/articles/Kotlin-val-does-not-mean-immutable-it-just-means-readonly-yeah.html) - Artem Zinnatullin -* [Improved Pattern Matching in Kotlin](http://kotlin.link/articles/Improved-Pattern-Matching-in-Kotlin.html) - Jacob Zimmerman -* [Scala vs Kotlin: inline and infix](http://kotlin.link/articles/Scala-vs-Kotlin-inline-and-infix.html) - Nicolas Fränkel -* [Decision Trees with Kotlin](http://kotlin.link/articles/Decision-Trees-with-Kotlin.html) - Mark Galea -* [Kotlin: The Good, The Bad, and The Ugly](http://kotlin.link/articles/Kotlin-The-Good-The-Bad-and-The-Ugly.html) - AJ Alt -* [The Next Language You Thought You Didn’t Need](http://kotlin.link/articles/The-Next-Language-You-Thought-You-Didn’t-Need.html) - Jay Dellinger -* [Logging in Kotlin & Android: AnkoLogger vs kotlin-logging](http://kotlin.link/articles/Logging-in-Kotlin-Android-AnkoLogger-vs-kotlin-logging.html) - osha1 -* [PaperParcel with Kotlin](http://kotlin.link/articles/PaperParcel-with-Kotlin.html) - Almond Joseph Mendoza +* [Calling on EAPers](http://kotlin.link/articles/Calling-on-EAPers.html) - Roman Belov +* [More readable tests with Kotlin](http://kotlin.link/articles/More-readable-tests-with-Kotlin.html) - Flavio +* [The Kobalt diaries: Parallel builds](http://kotlin.link/articles/The-Kobalt-diaries-Parallel-builds.html) - Cédric Beust * [Issues Faced With Kotlin During Android Development](http://kotlin.link/articles/Issues-Faced-With-Kotlin-During-Android-Development.html) - Elisha Lye +* [PaperParcel with Kotlin](http://kotlin.link/articles/PaperParcel-with-Kotlin.html) - Almond Joseph Mendoza * [Lessons from converting an app to 100% Kotlin](http://kotlin.link/articles/Lessons-from-converting-an-app-to-100-Kotlin.html) - AJ Alt -* [The Kobalt diaries: Parallel builds](http://kotlin.link/articles/The-Kobalt-diaries-Parallel-builds.html) - Cédric Beust -* [More readable tests with Kotlin](http://kotlin.link/articles/More-readable-tests-with-Kotlin.html) - Flavio -* [Calling on EAPers](http://kotlin.link/articles/Calling-on-EAPers.html) - Roman Belov +* [Logging in Kotlin & Android: AnkoLogger vs kotlin-logging](http://kotlin.link/articles/Logging-in-Kotlin-Android-AnkoLogger-vs-kotlin-logging.html) - osha1 +* [The Next Language You Thought You Didn’t Need](http://kotlin.link/articles/Kotlin-–-The-Next-Language-You-Thought-You-Didn’t-Need.html) - Jay Dellinger +* [Decision Trees with Kotlin](http://kotlin.link/articles/Decision-Trees-with-Kotlin.html) - Mark Galea +* [Kotlin: The Good, The Bad, and The Ugly](http://kotlin.link/articles/Kotlin-The-Good-The-Bad-and-The-Ugly.html) - AJ Alt +* [Scala vs Kotlin: inline and infix](http://kotlin.link/articles/Scala-vs-Kotlin-inline-and-infix.html) - Nicolas Fränkel +* [Improved Pattern Matching in Kotlin](http://kotlin.link/articles/Improved-Pattern-Matching-in-Kotlin.html) - Jacob Zimmerman +* [Kotlin: val does not mean immutable, it just means readonly, yeah](http://kotlin.link/articles/Kotlin-val-does-not-mean-immutable-it-just-means-readonly-yeah.html) - Artem Zinnatullin +* [Getting started with Kotlin in Android development](http://kotlin.link/articles/Getting-started-with-Kotlin-in-Android-development.html) - Dmitry Chyrta +* [Ten Kotlin Features To Boost Android Development ](http://kotlin.link/articles/Ten-Kotlin-Features-To-Boost-Android-Development.html) - Ivan Kušt +* [Natural testing with Kotlin](http://kotlin.link/articles/Natural-testing-with-Kotlin.html) - Vardan Torosyan +* [Writing Kotlin Idiomatic Code](http://kotlin.link/articles/Writing-Kotlin-Idiomatic-Code.html) - Denis Trailin ### July 2016 [Back ⇈](#articles-blog-posts-july-2016-subcategory) -* [KotlinLifeguard #1](http://kotlin.link/articles/KotlinLifeguard-1.html) - Daniel Gomez Rico -* [UI Testing: separating Assertions from Actions with Kotlin DSL](http://kotlin.link/articles/UI-Testing-separating-Assertions-from-Actions-with-Kotlin-DSL.html) - Artem Zinnatullin -* [JUnit 5 with Spring Boot (plus Kotlin)](http://kotlin.link/articles/JUnit-5-with-Spring-Boot-plus-Kotlin.html) - Mike Plummer -* [Things We've Learned During Coolcal Development in Kotlin](http://kotlin.link/articles/Things-We-ve-Learned-During-Coolcal-Development-in-Kotlin.html) - Przemek Dąbrowski -* [Scala vs Kotlin: Operator overloading](http://kotlin.link/articles/Scala-vs-Kotlin-Operator-overloading.html) - Nicolas Fränkel -* [First glimpse of Kotlin 1.1: Coroutines, Type aliases and more](http://kotlin.link/articles/First-glimpse-of-Kotlin-1-1-Coroutines-Type-aliases-and-more.html) - Andrey Breslav -* [Scala vs Kotlin: Pimp my library](http://kotlin.link/articles/Scala-vs-Kotlin-Pimp-my-library.html) - Nicolas Fränkel -* [Never say final: mocking Kotlin classes in unit tests](http://kotlin.link/articles/Never-say-final-mocking-Kotlin-classes-in-unit-tests.html) - Danny Preussler * [Data Driven Testing with Spek ](http://kotlin.link/articles/Data-Driven-Testing-with-Spek.html) - Konstantin Semenov +* [Never say final: mocking Kotlin classes in unit tests](http://kotlin.link/articles/Never-say-final-mocking-Kotlin-classes-in-unit-tests.html) - Danny Preussler +* [Scala vs Kotlin: Pimp my library](http://kotlin.link/articles/Scala-vs-Kotlin-Pimp-my-library.html) - Nicolas Fränkel +* [First glimpse of Kotlin 1.1: Coroutines, Type aliases and more](http://kotlin.link/articles/First-glimpse-of-Kotlin-1-1-Coroutines-Type-aliases-and-more.html) - Andrey Breslav +* [Scala vs Kotlin: Operator overloading](http://kotlin.link/articles/Scala-vs-Kotlin-Operator-overloading.html) - Nicolas Fränkel +* [Things We've Learned During Coolcal Development in Kotlin](http://kotlin.link/articles/Things-We-ve-Learned-During-Coolcal-Development-in-Kotlin.html) - Przemek Dąbrowski +* [JUnit 5 with Spring Boot (plus Kotlin)](http://kotlin.link/articles/JUnit-5-with-Spring-Boot-plus-Kotlin.html) - Mike Plummer +* [UI Testing: separating Assertions from Actions with Kotlin DSL](http://kotlin.link/articles/UI-Testing-separating-Assertions-from-Actions-with-Kotlin-DSL.html) - Artem Zinnatullin +* [KotlinLifeguard #1](http://kotlin.link/articles/KotlinLifeguard-1.html) - Daniel Gomez Rico ### June 2016 [Back ⇈](#articles-blog-posts-june-2016-subcategory) -* [Kotlin 1.0.3 Is Here!](http://kotlin.link/articles/Kotlin-1-0-3-Is-Here.html) - Roman Belov -* [How to get IDEA to detect kotlin generated sources using Gradle](http://kotlin.link/articles/How-to-get-IDEA-to-detect-kotlin-generated-sources-using-Gradle.html) - Nish Tahir -* [Ad-hoc polymorphism in Kotlin](http://kotlin.link/articles/Ad-hoc-polymorphism-in-Kotlin.html) - Cédric Beust -* [Kotlin null safety and its performance considerations -- part 1](http://kotlin.link/articles/Kotlin-null-safety-and-its-performance-considerations-part-1.html) - Konrad Kamiński -* [Kotlin Native](http://kotlin.link/articles/Kotlin-Native.html) - Mike Hearn -* [Kotlin Night in San Francisco Recordings](http://kotlin.link/articles/Kotlin-Night-in-San-Francisco-Recordings.html) - Roman Belov -* [News from KotlinTest](http://kotlin.link/articles/News-from-KotlinTest.html) - medium -* [Meet the Kotlin Team at Gradle Summit](http://kotlin.link/articles/Meet-the-Kotlin-Team-at-Gradle-Summit.html) - Dmitry Jemerov -* [Архитектор Kotlin: «Язык программирования — рабочий инструмент. Если никогда их не менять, можно отстать от жизни»](http://kotlin.link/articles/Архитектор-Kotlin-Язык-программирования-—-рабочий-инструмент-Если-никогда-их-не-менять-можно-отстать-от-жизни.html) - yankoits -* [Kotlin 1.0.3 EAP](http://kotlin.link/articles/Kotlin-1-0-3-EAP.html) - Pavel Talanov -* [When Kotlin met Gradle](http://kotlin.link/articles/When-Kotlin-met-Gradle.html) - Gabriela Motroc -* [From Groovy to Kotlin](http://kotlin.link/articles/From-Groovy-to-Kotlin.html) - Dmitry Kandalov -* [Kotlin Eclipse Plugin 0.7 Is Here!](http://kotlin.link/articles/Kotlin-Eclipse-Plugin-0-7-Is-Here.html) - Nikolay Krasko -* [What’s in store for Kotlin this year](http://kotlin.link/articles/What’s-in-store-for-Kotlin-this-year.html) - Gabriela Motroc * [Where We Stand & What's Next for Kotlin](http://kotlin.link/articles/Where-We-Stand-What-s-Next-for-Kotlin.html) - Andrey Breslav +* [What’s in store for Kotlin this year](http://kotlin.link/articles/What’s-in-store-for-Kotlin-this-year.html) - Gabriela Motroc +* [Kotlin Eclipse Plugin 0.7 Is Here!](http://kotlin.link/articles/Kotlin-Eclipse-Plugin-0-7-Is-Here.html) - Nikolay Krasko +* [From Groovy to Kotlin](http://kotlin.link/articles/From-Groovy-to-Kotlin.html) - Dmitry Kandalov +* [When Kotlin met Gradle](http://kotlin.link/articles/When-Kotlin-met-Gradle.html) - Gabriela Motroc +* [Kotlin 1.0.3 EAP](http://kotlin.link/articles/Kotlin-1-0-3-EAP.html) - Pavel Talanov +* [Архитектор Kotlin: «Язык программирования — рабочий инструмент. Если никогда их не менять, можно отстать от жизни»](http://kotlin.link/articles/Архитектор-Kotlin-Язык-программирования-рабочий-инструмент.html) - yankoits +* [Meet the Kotlin Team at Gradle Summit](http://kotlin.link/articles/Meet-the-Kotlin-Team-at-Gradle-Summit.html) - Dmitry Jemerov +* [News from KotlinTest](http://kotlin.link/articles/News-from-KotlinTest.html) - medium +* [Kotlin Night in San Francisco Recordings](http://kotlin.link/articles/Kotlin-Night-in-San-Francisco-Recordings.html) - Roman Belov +* [Kotlin Native](http://kotlin.link/articles/Kotlin-Native.html) - Mike Hearn +* [Kotlin null safety and its performance considerations -- part 1](http://kotlin.link/articles/Kotlin-null-safety-and-its-performance-considerations-part-1.html) - Konrad Kamiński +* [Ad-hoc polymorphism in Kotlin](http://kotlin.link/articles/Ad-hoc-polymorphism-in-Kotlin.html) - Cédric Beust +* [How to get IDEA to detect kotlin generated sources using Gradle](http://kotlin.link/articles/How-to-get-IDEA-to-detect-kotlin-generated-sources-using-Gradle.html) - Nish Tahir +* [Kotlin 1.0.3 Is Here!](http://kotlin.link/articles/Kotlin-1-0-3-Is-Here.html) - Roman Belov ### May 2016 [Back ⇈](#articles-blog-posts-may-2016-subcategory) -* [Neural Networks in Kotlin (part 2)](http://kotlin.link/articles/Neural-Networks-in-Kotlin-part-2.html) - Cédric Beust -* [Some of my favorite Kotlin features (that we use a lot in Basecamp)](http://kotlin.link/articles/Some-of-my-favorite-Kotlin-features-that-we-use-a-lot-in-Basecamp.html) - Dan Kim -* [Neural Network in Kotlin](http://kotlin.link/articles/Neural-Network-in-Kotlin.html) - Cédric Beust -* [Kotlin, dragging java into the modern world](http://kotlin.link/articles/Kotlin-dragging-java-into-the-modern-world.html) - Tim Gray -* [Gradle Meets Kotlin](http://kotlin.link/articles/Gradle-Meets-Kotlin.html) - Hadi Hariri -* [Kotlin Meets Gradle](http://kotlin.link/articles/Kotlin-Meets-Gradle.html) - Chris Beams -* [Gradle Elevates the Build to First-Class Programming With Kotlin Language](http://kotlin.link/articles/Gradle-Elevates-the-Build-to-First-Class-Programming-With-Kotlin-Language.html) - BusinessWire -* [Kotlin 1.0.2 is Here](http://kotlin.link/articles/Kotlin-1-0-2-is-Here.html) - Dmitry Jemerov -* [Kosent](http://kotlin.link/articles/Kosent.html) - Duncan McGregor -* [Testing in Kotlin](http://kotlin.link/articles/Testing-in-Kotlin.html) - Stephen Samuel * [JMock and Kotlin](http://kotlin.link/articles/JMock-and-Kotlin.html) - Duncan McGregor +* [Testing in Kotlin](http://kotlin.link/articles/Testing-in-Kotlin.html) - Stephen Samuel +* [Kosent](http://kotlin.link/articles/Konsent.html) - Duncan McGregor +* [Kotlin 1.0.2 is Here](http://kotlin.link/articles/Kotlin-1-0-2-is-Here.html) - Dmitry Jemerov +* [Gradle Elevates the Build to First-Class Programming With Kotlin Language](http://kotlin.link/articles/Gradle-Elevates-the-Build-to-First-Class-Programming-With-Kotlin-Language.html) - BusinessWire +* [Kotlin Meets Gradle](http://kotlin.link/articles/Kotlin-Meets-Gradle.html) - Chris Beams +* [Gradle Meets Kotlin](http://kotlin.link/articles/Gradle-Meets-Kotlin.html) - Hadi Hariri +* [Kotlin, dragging java into the modern world](http://kotlin.link/articles/Kotlin-dragging-java-into-the-modern-world.html) - Tim Gray +* [Neural Network in Kotlin](http://kotlin.link/articles/Neural-Network-in-Kotlin.html) - Cédric Beust +* [Some of my favorite Kotlin features (that we use a lot in Basecamp)](http://kotlin.link/articles/Some-of-my-favorite-Kotlin-features-that-we-use-a-lot-in-Basecamp.html) - Dan Kim +* [Neural Networks in Kotlin (part 2)](http://kotlin.link/articles/Neural-Networks-in-Kotlin-part-2.html) - Cédric Beust ### April 2016 [Back ⇈](#articles-blog-posts-april-2016-subcategory) -* [Exercises in Kotlin: Part 5 - Classes](http://kotlin.link/articles/Exercises-in-Kotlin-Part-5-Classes.html) - Dhananjay Nene -* [Exercises in Kotlin: Part 4 - Control flows and return](http://kotlin.link/articles/Exercises-in-Kotlin-Part-4-Control-flows-and-return.html) - Dhananjay Nene -* [Writing Concise Code With Kotlin](http://kotlin.link/articles/Writing-Concise-Code-With-Kotlin.html) - Peter Sommerhoff -* [JDK7/8 features in Kotlin 1.0](http://kotlin.link/articles/JDK7-8-features-in-Kotlin-1-0.html) - Ilya Gorbunov -* [Exercises in Kotlin: Part 3 - Functions](http://kotlin.link/articles/Exercises-in-Kotlin-Part-3-Functions.html) - Dhananjay Nene -* [Kotlin + Android First Impressions](http://kotlin.link/articles/Kotlin-Android-First-Impressions.html) - Keyhole Software -* [Exercises in Kotlin: Part 2 - High level syntax and Variables](http://kotlin.link/articles/Exercises-in-Kotlin-Part-2-High-level-syntax-and-Variables.html) - Dhananjay Nene -* [Exercises in Kotlin: Part 1 - Getting Started](http://kotlin.link/articles/Exercises-in-Kotlin-Part-1-Getting-Started.html) - Dhananjay Nene -* [Code improvements with Kotlin](http://kotlin.link/articles/Code-improvements-with-Kotlin.html) - Nicolas Frankel -* [Performance comparison - building Android UI with code (Anko) vs XML Layout.](http://kotlin.link/articles/Performance-comparison-building-Android-UI-with-code-Anko-vs-XML-Layout.html) - Andrew Drobyazko -* [Few thoughts about Kotlin and why I like it so much](http://kotlin.link/articles/Few-thoughts-about-Kotlin-and-why-I-like-it-so-much.html) - Dhananjay Nene +* [Experimental: Kotlin and mutation testing](http://kotlin.link/articles/Experimental-Kotlin-and-mutation-testing.html) - Nicolas Frankel +* [Exploring Delegation in Kotlin](http://kotlin.link/articles/Exploring-Delegation-in-Kotlin.html) - @codemonkeyism +* [Kotlin’s killer features](http://kotlin.link/articles/Kotlin’s-killer-features.html) - Jasper Sprengers +* [Kotlin: Practical Experience](http://kotlin.link/articles/Kotlin-Practical-Experience.html) - Allen Wallis +* [Kotlin Digest 2016.Q1](http://kotlin.link/articles/Kotlin-Digest-2016-Q1.html) - Roman Belov +* [Android And Kotlin](http://kotlin.link/articles/Android-And-Kotlin.html) - Bartosz Kosarzycki +* [The Kobalt diaries: Automatic Android SDK management](http://kotlin.link/articles/The-Kobalt-diaries-Automatic-Android-SDK-management.html) - Cédric Beust +* [Keddit — Part 7: Infinite Scroll: Higher-Order functions & Lambdas](http://kotlin.link/articles/Keddit-Part-7-Infinite-Scroll-Higher-Order-functions-and-Lambdas.html) - Juan Ignacio Saravia +* [Making Android Development Easier](http://kotlin.link/articles/Making-Android-Development-Easier.html) - Maan Najjar * [Kotlin for Scala Developers](http://kotlin.link/articles/Kotlin-for-Scala-Developers.html) - Stephen Samuel * [Kotlin Post-1.0 Roadmap](http://kotlin.link/articles/Kotlin-Post-1-0-Roadmap.html) - Dmitry Jemerov -* [Making Android Development Easier](http://kotlin.link/articles/Making-Android-Development-Easier.html) - Maan Najjar -* [Keddit — Part 7: Infinite Scroll: Higher-Order functions & Lambdas](http://kotlin.link/articles/Keddit — Part-7-Infinite-Scroll-Higher-Order-functions-Lambdas.html) - Juan Ignacio Saravia -* [The Kobalt diaries: Automatic Android SDK management](http://kotlin.link/articles/The-Kobalt-diaries-Automatic-Android-SDK-management.html) - Cédric Beust -* [Android And Kotlin](http://kotlin.link/articles/Android-And-Kotlin.html) - Bartosz Kosarzycki -* [Kotlin Digest 2016.Q1](http://kotlin.link/articles/Kotlin-Digest-2016-Q1.html) - Roman Belov -* [Kotlin: Practical Experience](http://kotlin.link/articles/Kotlin-Practical-Experience.html) - Allen Wallis -* [Kotlin’s killer features](http://kotlin.link/articles/Kotlin’s-killer-features.html) - Jasper Sprengers -* [Exploring Delegation in Kotlin](http://kotlin.link/articles/Exploring-Delegation-in-Kotlin.html) - @codemonkeyism -* [Experimental: Kotlin and mutation testing](http://kotlin.link/articles/Experimental-Kotlin-and-mutation-testing.html) - Nicolas Frankel +* [Few thoughts about Kotlin and why I like it so much](http://kotlin.link/articles/Few-thoughts-about-Kotlin-and-why-I-like-it-so-much.html) - Dhananjay Nene +* [Performance comparison - building Android UI with code (Anko) vs XML Layout.](http://kotlin.link/articles/Performance-comparison-building-Android-UI-with-code-Anko-vs-XML-Layout.html) - Andrew Drobyazko +* [Code improvements with Kotlin](http://kotlin.link/articles/Code-improvements-with-Kotlin.html) - Nicolas Frankel +* [Exercises in Kotlin: Part 1 - Getting Started](http://kotlin.link/articles/Exercises-in-Kotlin-Part-1-Getting-Started.html) - Dhananjay Nene +* [Exercises in Kotlin: Part 2 - High level syntax and Variables](http://kotlin.link/articles/Exercises-in-Kotlin-Part-2-High-level-syntax-and-Variables.html) - Dhananjay Nene +* [Kotlin + Android First Impressions](http://kotlin.link/articles/Kotlin-Android-First-Impressions.html) - Keyhole Software +* [Exercises in Kotlin: Part 3 - Functions](http://kotlin.link/articles/Exercises-in-Kotlin-Part-3-Functions.html) - Dhananjay Nene +* [JDK7/8 features in Kotlin 1.0](http://kotlin.link/articles/JDK7-8-features-in-Kotlin-1-0.html) - Ilya Gorbunov +* [Writing Concise Code With Kotlin](http://kotlin.link/articles/Writing-Concise-Code-With-Kotlin.html) - Peter Sommerhoff +* [Exercises in Kotlin: Part 4 - Control flows and return](http://kotlin.link/articles/Exercises-in-Kotlin-Part-4-Control-flows-and-return.html) - Dhananjay Nene +* [Exercises in Kotlin: Part 5 - Classes](http://kotlin.link/articles/Exercises-in-Kotlin-Part-5-Classes.html) - Dhananjay Nene ### March 2016 [Back ⇈](#articles-blog-posts-march-2016-subcategory) -* [10 Features I Wish Java Would Steal From the Kotlin Language](http://kotlin.link/articles/10-Features-I-Wish-Java-Would-Steal-From-the-Kotlin-Language.html) - Lukas Eder -* [Ubuntu Make 16.03 Released With Eclipse JEE And IntelliJ IDEA EAP Support, More](http://kotlin.link/articles/Ubuntu-Make-16-03-Released-With-Eclipse-JEE-And-IntelliJ-IDEA-EAP-Support-More.html) - Alin Andrei -* [Kotlin’s Android Roadmap](http://kotlin.link/articles/Kotlin’s-Android-Roadmap.html) - Dmitry Jemerov -* [Rest API plumbing with kotlin](http://kotlin.link/articles/Rest-API-plumbing-with-kotlin.html) - Gaetan Zoritchak -* [Creating an AndroidWear watchface using Kotlin](http://kotlin.link/articles/Creating-an-AndroidWear-watchface-using-Kotlin.html) - Roberto Perez -* [Writing a RESTful backend using Kotlin and Spring Boot](http://kotlin.link/articles/Writing-a-RESTful-backend-using-Kotlin-and-Spring-Boot.html) - Dimitar Kotevski -* [How to Hot Deploy Java/Kotlin classes in Dev](http://kotlin.link/articles/How-to-Hot-Deploy-Java-Kotlin-classes-in-Dev.html) - Jan Vladimir Mostert -* [(RU) Андрей Бреслав и Дмитрий Жемеров о Kotlin 1.0 на jug.msk.ru](http://kotlin.link/articles/RU-Андрей-Бреслав-и-Дмитрий-Жемеров-о-Kotlin-1-0-на-jug-msk-ru.html) - Дмитрий Белобородов -* [A Geospatial Messenger with Kotlin, Spring Boot and PostgreSQL](http://kotlin.link/articles/A-Geospatial-Messenger-with-Kotlin-Spring-Boot-and-PostgreSQL.html) - Sébastien Deleuze -* [Algebraic Data Types In Kotlin](http://kotlin.link/articles/Algebraic-Data-Types-In-Kotlin.html) - Mike Gehard -* [Kotlin Month Post 4: Properties](http://kotlin.link/articles/Kotlin-Month-Post-4-Properties.html) - Jacob Zimmerman -* [Kotlin Educational Plugin](http://kotlin.link/articles/Kotlin-Educational-Plugin.html) - Roman Belov -* [Using Kotlin For Tests in Android](http://kotlin.link/articles/Using-Kotlin-For-Tests-in-Android.html) - Sergii Zhuk -* [Kotlin 1.0.1 is Here!](http://kotlin.link/articles/Kotlin-1-0-1-is-Here.html) - Andrey Breslav -* [Kotlin recipes for Android (I): OnGlobalLayoutListener](http://kotlin.link/articles/Kotlin-recipes-for-Android-I-OnGlobalLayoutListener.html) - Antonio Leiva -* [Kotlin : Retrofit + RxAndroid + Realm](http://kotlin.link/articles/Kotlin-Retrofit-RxAndroid-Realm.html) - Ahmed Rizwan -* [Kotlin & Android: A Brass Tacks Experiment Wrap-Up](http://kotlin.link/articles/Kotlin-Android-A-Brass-Tacks-Experiment-Wrap-Up.html) - Doug Stevenson -* [Kotlin Month Post 3: Safety](http://kotlin.link/articles/Kotlin-Month-Post-3-Safety.html) - Jacob Zimmerman -* [Feedback on the Josephus problem](http://kotlin.link/articles/Feedback-on-the-Josephus-problem.html) - Nicolas Frankel -* [(RU) SDCast #41: в гостях Андрей Бреслав, руководитель проекта Kotlin в компании JetBrains](http://kotlin.link/articles/RU-SDCast-41-в-гостях-Андрей-Бреслав-руководитель-проекта-Kotlin-в-компании-JetBrains.html) - Андрей Бреслав, Константин Буркалев -* [Why I don't want to use Kotlin for Android Development yet](http://kotlin.link/articles/Why-I-don-t-want-to-use-Kotlin-for-Android-Development-yet.html) - Artem Zinnatullin -* [Getting Started with Kotlin and Anko on Android](http://kotlin.link/articles/Getting-Started-with-Kotlin-and-Anko-on-Android.html) - Donn Felker +* [Developing on Android sucks a lot less with Kotlin](http://kotlin.link/articles/Developing-on-Android-sucks-a-lot-less-with-Kotlin.html) - Kuno Qing +* [Kotlin & Android: A Brass Tacks Experiment, Part 5](http://kotlin.link/articles/Kotlin-Android-A-Brass-Tacks-Experiment-Part-5.html) - Doug Stevenson +* [Kotlin для начинающих](http://kotlin.link/articles/Kotlin-для-начинающих.html) - @Devcolibri +* [Kotlin: a new JVM language you should try](http://kotlin.link/articles/Kotlin-a-new-JVM-language-you-should-try.html) - Rafal Gancarz +* [Видео со встречи JUG.ru с разработчиками Kotlin](http://kotlin.link/articles/Видео-со-встречи-JUG-ru-с-разработчиками-Kotlin.html) - JetBrains +* [Building a Kotlin project 1/2](http://kotlin.link/articles/Building-a-Kotlin-project-1-2.html) - Ciro Rizzo +* [Building a Kotlin project 2/2](http://kotlin.link/articles/Building-a-Kotlin-project-2-2.html) - Ciro Rizzo +* [Kotlin Month Post 2: Inheritance and Defaults](http://kotlin.link/articles/Kotlin-Month-Post-2-Inheritance-and-Defaults.html) - Jacob Zimmerman +* [Solving the Josephus problem in Kotlin](http://kotlin.link/articles/Solving-the-Josephus-problem-in-Kotlin.html) - Nicolas Franke * [A DSL Workbench with Gradle and Kotlin](http://kotlin.link/articles/A-DSL-Workbench-with-Gradle-and-Kotlin.html) - Eugene Petrenko * [Kotlin & Android: A Brass Tacks Experiment, Part 6](http://kotlin.link/articles/Kotlin-Android-A-Brass-Tacks-Experiment-Part-6.html) - Doug Stevenson -* [Solving the Josephus problem in Kotlin](http://kotlin.link/articles/Solving-the-Josephus-problem-in-Kotlin.html) - Nicolas Franke -* [Kotlin Month Post 2: Inheritance and Defaults](http://kotlin.link/articles/Kotlin-Month-Post-2-Inheritance-and-Defaults.html) - Jacob Zimmerman -* [Building a Kotlin project 2/2](http://kotlin.link/articles/Building-a-Kotlin-project-2-2.html) - Ciro Rizzo -* [Building a Kotlin project 1/2](http://kotlin.link/articles/Building-a-Kotlin-project-1-2.html) - Ciro Rizzo -* [(RU) Видео со встречи JUG.ru с разработчиками Kotlin](http://kotlin.link/articles/RU-Видео-со-встречи-JUG-ru-с-разработчиками-Kotlin.html) - JetBrains -* [Kotlin: a new JVM language you should try](http://kotlin.link/articles/Kotlin-a-new-JVM-language-you-should-try.html) - Rafal Gancarz -* [(RU) Kotlin для начинающих](http://kotlin.link/articles/RU-Kotlin-для-начинающих.html) - @Devcolibri -* [Kotlin & Android: A Brass Tacks Experiment, Part 5](http://kotlin.link/articles/Kotlin-Android-A-Brass-Tacks-Experiment-Part-5.html) - Doug Stevenson -* [Developing on Android sucks a lot less with Kotlin](http://kotlin.link/articles/Developing-on-Android-sucks-a-lot-less-with-Kotlin.html) - Kuno Qing +* [Getting Started with Kotlin and Anko on Android](http://kotlin.link/articles/Getting-Started-with-Kotlin-and-Anko-on-Android.html) - Donn Felker +* [SDCast #41: в гостях Андрей Бреслав, руководитель проекта Kotlin в компании JetBrains](http://kotlin.link/articles/SDCast-41-в-гостях-Андрей-Бреслав.html) - Андрей Бреслав, Константин Буркалев +* [Why I don't want to use Kotlin for Android Development yet](http://kotlin.link/articles/Why-I-don-t-want-to-use-Kotlin-for-Android-Development-yet.html) - Artem Zinnatullin +* [Feedback on the Josephus problem](http://kotlin.link/articles/Feedback-on-the-Jospehus-problem.html) - Nicolas Frankel +* [Kotlin Month Post 3: Safety](http://kotlin.link/articles/Kotlin-Month-Post-3-Safety.html) - Jacob Zimmerman +* [Kotlin & Android: A Brass Tacks Experiment Wrap-Up](http://kotlin.link/articles/Kotlin-Android-A-Brass-Tacks-Experiment-Wrap-Up.html) - Doug Stevenson +* [Kotlin : Retrofit + RxAndroid + Realm](http://kotlin.link/articles/Kotlin-Retrofit-RxAndroid-Realm.html) - Ahmed Rizwan +* [Kotlin recipes for Android (I): OnGlobalLayoutListener](http://kotlin.link/articles/Kotlin-recipes-for-Android-I-OnGlobalLayoutListener.html) - Antonio Leiva +* [Kotlin 1.0.1 is Here!](http://kotlin.link/articles/Kotlin-1-0-1-is-Here.html) - Andrey Breslav +* [Using Kotlin For Tests in Android](http://kotlin.link/articles/Using-Kotlin-For-Tests-in-Android.html) - Sergii Zhuk +* [Kotlin Educational Plugin](http://kotlin.link/articles/Kotlin-Educational-Plugin.html) - Roman Belov +* [Kotlin Month Post 4: Properties](http://kotlin.link/articles/Kotlin-Month-Post-4-Properties.html) - Jacob Zimmerman +* [Algebraic Data Types In Kotlin](http://kotlin.link/articles/Algebraic-Data-Types-In-Kotlin.html) - Mike Gehard +* [A Geospatial Messenger with Kotlin, Spring Boot and PostgreSQL](http://kotlin.link/articles/A-Geospatial-Messenger-with-Kotlin-Spring-Boot-and-PostgreSQL.html) - Sébastien Deleuze +* [Андрей Бреслав и Дмитрий Жемеров о Kotlin 1.0 на jug.msk.ru](http://kotlin.link/articles/Андрей-Бреслав-и-Дмитрий-Жемеров-о-Kotlin-1-0-на-jug-msk-ru.html) - Дмитрий Белобородов +* [How to Hot Deploy Java/Kotlin classes in Dev](http://kotlin.link/articles/How-to-Hot-Deploy-Java-Kotlin-classes-in-Dev.html) - Jan Vladimir Mostert +* [Writing a RESTful backend using Kotlin and Spring Boot](http://kotlin.link/articles/Writing-a-RESTful-backend-using-Kotlin-and-Spring-Boot.html) - Dimitar Kotevski +* [Creating an AndroidWear watchface using Kotlin](http://kotlin.link/articles/Creating-an-AndroidWear-watchface-using-Kotlin.html) - Roberto Perez +* [Rest API plumbing with kotlin](http://kotlin.link/articles/Rest-API-plumbing-with-kotlin.html) - Gaetan Zoritchak +* [Kotlin’s Android Roadmap](http://kotlin.link/articles/Kotlin’s-Android-Roadmap.html) - Dmitry Jemerov +* [Ubuntu Make 16.03 Released With Eclipse JEE And IntelliJ IDEA EAP Support, More](http://kotlin.link/articles/Ubuntu-Make-16-03-Released-With-Eclipse-JEE-And-IntelliJ-IDEA-EAP-Support-More.html) - Alin Andrei +* [10 Features I Wish Java Would Steal From the Kotlin Language](http://kotlin.link/articles/10-Features-I-Wish-Java-Would-Steal-From-the-Kotlin-Language.html) - Lukas Eder ### February 2016 [Back ⇈](#articles-blog-posts-february-2016-subcategory) -* [The Journey of a Spring Boot application from Java 8 to Kotlin, part 3: Data Classes](http://kotlin.link/articles/The-Journey-of-a-Spring-Boot-application-from-Java-8-to-Kotlin-part-3-Data-Classes.html) - Mike Gehard -* [Как себе выстрелить в ногу в Kotlin](http://kotlin.link/articles/Как-себе-выстрелить-в-ногу-в-Kotlin.html) - @ov7a -* [Kotlin and Ceylon](http://kotlin.link/articles/Kotlin-and-Ceylon.html) - Elvira -* [Kotlin Month Post 1: Assorted Features](http://kotlin.link/articles/Kotlin-Month-Post-1-Assorted-Features.html) - Jacob Zimmerman -* [Kotlin - 2 Years On](http://kotlin.link/articles/Kotlin-2-Years-On.html) - James Hughes -* [The Journey of a Spring Boot application from Java 8 to Kotlin, part 2: Configuration Classes](http://kotlin.link/articles/The-Journey-of-a-Spring-Boot-application-from-Java-8-to-Kotlin-part-2-Configuration-Classes.html) - Mike Gehard -* [An Introduction to Kotlin](http://kotlin.link/articles/An-Introduction-to-Kotlin.html) - Mike Plummer -* [Kotlin 1.0 is finally released!](http://kotlin.link/articles/Kotlin-1-0-is-finally-released.html) - Jacob Zimmerman -* [More Kotlin Features to Love](http://kotlin.link/articles/More-Kotlin-Features-to-Love.html) - Jim Baca -* [A Very Peculiar, but Possibly Cunning Kotlin Language Feature.](http://kotlin.link/articles/A-Very-Peculiar-but-Possibly-Cunning-Kotlin-Language-Feature.html) - Lukas Eder -* [Kotlin: Easily storing a list in SharedPreferences with Custom Accessors](http://kotlin.link/articles/Kotlin-Easily-storing-a-list-in-SharedPreferences-with-Custom-Accessors.html) - Dennis Lysenko -* [Kotlin — Love at first line](http://kotlin.link/articles/Kotlin — Love-at-first-line.html) - Dimitar Kotevski -* [(RU) Радио-Т 484](http://kotlin.link/articles/RU-Радио-Т-484.html) - Umputun, Bobuk, Gray, Ksenks -* [(RU) DevZen Podcast: Kotlin и Vulkan 1.0 — Episode 0080.](http://kotlin.link/articles/RU-DevZen-Podcast-Kotlin-и-Vulkan-1-0-—-Episode-0080.html) - DevZen Podcast -* [The Kobalt diaries: testing](http://kotlin.link/articles/The-Kobalt-diaries-testing.html) - Cédric Beust -* [(RU) Немного о Kotlin.](http://kotlin.link/articles/RU-Немного-о-Kotlin.html) - @fogone -* [Using Mockito for unit testing with Kotlin (1/x)](http://kotlin.link/articles/Using-Mockito-for-unit-testing-with-Kotlin-1-x.html) - MAKINGIANTS -* [Weekend resources for new Kotlin programmers](http://kotlin.link/articles/Weekend-resources-for-new-Kotlin-programmers.html) - Joey deVilla -* [(RU) Kotlin 1.0. Задай вопрос команде.](http://kotlin.link/articles/RU-Kotlin-1-0-Задай-вопрос-команде.html) - Роман Белов -* [Kotlin & Android: A Brass Tacks Experiment, Part 3.](http://kotlin.link/articles/Kotlin-Android-A-Brass-Tacks-Experiment-Part-3.html) - Doug Stevenson -* [Kotlin 1.0: The good, the bad and the evident.](http://kotlin.link/articles/Kotlin-1-0-The-good-the-bad-and-the-evident.html) - Gabriela Motroc -* [(RU) Релиз Kotlin 1.0, языка программирования для JVM и Android.](http://kotlin.link/articles/RU-Релиз-Kotlin-1-0-языка-программирования-для-JVM-и-Android.html) - Open Source -* [JVM Newcomer Kotlin 1.0 is GA](http://kotlin.link/articles/JVM-Newcomer-Kotlin-1-0-is-GA.html) - Lucy Carey -* [Developing Spring Boot applications with Kotlin.](http://kotlin.link/articles/Developing-Spring-Boot-applications-with-Kotlin.html) - Sébastien Deleuze -* [Kotlin 1.0 Released: Pragmatic Language for JVM and Android](http://kotlin.link/articles/Kotlin-1-0-Released-Pragmatic-Language-for-JVM-and-Android.html) - Andrey Breslav -* [The Journey of a Spring Boot application from Java 8 to Kotlin: The Application Class](http://kotlin.link/articles/The-Journey-of-a-Spring-Boot-application-from-Java-8-to-Kotlin-The-Application-Class.html) - Mike Gehard -* [(RU) Podcast Разбор Полетов: Episode 102 — Kotlin, тесты и здоровый сон.](http://kotlin.link/articles/RU-Podcast-Разбор-Полетов-Episode-102-—-Kotlin-тесты-и-здоровый-сон.html) - Dmitry Jemerov, Viktor Gamov, Alexey Abashev, Anton Arphipov, Dmitry Churbanov, Anton Arhipov -* [Kotlin & Android: A Brass Tacks Experiment, Part 4](http://kotlin.link/articles/Kotlin-Android-A-Brass-Tacks-Experiment-Part-4.html) - Doug Stevenson -* [Kotlin 1.0 Release Candidate is Out!](http://kotlin.link/articles/Kotlin-1-0-Release-Candidate-is-Out.html) - Andrey Breslav -* [Kotlin + RxJava = Functional Powerhouse](http://kotlin.link/articles/Kotlin-RxJava-Functional-Powerhouse.html) - Thomas Nield -* [Kotlin Coding](http://kotlin.link/articles/Kotlin-Coding.html) - Ciro Rizzo -* [10 Kotlin Tutorials for Beginners: Dive Into Kotlin Programming](http://kotlin.link/articles/10-Kotlin-Tutorials-for-Beginners-Dive-Into-Kotlin-Programming.html) - Peter Sommerhoff * [Kotlin & Android: A Brass Tacks Experiment, Part 2.](http://kotlin.link/articles/Kotlin-Android-A-Brass-Tacks-Experiment-Part-2.html) - Doug Stevenson * [Kotlin & Android: A Brass Tacks Experiment, Part 1.](http://kotlin.link/articles/Kotlin-Android-A-Brass-Tacks-Experiment-Part-1.html) - Doug Stevenson * [Scala vs Kotlin](http://kotlin.link/articles/Scala-vs-Kotlin.html) - Lionel +* [10 Kotlin Tutorials for Beginners: Dive Into Kotlin Programming](http://kotlin.link/articles/10-Kotlin-Tutorials-for-Beginners-Dive-Into-Kotlin-Programming.html) - Peter Sommerhoff +* [Kotlin Coding](http://kotlin.link/articles/Kotlin-Coding.html) - Ciro Rizzo +* [Podcast Разбор Полетов: Episode 102 — Kotlin, тесты и здоровый сон.](http://kotlin.link/articles/Podcast-Разбор-Полетов-Episode-102-Kotlin-тесты-и-здоровый-сон.html) - Dmitry Jemerov, Viktor Gamov, Alexey Abashev, Anton Arphipov, Dmitry Churbanov, Anton Arhipov +* [Kotlin 1.0 Release Candidate is Out!](http://kotlin.link/articles/Kotlin-1-0-Release-Candidate-is-Out.html) - Andrey Breslav +* [Kotlin + RxJava = Functional Powerhouse](http://kotlin.link/articles/Kotlin-RxJava-Functional-Powerhouse.html) - Thomas Nield +* [Kotlin & Android: A Brass Tacks Experiment, Part 4](http://kotlin.link/articles/Kotlin-Android-A-Brass-Tacks-Experiment-Part-4.html) - Doug Stevenson +* [The Journey of a Spring Boot application from Java 8 to Kotlin: The Application Class](http://kotlin.link/articles/The-Journey-of-a-Spring-Boot-application-from-Java-8-to-Kotlin-The-Application-Class.html) - Mike Gehard +* [Developing Spring Boot applications with Kotlin.](http://kotlin.link/articles/Developing-Spring-Boot-applications-with-Kotlin.html) - Sébastien Deleuze +* [Kotlin 1.0 Released: Pragmatic Language for JVM and Android](http://kotlin.link/articles/Kotlin-1-0-Released-Pragmatic-Language-for-JVM-and-Android.html) - Andrey Breslav +* [JVM Newcomer Kotlin 1.0 is GA](http://kotlin.link/articles/JVM-Newcomer-Kotlin-1-0-is-GA.html) - Lucy Carey +* [Релиз Kotlin 1.0, языка программирования для JVM и Android.](http://kotlin.link/articles/Релиз-Kotlin-1-0-языка-программирования-для-JVM-и-Android.html) - Open Source +* [Kotlin 1.0: The good, the bad and the evident.](http://kotlin.link/articles/Kotlin-1-0-The-good-the-bad-and-the-evident.html) - Gabriela Motroc +* [Kotlin & Android: A Brass Tacks Experiment, Part 3.](http://kotlin.link/articles/Kotlin-Android-A-Brass-Tacks-Experiment-Part-3.html) - Doug Stevenson +* [Kotlin 1.0. Задай вопрос команде.](http://kotlin.link/articles/Kotlin-1-0-Задай-вопрос-команде.html) - Роман Белов +* [DevZen Podcast: Kotlin и Vulkan 1.0 — Episode 0080.](http://kotlin.link/articles/DevZen-Podcast-Kotlin-и-Vulkan-1-0-Episode-0080.html) - DevZen Podcast +* [Радио-Т 484](http://kotlin.link/articles/Радио-Т-484.html) - Umputun, Bobuk, Gray, Ksenks +* [Немного о Kotlin.](http://kotlin.link/articles/Немного-о-Kotlin.html) - @fogone +* [Weekend resources for new Kotlin programmers](http://kotlin.link/articles/Weekend-resources-for-new-Kotlin-programmers.html) - Joey deVilla +* [Using Mockito for unit testing with Kotlin (1/x)](http://kotlin.link/articles/Using-Mockito-for-unit-testing-with-Kotlin-1x.html) - MAKINGIANTS +* [The Kobalt diaries: testing](http://kotlin.link/articles/The-Kobalt-diaries-testing.html) - Cédric Beust +* [Kotlin — Love at first line](http://kotlin.link/articles/Kotlin-Love-at-first-line.html) - Dimitar Kotevski +* [A Very Peculiar, but Possibly Cunning Kotlin Language Feature.](http://kotlin.link/articles/A-Very-Peculiar-but-Possibly-Cunning-Kotlin-Language-Feature.html) - Lukas Eder +* [More Kotlin Features to Love](http://kotlin.link/articles/More-Kotlin-Features-to-Love.html) - Jim Baca +* [Kotlin: Easily storing a list in SharedPreferences with Custom Accessors](http://kotlin.link/articles/Kotlin-Easily-storing-a-list-in-SharedPreferences-with-Custom-Accessors.html) - Dennis Lysenko +* [The Journey of a Spring Boot application from Java 8 to Kotlin, part 2: Configuration Classes](http://kotlin.link/articles/The-Journey-of-a-Spring-Boot-application-from-Java-8-to-Kotlin-part-2-Configuration-Classes.html) - Mike Gehard +* [Kotlin 1.0 is finally released!](http://kotlin.link/articles/Kotlin-1-0-is-finally-released.html) - Jacob Zimmerman +* [An Introduction to Kotlin](http://kotlin.link/articles/An-Introduction-to-Kotlin.html) - Mike Plummer +* [Kotlin - 2 Years On](http://kotlin.link/articles/Kotlin-2-Years-On.html) - James Hughes +* [Kotlin Month Post 1: Assorted Features](http://kotlin.link/articles/Kotlin-Month-Post-1-Assorted-Features.html) - Jacob Zimmerman +* [Kotlin and Ceylon](http://kotlin.link/articles/Kotlin-and-Ceylon.html) - Elvira +* [Как себе выстрелить в ногу в Kotlin](http://kotlin.link/articles/Как-себе-выстрелить-в-ногу-в-Kotlin.html) - @ov7a +* [The Journey of a Spring Boot application from Java 8 to Kotlin, part 3: Data Classes](http://kotlin.link/articles/The-Journey-of-a-Spring-Boot-application-from-Java-8-to-Kotlin-part-3-Data-Classes.html) - Mike Gehard ### January 2016 [Back ⇈](#articles-blog-posts-january-2016-subcategory) -* [KillerTask, the solution to AsyncTask implementation](http://kotlin.link/articles/KillerTask-the-solution-to-AsyncTask-implementation.html) - Fernando Ramirez -* [My Kotlin Adventure](http://kotlin.link/articles/My-Kotlin-Adventure.html) - Ciro Rizzo -* [Mimicking Kotlin Builders in Java and Python](http://kotlin.link/articles/Mimicking-Kotlin-Builders-in-Java-and-Python.html) - Jacob Zimmerman -* [Android development with Kotlin](http://kotlin.link/articles/Android-development-with-Kotlin.html) - Fernando Ramirez -* [Kotlin, the somewhat obscure modern Android-friendly programming language](http://kotlin.link/articles/Kotlin-the-somewhat-obscure-modern-Android-friendly-programming-language.html) - Brandon Kase -* [Playing with Spring Boot, Vaadin and Kotlin](http://kotlin.link/articles/Playing-with-Spring-Boot-Vaadin-and-Kotlin.html) - Nicolas Frankel * [Kotlin XML Binding](http://kotlin.link/articles/Kotlin-XML-Binding.html) - Eugene Petrenko +* [Playing with Spring Boot, Vaadin and Kotlin](http://kotlin.link/articles/Playing-with-Spring-Boot-Vaadin-and-Kotlin.html) - Nicolas Frankel +* [Kotlin, the somewhat obscure modern Android-friendly programming language](http://kotlin.link/articles/Kotlin-the-somewhat-obscure-modern-Android-friendly-programming-language.html) - Brandon Kase +* [Android development with Kotlin](http://kotlin.link/articles/Android-development-with-Kotlin.html) - Fernando Ramirez +* [Mimicking Kotlin Builders in Java and Python](http://kotlin.link/articles/Mimicking-Kotlin-Builders-in-Java-and-Python.html) - Jacob Zimmerman +* [My Kotlin Adventure](http://kotlin.link/articles/My-Kotlin-Adventure.html) - Ciro Rizzo +* [KillerTask, the solution to AsyncTask implementation](http://kotlin.link/articles/KillerTask-the-solution-to-AsyncTask-implementation.html) - Fernando Ramirez ### December 2015 [Back ⇈](#articles-blog-posts-december-2015-subcategory) -* [Early Impressions of Kotlin](http://kotlin.link/articles/Early-Impressions-of-Kotlin.html) - Nat Pryce * [Kotlin for Java Developers: 10 Features You Will Love About Kotlin](http://kotlin.link/articles/Kotlin-for-Java-Developers-10-Features-You-Will-Love-About-Kotlin.html) - Peter Sommerhoff +* [Early Impressions of Kotlin](http://kotlin.link/articles/Early-Impressions-of-Kotlin.html) - Nat Pryce ### November 2015 [Back ⇈](#articles-blog-posts-november-2015-subcategory) * [Setting up Kotlin with Android and tests](http://kotlin.link/articles/Setting-up-Kotlin-with-Android-and-tests.html) - Laura Kogler @@ -683,21 +686,21 @@ Here awesome badge for your project: * [Exploring the Kotlin standard library](http://kotlin.link/articles/Exploring-the-Kotlin-standard-library.html) - Cédric Beust ### September 2015 [Back ⇈](#articles-blog-posts-september-2015-subcategory) -* [Kotlin ❤ FP](http://kotlin.link/articles/Kotlin-❤-FP.html) - Mike Hearn +* [Kotlin ❤ FP](http://kotlin.link/articles/Kotlin-love-FP.html) - Mike Hearn ### August 2015 [Back ⇈](#articles-blog-posts-august-2015-subcategory) -* [Production Ready Kotlin](http://kotlin.link/articles/Production-Ready-Kotlin.html) - Jayson Minard * [Building APIs on the JVM Using Kotlin and Spark – Part 1](http://kotlin.link/articles/Building-APIs-on-the-JVM-Using-Kotlin-and-Spark-–-Part-1.html) - Travis Spencer +* [Production Ready Kotlin](http://kotlin.link/articles/Production-Ready-Kotlin.html) - Jayson Minard ### July 2015 [Back ⇈](#articles-blog-posts-july-2015-subcategory) -* [(RU) Без слайдов: интервью с Дмитрием Жемеровым из JetBrains](http://kotlin.link/articles/RU-Без-слайдов-интервью-с-Дмитрием-Жемеровым-из-JetBrains.html) - Алексей Фёдоров -* [Android + Kotlin = <3](http://kotlin.link/articles/Android-Kotlin-3.html) - Michael Sattler * [Why Kotlin is my next programming language](http://kotlin.link/articles/Why-Kotlin-is-my-next-programming-language.html) - Mike Hearn +* [Android + Kotlin = <3](http://kotlin.link/articles/Android-Kotlin-love.html) - Michael Sattler +* [Без слайдов: интервью с Дмитрием Жемеровым из JetBrains](http://kotlin.link/articles/Без-слайдов-интервью-с-Дмитрием-Жемеровым-из-JetBrains.html) - Алексей Фёдоров ### June 2015 [Back ⇈](#articles-blog-posts-june-2015-subcategory) -* [Exploring Kotlin](http://kotlin.link/articles/Exploring-Kotlin.html) - Peter Ledbrook +* [Quasar and Kotlin - a Powerful Match](http://kotlin.link/articles/Quasar-and-Kotlin-–-a-Powerful-Match.html) - Fabio * [RxAndroid and Kotlin (Part 1)](http://kotlin.link/articles/RxAndroid-and-Kotlin-Part-1.html) - Ahmed Rizwan -* [Quasar and Kotlin - a Powerful Match](http://kotlin.link/articles/Quasar-and-Kotlin-a-Powerful-Match.html) - Fabio +* [Exploring Kotlin](http://kotlin.link/articles/Exploring-Kotlin.html) - Peter Ledbrook ### December 2014 [Back ⇈](#articles-blog-posts-december-2014-subcategory) * [Non-trivial constructors in Kotlin](http://kotlin.link/articles/Non-trivial-constructors-in-Kotlin.html) - Alex Shabanov @@ -709,43 +712,39 @@ Here awesome badge for your project: * [Exploring the Kotlin Standard Library - Part 3](http://kotlin.link/articles/Exploring-the-Kotlin-Standard-Library-Part-3.html) - Jamie McCrindle ### January 2013 [Back ⇈](#articles-blog-posts-january-2013-subcategory) -* [Exploring the Kotlin Standard Library - Part 2](http://kotlin.link/articles/Exploring-the-Kotlin-Standard-Library-Part-2.html) - Jamie McCrindle -* [The Adventurous Developer’s Guide to JVM languages – Kotlin](http://kotlin.link/articles/The-Adventurous-Developer’s-Guide-to-JVM-languages-–-Kotlin.html) - Simon Maple * [Exploring the Kotlin Standard Library - Part 1](http://kotlin.link/articles/Exploring-the-Kotlin-Standard-Library-Part-1.html) - Jamie McCrindle - - -## Webinars [Back ⇈](#webinars-category) -### November 2015 [Back ⇈](#webinars-november-2015-subcategory) -* [Functional Programming with Kotlin](http://kotlin.link/articles/Functional-Programming-with-Kotlin.html) - Roman Belov - -### September 2015 [Back ⇈](#webinars-september-2015-subcategory) -* [Quasar: Efficient and Elegant Fibers, Channels and Actors](http://kotlin.link/articles/Quasar-Efficient-and-Elegant-Fibers-Channels-and-Actors.html) - Roman Belov +* [The Adventurous Developer’s Guide to JVM languages – Kotlin](http://kotlin.link/articles/The-Adventurous-Developer’s-Guide-to-JVM-languages-–-Kotlin.html) - Simon Maple +* [Exploring the Kotlin Standard Library - Part 2](http://kotlin.link/articles/Exploring-the-Kotlin-Standard-Library-Part-2.html) - Jamie McCrindle ## Videos [Back ⇈](#videos-category) ### December 2016 [Back ⇈](#videos-december-2016-subcategory) -* [Revisiting Types In Kotlin](http://kotlin.link/articles/Revisiting-Types-In-Kotlin.html) - Francisco Estevez +* [Taking Kotlin to production, Seriously](http://kotlin.link/articles/Taking-Kotlin-to-production-Seriously.html) - Haim Yadid * [Functional Programming in Kotlin with funKTionale (Video)](http://kotlin.link/articles/Functional-Programming-in-Kotlin-with-funKTionale-Video.html) - Mario Arias +* [Revisiting Types In Kotlin](http://kotlin.link/articles/Revisiting-Types-In-Kotlin.html) - Francisco Estevez +* [Costruiamo un treno in Kotlin](http://kotlin.link/articles/Costruiamo-un-treno-in-Kotlin.html) - Francesco Vasco +* [Kotlin: Будущие изменения и текущие мифы](http://kotlin.link/articles/Kotlin-Будущие-изменения-и-текущие-мифы.html) - Android в Лицах ### November 2016 [Back ⇈](#videos-november-2016-subcategory) -* [Developing a Geospatial Webservice with Kotlin and Spring Boot](http://kotlin.link/articles/Developing-a-Geospatial-Webservice-with-Kotlin-and-Spring-Boot.html) - Sébastien Deleuze -* [Code Swarm for Kotlin](http://kotlin.link/articles/Code-Swarm-for-Kotlin.html) - Landon Wilkins -* [Kotlin Night London](http://kotlin.link/articles/Kotlin-Night-London.html) - JetBrains -* [10 Kotlin Tricks in 10(ish) Minutes](http://kotlin.link/articles/10-Kotlin-Tricks-in-10-ish-Minutes.html) - Jake Wharton * [Kotlin in Real Projects](http://kotlin.link/articles/Kotlin-in-Real-Projects.html) - Anton Keks +* [10 Kotlin Tricks in 10(ish) Minutes](http://kotlin.link/articles/10-Kotlin-Tricks-in-10-ish-Minutes-by-Jake-Wharton.html) - Jake Wharton +* [Kotlin Night London](http://kotlin.link/articles/Kotlin-Night-London-Nov-2016.html) - JetBrains +* [Redux for Android using Kotlin](http://kotlin.link/articles/Redux-for-Android-using-Kotlin.html) - Nevin Chen +* [Code Swarm for Kotlin](http://kotlin.link/articles/Code-Swarm-for-kotlin.html) - Landon Wilkins +* [Developing a Geospatial Webservice with Kotlin and Spring Boot](http://kotlin.link/articles/Developing-a-Geospatial-Webservice-with-Kotlin-and-Spring-Boot.html) - Sébastien Deleuze ### October 2016 [Back ⇈](#videos-october-2016-subcategory) -* [Spring Boot and Kotlin, a match made in Heaven](http://kotlin.link/articles/Spring-Boot-and-Kotlin-a-match-made-in-Heaven.html) - Nicolas Frankel -* [Spring Tips: the Kotlin Programming Language](http://kotlin.link/articles/Spring-Tips-the-Kotlin-Programming-Language.html) - Josh Long -* [Christina Lee: Kotlin in Production](http://kotlin.link/articles/Christina-Lee-Kotlin-in-Production.html) - Android Dialogs * [Better Android Development with Kotlin and Gradle](http://kotlin.link/articles/Better-Android-Development-with-Kotlin-and-Gradle.html) - Ty Smith +* [Christina Lee: Kotlin in Production](http://kotlin.link/articles/Christina-Lee-Kotlin-in-Production.html) - Android Dialogs +* [Spring Tips: the Kotlin Programming Language](http://kotlin.link/articles/Spring-Tips-the-Kotlin-Programming-Language.html) - Josh Long +* [Spring Boot and Kotlin, a match made in Heaven](http://kotlin.link/articles/Spring-Boot-and-Kotlin-a-match-made-in-Heaven.html) - Nicolas Frankel ### September 2016 [Back ⇈](#videos-september-2016-subcategory) * [Kotlin - Ready for Production](http://kotlin.link/articles/Kotlin-Ready-for-Production.html) - Hadi Hariri ### August 2016 [Back ⇈](#videos-august-2016-subcategory) -* [Writing Gradle Build Scripts in Kotlin](http://kotlin.link/articles/Writing-Gradle-Build-Scripts-in-Kotlin.html) - Chris Beams & Rodrigo B. de Oliveiranp * [Andrey Breslav: Kotlin Coroutines, JVMLS 2016](http://kotlin.link/articles/Andrey-Breslav-Kotlin-Coroutines-JVMLS-2016.html) - Andrey Breslav +* [Writing Gradle Build Scripts in Kotlin](http://kotlin.link/articles/Writing-Gradle-Build-Scripts-in-Kotlin.html) - Chris Beams & Rodrigo B. de Oliveiranp ### May 2016 [Back ⇈](#videos-may-2016-subcategory) * [You can do Better with Kotlin](http://kotlin.link/articles/You-can-do-Better-with-Kotlin.html) - Svetlana Isakova @@ -754,7 +753,7 @@ Here awesome badge for your project: * [Type safe JavaFX CSS with TornadoFX](http://kotlin.link/articles/Type-safe-JavaFX-CSS-with-TornadoFX.html) - Edvin Syse ### March 2016 [Back ⇈](#videos-march-2016-subcategory) -* [(RU) Дмитрий Полищук - Kotlin + Android: практический ликбез](http://kotlin.link/articles/RU-Дмитрий-Полищук-Kotlin-Android-практический-ликбез.html) - Дмитрий Полищук +* [Дмитрий Полищук - Kotlin + Android: практический ликбез](http://kotlin.link/articles/Дмитрий-Полищук-Kotlin-Android-практический-ликбез.html) - Дмитрий Полищук ### January 2016 [Back ⇈](#videos-january-2016-subcategory) * [Fun with Kotlin](http://kotlin.link/articles/Fun-with-Kotlin.html) - Eder Bastos @@ -772,26 +771,34 @@ Here awesome badge for your project: * [GeeCON Prague 2014: Andrey Cheptsov - A Reactive and Type-safe Kotlin DSL for NoSQL and SQL](http://kotlin.link/articles/GeeCON-Prague-2014-Andrey-Cheptsov-A-Reactive-and-Type-safe-Kotlin-DSL-for-NoSQL-and-SQL.html) - Andrey Cheptsov ### September 2014 [Back ⇈](#videos-september-2014-subcategory) -* [Kotlin vs Java puzzlers](http://kotlin.link/articles/Kotlin-vs-Java-puzzlers.html) - Svetlana Isakova +* [Kotlin vs Java puzzlers](http://kotlin.link/articles/Kotlin-vs-Java-puzzlers-Svetlana-Isakova.html) - Svetlana Isakova ## Slides [Back ⇈](#slides-category) ### November 2016 [Back ⇈](#slides-november-2016-subcategory) -* [FRP + Kotlin](http://kotlin.link/articles/FRP-Kotlin.html) - Giorgio Natili * [Kotlin Lang](http://kotlin.link/articles/Kotlin-Lang.html) - Jemo Mgebrishvili +* [FRP + Kotlin](http://kotlin.link/articles/FRP-Kotlin.html) - Giorgio Natili ### September 2016 [Back ⇈](#slides-september-2016-subcategory) -* [Functional Programming in Kotlin with funKTionale](http://kotlin.link/articles/Functional-Programming-in-Kotlin-with-funKTionale.html) - Mario Arias * [Generating Kotlin Code for Better Refactorings, Tests, and IDE Support](http://kotlin.link/articles/Generating-Kotlin-Code-for-Better-Refactorings-Tests-and-IDE-Support.html) - Eugene Petrenko +* [Functional Programming in Kotlin with funKTionale](http://kotlin.link/articles/Functional-Programming-in-Kotlin-with-funKTionale.html) - Mario Arias ### April 2016 [Back ⇈](#slides-april-2016-subcategory) +* [Kotlin DSL: Anko](http://kotlin.link/articles/Link-Kotlin-DSL-Anko.html) - @maciekjanusz * [Kotlin + Android](http://kotlin.link/articles/Kotlin-Android.html) - Dmytro Danylyk -* [Kotlin DSL: Anko](http://kotlin.link/articles/Kotlin-DSL-Anko.html) - @maciekjanusz ### May 2015 [Back ⇈](#slides-may-2015-subcategory) * [Kotlin: New Hope in a Java 6 Wasteland](http://kotlin.link/articles/Kotlin-New-Hope-in-a-Java-6-Wasteland.html) - Michael Pardo +## Webinars [Back ⇈](#webinars-category) +### November 2015 [Back ⇈](#webinars-november-2015-subcategory) +* [Functional Programming with Kotlin](http://kotlin.link/articles/Functional-Programming-with-Kotlin.html) - Roman Belov + +### September 2015 [Back ⇈](#webinars-september-2015-subcategory) +* [Quasar: Efficient and Elegant Fibers, Channels and Actors](http://kotlin.link/articles/Quasar-Efficient-and-Elegant-Fibers-Channels-and-Actors.html) - Roman Belov + + --- diff --git a/app/File.ts b/app/File.ts deleted file mode 100644 index 6c22be65c..000000000 --- a/app/File.ts +++ /dev/null @@ -1,28 +0,0 @@ -import fs = require('fs'); - -export function write(file, data) { - return new Promise((resolve, reject) => { - fs.writeFile(file, data, error => { - if (error) { - console.log(`Error while writing file '${file}' to fs: ${JSON.stringify(error)}`); - reject(error); - } - - console.log(`The file '${file}' was saved!`); - resolve(file); - }); - }); -} - -export function writeSync(file, data) { - try { - fs.writeFileSync(file, data); - console.log(`The file '${file}' was saved!`); - } catch (exception) { - console.log(`Error while writing file '${file}' to fs: ${JSON.stringify(exception)}`); - } -} - -export function readSync(file) { - return fs.readFileSync(file, {encoding: 'UTF-8'}) -} diff --git a/app/Kotlin.ts b/app/Kotlin.ts deleted file mode 100644 index cd008a202..000000000 --- a/app/Kotlin.ts +++ /dev/null @@ -1,1426 +0,0 @@ -import {articlesLinks} from './rss/DataGenerator'; - -const data: Category[] = [{ - name: 'Links', - subcategories: [{ - name: 'Official Links', - links: [{ - name: 'JetBrains/kotlin', - href: 'https://github.com/jetbrains/kotlin', - type: 'github', - tags: ['kotlin'] - }, { - name: 'Home Page', - href: 'http://kotlinlang.org/' - }, { - name: 'Language Reference', - href: 'http://kotlinlang.org/docs/reference/' - }, { - name: 'Slack (6200+ users)', - href: 'http://kotlinslackin.herokuapp.com/' - }, { - name: 'Public chat archive of Kotlin\'s Slack', - href: 'http://kotlinlang.slackarchive.io/', - }, { - name: 'Try Kotlin!', - href: 'http://try.kotlinlang.org/' - }, { - name: 'Blog', - href: 'http://blog.jetbrains.com/kotlin/' - }, { - name: 'Issue Tracker', - href: 'https://youtrack.jetbrains.com/issues/KT' - }, { - name: 'Twitter', - href: 'https://twitter.com/kotlin' - }, { - name: 'Kotlin/KEEP', - desc: 'Kotlin Evolution and Enhancement Process', - href: 'https://github.com/Kotlin/KEEP', - type: 'github', - tags: ['keep', 'async', 'await'] - }] - }, { - name: 'Resources', - links: [{ - name: '/r/Kotlin', - href: 'https://www.reddit.com/r/Kotlin/' - }, { - name: 'Stackoverflow Documentation on Kotlin', - href: 'http://stackoverflow.com/documentation/kotlin/topics', - tags: ['documentation', 'stackoverflow'] - }, { - name: 'Quora Kotlin', - href: 'https://www.quora.com/topic/Kotlin', - whitelisted: true - }, { - name: 'Trending Kotlin on Github', - href: 'https://github.com/trending?l=kotlin' - }, { - name: 'Antonio Leiva - Android and any other monsters', - href: 'http://antonioleiva.com/', - type: 'blog' - }, { - name: 'LinkedIn: Kotlin Developers (Join!)', - href: 'https://www.linkedin.com/groups/7417237/profile', - whitelisted: true - }, { - name: 'Kotlin - Google+', - href: 'https://plus.google.com/communities/104597899765146112928' - }, { - name: 'From Java To Kotlin', - href: 'https://github.com/fabiomsr/from-java-to-kotlin' - }, { - name: 'dbacinski/Design-Patterns-In-Kotlin', - desc: 'Design Patterns implemented in Kotlin.', - href: 'https://github.com/dbacinski/Design-Patterns-In-Kotlin', - type: 'github', - tags: ['Behavioral Patterns', 'Creational Patterns', 'Structural Patterns'] - }, { - name: 'Kotlin Cheat Sheet', - href: 'https://speakerdeck.com/agiuliani/kotlin-cheat-sheet' - }] - }, { - name: 'Books and Courses', - links: [{ - name: 'Kotlin in Action - Dmitry Jemerov, Svetlana Isakova', - href: 'https://manning.com/books/kotlin-in-action' - }, { - name: 'Kotlin for Android Developers - Antonio Leiva', - href: 'https://leanpub.com/kotlin-for-android-developers' - }, { - name: 'Programming Kotlin - Stephen Samuel, Stefan Bocutiu', - href: 'https://www.packtpub.com/application-development/programming-kotlin' - }, { - name: 'Kotlin for Java Developers', - desc: '160-minute Android Course.', - href: 'https://teamtreehouse.com/library/kotlin-for-java-developers' - }, { - name: 'Kotlin Programming: Next Level Java Development', - desc: 'Learn coding in Kotlin from scratch!', - href: 'https://www.udemy.com/kotlin-course/' - }, { - name: 'Introduction to Kotlin Programming by Hadi Hariri', - desc: 'From Hello World to Interoperability with Java', - href: 'http://shop.oreilly.com/product/0636920052982.do' - }, { - name: 'Advanced Kotlin Programming', - desc: 'From Nested Functions to Asynchronous Programming', - href: 'http://shop.oreilly.com/product/0636920052999.do' - }] - }] -}, { - name: 'Libraries/Frameworks', - subcategories: [{ - name: 'Web', - links: [{ - name: 'Kotlin/ktor', - desc: 'Web backend framework for Kotlin.', - href: 'https://github.com/Kotlin/ktor', - type: 'github' - }, { - name: 'TinyMission/kara', - desc: 'Web framework written in Kotlin.', - href: 'https://github.com/TinyMission/kara', - type: 'github' - }, { - name: 'jean79/yested', - desc: 'A Kotlin framework for building web applications in Javascript.', - href: 'https://github.com/jean79/yested', - type: 'github' - }, { - name: 'hhariri/wasabi', - desc: 'An HTTP Framework built with Kotlin for the JVM.', - href: 'https://github.com/wasabifx/wasabi', - type: 'github', - tags: ['web'] - }, { - name: 'Kotlin/kotlinx.html', - desc: 'Kotlin DSL for HTML.', - href: 'https://github.com/Kotlin/kotlinx.html', - type: 'github', - tags: ['web', 'html'] - }, { - name: 'MarioAriasC/KotlinPrimavera', - desc: 'Spring support libraries for Kotlin.', - href: 'https://github.com/MarioAriasC/KotlinPrimavera', - type: 'github', - tags: ['spring'] - }, { - name: 'kohesive/kovert', - desc: 'An invisible, super easy and powerful REST and Web framework over Vert.x or Undertow.', - href: 'https://github.com/kohesive/kovert', - type: 'github', - tags: ['web', 'http', 'rest', 'vert.x', 'undertow'] - }, { - name: 'sdeleuze/spring-kotlin', - desc: 'Kotlin extensions for Spring projects.', - href: 'https://github.com/sdeleuze/spring-kotlin', - type: 'github', - tags: ['spring', 'extensions'] - }, { - name: 'Kotlin/kotlinx.coroutines', - desc: 'Libraries built upon Kotlin coroutines.', - href: 'https://github.com/Kotlin/kotlinx.coroutines', - type: 'github', - tags: ['async', 'await', 'yield', 'generator'] - }, { - name: 'taskworld/kraph', - desc: 'GraphQL request string builder written in Kotlin', - href: 'https://github.com/taskworld/kraph', - type: 'github', - tags: ['graphql', 'builder'] - }, { - name: 'sepatel/tekniq', - desc: 'Full-feature HTTP DSL Framework, HTTP Client, JDBC DSL, Loading Cache and Configuration', - href: 'https://github.com/sepatel/tekniq', - type: 'github', - tags: ['web', 'jdbc', 'http client', 'spark java', 'cache'] - }, { - name: 'vert-x3/vertx-lang-kotlin', - desc: 'This module provides Kotlin language bindings including DSL and extension functions for vert.x 3', - href: 'https://github.com/vert-x3/vertx-lang-kotlin/', - type: 'github', - tags: ['web', 'vert.x'] - }, { - name: 'olegcherr/Aza-Kotlin-CSS', - desc: 'Kotlin DSL for CSS', - href: 'https://github.com/olegcherr/Aza-Kotlin-CSS', - type: 'github', - tags: ['web', 'css'] - }, { - name: 'jooby/kotlin', - desc: 'Kotlin idioms for Jooby microframework', - href: 'http://jooby.org/doc/lang-kotlin', - tags: ['web', 'jooby', 'microframework'] - }, { - name: 'gimlet2/kottpd', - desc: 'REST framework in pure Kotlin, inspired by spark-java', - href: 'https://github.com/gimlet2/kottpd', - tags: ['web', 'REST', 'http'] - }] - }, { - name: 'Tests', - links: [{ - name: 'JetBrains/spek', - desc: 'A specification framework for Kotlin.', - href: 'https://github.com/jetbrains/spek', - type: 'github', - tags: ['test', 'assert', 'bdd'] - }, { - name: 'npryce/hamkrest', - desc: 'A reimplementation of Hamcrest to take advantage of Kotlin language features.', - href: 'https://github.com/npryce/hamkrest', - type: 'github', - tags: ['test', 'assert'] - }, { - name: 'nhaarman/mockito-kotlin', - desc: 'Using Mockito with Kotlin.', - href: 'https://github.com/nhaarman/mockito-kotlin', - type: 'github', - tags: ['test', 'mock'] - }, { - name: 'MarkusAmshove/Kluent', - desc: 'Fluent Assertion-Library for Kotlin.', - href: 'https://github.com/MarkusAmshove/Kluent', - type: 'github', - tags: ['test', 'assert'] - }, { - name: 'winterbe/expekt', - desc: 'BDD assertion library for Kotlin.', - href: 'https://github.com/winterbe/expekt', - type: 'github', - tags: ['test', 'assert', 'bdd'] - }, { - name: 'kotlintest/kotlintest', - desc: 'KotlinTest is a flexible and comprehensive testing tool for the Kotlin ecosystem based on and heavily inspired by the superb Scalatest.', - href: 'https://github.com/kotlintest/kotlintest', - type: 'github', - tags: ['test', 'bdd', 'matchers'] - }, { - name: 'dmcg/konsent', - desc: 'An acceptance test library for Kotlin.', - href: 'https://github.com/dmcg/konsent', - type: 'github', - tags: ['test', 'bdd', 'gherkin'] - }, { - name: 'raniejade/kspec', - desc: 'Kotlin Specification Framework.', - href: 'https://github.com/raniejade/kspec', - type: 'github', - tags: ['test', 'bdd'] - }, { - name: 'EPadronU/balin', - desc: 'Balin is a browser automation library for Kotlin. It\'s basically a Selenium-WebDriver wrapper library inspired by Geb.', - href: 'https://github.com/EPadronU/balin', - type: 'github', - tags: ['test', 'selenium', 'UI', 'automation'] - }, { - name: 'dmcg/k-sera', - desc: 'A JMock wrapper for Kotlin.', - href: 'https://github.com/dmcg/k-sera', - type: 'github', - tags: ['mock', 'test'] - }, { - name: 'dam5s/aspen', - desc: 'Aspen is an RSpec and Spek inspired test runner for Kotlin.', - href: 'https://github.com/dam5s/aspen', - type: 'github', - tags: ['test', 'specification', 'rspec', 'spek'] - }] - }, { - name: 'Dependency Injection', - links: [{ - name: 'SalomonBrys/Kodein', - desc: 'Painless Kotlin Dependency Injection .', - href: 'https://github.com/SalomonBrys/Kodein', - type: 'github', - tags: ['di', 'dependency injection'] - }, { - name: 'kailan/kodeinject', - desc: 'Constructor dependency injection for Kodein', - href: 'https://github.com/kailan/kodeinject', - type: 'github', - tags: ['di', 'dependency injection', 'kodein'] - }, { - name: 'kohesive/injekt', - desc: '(Deprecated, @see Kodein) Dependency Injection / Object Factory for Kotlin', - href: 'https://github.com/kohesive/injekt', - type: 'github', - tags: ['di', 'dependency injection'] - }, { - name: 'traversals/kapsule', - desc: 'Minimalist dependency injection library for Kotlin.', - href: 'https://github.com/traversals/kapsule', - type: 'github', - tags: ['di', 'dependency injection'] - }] - }, { - name: 'Functional Programming', - links: [{ - name: 'MarioAriasC/funKTionale', - desc: 'Functional constructs for Kotlin.', - href: 'https://github.com/MarioAriasC/funKTionale', - type: 'github', - tags: ['fp', 'functional'] - }, { - name: 'ReactiveX/RxKotlin', - desc: 'RxJava bindings for Kotlin.', - href: 'https://github.com/ReactiveX/RxKotlin', - type: 'github', - tags: ['fp', 'functional'] - }, { - name: 'kittinunf/Result', - desc: 'The modelling for success/failure of operations in Kotlin.', - href: 'https://github.com/kittinunf/Result', - type: 'github', - tags: ['fp', 'functional', 'monad'] - }, { - name: 'brianegan/bansa', - desc: 'A state container for Kotlin & Java, inspired by Elm & Redux.', - href: 'https://github.com/brianegan/bansa', - type: 'github', - tags: ['fp', 'functional', 'UI', 'Interface', 'Redux'] - }, { - name: 'pardom/redux-kotlin', - desc: 'Direct port of Redux for Kotlin.', - href: 'https://github.com/pardom/redux-kotlin', - type: 'github', - tags: ['fp', 'functional', 'UI', 'Interface', 'Redux'] - }, { - name: 'beyondeye/Reduks', - desc: 'A "batteries included" port of Reduxjs for Kotlin+Android', - href: 'https://github.com/beyondeye/Reduks', - type: 'github', - tags: ['fp', 'functional', 'UI', 'Interface', 'Redux'] - }, { - name: 'pakoito/Komprehensions', - desc: 'Do comprehensions for Kotlin and 3rd party libraries.', - href: 'https://github.com/pakoito/Komprehensions', - type: 'github', - tags: ['comprehensions', 'fp', 'functional'] - }, { - name: 'h0tk3y/kotlin-monads', - desc: 'Monads for Kotlin', - href: 'https://github.com/h0tk3y/kotlin-monads', - type: 'github', - tags: ['fp', 'functional', 'monads'] - }] - }, { - name: 'JSON', - links: [{ - name: 'cbeust/klaxon', - desc: 'Lightweight library to parse JSON in Kotlin.', - href: 'https://github.com/cbeust/klaxon', - type: 'github', - tags: ['json'] - }, { - name: 'SalomonBrys/Kotson', - desc: 'Gson for Kotlin, Kotson enables you to parse and write JSON with Google\'s Gson using a conciser and easier syntax.', - href: 'https://github.com/SalomonBrys/Kotson', - type: 'github', - tags: ['json'] - }, { - name: 'FasterXML/jackson-module-kotlin', - desc: 'Jackson module that adds support for serialization/deserialization of Kotlin classes and data classes.', - href: 'https://github.com/FasterXML/jackson-module-kotlin', - type: 'github', - tags: ['json', 'jakson'] - }, { - name: 'fboldog/ext4klaxon', - desc: 'Type Extensions (Long, Int, Enum, Date) for Klaxon.', - href: 'https://github.com/fboldog/ext4klaxon', - type: 'github', - tags: ['json'] - }, { - name: 'Jire/KTON', - desc: 'Object notation in pure Kotlin!', - href: 'https://github.com/Jire/KTON', - type: 'github', - tags: ['JSON', 'XML'] - }] - }, { - name: 'Database', - links: [{ - name: 'JetBrains/Exposed', - desc: 'Exposed is a prototype for a lightweight SQL library written over JDBC driver for Kotlin language.', - href: 'https://github.com/jetbrains/Exposed', - type: 'github', - tags: ['database', 'query', 'schema', 'dao'] - }, { - name: 'cheptsov/kotlin-nosql', - desc: 'NoSQL database query and access library for Kotlin.', - href: 'https://github.com/cheptsov/kotlin-nosql', - type: 'github', - tags: ['database', 'mongodb', 'query'] - }, { - name: 'jankotek/mapdb', - desc: 'MapDB provides concurrent Maps, Sets and Queues backed by disk storage or off-heap-memory. It is a fast and easy to use embedded Java database engine.', - href: 'https://github.com/jankotek/mapdb', - type: 'github' - }, { - name: 'seratch/kotliquery', - desc: 'A handy database access library in Kotlin.', - href: 'https://github.com/seratch/kotliquery', - type: 'github', - tags: ['database', 'sql', 'query'] - }, { - name: 'andrewoma/kwery', - desc: 'Kwery is an SQL library for Kotlin.', - href: 'https://github.com/andrewoma/kwery', - type: 'github', - tags: ['database', 'sql', 'query'] - }, { - name: 'square/sqldelight', - desc: 'Generates Java models from CREATE TABLE statements.', - href: 'https://github.com/square/sqldelight', - type: 'github', - tags: ['database', 'sql', 'type-safe builder'] - }, { - name: 'x2bool/kuery', - desc: 'Typesafe SQL with Kotlin.', - href: 'https://github.com/x2bool/kuery', - type: 'github', - tags: ['database', 'sql', 'type-safe builder'] - }, { - name: 'Litote/kmongo', - desc: 'KMongo - Kotlin toolkit for Mongo', - href: 'https://github.com/Litote/kmongo', - type: 'github', - tags: ['database', 'mongodb', 'query'] - }, { - name: 'requery/requery', - desc: 'Modern SQL based query & persistence for Java/Kotlin/Android.', - href: 'https://github.com/requery/requery', - type: 'github', - tags: ['database', 'query', 'type-safe builder'] - }, { - name: 'consoleau/kotlin-jpa-specification-dsl', - desc: 'This library provides a fluent DSL for querying spring data JPA repositories using spring data Specifications.', - href: 'https://github.com/consoleau/kotlin-jpa-specification-dsl', - type: 'github', - tags: ['database', 'query', 'jpa'] - }, { - name: 's4kibs4mi/PultusORM', - desc: 'PultusORM is a sqlite ORM library for kotlin on top of sqlite jdbc driver.', - href: 'https://github.com/s4kibs4mi/PultusORM', - type: 'github', - tags: ['database', 'query', 'sqlite'] - }, { - name: 'Ganet/rxaerospike', - desc: 'RxJava2 wrapper for aerospike-client-java.', - href: 'https://github.com/Ganet/rxaerospike', - type: 'github', - tags: ['database', 'arospike', 'rx', 'rxjava2'] - }, { - name: 'Raizlabs/DBFlow', - desc: 'A blazing fast, powerful, and very simple ORM android database library that writes database code for you.', - href: 'https://github.com/Raizlabs/DBFlow', - type: 'github', - tags: ['orm', 'jap', 'kapt', 'database'] - }, { - name: 'KotlinPorts/kt-postgresql-async', - desc: 'Kotlin/Gradle port of mauricio\'s async driver for postgres/mysql.', - href: 'https://github.com/KotlinPorts/kt-postgresql-async', - type: 'github', - tags: ['postgres', 'mysql', 'database driver'] - }] - }, { - name: 'Tools', - links: [{ - name: 'Kotlin/dokka', - desc: 'Documentation Engine for Kotlin.', - href: 'https://github.com/Kotlin/dokka', - type: 'github' - }, { - name: 'Levelmoney/kbuilders', - desc: 'KBuilders turns your Java builders into beautiful Type-Safe Builders.', - href: 'https://github.com/Levelmoney/kbuilders', - type: 'github' - }, { - name: 'holgerbrandl/kscript', - desc: 'Scripting utils for Kotlin.', - href: 'https://github.com/holgerbrandl/kscript', - type: 'github', - tags: ['bash', 'scripting', 'kts'] - }, { - name: 'shyiko/ktlint', - desc: 'Kotlin linter.', - href: 'https://github.com/shyiko/ktlint', - type: 'github', - tags: ['style', 'linter'] - }, { - name: 'jtransc/jtransc', - desc: 'JVM AOT compiler created in Kotlin.', - href: 'https://github.com/jtransc/jtransc', - type: 'github', - tags: ['aot', 'compiller'] - }, { - name: 'arturbosch/detekt', - desc: 'Static code analysis for Kotlin.', - href: 'https://github.com/arturbosch/detekt', - type: 'github', - tags: ['check style', 'checkstyle'] - }, { - name: 'ligee/kotlin-jupyter', - desc: 'Kotlin kernel for Jupyter/iPython.', - href: 'https://github.com/ligee/kotlin-jupyter', - type: 'github', - tags: ['juputer', 'repl'] - }] - }, { - name: 'Desktop', - links: [{ - name: 'edvin/tornadofx', - desc: 'Lightweight JavaFX Framework for Kotlin/', - href: 'https://github.com/edvin/tornadofx', - type: 'github', - tags: ['javafx', 'desktop', 'application'] - }] - }, { - name: 'Http Clients', - links: [{ - name: 'kittinunf/Fuel', - desc: 'The easiest HTTP networking library for Kotlin/Android.', - href: 'https://github.com/kittinunf/Fuel', - type: 'github', - tags: ['http', 'http client', 'file upload'] - }, { - name: 'jkcclemens/khttp', - desc: 'Kotlin HTTP requests library.', - href: 'https://github.com/jkcclemens/khttp', - type: 'github', - tags: ['http', 'http client'] - }] - }, { - name: 'Editors', - links: [{ - name: 'JetBrains/intellij-community', - desc: 'IntelliJ IDEA Community Edition', - href: 'https://github.com/JetBrains/intellij-community', - type: 'github', - tags: ['editor', 'ide', 'language'] - }, { - name: 'alexmt/atom-kotlin-language', - desc: 'Adds syntax highlighting to Kotlin files in Atom', - href: 'https://github.com/alexmt/atom-kotlin-language', - type: 'github', - tags: ['editor', 'ide', 'language'] - }, { - name: 'vkostyukov/kotlin-sublime-package', - desc: 'A Sublime Package for Kotlin.', - href: 'https://github.com/vkostyukov/kotlin-sublime-package', - type: 'github', - tags: ['editor', 'ide', 'language'] - }, { - name: 'udalov/kotlin-vim', - desc: 'Kotlin Syntax Highlighter for Vim.', - href: 'https://github.com/udalov/kotlin-vim', - type: 'github', - tags: ['editor', 'ide', 'language'] - }, { - name: 'sargunster/kotlin-textmate-bundle', - desc: 'Kotlin bundle for TextMate.', - href: 'https://github.com/sargunster/kotlin-textmate-bundle', - type: 'github', - tags: ['editor', 'ide', 'language'] - }, { - name: 'ice1000/NppExtension', - desc: 'Kotlin Language extension for Notepad++', - href: 'https://github.com/ice1000/NppExtension', - type: 'github', - tags: ['editor', 'ide', 'language'] - }, { - name: 'ftomassetti/kanvas', - desc: ' A truly hackable editor: simple, lightweight, understandable.', - href: 'https://github.com/ftomassetti/kanvas', - type: 'github', - tags: ['editor', 'ide', 'language'] - }] - }, { - name: 'Syntax Highlighters', - links: [{ - name: 'jneen/rouge', - desc: 'A pure-ruby code highlighter that is compatible with pygments. (wip)', - href: 'https://github.com/jneen/rouge', - type: 'github', - tags: ['syntax', 'higlight'] - }, { - name: 'isagalaev/highlight.js', - desc: 'Javascript syntax highlighter. (out-of-date)', - href: 'https://github.com/isagalaev/highlight.js', - type: 'github', - tags: ['syntax', 'higlight'] - }, { - name: 'github/linguist', - desc: 'For Ruby/Github, uses Sublime package', - href: 'https://github.com/github/linguist', - type: 'github', - tags: ['syntax', 'higlight'] - }, { - name: 'birkenfeld/pygments-main', - desc: 'Python syntax highlighter.', - href: 'https://bitbucket.org/birkenfeld/pygments-main', - type: 'bitbucket', - tags: ['syntax', 'higlight'] - }] - }, { - name: 'Game Development', - links: [{ - name: 'czyzby/ktx', - desc: 'Kotlin utilities for LibGDX applications.', - href: 'https://github.com/czyzby/ktx', - type: 'github', - tags: ['LibGDX', 'game dev'] - }, { - name: 'AlmasB/FXGL', - desc: 'JavaFX 8 Game Library written in Java + Kotlin', - href: 'https://github.com/AlmasB/FXGL', - type: 'github', - tags: ['javafx', 'desktop', 'games'] - }] - }, { - name: 'Misc', - links: [{ - name: 'Kotlin/kotlinx.reflect.lite', - desc: 'Lightweight library allowing to introspect basic stuff about Kotlin symbols.', - href: 'https://github.com/Kotlin/kotlinx.reflect.lite', - type: 'github', - tags: ['reflection'] - }, { - name: 'puniverse/quasar', - desc: 'Fibers, Channels and Actors for the JVM.', - href: 'https://github.com/puniverse/quasar/tree/master/quasar-kotlin', - type: 'github' - }, { - name: 'MehdiK/Humanizer.jvm', - desc: 'Humanizer.jvm meets all your jvm needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities.', - href: 'https://github.com/MehdiK/Humanizer.jvm', - type: 'github', - tags: ['pluralization'] - }, { - name: 'mplatvoet/kovenant', - desc: 'Promises for Kotlin and Android', - href: 'https://github.com/mplatvoet/kovenant', - type: 'github', - tags: ['promise', 'android'] - }, { - name: 'kohesive/klutter', - desc: 'A mix of random small libraries for Kotlin, the smallest reside here until big enough for their own repository.', - href: 'https://github.com/kohesive/klutter', - type: 'github' - }, { - name: 'kohesive/solr-undertow', - desc: 'Solr Standalone Tiny and High performant server.', - href: 'https://github.com/kohesive/solr-undertow', - type: 'github', - tags: ['solr', 'undertow'] - }, { - name: 'leprosus/kotlin-hashids', - desc: 'Library that generates short, unique, non-sequential hashes from numbers.', - href: 'https://github.com/leprosus/kotlin-hashids', - type: 'github', - tags: ['hash'] - }, { - name: 'mplatvoet/progress', - desc: 'Progress for Kotlin.', - href: 'https://github.com/mplatvoet/progress', - type: 'github', - tags: ['progress'] - }, { - name: 'leprosus/kotlin-cli', - desc: 'Kotlin-CLI - command line interface options parser for Kotlin.', - href: 'https://github.com/leprosus/kotlin-cli', - type: 'github', - tags: ['cli', 'command line interface'] - }, { - name: 'sargunster/CakeParse', - desc: 'Simple parser combinator library for Kotlin.', - href: 'https://github.com/sargunster/CakeParse', - type: 'github', - tags: ['parser', 'combinator', 'grammar', 'lexer'] - }, { - name: 'sargunster/KtUnits', - desc: 'Tiny unit conversion library for Kotlin.', - href: 'https://github.com/sargunster/KtUnits', - type: 'github', - tags: ['time', 'unit', 'conversion'] - }, { - name: 'hotchemi/khronos', - desc: 'An intuitive Date extensions in Kotlin.', - href: 'https://github.com/hotchemi/khronos', - type: 'github', - tags: ['time', 'date'] - }, { - name: 'yole/kxdate', - desc: 'Kotlin extensions for Java 8 java.time API', - href: 'https://github.com/yole/kxdate', - type: 'github', - tags: ['time', 'date'] - }, { - name: 'ingokegel/jclasslib', - desc: 'jclasslib bytecode viewer is a tool that visualizes all aspects of compiled Java class files and the contained bytecode.', - href: 'https://github.com/ingokegel/jclasslib', - type: 'github', - tags: ['bytecode'] - }, { - name: 'holgerbrandl/krangl', - desc: 'krangl is a {K}otlin library for data w{rangl}ing', - href: 'https://github.com/holgerbrandl/krangl', - type: 'github', - tags: ['tabular data', 'data processing'] - }, { - name: 'debop/koda-time', - desc: 'Joda Time Extensions in Kotlin. (From Java 8 use java.time instead)', - href: 'https://github.com/debop/koda-time', - type: 'github', - tags: ['joda-time', 'jsr-310'] - }, { - name: 'MicroUtils/kotlin-logging', - desc: 'Lightweight logging framework for Kotlin. Used as a wrapper for slf4j with Kotlin extensions.', - href: 'https://github.com/MicroUtils/kotlin-logging', - type: 'github', - tags: ['logging', 'slf4j'] - }, { - name: 'cesarferreira/kotlin-pluralizer', - desc: 'Kotlin extension to pluralize and singularize strings.', - href: 'https://github.com/cesarferreira/kotlin-pluralizer', - type: 'github', - tags: ['pluralize', 'singularizen'] - }, { - name: 'JoelW-S/groothy', - desc: 'Kotlin implementation of Groovy Truth.', - href: 'https://github.com/JoelW-S/groothy', - type: 'github', - tags: ['groovy truth'] - }, { - name: 'elect86/kotlin-unsigned', - desc: 'Boxed unsigned support, Ubyte, Uint, Ulong and Ushort.', - href: 'https://github.com/elect86/kotlin-unsigned', - type: 'github', - tags: ['unsigned'] - }, { - name: 'Jire/Strukt', - desc: 'Value types on the JVM, today!', - href: 'https://github.com/Jire/Strukt', - type: 'github', - tags: ['gc-free', 'structure'] - }, { - name: 'soywiz/korio', - desc: 'Korio: Kotlin cORoutines I/O: Streams + Async TCP Client/Server + Virtual File System for JVM, Node.JS and Browser.', - href: 'https://github.com/soywiz/korio', - type: 'github', - tags: ['vfs', 'coroutiones', 'io'] - }, { - name: 'soywiz/korim', - desc: 'Korim: Kotlin cORoutines IMaging utilities depending on Korio.', - href: 'https://github.com/soywiz/korim', - type: 'github', - tags: ['image', 'coroutiones'] - }, { - name: 'soywiz/korui', - desc: 'Korui: Kotlin cORoutines User Interfaces: korio + kimage + korui', - href: 'https://github.com/soywiz/korui', - type: 'github', - tags: ['ui', 'coroutiones'] - }, { - name: 'jimschubert/kopper', - desc: 'A simple Kotlin option parser', - href: 'https://github.com/jimschubert/kopper', - type: 'github', - tags: ['cli', 'parser'] - }, { - name: 'moshbit/Kotlift', - desc: 'Kotlift is the first source-to-source language transpiler from Kotlin to Swift.', - href: 'https://github.com/moshbit/Kotlift', - type: 'github', - tags: ['swift'] - }, { - name: 'consoleau/kassava', - desc: 'This library provides some useful kotlin extension functions for implementing toString() and equals() without all of the boilerplate.', - href: 'https://github.com/consoleau/kassava', - type: 'github', - tags: ['hashCode', 'equals', 'toString'] - }, { - name: 'moove-it/fakeit', - desc: 'Generates realistic fake data — like names, emails, dates, countries — to be used in your Android development environment.', - href: 'https://github.com/moove-it/fakeit', - type: 'github', - tags: ['testing', 'android', 'utility'] - }] - }, { - name: 'Extensions', - links: [{ - name: 'Kotlin/kotlinx.support', - desc: 'Extension and top-level functions to use JDK7/JDK8 features in Kotlin 1.0.', - href: 'https://github.com/Kotlin/kotlinx.support', - type: 'github', - tags: ['jdk8', 'jdk7'] - }] - }, { - name: 'Configuration', - links: [{ - name: 'npryce/konfig', - desc: 'A Type Safe Configuration API for Kotlin', - href: 'https://github.com/npryce/konfig', - type: 'github', - tags: ['configuration'] - }, { - name: 'mariomac/kaconf', - desc: 'KickAss Configuration. An annotation-based configuration system for Java and Kotlin', - href: 'https://github.com/mariomac/kaconf', - type: 'github', - tags: ['configuration'] - }, { - name: 'config4k/config4k', - desc: 'A Kotlin wrapper for Typesafe Config', - href: 'https://github.com/config4k/config4k', - type: 'github', - tags: ['configuration'] - }] - }, { - name: 'Graphics', - links: [{ - name: 'elect86/glm', - desc: 'Porting of cpp g-truck glm, opengl math lib', - href: 'https://github.com/elect86/glm', - type: 'github', - tags: ['glm'] - }, { - name: 'elect86/ovr', - desc: 'Oculus binding', - href: 'https://github.com/elect86/ovr', - type: 'github', - tags: ['vr', 'oculus'] - }, { - name: 'elect86/openvr', - desc: 'Openvr binding', - href: 'https://github.com/elect86/openvr', - type: 'github', - tags: ['vr', 'openvr'] - }, { - name: 'elect86/kt', - desc: 'gli, port of cpp g-truck gli, texture util', - href: 'https://github.com/elect86/kt', - type: 'github', - tags: ['gli'] - }, { - name: 'java-graphics/assimp', - desc: 'Java Open Asset Import Library', - href: 'https://github.com/java-graphics/assimp', - type: 'github', - tags: ['assimp', 'stl', 'md2'] - }] - }] -}, { - name: 'Kotlin JavaScript', - subcategories: [{ - name: 'JavaScript', - links: [{ - name: 'andrewoma/reakt', - desc: 'Reakt is a Kotlin wrapper for facebook\'s React library.', - href: 'https://github.com/andrewoma/reakt', - type: 'github', - tags: ['react', 'javascript', 'ui'] - }, { - name: 'pixijs/pixi-native', - desc: 'The aim of this project is to provide a fast lightweight 2D library that works across all devices.', - href: 'https://github.com/pixijs/pixi-native', - type: 'github', - tags: ['javascript', '2d', 'canvas', 'WebGL'] - }, { - name: 'bashor/ts2kt', - desc: 'Converter of TypeScript definition files to Kotlin declarations (stubs)', - href: 'https://github.com/bashor/ts2kt', - type: 'github', - tags: ['javascript', 'typescript'] - }, { - name: 'shafirov/klogging', - desc: 'Kotlin logging, both js and jvm.', - href: 'https://github.com/shafirov/klogging', - type: 'github', - tags: ['javascript', 'logging'] - }] - }, { - name: 'Frontend', - links: [{ - name: 'olegcherr/Aza-Kotlin-CSS', - desc: 'Kotlin DSL for CSS', - href: 'https://github.com/olegcherr/Aza-Kotlin-CSS', - type: 'github', - tags: ['css'] - }] - }] -},{ - name: 'Projects', - subcategories: [{ - name: 'Web', - links: [{ - name: 'sdeleuze/spring-boot-kotlin-demo', - desc: 'Basic Spring Boot app in Kotlin.', - href: 'https://github.com/sdeleuze/spring-boot-kotlin-demo', - type: 'github', - tags: ['spring', 'spring-boot'] - }, { - name: 'IRus/kotlin-dev-proxy', - desc: 'Simple server for proxy requests and host static files written in Kotlin, Spark Java and Apache HttpClient.', - href: 'https://github.com/IRus/kotlin-dev-proxy', - type: 'github', - tags: ['rest', 'web'] - }, { - name: 'ratpack/example-ratpack-gradle-kotlin-app', - desc: 'An example of a Kotlin Ratpack app built with Gradle.', - href: 'https://github.com/ratpack/example-ratpack-gradle-kotlin-app', - type: 'github', - tags: ['ratpack', 'gradle', 'rest', 'web'] - }, { - name: 'mariomac/codebuilder', - desc: 'Demo app about asynchronous architectures for long-response-time web applications.', - href: 'https://github.com/mariomac/codebuilder', - type: 'github', - tags: ['vertx.io', 'async', 'example'] - }, { - name: 'rocketraman/kotlin-web-hello-world', - desc: 'This project shows how to do a web-based "Hello World!" with Kotlin in combination with various JVM-based web frameworks.', - href: 'https://github.com/rocketraman/kotlin-web-hello-world', - type: 'github', - tags: ['spark java', 'vertx', 'wasabi', 'ktor', 'akka', 'example'] - }, { - name: 'ivanpopelyshev/vertx-facebook-messenger', - desc: 'Seed project for facebook messenger bots. Vertx, Kotlin.', - href: 'https://github.com/ivanpopelyshev/vertx-facebook-messenger', - type: 'github', - tags: ['chat bot', 'vert.x', 'facebook'] - }, { - name: 'corda/corda', - desc: 'Corda is a distributed ledger platform designed to record, manage and automate legal agreements between business partners. ', - href: 'https://github.com/corda/corda', - type: 'github', - tags: ['p2p', 'blockchain'] - }, { - name: 'spolnik/JAlgoArena', - desc: 'JAlgoArena is a highly scalable programming contest platform which you can host on own infrastructure. It allows to define new problems and solve them in Kotlin and Java.', - href: 'https://github.com/spolnik/JAlgoArena', - type: 'github', - tags: ['programming', 'contest'] - }] - }, { - name: 'Build tools', - links: [{ - name: 'cbeust/kobalt', - desc: 'Build system inspired by Gradle.', - href: 'https://github.com/cbeust/kobalt', - type: 'github' - }, { - name: 'gradle/gradle-script-kotlin', - desc: 'Kotlin language support for Gradle build scripts.', - href: 'https://github.com/gradle/gradle-script-kotlin', - type: 'github', - tags: ['gradle', 'build'] - }, { - name: 'nebula-plugins/nebula-kotlin-plugin', - desc: 'Provides the Kotlin plugin via the Gradle plugin portal, automatically depends on the standard library, and allows Kotlin library versions to be omitted.', - href: 'https://github.com/nebula-plugins/nebula-kotlin-plugin', - type: 'github', - tags: ['gradle', 'build'] - }, { - name: 'pubref/rules_kotlin', - desc: 'Bazel rules for Kotlin.', - href: 'https://github.com/pubref/rules_kotlin', - type: 'github', - tags: ['bazel', 'build'] - }] - }, { - name: 'Misc', - links: [{ - name: 'brikk/brikk', - desc: 'Brikk dependency manager (Kotlin, KotlinJS, Java, ...).', - href: 'https://github.com/brikk/brikk', - type: 'github', - tags: ['dependency managment'] - }] - }, { - name: 'Desktop', - links: [{ - name: 'ice1000/Dekoder', - desc: ' A kotlin music player, materially designed.', - href: 'https://github.com/ice1000/Dekoder', - type: 'github', - tags: ['JavaFX', 'Desktop', 'Player'] - }] - }, { - name: 'Examples', - links: [{ - name: 'Kotlin/kotlin-koans', - desc: 'Kotlin Koans are a series of exercises to get you familiar with the Kotlin Syntax.', - href: 'https://github.com/Kotlin/kotlin-koans', - type: 'github', - tags: ['koans'] - }, { - name: 'JetBrains/kotlin-examples', - desc: 'Various examples for Kotlin.', - href: 'https://github.com/JetBrains/kotlin-examples', - type: 'github', - tags: ['maven', 'gradle', 'android', 'realm', 'buttetknife', 'dagger', 'dbflow', 'junit-test', 'dokka'] - }, { - name: 'JetBrains/swot', - desc: 'Identify email addresses or domains names that belong to colleges or universities. Help automate the process of approving or rejecting academic discounts.', - href: 'https://github.com/jetbrains/swot', - type: 'github' - }, { - name: 'robfletcher/midcentury-ipsum', - desc: 'Swingin’ filler text for your jet-age web page.', - href: 'https://github.com/robfletcher/midcentury-ipsum', - type: 'github', - tags: ['ratpack'] - }, { - name: 'robfletcher/lazybones-kotlin', - desc: 'The Lazybones app migrated to Kotlin as a learning exercise.', - href: 'https://github.com/robfletcher/lazybones-kotlin', - type: 'github', - tags: ['ratpack'] - }, { - name: 'wangjiegulu/KotlinAndroidSample', - desc: 'Android sample with kotlin.', - href: 'https://github.com/wangjiegulu/KotlinAndroidSample', - type: 'github', - tags: ['android', 'sample'] - }, { - name: 'dodyg/Kotlin101', - desc: '101 examples for Kotlin Programming language.', - href: 'https://github.com/dodyg/Kotlin101', - type: 'github', - tags: ['examples'] - }, { - name: 'dkandalov/kotlin-99', - desc: 'Solve 99 problems with Kotlin!', - href: 'https://github.com/dkandalov/kotlin-99', - type: 'github', - tags: ['examples', 'study'] - }, { - name: 'dkandalov/rosettacode-kotlin', - desc: 'Repository with source code from [RosettaCode](http://rosettacode.org/).', - href: 'https://github.com/dkandalov/rosettacode-kotlin', - type: 'github', - tags: ['examples', 'study'] - }, { - name: 'sanity/pairAdjacentViolators', - desc: 'A Kotlin implementation of the Pair Adjacent Violators algorithm for isotonic regression.', - href: 'https://github.com/sanity/pairAdjacentViolators', - type: 'github', - tags: ['examples'] - }] - }, { - name: 'Idea Plugins', - links: [{ - name: 'Vektah/CodeGlance', - desc: 'Intelij IDEA plugin for displaying a code mini-map similar to the one found in Sublime.', - href: 'https://github.com/Vektah/CodeGlance', - type: 'github', - tags: ['idea', 'plugin'] - }, { - name: 'intellij-rust/intellij-rust', - desc: 'Rust IDE built using the IntelliJ Platform.', - href: 'https://github.com/intellij-rust/intellij-rust', - type: 'github', - tags: ['idea', 'plugin', 'rust'] - }, { - name: "dkandalov/activity-tracker", - desc: "Plugin for IntelliJ IDEs to track and record user activity.", - href: "https://github.com/dkandalov/activity-tracker", - type: "github", - tags: ["idea", "plugin"] - }] - }] -}, { - name: 'Android', - subcategories: [{ - name: 'Libraries', - links: [{ - name: 'Kotlin/anko', - desc: 'Pleasant Android application development.', - href: 'https://github.com/Kotlin/anko', - type: 'github', - tags: ['android'] - }, { - name: 'JakeWharton/kotterknife', - desc: 'View injection library for Android.', - href: 'https://github.com/JakeWharton/kotterknife', - type: 'github', - tags: ['android'] - }, { - name: 'MarcinMoskala/ActivityStarter', - desc: 'Activity starter generator and arguments injection library for Android.', - href: 'https://github.com/MarcinMoskala/ActivityStarter', - type: 'github', - tags: ['android'] - }, { - name: 'MarcinMoskala/KotlinPreferences', - desc: 'Kotlin Android Library, that makes preference usage in Kotlin simple and fun.', - href: 'https://github.com/MarcinMoskala/KotlinPreferences', - type: 'github', - tags: ['android'] - }, { - name: 'MarcinMoskala/PreferenceHolder', - desc: 'Kotlin Android Library, that makes preference usage in Kotlin simple and fun using object with fields binded to SharedPreferences.', - href: 'https://github.com/MarcinMoskala/PreferenceHolder', - type: 'github', - tags: ['android'] - }, { - name: 'nsk-mironov/kotlin-jetpack', - desc: 'A collection of useful extension methods for Android.', - href: 'https://github.com/nsk-mironov/kotlin-jetpack', - type: 'github', - tags: ['android', 'bindings'] - }, { - name: 'pawegio/KAndroid', - desc: 'Kotlin library for Android providing useful extensions to eliminate boilerplate code.', - href: 'https://github.com/pawegio/KAndroid', - type: 'github', - tags: ['android'] - }, { - name: 'chibatching/Kotpref', - desc: 'Android SharedPreference delegation for Kotlin.', - href: 'https://github.com/chibatching/Kotpref', - type: 'github', - tags: ['android'] - }, { - name: 'TouK/bubble', - desc: 'Library for obtaining screen orientation when orientation is blocked in AndroidManifest.', - href: 'https://github.com/TouK/bubble', - type: 'github', - tags: ['android'] - }, { - name: 'ragunathjawahar/kaffeine', - desc: 'Kaffeine is a Kotlin-flavored Android library for accelerating development.', - href: 'https://github.com/ragunathjawahar/kaffeine', - type: 'github', - tags: ['android'] - }, { - name: 'mcxiaoke/kotlin-koi', - desc: 'Koi, a lightweight kotlin library for Android Development.', - href: 'https://github.com/mcxiaoke/kotlin-koi', - type: 'github', - tags: ['android'] - }, { - name: 'BennyWang/KBinding', - desc: 'Android View Model binding framework write in kotlin, base on anko, simple but powerful.', - href: 'https://github.com/BennyWang/KBinding', - type: 'github', - tags: ['android', 'bindings'] - }, { - name: 'inaka/KillerTask', - desc: ' Android AsyncTask wrapper library, written in Kotlin.', - href: 'https://github.com/inaka/KillerTask', - type: 'github', - tags: ['android', 'AsyncTasks'] - }, { - name: 'grandstaish/paperparcel', - desc: 'Boilerplate reduction library written specifically for working with Kotlin data classes on Android.', - href: 'https://github.com/grandstaish/paperparcel', - type: 'github', - tags: ['android', 'annotation processing'] - }, { - name: 'andre-artus/AnvilKotlin', - desc: 'Minimal UI library for Android inspired by React.', - href: 'https://github.com/andre-artus/AnvilKotlin', - type: 'github', - tags: ['android', 'react', 'view'] - }, { - name: 'mathcamp/fiberglass', - desc: 'Easy lightweight SharedPreferences library for Android in Kotlin using delegated properties.', - href: 'https://github.com/mathcamp/fiberglass', - type: 'github', - tags: ['android', 'SharedPreferences'] - }, { - name: 'nitrico/LastAdapter', - desc: 'Don\'t write a RecyclerView adapter again. Not even a ViewHolder!.', - href: 'https://github.com/nitrico/LastAdapter', - type: 'github', - tags: ['android', 'RecyclerView', 'ViewHolder'] - }, { - name: 'denisidoro/krouter', - desc: 'A lightweight Android activity router.', - href: 'https://github.com/denisidoro/krouter', - type: 'github', - tags: ['router', 'android'] - }, { - name: 'metalabdesign/AsyncAwait', - desc: 'async/await for Android built upon coroutines introduced in Kotlin 1.1.', - href: 'https://github.com/metalabdesign/AsyncAwait', - type: 'github', - tags: ['async', 'await', 'android',] - }, { - name: 'jupf/staticlog', - desc: 'StaticLog - super lightweight static logging for Kotlin, Java and Android.', - href: 'https://github.com/jupf/staticlog', - type: 'github', - tags: ['logging', 'android'] - }, { - name: 'zserge/anvil', - desc: 'Minimal UI library for Android inspired by React.', - href: 'https://github.com/zserge/anvil', - type: 'github', - tags: ['android', 'layout'] - }, { - name: 'DanielMartinus/Stepper-Touch', - desc: 'Fun playful Android stepper widget for counting, written in Kotlin.', - href: 'https://github.com/DanielMartinus/Stepper-Touch', - type: 'github', - tags: ['widget', 'android', 'counter', 'ui'] - }] - }, { - name: 'Frameworks', - links: [{ - name: 'nekocode/kotgo', - desc: 'An android development framwork on kotlin using MVP architecture.', - href: 'https://github.com/nekocode/kotgo', - type: 'github', - tags: ['android'] - }, { - name: 'lightningkite/kotlin-core', - desc: 'A full framework for making Android apps. Based on Anko and Kotson.', - href: 'https://github.com/lightningkite/kotlin-core', - type: 'github', - tags: ['kotson', 'anko', 'android'] - }] - }, { - name: 'Projects', - links: [{ - name: 'antoniolg/Bandhook-Kotlin', - desc: 'A showcase music app for Android entirely written using Kotlin language.', - href: 'https://github.com/antoniolg/Bandhook-Kotlin', - type: 'github' - }, { - name: 'antoniolg/Kotlin-for-Android-Developers', - desc: 'Companion App for the book "Kotlin Android Developers".', - href: 'https://github.com/antoniolg/Kotlin-for-Android-Developers', - type: 'github', - tags: ['android'] - }, { - name: 'damianpetla/kotlin-dagger-example', - desc: 'Example of Android project showing integration with Kotlin and Dagger 2.', - href: 'https://github.com/damianpetla/kotlin-dagger-example', - type: 'github' - }, { - name: 'dodyg/AndroidRivers', - desc: 'RSS Readers for Android.', - href: 'https://github.com/dodyg/AndroidRivers', - type: 'github', - tags: ['rss', 'android'] - }, { - name: 'MakinGiants/banjen-android-banjo-tuner', - desc: 'App that plays sounds helping to tune a brazilian banjo.', - href: 'https://github.com/MakinGiants/banjen-android-banjo-tuner', - type: 'github', - tags: ['android', 'application', 'tuner'] - }, { - name: 'inaka/kotlillon', - desc: 'Android Kotlin Examples.', - href: 'https://github.com/inaka/kotlillon', - type: 'github', - tags: ['android', 'application'] - }, { - name: 'MakinGiants/todayhistory', - desc: 'App that shows what happened today in history.', - href: 'https://github.com/MakinGiants/todayhistory', - type: 'github', - tags: ['android', 'application'] - }, { - name: 'RxKotlin/Pocket', - desc: 'This app help user to save links easily, and can export to Evernote as weekly.', - href: 'https://github.com/RxKotlin/Pocket', - type: 'github', - tags: ['android', 'application', 'rx'] - }, { - name: 'SidneyXu/AndroidDemoIn4Languages', - desc: 'Comparison between Java, Groovy, Scala, Kotlin in Android Development.', - href: 'https://github.com/SidneyXu/AndroidDemoIn4Languages', - type: 'github', - tags: ['Java', 'Groovy', 'Scala', 'Kotlin', 'Android'] - }, { - name: 'inorichi/tachiyomi', - desc: ' Free and open source manga reader for Android.', - href: 'https://github.com/inorichi/tachiyomi', - type: 'github', - tags: ['android', 'application'] - }, { - name: 'ziggy42/Blum-kotlin', - desc: 'A simple android Twitter client written in Kotlin', - href: 'https://github.com/ziggy42/Blum-kotlin', - type: 'github', - tags: ['android', 'twitter', 'application'] - }] - }, { - name: 'Extensions', - links: [{ - name: 'ajalt/timberkt', - desc: 'Easy Android logging with Kotlin and Timber.', - href: 'https://github.com/ajalt/timberkt', - type: 'github', - tags: ['android', 'logging'] - }] - }, { - name: 'Tools', - links: [{ - name: 'kiruto/debug-bottle', - desc: 'Debug Bottle is an Android runtime debug / develop tools written using kotlin language.', - href: 'https://github.com/kiruto/debug-bottle', - type: 'github', - tags: ['android', 'debug'] - }] - }] -}, { - name: 'Kotlin User Groups', - subcategories: [{ - name: 'Europe', - links: [{ - name: 'Kotlin Developers in Manchester', - desc: 'United Kingdom', - href: 'http://www.meetup.com/Kotlin-Manchester/', - type: 'kug', - tags: ['United Kingdom'] - }, { - name: 'Belarus Kotlin User Group', - desc: 'Belarus', - href: 'https://bkug.by/', - type: 'kug', - tags: ['Belarus'] - }, { - name: 'Kotlin User Group Munich', - desc: 'Deutschland', - href: 'http://www.meetup.com/de-DE/Kotlin-User-Group-Munich/', - type: 'kug', - tags: ['Deutschland'] - }, { - name: 'Lyon Kotlin User Group', - desc: 'France', - href: 'http://www.meetup.com/Lyon-Kotlin-User-Group/', - type: 'kug', - tags: ['France'] - }, { - name: 'KotlinMAD', - desc: 'Spain', - href: 'https://www.meetup.com/KotlinMAD/', - type: 'kug', - tags: ['Spain'] - }, { - name: 'Kotlin Yorkshire Meetup Group', - desc: 'United Kingdom', - href: 'http://www.meetup.com/Kotlin-Yorkshire-Meetup-Group/', - type: 'kug', - tags: ['United Kingdom'] - }, { - name: 'Kotlin London', - desc: 'United Kingdom', - href: 'http://www.meetup.com/kotlin-london/', - type: 'kug', - tags: ['United Kingdom'] - }, { - name: 'Kotlin User Group Berlin', - desc: 'Germany', - href: 'https://www.meetup.com/kotlin-berlin/', - type: 'kug', - tags: ['Germany'] - }, { - name: 'Kotlin User Group Cologne', - desc: 'Germany', - href: 'https://www.meetup.com/Kotlin-User-Group-Cologne/', - type: 'kug', - tags: ['Germany'] - }] - }, { - name: 'America', - links: [{ - name: 'Bay Area Kotlin User Group', - desc: 'USA', - href: 'http://www.meetup.com/Bay-Area-Kotlin-User-Group/', - type: 'kug', - tags: ['USA'] - }, { - name: 'Chicago Kotlin Users Group', - desc: 'USA', - href: 'https://www.meetup.com/Chicago-Kotlin/', - type: 'kug', - tags: ['USA'] - }, { - name: 'Kotlin Group of Boulder', - desc: 'USA', - href: 'http://www.meetup.com/Kotlin-Group-Boulder/', - type: 'kug', - tags: ['USA'] - }, { - name: 'New York Kotlin Meetup', - desc: 'USA', - href: 'http://www.meetup.com/New-York-Kotlin-Meetup/', - type: 'kug', - tags: ['USA'] - }] - }, { - name: 'Asia', - links: [{ - name: 'Japan Kotlin User Group', - desc: 'Japan', - href: 'https://kotlin.doorkeeper.jp/', - type: 'kug', - tags: ['Japan'] - }, { - name: 'Korean Kotlin User Group', - desc: 'Korea', - href: 'http://kotlin.kr/', - type: 'kug', - tags: ['Korea'] - }] - }, { - name: 'Australia', - links: [{ - name: 'Brisbane Kotlin User Group', - desc: 'Australia', - href: 'https://www.meetup.com/Brisbane-Kotlin-User-Group/', - type: 'kug', - tags: ['Australia'] - }] - }] -}]; - -export const links = [...data, ...articlesLinks]; diff --git a/app/LinkChecker.ts b/app/LinkChecker.ts deleted file mode 100644 index 1508ccdbc..000000000 --- a/app/LinkChecker.ts +++ /dev/null @@ -1,56 +0,0 @@ -import {links} from './Kotlin'; -import * as request from 'request'; -import * as _ from 'lodash'; - -function HEAD(url: string): Promise { - return new Promise((resolve, reject) => { - request({ - method: 'HEAD', - url: encodeURI(url), - headers: { - 'User-Agent': 'Awesome-Kotlin-List' - } - }, (error, response, body) => { - if (!error && response.statusCode === 200) { - resolve(false); - } else { - reject({ - url: url, - error: error, - status: response ? response.statusCode : '', - body: body - }); - } - }); - }); -} - -const promises = _.flattenDeep>(links.map(category => { - return category.subcategories.map(subcategory => { - return subcategory.links.map(link => { - if (!link.whitelisted) { - return HEAD(link.href).catch(error => { - console.error(`Url '${link.href}' error: '${JSON.stringify(error)}'`); - - return !isWhiteListed(link.href, error.status); - }); - } else { - return Promise.resolve(false); - } - }); - }); -})); - -Promise.all(promises).then((statuses: boolean[]) => { - console.log(`Link checking Done! Checked ${promises.length} links!`); - - if (statuses.some(it => it === true)) { - process.exit(1); - } -}); - -function isWhiteListed(url: string, status: number): boolean { - // TODO: Externalize configuration - return (url.includes('http://kotlin.link/articles/') && status === 404) || - (url === 'https://www.reddit.com/r/Kotlin/' && status === 503); -} diff --git a/app/ReadmeGenerator.ts b/app/ReadmeGenerator.ts deleted file mode 100644 index ba09516a0..000000000 --- a/app/ReadmeGenerator.ts +++ /dev/null @@ -1,91 +0,0 @@ -import {write} from './File'; -import {links} from './Kotlin'; - -write('./README.md', `# Awesome Kotlin ([https://kotlin.link](https://kotlin.link)) - -A curated list of awesome Kotlin related stuff inspired by awesome-java. :octocat: - -[![List of Awesome List Badge](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome) [![Travis CI Build Status Badge](https://api.travis-ci.org/KotlinBy/awesome-kotlin.svg?branch=master)](https://travis-ci.org/KotlinBy/awesome-kotlin) [![Awesome Kotlin Badge](https://kotlin.link/awesome-kotlin.svg)](https://github.com/KotlinBy/awesome-kotlin) - -:newspaper: [RSS Feed of articles, videos, slides, updates (20 latest articles)](http://kotlin.link/rss.xml) - -:newspaper: [RSS Feed of articles, videos, slides, updates (full archive)](http://kotlin.link/rss-full.xml) - -## Spread Awesome Kotlin! - -Here awesome badge for your project: - -\`\`\`markdown -[![Awesome Kotlin Badge](https://kotlin.link/awesome-kotlin.svg)](https://github.com/KotlinBy/awesome-kotlin) -\`\`\` - -## Table of Contents - -${tableOfContent()} - -${getLinks()} - ---- - -[![CC0](https://licensebuttons.net/p/zero/1.0/80x15.png)](http://creativecommons.org/publicdomain/zero/1.0/) -`); - -function getLinks() { - return links.map(category => { - const subcategories = category.subcategories.map(subcategory => { - const links = subcategory.links.map(link => { - const getDesc = desc => desc ? `- ${desc}` : ''; - - return `* [${link.name}](${link.href}) ${getDesc(link.desc)}`; - }).join('\n'); - - return `${getSubcategoryName(subcategory.name, category.name)}\n${links}\n`; - }).join('\n'); - - return `${getCategoryName(category.name)}\n${subcategories}\n`; - }).join('\n'); -} - -function tableOfContent() { - function getSubcategories(category: Category) { - return category - .subcategories - .map(subcategory => getTocSubcategoryName(subcategory.name, category.name)) - .join('\n'); - } - - return links - .map(category => getTocCategoryName(category.name) + '\n' + getSubcategories(category)) - .join('\n\n'); -} - -function getAnchor(name: string): string { - return `` -} - -function getCategoryName(name: string) { - return `## ${getAnchor(name)}${name} ${link('Back ⇈', name + '-category')}`; -} - -function getSubcategoryName(name: string, namespace: string) { - return `### ${getAnchor(namespace + '-' + name)}${name} ${link('Back ⇈', namespace + '-' + name + '-subcategory')}`; -} - -function getTocCategoryName(name: string) { - return `### ${getAnchor(name + "-category")}${link(name, name)}`; -} - -function getTocSubcategoryName(name: string, namespace: string) { - return `* ${getAnchor(namespace + '-' + name + "-subcategory")}${link(name, namespace + '-' + name)}`; -} - -function normalizeName(name: string): string { - return name - .toLowerCase() - .replace(new RegExp('[ ,\\/]', 'g'), '-') // Replace special symbols with dash - .replace(new RegExp('-+', 'g'), '-'); // Replace multiple dashes with one dash -} - -function link(name: string, url: string) { - return `[${name}](#${normalizeName(url)})`; -} diff --git a/app/Sitemap.ts b/app/Sitemap.ts deleted file mode 100644 index b004672c4..000000000 --- a/app/Sitemap.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {write} from './File'; -import {articles} from './rss/articles'; -const sm = require('sitemap'); - -const sitemap = sm.createSitemap({ - hostname: 'http://kotlin.link', - cacheTime: 60 * 60 * 1000, - urls: articles.map(article => ({url: `/articles/${article.filename}`})) -}); - -const xml = sitemap.toString(); - -write('./dist/sitemap.xml', xml); diff --git a/app/Stars.ts b/app/Stars.ts deleted file mode 100644 index 45a5ea480..000000000 --- a/app/Stars.ts +++ /dev/null @@ -1,88 +0,0 @@ -import * as moment from 'moment'; -import * as _ from 'lodash'; -import * as request from 'request'; -import {write} from './File'; -import {links} from './Kotlin'; - -const user: string = process.env.GH_USER; -const pass: string = process.env.GH_TOKEN; - -if (!user || !pass) { - throw new Error(`You should run this script only when you added GH_USER and GH_TOKEN to env. -Token can be found here: https://github.com/settings/tokens`); -} - -function JSON_GET(options, repository, handler) { - return new Promise((resolve, reject) => { - request(options, (error, response, body) => { - if (!error && response.statusCode == 200) { - const data = JSON.parse(body); - resolve(handler(data)); - } else { - reject({ - repository: repository, - error: error, - status: response ? response.statusCode : '', - body: body - }); - } - }); - }); -} - -interface LinkExtraData { - readonly stars: number; - readonly update: string; -} - -function getGithubStarCount(repository: string): Promise { - const options = { - url: `https://api.github.com/repos/${repository}`, - headers: { - 'User-Agent': 'Awesome-Kotlin-List' - }, - auth: {user, pass} - }; - - return JSON_GET(options, repository, json => ({ - stars: json.stargazers_count, - update: json.pushed_at - })); -} - -const getBitbucketWatcherCount = repository => { - const options = { - url: `https://api.bitbucket.org/2.0/repositories/${repository}/watchers`, - headers: { - 'User-Agent': 'Awesome-Kotlin-List' - } - }; - - return JSON_GET(options, repository, json => json.size); -}; - -const promises = _.flattenDeep(links.map(category => { - return category.subcategories.map(subcategory => { - return subcategory.links.map(link => { - if (link.type === 'github') { - return getGithubStarCount(link.name).then(data => { - link.star = data.stars; - link.update = moment(data.update).format('MMM DD, YYYY'); - }); - } else if (link.type === 'bitbucket') { - return getBitbucketWatcherCount(link.name).then(watchers => { - link.star = watchers; - }); - } else { - return Promise.resolve(); - } - }); - }); -})); - -Promise.all(promises).then(() => { - write("./app/LinksWithStars.json", JSON.stringify(links)); -}, reason => { - console.error(`Error while stars getting ${JSON.stringify(reason)}`); - process.exit(1); -}); diff --git a/app/Types.d.ts b/app/Types.d.ts deleted file mode 100644 index 3322edbf7..000000000 --- a/app/Types.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -interface Link { - readonly name: string; - readonly href: string; - readonly desc?: string; - readonly type?: 'github' | 'bitbucket' | 'blog' | 'kug'; - readonly tags?: string[]; - readonly whitelisted?: boolean; -} - -interface Subcategory { - readonly id?: string; - readonly name: string; - readonly links: Link[]; -} - -interface Category { - readonly id?: string; - readonly name: string; - readonly subcategories: Subcategory[]; -} - -type ArticleFeature = 'mathjax'; -type ArticleType = 'video' | 'slides' | 'webinar'; - -interface Article { - readonly title: string; - readonly url: string; - readonly categories: string[]; - readonly features: ArticleFeature[]; - readonly author: string; - readonly date: string; - readonly description: string; - readonly filename: string; - readonly file: string; // input filename - readonly type: ArticleType - prev: string; - next: string; -} diff --git a/app/Utils.ts b/app/Utils.ts deleted file mode 100644 index 24b0356e2..000000000 --- a/app/Utils.ts +++ /dev/null @@ -1,9 +0,0 @@ -import * as moment from 'moment'; - -export function getUID() { - return Math.random().toString(36).substr(2, 9); -} - -export function formatDate(date:string) { - return moment(date, 'MMM DD, YYYY hh:mm').format('MMMM YYYY'); -} diff --git a/app/rss/DataGenerator.ts b/app/rss/DataGenerator.ts deleted file mode 100644 index ab1c897ed..000000000 --- a/app/rss/DataGenerator.ts +++ /dev/null @@ -1,51 +0,0 @@ -import * as _ from 'lodash'; -import {formatDate} from '../Utils'; -import {articles} from './articles'; - -function getCategoryName(name: ArticleType) { - switch (name) { - case 'webinar': - return 'Webinars'; - case 'slides': - return 'Slides'; - case 'video': - return 'Videos'; - default: - return 'Articles, Blog Posts'; - } -} - -function getCategory(entities:Article[]) { - const groups = _.groupBy(entities, it => formatDate(it.date)); - - const subcategories = Object - .keys(groups) - .map(group => { - return { - name: group, - links: groups[group].map(it => { - return { - name: it.title, - desc: it.author, - href: `http://kotlin.link/articles/${it.filename}`, - type: it.type || 'article', - tags: it.categories - } - }) - } - }); - - return { - name: getCategoryName(entities[0].type), - subcategories: subcategories - } -} - -const getCategories = categories => categories.map(getCategory); - -const posts = articles.filter(it => !it.type); -const webinars = articles.filter(it => it.type === 'webinar'); -const videos = articles.filter(it => it.type === 'video'); -const slides = articles.filter(it => it.type === 'slides'); - -export const articlesLinks = getCategories([posts, webinars, videos, slides]); diff --git a/app/rss/PagesGenerator.ts b/app/rss/PagesGenerator.ts deleted file mode 100644 index 17b4049a0..000000000 --- a/app/rss/PagesGenerator.ts +++ /dev/null @@ -1,154 +0,0 @@ -import {write} from '../File'; -import {articles} from './articles'; -import * as _ from 'lodash'; -import * as moment from 'moment'; -import * as sass from 'node-sass'; - -const groups = _.groupBy(articles, it => formatDate(it.date)); - -const getGroupLinks = group => groups[group] - .map(article => `
  • ${article.title}
  • `) - .join('\n'); - -const links = Object - .keys(groups) - .map(group => `
  • ${group}
  • ${getGroupLinks(group)}`) - .join('\n'); - -articles - .map((article, idx, array) => { - if (idx === array.length - 1) { - article.next = array[0].filename; - article.prev = array[idx - 1].filename; - } else if (idx === 0) { - article.next = array[idx + 1].filename; - article.prev = array[array.length - 1].filename; - } else { - article.next = array[idx + 1].filename; - article.prev = array[idx - 1].filename; - } - return article; - }) - .forEach(article => write(`./dist/articles/${article.filename}`, getHtml(article))); - -const style = sass.renderSync({ - file: './app/rss/styles.scss', - outputStyle: 'compressed' -}); - -write('./dist/articles/styles.css', style.css); - -function getHtml(article: Article): string { - return ` - - - - ${article.title} - - - - - - - ${getFeatures(article.features)} - - -
    -
    - -
    - previous - next -
    -
    - - - -
    -
    -

    - ${article.title} - ${formatDate(article.date)} -

    -

    by ${article.author}

    - ${article.description} - -
    -
    - ← Back to kotlin.link -
    -
    -
    - - - - - - - - - - -`; -} - -function formatDate(date: string): string { - return moment(date, 'MMM DD, YYYY hh:mm').format('MMM DD, YYYY'); -} - -function getFeatures(features: ArticleFeature[] = []): string { - return features - .map(feature => { - switch (feature) { - case 'mathjax': - return ''; - default: - return ``; - } - }) - .join('\n'); -} diff --git a/app/rss/RssGenerator.ts b/app/rss/RssGenerator.ts deleted file mode 100644 index fef48a13e..000000000 --- a/app/rss/RssGenerator.ts +++ /dev/null @@ -1,30 +0,0 @@ -import {writeSync} from '../File'; -import {articles} from './articles'; -import * as RSS from 'rss'; -import * as _ from 'lodash'; - -generate('rss.xml', articles, 20); -generate('rss-full.xml', articles); - -function generate(name: string, articles: Article[], limit: number = articles.length) { - const feed = new RSS({ - title: 'Kotlin Programming Language', - description: 'News, blog posts, projects, podcasts, videos and other. All information about Kotlin.', - feed_url: `http://kotlin.link/${name}`, - site_url: 'http://kotlin.link/', - image_url: 'http://kotlin.link/favicon.ico', - docs: 'https://validator.w3.org/feed/docs/rss2.html', - managingEditor: 'ruslan@ibragimov.by (Ruslan Ibragimov)', - webMaster: 'ruslan@ibragimov.by (Ruslan Ibragimov)', - copyright: 'CC0 1.0 Universal (CC0 1.0)', - language: 'en', - categories: ['Kotlin', 'Programming', 'JVM'], - pubDate: new Date().toUTCString(), - ttl: 30, - generator: 'node-rss' - }); - - _.take(articles, limit).forEach(article => feed.item(article)); - - writeSync(`./dist/${name}`, feed.xml()); -} diff --git a/app/rss/articles.ts b/app/rss/articles.ts deleted file mode 100644 index 0a0d80bd6..000000000 --- a/app/rss/articles.ts +++ /dev/null @@ -1,82 +0,0 @@ -import * as moment from 'moment'; - -const fm = require('front-matter'); -const fs = require('fs'); -const markdown = require('./markdown'); -const articlesDir = fs.readdirSync('./app/rss/articles'); - -articlesDir.forEach(article => validateArticle(article)); - -const parseDate = date => moment(date, 'MMM DD, YYYY hh:mm'); - -const sortByDate = (a, b) => { - if (parseDate(a.date).isBefore(parseDate(b.date))) { - return 1; - } else if (parseDate(a.date).isAfter(parseDate(b.date))) { - return -1; - } else { - return 0; - } -}; - -const getFileName = name => { - const escaped = name - .split('') // split string on array of symbols - .map(it => it.charCodeAt(0)) // convert string in corresponding codes - .map(code => { // replace all special symbols with dash - // See html codes: 32 - space, 47 - slash, 58 - colon, 64 - at, 91 - opening bracket, 96 - grave accent - // http://ascii-code.com/ - if ((code > 31 && code < 48) || - (code > 57 && code < 65) || - (code > 90 && code < 97) || - (code > 122 && code < 256)) { - return '-'; - } else { - return String.fromCharCode(code); // return symbol instead of his code - } - }) - .join('') - .replace(new RegExp('-$', 'g'), '') // Replace last dash in string with '' - .replace(new RegExp('^-', 'g'), '') // Replace first dash in string with '' - .replace(new RegExp('-+', 'g'), '-'); // Replace multiple dashes with one dash - - return `${escaped}.html` -}; - -export const articles: Article[] = articlesDir - .filter(article => !article.startsWith('.')) - .map(article => { - const content = fs.readFileSync(`./app/rss/articles/${article}`, {encoding: 'UTF-8'}); - - const data = fm(content); - - data.attributes.file = article; - return data; - }) - .map(article => { - const attr = article.attributes; - - if (!attr.title || !attr.url || !attr.categories || !attr.author || !attr.date) { - throw new Error(`Metadata not complete: ${JSON.stringify(attr)}`); - } - - return article; - }) - .map(article => { - article.attributes.filename = getFileName(article.attributes.title); - return article; - }) - .map(article => { - article.attributes.description = markdown(article.body); - return article.attributes; - }) - .sort(sortByDate); - -function validateArticle(name: string) { - const invalid = ['\\', '/', ':', '*', '?', '"', '<', '>', '|']; - const includes = invalid.find(symbol => name.includes(symbol)); - - if (includes) { - throw new Error(`File '${name}' includes restricted symbol '${includes}'.`); - } -} diff --git a/app/rss/articles/.chinese/Redux for Android using Kotlin.md b/app/rss/articles/.chinese/Redux for Android using Kotlin.md deleted file mode 100644 index ff1f558d2..000000000 --- a/app/rss/articles/.chinese/Redux for Android using Kotlin.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: 'Redux for Android using Kotlin' -url: https://www.youtube.com/watch?v=BUAxqiGrKOc -categories: - - Kotlin - - Android -type: video -lang: chinese -author: Nevin Chen -date: Nov 22, 2016 07:00 ---- - - diff --git a/app/rss/articles/.links/An adventure with Kotlin - Part I.md b/app/rss/articles/.links/An adventure with Kotlin - Part I.md deleted file mode 100644 index df81d7b03..000000000 --- a/app/rss/articles/.links/An adventure with Kotlin - Part I.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'An adventure with Kotlin - Part I' -url: http://angrybyte.me/post/154701023805/kotlin-adventures-1 -categories: - - Kotlin - - Android -author: Milos Marinkovic -date: Dec 20, 2016 05:24 ---- diff --git a/app/rss/articles/.links/Android: Improving sign-in experience with Google Sign-In and SmartLock.md b/app/rss/articles/.links/Android: Improving sign-in experience with Google Sign-In and SmartLock.md deleted file mode 100644 index d1aa1e56e..000000000 --- a/app/rss/articles/.links/Android: Improving sign-in experience with Google Sign-In and SmartLock.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Android: Improving sign-in experience with Google Sign-In and SmartLock' -url: https://medium.com/@p.tournaris/android-improving-sign-in-experience-with-google-sign-in-and-smartlock-f0bfd789602a#.djgn5w44q -categories: - - Kotlin - - Android -author: Pavlos-Petros Tournaris -date: Dec 14, 2016 03:42 ---- diff --git a/app/rss/articles/.links/Classes in Kotlin: More power with less effort.md b/app/rss/articles/.links/Classes in Kotlin: More power with less effort.md deleted file mode 100644 index b52a5a961..000000000 --- a/app/rss/articles/.links/Classes in Kotlin: More power with less effort.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: 'Classes in Kotlin: More power with less effort' -url: http://antonioleiva.com/classes-kotlin/ -categories: - - Kotlin -author: Antonio Leiva -date: Dec 7, 2016 03:45 ---- diff --git a/app/rss/articles/.links/Coding Functional Android Apps in Kotlin: Getting Started.md b/app/rss/articles/.links/Coding Functional Android Apps in Kotlin: Getting Started.md deleted file mode 100644 index 43e503f3d..000000000 --- a/app/rss/articles/.links/Coding Functional Android Apps in Kotlin: Getting Started.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Coding Functional Android Apps in Kotlin: Getting Started' -url: https://code.tutsplus.com/tutorials/start-developing-android-apps-with-kotlin-part-1--cms-27827 -categories: - - Kotlin - - Android -author: Jessica Thornsby -date: Dec 19, 2016 04:12 ---- diff --git a/app/rss/articles/.links/Custom Views in Android with Kotlin.md b/app/rss/articles/.links/Custom Views in Android with Kotlin.md deleted file mode 100644 index 524ba2f20..000000000 --- a/app/rss/articles/.links/Custom Views in Android with Kotlin.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Custom Views in Android with Kotlin' -url: https://antonioleiva.com/custom-views-android-kotlin/ -categories: - - Kotlin - - Android -author: Antonio Leiva -date: Dec 27, 2016 05:18 ---- diff --git a/app/rss/articles/.links/FoldingTabBar Comes to Android. Thank You, Google!.md b/app/rss/articles/.links/FoldingTabBar Comes to Android. Thank You, Google!.md deleted file mode 100644 index a8bf57e0d..000000000 --- a/app/rss/articles/.links/FoldingTabBar Comes to Android. Thank You, Google!.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'FoldingTabBar Comes to Android. Thank You, Google!' -url: https://yalantis.com/blog/foldingtabbar-for-android/ -categories: - - Kotlin - - Android -author: Andriy Hristyan -date: Dec 15, 2016 03:30 ---- diff --git a/app/rss/articles/.links/Implementing Android App Shortcuts.md b/app/rss/articles/.links/Implementing Android App Shortcuts.md deleted file mode 100644 index 16296de4e..000000000 --- a/app/rss/articles/.links/Implementing Android App Shortcuts.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Implementing Android App Shortcuts' -url: https://medium.com/@andreworobator/implementing-android-app-shortcuts-74feb524959b#.vrst29h9p -categories: - - Kotlin - - Android -author: Andrew Orobator -date: Dec 19, 2016 03:30 ---- diff --git a/app/rss/articles/.links/Java vs. Kotlin: Should You Be Using Kotlin for Android Development?.md b/app/rss/articles/.links/Java vs. Kotlin: Should You Be Using Kotlin for Android Development?.md deleted file mode 100644 index e2fca2cd9..000000000 --- a/app/rss/articles/.links/Java vs. Kotlin: Should You Be Using Kotlin for Android Development?.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Java vs. Kotlin: Should You Be Using Kotlin for Android Development?' -url: https://code.tutsplus.com/articles/java-vs-kotlin-should-you-be-using-kotlin-for-android-development--cms-27846 -categories: - - Kotlin - - Android -author: Jessica Thornsby -date: Dec 12, 2016 04:08 ---- diff --git a/app/rss/articles/.links/Kotlin VS Java: Basic Syntax Differences.md b/app/rss/articles/.links/Kotlin VS Java: Basic Syntax Differences.md deleted file mode 100644 index 9dcae35d7..000000000 --- a/app/rss/articles/.links/Kotlin VS Java: Basic Syntax Differences.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Kotlin VS Java: Basic Syntax Differences' -url: https://yalantis.com/blog/kotlin-vs-java-syntax/ -categories: - - Kotlin - - Java -author: Irina Galata -date: Dec 13, 2016 03:30 ---- diff --git a/app/rss/articles/.links/Living (Android) without Kotlin.md b/app/rss/articles/.links/Living (Android) without Kotlin.md deleted file mode 100644 index fb5af837f..000000000 --- a/app/rss/articles/.links/Living (Android) without Kotlin.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Living (Android) without Kotlin' -url: https://hackernoon.com/living-android-without-kotlin-db7391a2b170#.kme29gfhg -categories: - - Kotlin - - Android -author: Piotr Ślesarew -date: Dec 21, 2016 04:10 ---- diff --git a/app/rss/articles/.links/Seductive Code.md b/app/rss/articles/.links/Seductive Code.md deleted file mode 100644 index 7e434dcda..000000000 --- a/app/rss/articles/.links/Seductive Code.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Seductive Code' -url: https://publicobject.com/2016/12/19/seductive-code/ -categories: - - Kotlin - - Java -author: Jesse Wilson -date: Dec 19, 2016 02:35 ---- diff --git a/app/rss/articles/.links/Setting animation scale for Android UI tests.md b/app/rss/articles/.links/Setting animation scale for Android UI tests.md deleted file mode 100644 index c63dd58d6..000000000 --- a/app/rss/articles/.links/Setting animation scale for Android UI tests.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Setting animation scale for Android UI tests' -url: http://www.thedroidsonroids.com/blog/setting-animation-scale-for-android-ui-tests/ -categories: - - Kotlin - - Android -author: Karol Wrótniak -date: Dec 11, 2016 03:30 ---- diff --git a/app/rss/articles/.new/Why You Must Try Kotlin For Android Development.md b/app/rss/articles/.new/Why You Must Try Kotlin For Android Development.md deleted file mode 100644 index ec624d2a6..000000000 --- a/app/rss/articles/.new/Why You Must Try Kotlin For Android Development.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Why You Must Try Kotlin For Android Development ?' -url: https://medium.com/@amitshekhar/why-you-must-try-kotlin-for-android-development-e14d00c8084b#.2w8jdujf8 -categories: - - Kotlin -author: Amit Shekhar -date: Nov 10, 2016 03:06 ---- - diff --git "a/app/rss/articles/.russian/\320\221\320\265\320\263\320\273\321\213\320\271 \320\262\320\267\320\263\320\273\321\217\320\264 \320\275\320\260 Async-Await \320\262 Android.md" "b/app/rss/articles/.russian/\320\221\320\265\320\263\320\273\321\213\320\271 \320\262\320\267\320\263\320\273\321\217\320\264 \320\275\320\260 Async-Await \320\262 Android.md" deleted file mode 100644 index 37e8a97da..000000000 --- "a/app/rss/articles/.russian/\320\221\320\265\320\263\320\273\321\213\320\271 \320\262\320\267\320\263\320\273\321\217\320\264 \320\275\320\260 Async-Await \320\262 Android.md" +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: 'Беглый взгляд на Async-Await в Android' -url: https://habrahabr.ru/post/314574/ -lang: ru -categories: - - Kotlin - - Android -author: Макс Ровкин -date: Nov 8, 2016 03:19 ---- diff --git "a/app/rss/articles/.russian/\320\237\320\276\320\263\321\200\321\203\320\266\320\265\320\275\320\270\320\265 \320\262 Async-Await \320\262 Android.md" "b/app/rss/articles/.russian/\320\237\320\276\320\263\321\200\321\203\320\266\320\265\320\275\320\270\320\265 \320\262 Async-Await \320\262 Android.md" deleted file mode 100644 index 3121732f4..000000000 --- "a/app/rss/articles/.russian/\320\237\320\276\320\263\321\200\321\203\320\266\320\265\320\275\320\270\320\265 \320\262 Async-Await \320\262 Android.md" +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: 'Погружение в Async-Await в Android' -url: https://habrahabr.ru/post/314656/ -lang: ru -categories: - - Kotlin - - Android -author: Макс Ровкин -date: Nov 9, 2016 03:20 ---- diff --git a/app/rss/articles/.template.md b/app/rss/articles/.template.md deleted file mode 100644 index c48e3a8e1..000000000 --- a/app/rss/articles/.template.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: '' -url: https://domchristie.github.io/to-markdown/ -categories: - - - - Kotlin -author: JetBrains -date: Feb 20, 2016 15:44 -enclosure: - url: http://site.com/file.mp3 - size: 42 ---- diff --git a/app/rss/articles/Andrey Breslav Kotlin Coroutines, JVMLS 2016.md b/app/rss/articles/Andrey Breslav Kotlin Coroutines, JVMLS 2016.md deleted file mode 100644 index 594ab0e54..000000000 --- a/app/rss/articles/Andrey Breslav Kotlin Coroutines, JVMLS 2016.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: 'Andrey Breslav: Kotlin Coroutines, JVMLS 2016' -url: https://www.youtube.com/watch?v=4W3ruTWUhpw -type: video -categories: - - Kotlin - - Coroutines -author: Andrey Breslav -date: Aug 03, 2016 00:00 ---- - - diff --git a/app/rss/articles/FRP + Kotlin.md b/app/rss/articles/FRP + Kotlin.md deleted file mode 100644 index dcb3dbfc8..000000000 --- a/app/rss/articles/FRP + Kotlin.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: 'FRP + Kotlin' -url: https://drive.google.com/file/d/0BxCm4NRlzb3PWjNNaG1KS0Utckk/view -categories: - - Kotlin - - FP -type: slides -author: Giorgio Natili -date: Nov 25, 2016 01:22 ---- - -![Photo from meetup](http://i.imgur.com/DOlI1Of.jpg) - -[Slides](https://drive.google.com/file/d/0BxCm4NRlzb3PWjNNaG1KS0Utckk/view) diff --git a/app/rss/articles/Fun with Kotlin.md b/app/rss/articles/Fun with Kotlin.md deleted file mode 100644 index fc2d2cdb9..000000000 --- a/app/rss/articles/Fun with Kotlin.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: 'Fun with Kotlin' -url: https://vimeo.com/151846078 -type: video -categories: - - Kotlin -author: Eder Bastos -date: Jan 14, 2016 18:54 ---- - -[Fun with Kotlin](https://vimeo.com/151846078) diff --git a/app/rss/articles/Functional Programming in Kotlin with funKTionale (Video).md b/app/rss/articles/Functional Programming in Kotlin with funKTionale (Video).md deleted file mode 100644 index 560f84dd1..000000000 --- a/app/rss/articles/Functional Programming in Kotlin with funKTionale (Video).md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: 'Functional Programming in Kotlin with funKTionale (Video)' -url: https://www.youtube.com/watch?v=klakgWp1KWg -categories: - - Kotlin -type: video -author: Mario Arias -date: Dec 16, 2016 10:37 ---- - -[Slides](https://speakerdeck.com/marioariasc/functional-programming-in-kotlin-with-funktionale-2) - - diff --git a/app/rss/articles/Functional Programming in Kotlin with funKTionale.md b/app/rss/articles/Functional Programming in Kotlin with funKTionale.md deleted file mode 100644 index 5096587fc..000000000 --- a/app/rss/articles/Functional Programming in Kotlin with funKTionale.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: 'Functional Programming in Kotlin with funKTionale' -url: https://speakerdeck.com/marioariasc/functional-programming-in-kotlin-with-funktionale-1 -categories: - - Kotlin - - Functional Programming -type: slides -author: Mario Arias -date: Sep 29, 2016 08:04 ---- - -_v1_ - -[Slides on SpeakerDeck](https://speakerdeck.com/marioariasc/functional-programming-in-kotlin-with-funktionale-1) - -_v2_ - -[Slides on SpeakerDeck](https://speakerdeck.com/marioariasc/functional-programming-in-kotlin-with-funktionale-2) diff --git a/app/rss/articles/GeeCON Prague 2014 Andrey Cheptsov - A Reactive and Type-safe Kotlin DSL for NoSQL and SQL.md b/app/rss/articles/GeeCON Prague 2014 Andrey Cheptsov - A Reactive and Type-safe Kotlin DSL for NoSQL and SQL.md deleted file mode 100644 index d7076bd43..000000000 --- a/app/rss/articles/GeeCON Prague 2014 Andrey Cheptsov - A Reactive and Type-safe Kotlin DSL for NoSQL and SQL.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: 'GeeCON Prague 2014: Andrey Cheptsov - A Reactive and Type-safe Kotlin DSL for NoSQL and SQL' -url: https://vimeo.com/110781020 -type: video -categories: - - Kotlin - - SQL -author: Andrey Cheptsov -date: Nov 03, 2014 09:11 ---- -[GeeCON Prague 2014: Andrey Cheptsov - A Reactive and Type-safe Kotlin DSL for NoSQL and SQL](https://vimeo.com/110781020) diff --git a/app/rss/articles/Generating Kotlin Code for Better Refactorings, Tests, and IDE Support.md b/app/rss/articles/Generating Kotlin Code for Better Refactorings, Tests, and IDE Support.md deleted file mode 100644 index b6cd0d90d..000000000 --- a/app/rss/articles/Generating Kotlin Code for Better Refactorings, Tests, and IDE Support.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: 'Generating Kotlin Code for Better Refactorings, Tests, and IDE Support' -url: https://docs.google.com/presentation/d/1pgzNnA4R3LU4hPnx0KTvQ0NFj23rPyq-ROr8kOiaxlM/edit#slide=id.p -categories: - - Kotlin -type: slides -author: Eugene Petrenko -date: Sep 20, 2016 11:51 ---- -[Slides on Google Slides](https://docs.google.com/presentation/d/1pgzNnA4R3LU4hPnx0KTvQ0NFj23rPyq-ROr8kOiaxlM/edit#slide=id.p) diff --git a/app/rss/articles/JVMLS 2015 - Flexible Types in Kotlin.md b/app/rss/articles/JVMLS 2015 - Flexible Types in Kotlin.md deleted file mode 100644 index 126b38ae3..000000000 --- a/app/rss/articles/JVMLS 2015 - Flexible Types in Kotlin.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: 'JVMLS 2015 - Flexible Types in Kotlin' -url: https://www.youtube.com/watch?v=2IhT8HACc2E -type: video -categories: - - Kotlin -author: Andrey Breslav -date: Aug 12, 2015 21:54 ---- - - diff --git a/app/rss/articles/Kotlin + Android.md b/app/rss/articles/Kotlin + Android.md deleted file mode 100644 index a2b569fe3..000000000 --- a/app/rss/articles/Kotlin + Android.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: 'Kotlin + Android' -url: https://speakerdeck.com/dmytrodanylyk/kotlin-plus-android -type: slides -categories: - - Kotlin - - Android -author: Dmytro Danylyk -date: Apr 21, 2016 11:08 ---- - -[Slides](https://speakerdeck.com/dmytrodanylyk/kotlin-plus-android) diff --git a/app/rss/articles/Kotlin - Ready for Production.md b/app/rss/articles/Kotlin - Ready for Production.md deleted file mode 100644 index f61fbdbe6..000000000 --- a/app/rss/articles/Kotlin - Ready for Production.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: 'Kotlin - Ready for Production' -url: https://vimeo.com/181814363 -categories: - - Kotlin -type: video -author: Hadi Hariri -date: Sep 07, 2016 12:21 ---- - - -Kotlin - Ready for Production : Hadi Hariri from JavaZone on Vimeo. - -[Transcript](https://realm.io/news/gotocph-hadi-hariri-kotlin-ready-for-production/) diff --git a/app/rss/articles/Kotlin Lang.md b/app/rss/articles/Kotlin Lang.md deleted file mode 100644 index a67d68fa9..000000000 --- a/app/rss/articles/Kotlin Lang.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: 'Kotlin Lang' -url: https://speakerdeck.com/developer/kotlin-lang -categories: - - Kotlin - - Android -type: slides -author: Jemo Mgebrishvili -date: Nov 20, 2016 01:34 ---- - -[Slides](https://speakerdeck.com/developer/kotlin-lang) diff --git a/app/rss/articles/Kotlin New Hope in a Java 6 Wasteland.md b/app/rss/articles/Kotlin New Hope in a Java 6 Wasteland.md deleted file mode 100644 index c44f5b0fc..000000000 --- a/app/rss/articles/Kotlin New Hope in a Java 6 Wasteland.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: 'Kotlin: New Hope in a Java 6 Wasteland' -url: https://speakerdeck.com/pardom/kotlin-new-hope-in-a-java-6-wasteland -type: slides -categories: - - Kotlin - - Android -author: Michael Pardo -date: May 09, 2015 00:00 ---- - -[Slides](https://speakerdeck.com/pardom/kotlin-new-hope-in-a-java-6-wasteland) diff --git a/app/rss/articles/Kotlin Night London - Nov 2016.md b/app/rss/articles/Kotlin Night London - Nov 2016.md deleted file mode 100644 index 86b7f491c..000000000 --- a/app/rss/articles/Kotlin Night London - Nov 2016.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: 'Kotlin Night London' -url: https://www.youtube.com/watch?list=PLoo7Ank5cc7FaemZS4sZC0oFnSbdJ-PiH&v=TMZD1GxAC8E -categories: - - Kotlin -type: video -author: JetBrains -date: Nov 15, 2016 12:26 ---- -[Announce](https://blog.jetbrains.com/kotlin/2016/09/kotlin-night-in-london/) | [Post in Kotlin Blog](https://blog.jetbrains.com/kotlin/2016/11/kotlin-night-in-london-recordings/) - - diff --git a/app/rss/articles/Kotlin NoSQL for MongoDB in Action.md b/app/rss/articles/Kotlin NoSQL for MongoDB in Action.md deleted file mode 100644 index 98faabf4c..000000000 --- a/app/rss/articles/Kotlin NoSQL for MongoDB in Action.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: 'Kotlin NoSQL for MongoDB in Action' -url: https://www.youtube.com/watch?v=80xgl3KThvM -type: video -categories: - - Kotlin - - SQL -author: Andrey Cheptsov -date: Oct 22, 2015 21:54 ---- - - diff --git a/app/rss/articles/Kotlin for Java developers.md b/app/rss/articles/Kotlin for Java developers.md deleted file mode 100644 index 851d845ac..000000000 --- a/app/rss/articles/Kotlin for Java developers.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: 'Kotlin for Java developers' -url: https://www.youtube.com/watch?v=vmjfIRsawlg -type: video -categories: - - Kotlin -author: Hadi Hariri -date: Dec 11, 2014 21:54 ---- - diff --git a/app/rss/articles/Kotlin in Real Projects.md b/app/rss/articles/Kotlin in Real Projects.md deleted file mode 100644 index 8d8dbdf1d..000000000 --- a/app/rss/articles/Kotlin in Real Projects.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: 'Kotlin in Real Projects' -url: https://www.youtube.com/watch?v=lpPbCWpBM3I -categories: - - Kotlin -author: Anton Keks -type: video -date: Nov 01, 2016 12:48 ---- - - - diff --git a/app/rss/articles/Kotlin vs Java puzzlers - Svetlana Isakova.md b/app/rss/articles/Kotlin vs Java puzzlers - Svetlana Isakova.md deleted file mode 100644 index d082f1f24..000000000 --- a/app/rss/articles/Kotlin vs Java puzzlers - Svetlana Isakova.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: 'Kotlin vs Java puzzlers' -url: https://vimeo.com/105758307 -type: video -categories: - - Kotlin -author: Svetlana Isakova -date: Sep 10, 2014 09:17 ---- - -[Kotlin vs Java puzzlers - Svetlana Isakova](https://vimeo.com/105758307) diff --git a/app/rss/articles/Link Kotlin DSL Anko.md b/app/rss/articles/Link Kotlin DSL Anko.md deleted file mode 100644 index 07cb83148..000000000 --- a/app/rss/articles/Link Kotlin DSL Anko.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: 'Kotlin DSL: Anko' -url: https://docs.google.com/presentation/d/12mkyGQZO22kf0_6kp2K6xyFdpg0nBLqGtNcVR-cV4M8/pub -type: slides -categories: - - Kotlin - - Android -author: '@maciekjanusz' -date: Apr 06, 2016 08:54 ---- - -[Kotlin DSL: Anko](https://docs.google.com/presentation/d/12mkyGQZO22kf0_6kp2K6xyFdpg0nBLqGtNcVR-cV4M8/pub) diff --git a/app/rss/articles/Spring Tips the Kotlin Programming Language.md b/app/rss/articles/Spring Tips the Kotlin Programming Language.md deleted file mode 100644 index 3e3ef2d50..000000000 --- a/app/rss/articles/Spring Tips the Kotlin Programming Language.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: 'Spring Tips: the Kotlin Programming Language' -url: https://www.youtube.com/watch?v=90WRtrbRi0Y -categories: - - Kotlin -author: Josh Long -type: video -date: Oct 19, 2016 09:23 ---- - -Hi Spring fans! In this tip, we’ll quickly look at the Kotlin programming language and some very high-level things you need to know when building Spring Boot and Kotlin applications - - diff --git a/app/rss/articles/Type safe JavaFX CSS with TornadoFX.md b/app/rss/articles/Type safe JavaFX CSS with TornadoFX.md deleted file mode 100644 index 51bb4cf5f..000000000 --- a/app/rss/articles/Type safe JavaFX CSS with TornadoFX.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: 'Type safe JavaFX CSS with TornadoFX' -url: https://www.youtube.com/watch?v=rjc8_HGHy3c -type: video -categories: - - Kotlin - - TornadoFx -author: Edvin Syse -date: Apr 24, 2016 00:00 ---- - - diff --git "a/app/rss/articles/[RU] Podcast \320\240\320\260\320\267\320\261\320\276\321\200 \320\237\320\276\320\273\320\265\321\202\320\276\320\262 Episode 102 \342\200\224 Kotlin, \321\202\320\265\321\201\321\202\321\213 \320\270 \320\267\320\264\320\276\321\200\320\276\320\262\321\213\320\271 \321\201\320\276\320\275.md" "b/app/rss/articles/[RU] Podcast \320\240\320\260\320\267\320\261\320\276\321\200 \320\237\320\276\320\273\320\265\321\202\320\276\320\262 Episode 102 \342\200\224 Kotlin, \321\202\320\265\321\201\321\202\321\213 \320\270 \320\267\320\264\320\276\321\200\320\276\320\262\321\213\320\271 \321\201\320\276\320\275.md" deleted file mode 100644 index 9c243d93d..000000000 --- "a/app/rss/articles/[RU] Podcast \320\240\320\260\320\267\320\261\320\276\321\200 \320\237\320\276\320\273\320\265\321\202\320\276\320\262 Episode 102 \342\200\224 Kotlin, \321\202\320\265\321\201\321\202\321\213 \320\270 \320\267\320\264\320\276\321\200\320\276\320\262\321\213\320\271 \321\201\320\276\320\275.md" +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: '(RU) Podcast Разбор Полетов: Episode 102 — Kotlin, тесты и здоровый сон.' -url: http://razbor-poletov.com/2016/02/episode-102.html -categories: - - Kotlin - - Podcast -author: Dmitry Jemerov, Viktor Gamov, Alexey Abashev, Anton Arphipov, Dmitry Churbanov, Anton Arhipov -date: Feb 04, 2016 21:54 -enclosure: - url: http://traffic.libsyn.com/razborpoletov/razbor_102.mp3 - size: 70319173 ---- - -## Мероприятия - -1. http://jbreak.ru/ -1. https://fosdem.org/2016/ - -## Темки - -1. Kotlin 1.0 RC - Философия Kotlin -1. JavaTest, TCK, JTreg и его связь с TestNG/JUnit и прочие вопросы в знатоку по этим вопросам -1. Что нужно есть и сколько нужно спать, что бы быть белым русским мужчиной в Америке - -## Полезняшки - -1. Клиент для Redis - [Medis](https://github.com/luin/medis) -1. http://kotlin.link/ -1. https://github.com/Originate/git-town -1. https://libraries.io/ diff --git "a/app/rss/articles/[RU] \320\224\320\274\320\270\321\202\321\200\320\270\320\271 \320\237\320\276\320\273\320\270\321\211\321\203\320\272 - Kotlin + Android \320\277\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\270\320\271 \320\273\320\270\320\272\320\261\320\265\320\267.md" "b/app/rss/articles/[RU] \320\224\320\274\320\270\321\202\321\200\320\270\320\271 \320\237\320\276\320\273\320\270\321\211\321\203\320\272 - Kotlin + Android \320\277\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\270\320\271 \320\273\320\270\320\272\320\261\320\265\320\267.md" deleted file mode 100644 index f6e597b7b..000000000 --- "a/app/rss/articles/[RU] \320\224\320\274\320\270\321\202\321\200\320\270\320\271 \320\237\320\276\320\273\320\270\321\211\321\203\320\272 - Kotlin + Android \320\277\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\270\320\271 \320\273\320\270\320\272\320\261\320\265\320\267.md" +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: '(RU) Дмитрий Полищук - Kotlin + Android: практический ликбез' -url: https://www.youtube.com/watch?v=2oVpnArCdWI -type: video -categories: - - Kotlin - - Android -author: 'Дмитрий Полищук' -date: Mar 09, 2016 00:00 ---- - - diff --git a/app/rss/markdown.ts b/app/rss/markdown.ts deleted file mode 100644 index c486b5588..000000000 --- a/app/rss/markdown.ts +++ /dev/null @@ -1,11 +0,0 @@ -const remark = require('remark'); -const html = require('remark-html'); -const hljs = require('remark-highlight.js'); - -const processor = remark().use(html).use(hljs); - -module.exports = function (content) { - return processor.process(content, { - commonmark: true - }); -}; diff --git a/app/src/locations.tsx b/app/src/locations.tsx index c71f0e090..9c2726717 100644 --- a/app/src/locations.tsx +++ b/app/src/locations.tsx @@ -1,5 +1,9 @@ export function searchString(object: QueryParams): string { - return "?" + Object.keys(object).map(key => `${key}=${encodeURIComponent(object[key])}`).join("&") + return "?" + Object + .keys(object) + .filter(key => object[key] !== "") + .map(key => `${key}=${encodeURIComponent(object[key])}`) + .join("&"); } interface QueryParams { diff --git a/app/src/page/page.tsx b/app/src/page/page.tsx index 0c87ea7db..1cf7e8724 100644 --- a/app/src/page/page.tsx +++ b/app/src/page/page.tsx @@ -35,8 +35,6 @@ function reduceSubcategory(subcategory, searchTerm) { return acc; }, []); - console.log(links); - return { name: subcategory.name, links diff --git a/articles/.links/An adventure with Kotlin - Part I.kts b/articles/.links/An adventure with Kotlin - Part I.kts new file mode 100644 index 000000000..6eb969923 --- /dev/null +++ b/articles/.links/An adventure with Kotlin - Part I.kts @@ -0,0 +1,24 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ + +""" + +Article( + title = "An adventure with Kotlin - Part I", + url = "http://angrybyte.me/post/154701023805/kotlin-adventures-1", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Milos Marinkovic", + date = LocalDate.of(2016, 12, 20), + body = body +) diff --git a/articles/.links/Android: Improving sign-in experience with Google Sign-In and SmartLock.kts b/articles/.links/Android: Improving sign-in experience with Google Sign-In and SmartLock.kts new file mode 100644 index 000000000..cbd8d7cca --- /dev/null +++ b/articles/.links/Android: Improving sign-in experience with Google Sign-In and SmartLock.kts @@ -0,0 +1,24 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ + +""" + +Article( + title = "Android: Improving sign-in experience with Google Sign-In and SmartLock", + url = "https://medium.com/@p.tournaris/android-improving-sign-in-experience-with-google-sign-in-and-smartlock-f0bfd789602a#.djgn5w44q", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Pavlos-Petros Tournaris", + date = LocalDate.of(2016, 12, 14), + body = body +) diff --git a/articles/.links/Classes in Kotlin: More power with less effort.kts b/articles/.links/Classes in Kotlin: More power with less effort.kts new file mode 100644 index 000000000..dfe3f712f --- /dev/null +++ b/articles/.links/Classes in Kotlin: More power with less effort.kts @@ -0,0 +1,23 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ + +""" + +Article( + title = "Classes in Kotlin: More power with less effort", + url = "http://antonioleiva.com/classes-kotlin/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Antonio Leiva", + date = LocalDate.of(2016, 12, 7), + body = body +) diff --git a/articles/.links/Coding Functional Android Apps in Kotlin: Getting Started.kts b/articles/.links/Coding Functional Android Apps in Kotlin: Getting Started.kts new file mode 100644 index 000000000..63f0cd9f6 --- /dev/null +++ b/articles/.links/Coding Functional Android Apps in Kotlin: Getting Started.kts @@ -0,0 +1,24 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ + +""" + +Article( + title = "Coding Functional Android Apps in Kotlin: Getting Started", + url = "https://code.tutsplus.com/tutorials/start-developing-android-apps-with-kotlin-part-1--cms-27827", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Jessica Thornsby", + date = LocalDate.of(2016, 12, 19), + body = body +) diff --git a/articles/.links/Custom Views in Android with Kotlin.kts b/articles/.links/Custom Views in Android with Kotlin.kts new file mode 100644 index 000000000..56db434dc --- /dev/null +++ b/articles/.links/Custom Views in Android with Kotlin.kts @@ -0,0 +1,24 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ + +""" + +Article( + title = "Custom Views in Android with Kotlin", + url = "https://antonioleiva.com/custom-views-android-kotlin/", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Antonio Leiva", + date = LocalDate.of(2016, 12, 27), + body = body +) diff --git a/articles/.links/FoldingTabBar Comes to Android. Thank You, Google!.kts b/articles/.links/FoldingTabBar Comes to Android. Thank You, Google!.kts new file mode 100644 index 000000000..e786d6e30 --- /dev/null +++ b/articles/.links/FoldingTabBar Comes to Android. Thank You, Google!.kts @@ -0,0 +1,24 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ + +""" + +Article( + title = "FoldingTabBar Comes to Android. Thank You, Google!", + url = "https://yalantis.com/blog/foldingtabbar-for-android/", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Andriy Hristyan", + date = LocalDate.of(2016, 12, 15), + body = body +) diff --git a/articles/.links/Implementing Android App Shortcuts.kts b/articles/.links/Implementing Android App Shortcuts.kts new file mode 100644 index 000000000..611d6d0f1 --- /dev/null +++ b/articles/.links/Implementing Android App Shortcuts.kts @@ -0,0 +1,24 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ + +""" + +Article( + title = "Implementing Android App Shortcuts", + url = "https://medium.com/@andreworobator/implementing-android-app-shortcuts-74feb524959b#.vrst29h9p", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Andrew Orobator", + date = LocalDate.of(2016, 12, 19), + body = body +) diff --git a/articles/.links/Java vs. Kotlin: Should You Be Using Kotlin for Android Development?.kts b/articles/.links/Java vs. Kotlin: Should You Be Using Kotlin for Android Development?.kts new file mode 100644 index 000000000..1a9e350ab --- /dev/null +++ b/articles/.links/Java vs. Kotlin: Should You Be Using Kotlin for Android Development?.kts @@ -0,0 +1,24 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ + +""" + +Article( + title = "Java vs. Kotlin: Should You Be Using Kotlin for Android Development?", + url = "https://code.tutsplus.com/articles/java-vs-kotlin-should-you-be-using-kotlin-for-android-development--cms-27846", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Jessica Thornsby", + date = LocalDate.of(2016, 12, 12), + body = body +) diff --git a/articles/.links/Kotlin VS Java: Basic Syntax Differences.kts b/articles/.links/Kotlin VS Java: Basic Syntax Differences.kts new file mode 100644 index 000000000..fb23648fe --- /dev/null +++ b/articles/.links/Kotlin VS Java: Basic Syntax Differences.kts @@ -0,0 +1,24 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ + +""" + +Article( + title = "Kotlin VS Java: Basic Syntax Differences", + url = "https://yalantis.com/blog/kotlin-vs-java-syntax/", + categories = listOf( + "Kotlin", + "Java" + ), + type = article, + lang = EN, + author = "Irina Galata", + date = LocalDate.of(2016, 12, 13), + body = body +) diff --git a/articles/.links/Living (Android) without Kotlin.kts b/articles/.links/Living (Android) without Kotlin.kts new file mode 100644 index 000000000..a1f8f9c8b --- /dev/null +++ b/articles/.links/Living (Android) without Kotlin.kts @@ -0,0 +1,24 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ + +""" + +Article( + title = "Living (Android) without Kotlin", + url = "https://hackernoon.com/living-android-without-kotlin-db7391a2b170#.kme29gfhg", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Piotr Ślesarew", + date = LocalDate.of(2016, 12, 21), + body = body +) diff --git a/articles/.links/Seductive Code.kts b/articles/.links/Seductive Code.kts new file mode 100644 index 000000000..fc6407907 --- /dev/null +++ b/articles/.links/Seductive Code.kts @@ -0,0 +1,24 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ + +""" + +Article( + title = "Seductive Code", + url = "https://publicobject.com/2016/12/19/seductive-code/", + categories = listOf( + "Kotlin", + "Java" + ), + type = article, + lang = EN, + author = "Jesse Wilson", + date = LocalDate.of(2016, 12, 19), + body = body +) diff --git a/articles/.links/Setting animation scale for Android UI tests.kts b/articles/.links/Setting animation scale for Android UI tests.kts new file mode 100644 index 000000000..8af5e2887 --- /dev/null +++ b/articles/.links/Setting animation scale for Android UI tests.kts @@ -0,0 +1,24 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ + +""" + +Article( + title = "Setting animation scale for Android UI tests", + url = "http://www.thedroidsonroids.com/blog/setting-animation-scale-for-android-ui-tests/", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Karol Wrótniak", + date = LocalDate.of(2016, 12, 11), + body = body +) diff --git a/articles/.links/Why You Must Try Kotlin For Android Development.kts b/articles/.links/Why You Must Try Kotlin For Android Development.kts new file mode 100644 index 000000000..f1f872809 --- /dev/null +++ b/articles/.links/Why You Must Try Kotlin For Android Development.kts @@ -0,0 +1,24 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ + + +""" + +Article( + title = "Why You Must Try Kotlin For Android Development?", + url = "https://medium.com/@amitshekhar/why-you-must-try-kotlin-for-android-development-e14d00c8084b#.2w8jdujf8", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Amit Shekhar", + date = LocalDate.of(2016, 11, 10), + body = body +) diff --git a/app/rss/articles/.new/Draft b/articles/.new/Draft similarity index 100% rename from app/rss/articles/.new/Draft rename to articles/.new/Draft diff --git a/articles/chinese/Redux for Android using Kotlin.kts b/articles/chinese/Redux for Android using Kotlin.kts new file mode 100644 index 000000000..43873fd4f --- /dev/null +++ b/articles/chinese/Redux for Android using Kotlin.kts @@ -0,0 +1,24 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.ZH +import link.kotlin.scripts.LinkType.video +import java.time.LocalDate + +// language=Markdown +val body = """ + +""" + +Article( + title = "Redux for Android using Kotlin", + url = "https://www.youtube.com/watch?v=BUAxqiGrKOc", + categories = listOf( + "Kotlin", + "Android" + ), + type = video, + lang = ZH, + author = "Nevin Chen", + date = LocalDate.of(2016, 11, 22), + body = body +) diff --git a/app/rss/articles/Exploring the Kotlin Standard Library - Part 1.md b/articles/english/2013/Exploring the Kotlin Standard Library - Part 1.kts similarity index 94% rename from app/rss/articles/Exploring the Kotlin Standard Library - Part 1.md rename to articles/english/2013/Exploring the Kotlin Standard Library - Part 1.kts index 752bb0337..b51d73ac5 100644 --- a/app/rss/articles/Exploring the Kotlin Standard Library - Part 1.md +++ b/articles/english/2013/Exploring the Kotlin Standard Library - Part 1.kts @@ -1,11 +1,11 @@ ---- -title: 'Exploring the Kotlin Standard Library - Part 1' -url: http://jamie.mccrindle.org/2013/01/exploring-kotlin-standard-library-part-1.html -categories: - - Kotlin -author: Jamie McCrindle -date: Jan 22, 2013 05:01 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ Exploring the API docs and source code for a language's standard library is usually illuminating and Kotlin is no different. In this series, I thought I'd look at some of the highlights of the Kotlin stdlib. In Part 1, I'll be going over the default Kotlin namespace. Both the [API docs](http://jetbrains.github.com/kotlin/versions/snapshot/apidocs/index.html) and the [source code](https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib) for the stdlib are available on github. @@ -251,3 +251,17 @@ assertEquals(listOf(1, 2, 3, 4, 5), (1..100) takeWhile { it <= 5 }) val takeWhileToList = arrayListOf() assertEquals(listOf(1, 2, 3, 4, 5), (1..100).takeWhileTo(takeWhileToList) { it <= 5 }) ``` +""" + +Article( + title = "Exploring the Kotlin Standard Library - Part 1", + url = "http://jamie.mccrindle.org/2013/01/exploring-kotlin-standard-library-part-1.html", + categories = listOf( + "Kotlin" + ), + type = article, + lang = LanguageCodes.EN, + author = "Jamie McCrindle", + date = LocalDate.of(2013, 1, 22), + body = body +) diff --git a/app/rss/articles/Exploring the Kotlin Standard Library - Part 2.md b/articles/english/2013/Exploring the Kotlin Standard Library - Part 2.kts similarity index 90% rename from app/rss/articles/Exploring the Kotlin Standard Library - Part 2.md rename to articles/english/2013/Exploring the Kotlin Standard Library - Part 2.kts index 43604db1d..c9b9b5335 100644 --- a/app/rss/articles/Exploring the Kotlin Standard Library - Part 2.md +++ b/articles/english/2013/Exploring the Kotlin Standard Library - Part 2.kts @@ -1,11 +1,11 @@ ---- -title: 'Exploring the Kotlin Standard Library - Part 2' -url: http://jamie.mccrindle.org/2013/01/exploring-kotlin-standard-library-part-2.html -categories: - - Kotlin -author: Jamie McCrindle -date: Jan 25, 2013 07:58 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ In [Part 1](http://jamie.mccrindle.org/2013/01/exploring-kotlin-standard-library-part-1.html) of this series, I went through the default Kotlin namespace. In Part 2 I'll be going over [kotlin.io](http://jetbrains.github.com/kotlin/versions/snapshot/apidocs/kotlin/io/package-summary.html). Most of the public function in kotlin.io are overloaded versions of print and println, which all delegate to System.out. @@ -148,3 +148,18 @@ File("/tmp/helloworld.bin").writeBytes("Hello World!".getBytes()) // write Hello World as bytes to /tmp/helloworld.txt File("/tmp/helloworld.txt").writeText("Hello World!") ``` + +""" + +Article( + title = "Exploring the Kotlin Standard Library - Part 2", + url = "http://jamie.mccrindle.org/2013/01/exploring-kotlin-standard-library-part-2.html", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Jamie McCrindle", + date = LocalDate.of(2013, 1, 25), + body = body +) diff --git a/app/rss/articles/Exploring the Kotlin Standard Library - Part 3.md b/articles/english/2013/Exploring the Kotlin Standard Library - Part 3.kts similarity index 88% rename from app/rss/articles/Exploring the Kotlin Standard Library - Part 3.md rename to articles/english/2013/Exploring the Kotlin Standard Library - Part 3.kts index 829088eaa..f9754330a 100644 --- a/app/rss/articles/Exploring the Kotlin Standard Library - Part 3.md +++ b/articles/english/2013/Exploring the Kotlin Standard Library - Part 3.kts @@ -1,11 +1,11 @@ ---- -title: 'Exploring the Kotlin Standard Library - Part 3' -url: http://jamie.mccrindle.org/2013/02/exploring-kotlin-standard-library-part-3.html -categories: - - Kotlin -author: Jamie McCrindle -date: Feb 07, 2013 09:04 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ In [Part 1](http://jamie.mccrindle.org/2013/01/exploring-kotlin-standard-library-part-1.html) and [Part 2](http://jamie.mccrindle.org/2013/01/exploring-kotlin-standard-library-part-2.html) of this series, I went through the default Kotlin namespace and kotlin.io. In Part 3 I'll be going over kotlin.concurrent. The public functions in kotlin.concurrent are all utilities for creating timers, threads or timer tasks e.g. @@ -145,3 +145,18 @@ val tryLockResult = tryLock.tryLock({ // run if we couldn't get a lock }); ``` + +""" + +Article( + title = "Exploring the Kotlin Standard Library - Part 3", + url = "http://jamie.mccrindle.org/2013/02/exploring-kotlin-standard-library-part-3.html", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Jamie McCrindle", + date = LocalDate.of(2013, 2, 7), + body = body +) diff --git a/app/rss/articles/The Advent of Kotlin A Conversation with JetBrains' Andrey Breslav.md b/articles/english/2013/The Advent of Kotlin A Conversation with JetBrains' Andrey Breslav.kts similarity index 96% rename from app/rss/articles/The Advent of Kotlin A Conversation with JetBrains' Andrey Breslav.md rename to articles/english/2013/The Advent of Kotlin A Conversation with JetBrains' Andrey Breslav.kts index ae517ed15..68387c7c1 100644 --- a/app/rss/articles/The Advent of Kotlin A Conversation with JetBrains' Andrey Breslav.md +++ b/articles/english/2013/The Advent of Kotlin A Conversation with JetBrains' Andrey Breslav.kts @@ -1,11 +1,11 @@ ---- -title: 'The Advent of Kotlin: A Conversation with JetBrains'' Andrey Breslav' -url: http://www.oracle.com/technetwork/articles/java/breslav-1932170.html -categories: - - Kotlin -author: Janice J. Heiss -date: Apr 02, 2013 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ **Learn about Kotlin, a new statically typed language for the JVM.** _Among the important Java software developments in recent years is the advent of such alternative languages for the JVM as Groovy, Jython, and JRuby—and, more recently, the rise of Scala. A new statically typed language, Kotlin, named after a Russian island off the coast of St. Petersburg, where Kotlin's Andrey Breslav and the Kotlin team reside, has recently been getting attention. A brainchild of the highly lauded Czech software development company JetBrains, maker of the Java IDE IntelliJ IDEA, Kotlin was named Language of the Month in the_ [_January 2012 issue of_ Dr. Dobb's Journal](http://www.drdobbs.com/jvm/language-of-the-month-kotlin/232600836?pgno=2). @@ -180,3 +180,18 @@ Janice J. Heiss is the Java acquisitions editor at Oracle and a technology edito ## Join the Conversation Join the Java community conversation on [Facebook](https://www.facebook.com/ilovejava), [Twitter](https://twitter.com/#!/java), and the [Java Source Blog](https://blogs.oracle.com/java/)! + +""" + +Article( + title = "The Advent of Kotlin: A Conversation with JetBrains' Andrey Breslav", + url = "http://www.oracle.com/technetwork/articles/java/breslav-1932170.html", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Janice J. Heiss", + date = LocalDate.of(2013, 4, 2), + body = body +) diff --git "a/app/rss/articles/The Adventurous Developer\342\200\231s Guide to JVM languages \342\200\223 Kotlin.md" "b/articles/english/2013/The Adventurous Developer\342\200\231s Guide to JVM languages \342\200\223 Kotlin.kts" similarity index 95% rename from "app/rss/articles/The Adventurous Developer\342\200\231s Guide to JVM languages \342\200\223 Kotlin.md" rename to "articles/english/2013/The Adventurous Developer\342\200\231s Guide to JVM languages \342\200\223 Kotlin.kts" index 8eef6b88c..b073ec8c1 100644 --- "a/app/rss/articles/The Adventurous Developer\342\200\231s Guide to JVM languages \342\200\223 Kotlin.md" +++ "b/articles/english/2013/The Adventurous Developer\342\200\231s Guide to JVM languages \342\200\223 Kotlin.kts" @@ -1,11 +1,11 @@ ---- -title: 'The Adventurous Developer’s Guide to JVM languages – Kotlin' -url: http://zeroturnaround.com/rebellabs/the-adventurous-developers-guide-to-jvm-languages-kotlin/ -categories: - - Kotlin -author: Simon Maple -date: Jan 23, 2013 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ In this post we will focus on [Kotlin](http://kotlin.jetbrains.org/), with a simple [HTTP Server coding example](https://github.com/sjmaple/Kotlin-HTTP-Server) to showcase the language features and coding syntax. [![](http://devnet.jetbrains.net/servlet/JiveServlet/showImage/2-5456865-25537/KotlinLogo.png)](http://devnet.jetbrains.net/servlet/JiveServlet/showImage/2-5456865-25537/KotlinLogo.png) @@ -141,3 +141,18 @@ I’d like to look back in 6 months or a year to see how Kotlin has evolved, and **Don’t forget to check out the [HTTP Server sample Kotlin code on Github](https://github.com/sjmaple/Kotlin-HTTP-Server).** _Psst! If you liked this post, [we wrote a 50-page RebelLabs report](http://zeroturnaround.com/rebellabs/devs/the-adventurous-developers-guide-to-jvm-languages/) on Java 8, Scala, Groovy, Fantom, Clojure, Ceylon, Kotlin & Xtend._ + +""" + +Article( + title = "The Adventurous Developer’s Guide to JVM languages – Kotlin", + url = "http://zeroturnaround.com/rebellabs/the-adventurous-developers-guide-to-jvm-languages-kotlin/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Simon Maple", + date = LocalDate.of(2013, 1, 23), + body = body +) diff --git a/articles/english/2014/GeeCON Prague 2014 Andrey Cheptsov - A Reactive and Type-safe Kotlin DSL for NoSQL and SQL.kts b/articles/english/2014/GeeCON Prague 2014 Andrey Cheptsov - A Reactive and Type-safe Kotlin DSL for NoSQL and SQL.kts new file mode 100644 index 000000000..be66a40c1 --- /dev/null +++ b/articles/english/2014/GeeCON Prague 2014 Andrey Cheptsov - A Reactive and Type-safe Kotlin DSL for NoSQL and SQL.kts @@ -0,0 +1,25 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ +[GeeCON Prague 2014: Andrey Cheptsov - A Reactive and Type-safe Kotlin DSL for NoSQL and SQL](https://vimeo.com/110781020) + +""" + +Article( + title = "GeeCON Prague 2014: Andrey Cheptsov - A Reactive and Type-safe Kotlin DSL for NoSQL and SQL", + url = "https://vimeo.com/110781020", + categories = listOf( + "Kotlin", + "SQL" + ), + type = video, + lang = EN, + author = "Andrey Cheptsov", + date = LocalDate.of(2014, 11, 3), + body = body +) diff --git a/articles/english/2014/Kotlin for Java developers.kts b/articles/english/2014/Kotlin for Java developers.kts new file mode 100644 index 000000000..557284374 --- /dev/null +++ b/articles/english/2014/Kotlin for Java developers.kts @@ -0,0 +1,24 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ + + +""" + +Article( + title = "Kotlin for Java developers", + url = "https://www.youtube.com/watch?v=vmjfIRsawlg", + categories = listOf( + "Kotlin" + ), + type = video, + lang = EN, + author = "Hadi Hariri", + date = LocalDate.of(2014, 12, 11), + body = body +) diff --git a/articles/english/2014/Kotlin vs Java puzzlers - Svetlana Isakova.kts b/articles/english/2014/Kotlin vs Java puzzlers - Svetlana Isakova.kts new file mode 100644 index 000000000..3a483fa94 --- /dev/null +++ b/articles/english/2014/Kotlin vs Java puzzlers - Svetlana Isakova.kts @@ -0,0 +1,25 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ + +[Kotlin vs Java puzzlers - Svetlana Isakova](https://vimeo.com/105758307) + +""" + +Article( + title = "Kotlin vs Java puzzlers", + url = "https://vimeo.com/105758307", + categories = listOf( + "Kotlin" + ), + type = video, + lang = EN, + author = "Svetlana Isakova", + date = LocalDate.of(2014, 9, 10), + body = body +) diff --git a/app/rss/articles/Non-trivial constructors in Kotlin.md b/articles/english/2014/Non-trivial constructors in Kotlin.kts similarity index 87% rename from app/rss/articles/Non-trivial constructors in Kotlin.md rename to articles/english/2014/Non-trivial constructors in Kotlin.kts index 78e046fab..15fdca93f 100644 --- a/app/rss/articles/Non-trivial constructors in Kotlin.md +++ b/articles/english/2014/Non-trivial constructors in Kotlin.kts @@ -1,11 +1,11 @@ ---- -title: 'Non-trivial constructors in Kotlin' -url: http://alexshabanov.com/2014/12/01/non-trivial-constructors-in-kotlin/ -categories: - - Kotlin -author: Alex Shabanov -date: Dec 01, 2014 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Kotlin really simplifies things such as defining constructors and writing immutable objects for your application. For example, flexible Kotlin constructor definitions eliminate the need of [builder classes](http://en.wikipedia.org/wiki/Builder_pattern "Builder Pattern - Wikipedia") (you simply don’t need them in 99% of all the possible use cases, if you use Kotlin), thus reducing overhead of having immutable objects in your application, while retaining full flexibility and expressiveness. However, if you want to define non-trivial constructor (especially for [data classes](http://kotlinlang.org/docs/reference/data-classes.html "Kotlin Data Classes")) it might not be as trivial as just writing a function. @@ -56,3 +56,18 @@ val r2 = Ratio(numerator = 1, denominator = 4) // invoke will be called here ``` This is it, I hope you find it useful. + +""" + +Article( + title = "Non-trivial constructors in Kotlin", + url = "http://alexshabanov.com/2014/12/01/non-trivial-constructors-in-kotlin/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Alex Shabanov", + date = LocalDate.of(2014, 12, 1), + body = body +) diff --git a/app/rss/articles/Android + Kotlin = love.md b/articles/english/2015/Android + Kotlin = love.kts similarity index 94% rename from app/rss/articles/Android + Kotlin = love.md rename to articles/english/2015/Android + Kotlin = love.kts index 8194ff8cb..107e7c8e7 100644 --- a/app/rss/articles/Android + Kotlin = love.md +++ b/articles/english/2015/Android + Kotlin = love.kts @@ -1,12 +1,11 @@ ---- -title: 'Android + Kotlin = <3' -url: http://blog.zuehlke.com/en/android-kotlin/ -categories: - - Kotlin - - Android -author: Michael Sattler -date: Jul 20, 2015 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ The Android SDK has come a long way since its early days to make developing for Android as comfortable and efficient as possible. Yet there’s one thing that still gets in our way: The Java language. While more modern languages like C# or Swift make it possible to write code that is elegant and at the same time easy to read and understand, we’re still stuck with Java 7 for Android Development. Its cumbersome syntax for executing code on a different thread asynchronously, for example, or the fact that you require separate libs for even the most basic tasks like null-safe string comparison really make it a pain for development. ## A New Hope @@ -44,7 +43,7 @@ When adding a property to your class, you don’t write the backing field and ge public var context: Context? = null get set (value) { - $context = value + ${"$"}context = value if (context != null) { setupBluetooth() } @@ -117,7 +116,7 @@ When passing Lambdas to functions, they are usually in-lined in the function cal ```kotlin private var myCallback: Function1 = { param1: String -> - println("Hi $param1") + println("Hi ${"$"}param1") } ``` @@ -174,7 +173,7 @@ use { // Now "this" is the SQLiteDatabase, opened for read/write "title" to item.title, "checked" to item.checked) } catch (exception: SQLiteException) { // SQL exceptions can still occur, of course - error("INSERT threw exception: $exception") + error("INSERT threw exception: ${"$"}exception") } } // At the end of the block the DB is automatically closed ``` @@ -192,7 +191,7 @@ use { parseList(classParser()) } } catch (exception: SQLiteException) { - error("SELECT threw exception: $exception") + error("SELECT threw exception: ${"$"}exception") } } // Now process the result list @@ -205,3 +204,19 @@ And this is just the tip of the iceberg! Anko also provides simplified mechanism ## Conclusion Having tried out Kotlin in the context of Android development now, I can definitely see it becoming my new language of choice for Android development. It’s well made, mature and makes coding an absolute joy. The official Android documentation may be written for Java, but it’s easy to “translate” it to Kotlin, so any Android developer should definitely give Kotlin & Anko a try. Here’s hoping that Google will provide an Android API reference & guide in Kotlin in the near future, and that it will eventually become the de-facto standard for Android! + +""" + +Article( + title = "Android + Kotlin = <3", + url = "http://blog.zuehlke.com/en/android-kotlin/", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Michael Sattler", + date = LocalDate.of(2015, 7, 20), + body = body +) diff --git "a/app/rss/articles/Building APIs on the JVM Using Kotlin and Spark \342\200\223 Part 1.md" "b/articles/english/2015/Building APIs on the JVM Using Kotlin and Spark \342\200\223 Part 1.kts" similarity index 98% rename from "app/rss/articles/Building APIs on the JVM Using Kotlin and Spark \342\200\223 Part 1.md" rename to "articles/english/2015/Building APIs on the JVM Using Kotlin and Spark \342\200\223 Part 1.kts" index 00f080efa..37147231a 100644 --- "a/app/rss/articles/Building APIs on the JVM Using Kotlin and Spark \342\200\223 Part 1.md" +++ "b/articles/english/2015/Building APIs on the JVM Using Kotlin and Spark \342\200\223 Part 1.kts" @@ -1,11 +1,11 @@ ---- -title: 'Building APIs on the JVM Using Kotlin and Spark – Part 1' -url: http://nordicapis.com/building-apis-on-the-jvm-using-kotlin-and-spark-part-1/ -categories: - - Kotlin -author: Travis Spencer -date: Aug 06, 2015 09:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ![Building-APIs-JVM-kotlin-spark-java-nordic-apis-pt-1](http://nordicapis.com/wp-content/uploads/Building-APIs-JVM-kotlin-spark-java-nordic-apis-pt-1.png) When you start a new API project, one of the first questions to answer is what programming language to use. Picking the right one can make all the difference. Some languages help solve certain problems while others inhibit solutions. Even after a language is chosen and tens-of-thousands of lines of code have been written, there is the possibility of reducing complexity by using new languages on the same **runtime**. @@ -377,3 +377,18 @@ _[Disclosure: PayPal is a sponsor of the Java Stockholm meetup being produced by + +""" + +Article( + title = "Building APIs on the JVM Using Kotlin and Spark – Part 1", + url = "http://nordicapis.com/building-apis-on-the-jvm-using-kotlin-and-spark-part-1/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Travis Spencer", + date = LocalDate.of(2015, 8, 6), + body = body +) diff --git a/app/rss/articles/Early Impressions of Kotlin.md b/articles/english/2015/Early Impressions of Kotlin.kts similarity index 96% rename from app/rss/articles/Early Impressions of Kotlin.md rename to articles/english/2015/Early Impressions of Kotlin.kts index eb3b0a725..3bba520b9 100644 --- a/app/rss/articles/Early Impressions of Kotlin.md +++ b/articles/english/2015/Early Impressions of Kotlin.kts @@ -1,11 +1,11 @@ ---- -title: 'Early Impressions of Kotlin' -url: http://natpryce.com/articles/000815.html -categories: - - Kotlin -author: Nat Pryce -date: Dec 30, 2015 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ We’ve been using the [Kotlin](https://kotlinlang.org) programming language for a few weeks on our latest project to perform technical experiments, explore the problem space, and write a few HTTP services. I’ve also ported [Hamcrest](https://github.com/hamcrest/JavaHamcrest) to Kotlin, as [HamKrest](https://github.com/npryce/hamkrest), to help us write tests, and written a small library for [type safe configuration](https://github.com/npryce/konfig) of our services. ## Why Kotlin? @@ -154,4 +154,18 @@ For object-oriented programming, Kotlin’s concise syntax for class definitions However, most Java out there is monomorphic, procedural code moving data between “[NOJOs](http://puttingtheteaintoteam.blogspot.co.uk/2008/10/is-that-pojo-or-nojo.html)” and APIs that expect objects to have “bean” getters and setters. Kotlin has made working with that kind of API much easier and far more concise than doing so in Java. -1. As far as I can tell, RedHat sponsor development of Ceylon but do not actually use it to develop their own products. If I’m wrong, please let me know in the comments.[↩](#fnref1) \ No newline at end of file +1. As far as I can tell, RedHat sponsor development of Ceylon but do not actually use it to develop their own products. If I’m wrong, please let me know in the comments.[↩](#fnref1) +""" + +Article( + title = "Early Impressions of Kotlin", + url = "http://natpryce.com/articles/000815.html", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Nat Pryce", + date = LocalDate.of(2015, 12, 30), + body = body +) diff --git a/app/rss/articles/Exploring Kotlin.md b/articles/english/2015/Exploring Kotlin.kts similarity index 96% rename from app/rss/articles/Exploring Kotlin.md rename to articles/english/2015/Exploring Kotlin.kts index d67cf9dd6..8a099c9e9 100644 --- a/app/rss/articles/Exploring Kotlin.md +++ b/articles/english/2015/Exploring Kotlin.kts @@ -1,12 +1,11 @@ ---- -title: 'Exploring Kotlin' -url: http://blog.cacoethes.co.uk/software/exploring-kotlin -categories: - - Kotlin - - Groovy -author: Peter Ledbrook -date: Jun 27, 2015 21:54 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ _This post is outdated, because Kotlin have a lot changes from June, 2015_ @@ -91,3 +90,19 @@ One final thing I learned is that I hate generics. Really. I think Kotlin’s As I said at the beginning of the post, Kotlin is an evolution rather than a revolution. That’s why I think it has a reasonable chance of success. Will it prove a significant competitor to Java? I don’t know, but I doubt it. There is so much inertia around Java that sometimes it feels like nothing will supersede it. Nonetheless, Kotlin is definitely worth an investigation if you’re looking for a statically-typed alternative to Java for your own projects. As I understand it, Jetbrains are pretty reliant on it, so it’s unlikely to disappear soon if at all. And you’re guaranteed first class support in at least one IDE! Do remember that this is a first impressions account of the language, so don’t take anything as gospel truth other than these were my experiences. I’ll try to post additional articles as I gain a better understanding of the language. + +""" + +Article( + title = "Exploring Kotlin", + url = "http://blog.cacoethes.co.uk/software/exploring-kotlin", + categories = listOf( + "Kotlin", + "Groovy" + ), + type = article, + lang = EN, + author = "Peter Ledbrook", + date = LocalDate.of(2015, 6, 27), + body = body +) diff --git a/app/rss/articles/Exploring the Kotlin standard library.md b/articles/english/2015/Exploring the Kotlin standard library.kts similarity index 93% rename from app/rss/articles/Exploring the Kotlin standard library.md rename to articles/english/2015/Exploring the Kotlin standard library.kts index 1ae0be095..d57294e5b 100644 --- a/app/rss/articles/Exploring the Kotlin standard library.md +++ b/articles/english/2015/Exploring the Kotlin standard library.kts @@ -1,11 +1,11 @@ ---- -title: 'Exploring the Kotlin standard library' -url: http://beust.com/weblog/2015/10/30/exploring-the-kotlin-standard-library/ -categories: - - Kotlin -author: 'Cédric Beust' -date: Oct 30, 2015 17:30 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ [Standard.kt](https://github.com/JetBrains/kotlin/blob/master/libraries/stdlib/src/kotlin/util/Standard.kt) is part of the Kotlin library and it defines some essential functions. What’s really striking about this source file is that it’s less than fifty lines long and that each of the function it defines (less than ten) is a one liner. Yet, each of these functions is very powerful. Here is a quick overview of the most important ones. ## let() @@ -170,3 +170,18 @@ fun readProperties() = Properties().apply { The `apply()` call tells us that the type of this expression is that of the object `apply()` is invoked on, which is `Properties`. Inside this block, `this` is now of type `Properties`, which allows us to call `load()` on it directly. In between, we create a `FileInputStream` that we use to populate this property object. And once we call `use()` on it, that `FileInputStream` will be automatically closed before this function returns, saving us from the ugly `try/catch/finally` combo that Java requires. You will find a lot of these constructs in the [Kobalt build tool](http://beust.com/kobalt) code, feel free to browse it. + +""" + +Article( + title = "Exploring the Kotlin standard library", + url = "http://beust.com/weblog/2015/10/30/exploring-the-kotlin-standard-library/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Cédric Beust", + date = LocalDate.of(2015, 10, 30), + body = body +) diff --git a/app/rss/articles/Functional Programming with Kotlin.md b/articles/english/2015/Functional Programming with Kotlin.kts similarity index 81% rename from app/rss/articles/Functional Programming with Kotlin.md rename to articles/english/2015/Functional Programming with Kotlin.kts index 1d651a93c..b5685fffd 100644 --- a/app/rss/articles/Functional Programming with Kotlin.md +++ b/articles/english/2015/Functional Programming with Kotlin.kts @@ -1,15 +1,10 @@ ---- -title: 'Functional Programming with Kotlin' -url: http://blog.jetbrains.com/kotlin/2015/11/webinar-recording-functional-programming-with-kotlin/ -type: webinar -categories: - - Kotlin - - Fp - - Functional - - Webinar -author: Roman Belov -date: Nov 5, 2015 09:21 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes +import link.kotlin.scripts.LinkType.webinar +import java.time.LocalDate + +val body = """ The recording of our October 22nd webinar, **Functional Programming with Kotlin**, is now available on [JetBrainsTV YouTube channel](https://youtu.be/AhA-Q7MOre0). In this talk, Mike Hearn provides a brief introduction to programming in Kotlin via practical example: creating a textfield with the autocomplete suggestions while typing. Demo project is available on [GitHub](https://github.com/mikehearn/KotlinFPWebinar). @@ -54,3 +49,20 @@ Thanks to all the attendees for the questions! If you still have some, please, c You are welcome to suggest themes for future webinars in comments. _Let’s kotlin!_ +""" + +Article( + title = "Functional Programming with Kotlin", + url = "http://blog.jetbrains.com/kotlin/2015/11/webinar-recording-functional-programming-with-kotlin/", + categories = listOf( + "Kotlin", + "Webinar", + "Fp", + "Functional" + ), + type = webinar, + lang = LanguageCodes.EN, + author = "Roman Belov", + date = LocalDate.of(2015, 11, 5), + body = body +) \ No newline at end of file diff --git a/articles/english/2015/JVMLS 2015 - Flexible Types in Kotlin.kts b/articles/english/2015/JVMLS 2015 - Flexible Types in Kotlin.kts new file mode 100644 index 000000000..cbf2ac9cd --- /dev/null +++ b/articles/english/2015/JVMLS 2015 - Flexible Types in Kotlin.kts @@ -0,0 +1,25 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ + + + +""" + +Article( + title = "JVMLS 2015 - Flexible Types in Kotlin", + url = "https://www.youtube.com/watch?v=2IhT8HACc2E", + categories = listOf( + "Kotlin" + ), + type = video, + lang = EN, + author = "Andrey Breslav", + date = LocalDate.of(2015, 8, 12), + body = body +) diff --git a/articles/english/2015/Kotlin New Hope in a Java 6 Wasteland.kts b/articles/english/2015/Kotlin New Hope in a Java 6 Wasteland.kts new file mode 100644 index 000000000..09c2d290a --- /dev/null +++ b/articles/english/2015/Kotlin New Hope in a Java 6 Wasteland.kts @@ -0,0 +1,26 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ + +[Slides](https://speakerdeck.com/pardom/kotlin-new-hope-in-a-java-6-wasteland) + +""" + +Article( + title = "Kotlin: New Hope in a Java 6 Wasteland", + url = "https://speakerdeck.com/pardom/kotlin-new-hope-in-a-java-6-wasteland", + categories = listOf( + "Kotlin", + "Android" + ), + type = slides, + lang = EN, + author = "Michael Pardo", + date = LocalDate.of(2015, 5, 9), + body = body +) diff --git a/articles/english/2015/Kotlin NoSQL for MongoDB in Action.kts b/articles/english/2015/Kotlin NoSQL for MongoDB in Action.kts new file mode 100644 index 000000000..815702f8c --- /dev/null +++ b/articles/english/2015/Kotlin NoSQL for MongoDB in Action.kts @@ -0,0 +1,26 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ + + + +""" + +Article( + title = "Kotlin NoSQL for MongoDB in Action", + url = "https://www.youtube.com/watch?v=80xgl3KThvM", + categories = listOf( + "Kotlin", + "SQL" + ), + type = video, + lang = EN, + author = "Andrey Cheptsov", + date = LocalDate.of(2015, 10, 22), + body = body +) diff --git a/app/rss/articles/Kotlin for Java Developers 10 Features You Will Love About Kotlin.md b/articles/english/2015/Kotlin for Java Developers 10 Features You Will Love About Kotlin.kts similarity index 96% rename from app/rss/articles/Kotlin for Java Developers 10 Features You Will Love About Kotlin.md rename to articles/english/2015/Kotlin for Java Developers 10 Features You Will Love About Kotlin.kts index 070f9937b..d1c24258f 100644 --- a/app/rss/articles/Kotlin for Java Developers 10 Features You Will Love About Kotlin.md +++ b/articles/english/2015/Kotlin for Java Developers 10 Features You Will Love About Kotlin.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin for Java Developers: 10 Features You Will Love About Kotlin' -url: http://petersommerhoff.com/dev/kotlin/kotlin-for-java-devs/ -categories: - - Kotlin -author: Peter Sommerhoff -date: Dec 12, 2015 10:06 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ # Kotlin for Java Developers: 10 Features You Will Love About Kotlin Kotlin is a statically typed JVM language built by Jetbrains, the makers of the IntelliJ IDE. [Kotlin](https://kotlinlang.org/) is built upon Java and provides useful features such as null-safety, data classes, extensions, functional concepts, smart casts, operator overloading and more. @@ -208,7 +208,7 @@ Let’s look at some **lazily evaluated conditional expressions**: ```kotlin if (document is Payable && document.pay()) { // Smart cast - println("Payable document ${document.title} was payed for.") + println("Payable document ${"$"}{document.title} was payed for.") } ``` @@ -218,7 +218,7 @@ The same goes for disjunction: ```kotlin if (document !is Payable || document.pay() == false) { // Smart cast - println("Cannot pay document ${document.title}.") + println("Cannot pay document ${"$"}{document.title}.") } ``` @@ -276,7 +276,7 @@ println(numbers.drop(2)) // List without first two elements: [13, -9, 12] println(numbers.foldRight(0, { a, b -> a + b })) // Sum of all elements: -9 -numbers.forEach { print("${it * 2} ") } // -84 34 26 -18 24 +numbers.forEach { print("${"$"}{it * 2} ") } // -84 34 26 -18 24 --- @@ -438,3 +438,18 @@ Next, Kotlin also supports the principle to either design for inheritance or pro **If this overview made you curious** to learn more about Kotlin, you can [check out my 10 beginner tutorial videos for Kotlin](http://petersommerhoff.com/dev/kotlin/kotlin-beginner-tutorial/) or **[go straight to the full course](https://www.udemy.com/kotlin-course/?couponCode=READERSONLY9USD) (with 95% reader discount)**. **The course is beginner-friendly and starts completely from scratch.** If you already know Java or a comparable language, you’ll still find it a valuable resource to get to know Kotlin. + +""" + +Article( + title = "Kotlin for Java Developers: 10 Features You Will Love About Kotlin", + url = "http://petersommerhoff.com/dev/kotlin/kotlin-for-java-devs/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Peter Sommerhoff", + date = LocalDate.of(2015, 12, 12), + body = body +) diff --git a/app/rss/articles/Kotlin love FP.md b/articles/english/2015/Kotlin love FP.kts similarity index 95% rename from app/rss/articles/Kotlin love FP.md rename to articles/english/2015/Kotlin love FP.kts index 3a26a10a5..6c28fe7a4 100644 --- a/app/rss/articles/Kotlin love FP.md +++ b/articles/english/2015/Kotlin love FP.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin ❤ FP' -url: https://medium.com/@octskyward/kotlin-fp-3bf63a17d64a -categories: - - Kotlin - - Functional -author: Mike Hearn -date: Sep 18, 2015 21:52 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ #### Functional programming in Kotlin, a new language from JetBrains I did [a video tutorial on FP in Kotlin](http://blog.jetbrains.com/kotlin/2015/11/webinar-recording-functional-programming-with-kotlin/), which can be viewed online. @@ -36,14 +35,14 @@ Kotlin doesn’t need a Maybe type because it has optionality as a built in part ```kotlin val s: String? = if (Math.random() < 0.5) "Yay!" else null -println("length of string is .... ${s.length()}") +println("length of string is .... ${"$"}{s.length()}") ``` Here, we get a compile error on the second line, because we’re trying to read the length of a string we might not actually have, depending on a coin flip. There’s a simple fix: ```kotlin val s: String? = if (Math.random() < 0.5) "Yay!" else null -println("length of string is .... ${s?.length() ?: -1}") +println("length of string is .... ${"$"}{s?.length() ?: -1}") ``` Here, s?.length() will yield null if s was null, and the ?: operator uses the right hand side if the left hand side is null. So this prints -1 if the coin flip didn’t yield the string. @@ -87,7 +86,7 @@ fun printUser(username: String) { val rec = lookupFromDB(username) when (rec) { is Maybe.None -> println("not found") - is Maybe.Just -> println("${rec.t.age} years old") + is Maybe.Just -> println("${"$"}{rec.t.age} years old") } } ``` @@ -219,7 +218,7 @@ assertEquals(add5(7), 12) import org.funktionale.partials.* val format = { prefix: String, x: String, postfix: String -> - "${prefix}${x}${postfix}" + "${"$"}{prefix}${"$"}{x}${"$"}{postfix}" } val prefixAndBang = format(p3 = "!") @@ -273,7 +272,7 @@ repeat(3) { val t = measureTimeMillis { primes(100000) } - println("Took $t msec") + println("Took ${"$"}t msec") } ``` @@ -331,11 +330,11 @@ val counter = newRef(10) try { atomic { increment(counter, 1) - println("counter is ${counter.get()}") // -> 11 + println("counter is ${"$"}{counter.get()}") // -> 11 throw Exception("roll back!!") } } catch(e: Exception) { - println("counter is ${counter.get()}") // -> 10 + println("counter is ${"$"}{counter.get()}") // -> 10 } ``` @@ -373,3 +372,19 @@ The atomic method is a higher order function protected by a regular Java synchro At the moment there is no way to control side effects: any function call can be potentially side effecting. It would be nice if a future version of the language introduced something like the C++ const keyword, or D’s transitive const, to reduce the reliance on actually immutable data structures. The JVM offers features that can seal off common sources of external state, such as the disk and network, however the heap is still available. It may be an interesting project to make the JVM’s sandboxing features easily available via a Kotlin DSL. There is not at this moment any high performance immutable collections library. Both Clojure and Scala have maps and sets in which mutating the collection returns a new collection, with internal data sharing to make performance practical. The Kotlin standard library does not. If someone were to make one, using [the CHAMP code](http://michael.steindorfer.name/publications/oopsla15.pdf) published this year would give significant improvements over the algorithms used in Scala/Clojure. + +""" + +Article( + title = "Kotlin ❤ FP", + url = "https://medium.com/@octskyward/kotlin-fp-3bf63a17d64a", + categories = listOf( + "Kotlin", + "Functional" + ), + type = article, + lang = EN, + author = "Mike Hearn", + date = LocalDate.of(2015, 9, 18), + body = body +) diff --git a/app/rss/articles/Production Ready Kotlin.md b/articles/english/2015/Production Ready Kotlin.kts similarity index 89% rename from app/rss/articles/Production Ready Kotlin.md rename to articles/english/2015/Production Ready Kotlin.kts index 08da5171a..075df1860 100644 --- a/app/rss/articles/Production Ready Kotlin.md +++ b/articles/english/2015/Production Ready Kotlin.kts @@ -1,11 +1,11 @@ ---- -title: 'Production Ready Kotlin' -url: https://www.linkedin.com/grp/post/7417237-6042285669181648896 -categories: - - Kotlin -author: Jayson Minard -date: Aug 26, 2015 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ I see a lot of people asking "Is Kotlin ready for production?" ... maybe these are people that are not already using Kotlin wanting a bit of comfort before they put effort into their own investigation. Most people I know that do actually use Kotlin daily think it is obvious Kotlin is already ready. here is why: - If it compiles, it runs perfectly @@ -33,3 +33,18 @@ To help out, my company is open-sourcing anything we can, and are taking this ap "We will open-source anything we can that does not hurt our competitiveness, we will document it, release it on maven central, we will keep it up to date to any Kotlin milestone/release changes, we will integrate nicely with other Kotlin libraries, we will report all bugs and issues to Kotlin YouTrack and follow up with testing; and we will not stop supporting Kotlin until every one of the key players in Kotlin sphere show up at a bar in Dublin, and we all agree to quit together. Until then, we are all in." If you are a Kotlin supporter, step up your support because Kotlin can be the biggest player in the JVM space, is the best candidate, and deserves help from those that benefit from its existence. + +""" + +Article( + title = "Production Ready Kotlin", + url = "https://www.linkedin.com/grp/post/7417237-6042285669181648896", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Jayson Minard", + date = LocalDate.of(2015, 8, 26), + body = body +) diff --git a/app/rss/articles/Quasar Efficient and Elegant Fibers, Channels and Actors.md b/articles/english/2015/Quasar Efficient and Elegant Fibers, Channels and Actors.kts similarity index 76% rename from app/rss/articles/Quasar Efficient and Elegant Fibers, Channels and Actors.md rename to articles/english/2015/Quasar Efficient and Elegant Fibers, Channels and Actors.kts index 56f327994..8c7e9a2da 100644 --- a/app/rss/articles/Quasar Efficient and Elegant Fibers, Channels and Actors.md +++ b/articles/english/2015/Quasar Efficient and Elegant Fibers, Channels and Actors.kts @@ -1,16 +1,11 @@ ---- -title: 'Quasar: Efficient and Elegant Fibers, Channels and Actors' -url: http://blog.jetbrains.com/kotlin/2015/09/webinar-recording-quasar-efficient-and-elegant-fibers-channels-and-actors/ -type: webinar -categories: - - Kotlin - - Webinar - - Fibers - - Channels - - Actors -author: Roman Belov -date: Sep 21, 2015 09:40 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ The recording of our September 16th webinar, **Quasar: Efficient and Elegant Fibers, Channels and Actors**, is now available on [JetBrainsTV YouTube channel](https://youtu.be/Nmob2MB2Qo8). In this webinar, Fabio Tudone shows how to use Quasar for creation of highly concurrent software. He covers basics of Kotlin syntax and shows how Quasar uses Kotlin strengths to offer concise and expressive API. @@ -40,3 +35,22 @@ Thanks to all the attendees for the questions! If you still have some, please, c You are welcome to suggest themes for future webinars in comments. _Let’s kotlin!_ + +""" + +Article( + title = "Quasar: Efficient and Elegant Fibers, Channels and Actors", + url = "http://blog.jetbrains.com/kotlin/2015/09/webinar-recording-quasar-efficient-and-elegant-fibers-channels-and-actors/", + categories = listOf( + "Kotlin", + "Webinar", + "Fibers", + "Channels", + "Actors" + ), + type = webinar, + lang = EN, + author = "Roman Belov", + date = LocalDate.of(2015, 9, 21), + body = body +) diff --git "a/app/rss/articles/Quasar and Kotlin \342\200\223 a Powerful Match.md" "b/articles/english/2015/Quasar and Kotlin \342\200\223 a Powerful Match.kts" similarity index 97% rename from "app/rss/articles/Quasar and Kotlin \342\200\223 a Powerful Match.md" rename to "articles/english/2015/Quasar and Kotlin \342\200\223 a Powerful Match.kts" index b43bd0a0f..70ba1d100 100644 --- "a/app/rss/articles/Quasar and Kotlin \342\200\223 a Powerful Match.md" +++ "b/articles/english/2015/Quasar and Kotlin \342\200\223 a Powerful Match.kts" @@ -1,13 +1,11 @@ ---- -title: 'Quasar and Kotlin - a Powerful Match' -url: http://blog.paralleluniverse.co/2015/06/04/quasar-kotlin/ -categories: - - Kotlin - - Quasar - - Fibers -author: Fabio -date: Jun 04, 2015 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ June 04, 2015 Following the release of [Kotlin M12](http://blog.jetbrains.com/kotlin/2015/05/kotlin-m12-is-out/) and of [Quasar 0.7.0](http://blog.paralleluniverse.co/2015/05/29/quasar-pulsar-0-7-0/) introducing support for it, let’s now have a closer look at how Kotlin and Quasar work together. @@ -296,3 +294,20 @@ Kotlin has loads of other advanced and convenient features that make it a pleasu 6. This is possible only with inline lambdas. [↩](#fnref:only-inline) 7. This is likely to become only a warning in the future. [↩](#fnref:public-api) + +""" + +Article( + title = "Quasar and Kotlin - a Powerful Match", + url = "http://blog.paralleluniverse.co/2015/06/04/quasar-kotlin/", + categories = listOf( + "Kotlin", + "Quasar", + "Fibers" + ), + type = article, + lang = EN, + author = "Fabio", + date = LocalDate.of(2015, 6, 4), + body = body +) diff --git a/app/rss/articles/RxAndroid and Kotlin (Part 1).md b/articles/english/2015/RxAndroid and Kotlin (Part 1).kts similarity index 96% rename from app/rss/articles/RxAndroid and Kotlin (Part 1).md rename to articles/english/2015/RxAndroid and Kotlin (Part 1).kts index def58b3b1..bc64794ff 100644 --- a/app/rss/articles/RxAndroid and Kotlin (Part 1).md +++ b/articles/english/2015/RxAndroid and Kotlin (Part 1).kts @@ -1,13 +1,11 @@ ---- -title: 'RxAndroid and Kotlin (Part 1)' -url: 'https://medium.com/@ahmedrizwan/rxandroid-and-kotlin-part-1-f0382dc26ed8#.bx3rgamfo' -categories: - - Kotlin - - RxAndroid - - Android -author: Ahmed Rizwan -date: Jun 27, 2015 11:16 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ![](https://d262ilb51hltx0.cloudfront.net/max/2000/1*bTttcFdSLyvWIPg91OaNEw.png) ### RxAndroid and Kotlin (Part 1) @@ -394,3 +392,20 @@ Here are some awesome resources for Rx that I recommend. Do check these out! I w * [PhilosophicalHacker Blog on Rx](http://www.philosophicalhacker.com/2015/06/12/an-introduction-to-rxjava-for-android/) * [Implementing EventBus in Rx](http://nerds.weddingpartyapp.com/tech/2014/12/24/implementing-an-event-bus-with-rxjava-rxbus/) * [RxKotlin](https://github.com/ReactiveX/RxKotlin) + +""" + +Article( + title = "RxAndroid and Kotlin (Part 1)", + url = "https://medium.com/@ahmedrizwan/rxandroid-and-kotlin-part-1-f0382dc26ed8#.bx3rgamfo", + categories = listOf( + "Kotlin", + "RxAndroid", + "Android" + ), + type = article, + lang = EN, + author = "Ahmed Rizwan", + date = LocalDate.of(2015, 6, 27), + body = body +) diff --git a/app/rss/articles/Setting up Kotlin with Android and tests .md b/articles/english/2015/Setting up Kotlin with Android and tests .kts similarity index 91% rename from app/rss/articles/Setting up Kotlin with Android and tests .md rename to articles/english/2015/Setting up Kotlin with Android and tests .kts index a4704266b..56c057434 100644 --- a/app/rss/articles/Setting up Kotlin with Android and tests .md +++ b/articles/english/2015/Setting up Kotlin with Android and tests .kts @@ -1,12 +1,11 @@ ---- -title: 'Setting up Kotlin with Android and tests' -url: http://engineering.pivotal.io/post/setting-up-kotlin-with-android-and-tests/ -categories: - - Kotlin - - Android -author: Laura Kogler -date: Nov 11, 2015 14:39 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ I recently heard about [Kotlin](https://kotlinlang.org/) with the release of their 1.0 Beta last week. Kotlin is a modern programming language that runs in the JVM and is interoperable with Java. Kotlin can also be used to create Android apps. @@ -97,3 +96,19 @@ class ExampleUnitTest : Spek() { ## Conclusion Kotlin seems like a promising new language with a lot of features that make it nicer to use than Java. Setting up a "Hello World" Android app was extremely simple, and getting tests to run with Robolectric or the Android instrumentation runner was no problem. I look forward to trying it out more in the future! + +""" + +Article( + title = "Setting up Kotlin with Android and tests", + url = "http://engineering.pivotal.io/post/setting-up-kotlin-with-android-and-tests/", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Laura Kogler", + date = LocalDate.of(2015, 11, 11), + body = body +) diff --git a/app/rss/articles/Why Kotlin is my next programming language.md b/articles/english/2015/Why Kotlin is my next programming language.kts similarity index 92% rename from app/rss/articles/Why Kotlin is my next programming language.md rename to articles/english/2015/Why Kotlin is my next programming language.kts index 307527fc1..ede8323f6 100644 --- a/app/rss/articles/Why Kotlin is my next programming language.md +++ b/articles/english/2015/Why Kotlin is my next programming language.kts @@ -1,11 +1,11 @@ ---- -title: 'Why Kotlin is my next programming language' -url: https://medium.com/@octskyward/why-kotlin-is-my-next-programming-language-c25c001e26e3 -categories: - - Kotlin -author: Mike Hearn -date: Jul 06, 2015 22:39 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ![](https://d262ilb51hltx0.cloudfront.net/max/1600/1*YnF7hY2ymS54iTNLuxVT8A.jpeg) _A lighthouse on Kotlin Island, Russia_ @@ -52,3 +52,18 @@ Earlier this year I presented Kotlin to a team of Java and .NET architects at Sw I think Kotlin hits the sweet spot for enterprise Java devs, so even though Kotlin is free I expect JetBrains to make a killing from increased sales of the commercial version of their IDE. This will incentivise them to keep improving it according to the wishes of their customers. Contrast this with many other language developers who are subsidised by unrelated products, meaning they have little reason to respond to the demands of their users when those demands conflict with pre-held ideologies. + +""" + +Article( + title = "Why Kotlin is my next programming language", + url = "https://medium.com/@octskyward/why-kotlin-is-my-next-programming-language-c25c001e26e3", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Mike Hearn", + date = LocalDate.of(2015, 7, 6), + body = body +) diff --git a/app/rss/articles/10 Features I Wish Java Would Steal From the Kotlin Language.md b/articles/english/2016/10 Features I Wish Java Would Steal From the Kotlin Language.kts similarity index 97% rename from app/rss/articles/10 Features I Wish Java Would Steal From the Kotlin Language.md rename to articles/english/2016/10 Features I Wish Java Would Steal From the Kotlin Language.kts index a6deb013b..9d4fc3866 100644 --- a/app/rss/articles/10 Features I Wish Java Would Steal From the Kotlin Language.md +++ b/articles/english/2016/10 Features I Wish Java Would Steal From the Kotlin Language.kts @@ -1,12 +1,11 @@ ---- -title: '10 Features I Wish Java Would Steal From the Kotlin Language' -url: http://blog.jooq.org/2016/03/31/10-features-i-wish-java-would-steal-from-the-kotlin-language/ -categories: - - Kotlin - - Java -author: Lukas Eder -date: Mar 31, 2016 12:10 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ This article is overdue. After the hype around the [release of Kotlin 1.0](https://blog.jetbrains.com/kotlin/2016/02/kotlin-1-0-released-pragmatic-language-for-jvm-and-android/) has settled, let’s have a serious look at some Kotlin language features that we should have in Java as well. In this article, I’m not going to wish for unicorns. But there are some low hanging fruit (as far as I naively can see), which could be introduced into the Java language without great risk. While you’re reading this article, be sure to copy paste examples to [http://try.kotlinlang.org](http://try.kotlinlang.org), an online REPL for Kotlin @@ -192,8 +191,8 @@ ctx.select(a.FIRST_NAME, a.LAST_NAME, b.TITLE) .join(b).on(a.ID.eq(b.AUTHOR_ID)) .orderBy(1, 2, 3) .forEach { - println("""${it[b.TITLE]} - by ${it[a.FIRST_NAME]} ${it[a.LAST_NAME]}""") + println(\"\"\"${"$"}{it[b.TITLE]} + by ${"$"}{it[a.FIRST_NAME]} ${"$"}{it[a.LAST_NAME]}\"\"\") } ``` @@ -487,3 +486,19 @@ Some of these decisions will hopefully be picked up by the Java language gods an More info about Kotlin idioms: [https://kotlinlang.org/docs/reference/idioms.html](https://kotlinlang.org/docs/reference/idioms.html) + +""" + +Article( + title = "10 Features I Wish Java Would Steal From the Kotlin Language", + url = "http://blog.jooq.org/2016/03/31/10-features-i-wish-java-would-steal-from-the-kotlin-language/", + categories = listOf( + "Kotlin", + "Java" + ), + type = article, + lang = EN, + author = "Lukas Eder", + date = LocalDate.of(2016, 3, 31), + body = body +) diff --git a/app/rss/articles/10 Kotlin Tricks in 10(ish) Minutes by Jake Wharton.md b/articles/english/2016/10 Kotlin Tricks in 10(ish) Minutes by Jake Wharton.kts similarity index 57% rename from app/rss/articles/10 Kotlin Tricks in 10(ish) Minutes by Jake Wharton.md rename to articles/english/2016/10 Kotlin Tricks in 10(ish) Minutes by Jake Wharton.kts index 1ecc01f56..b14865715 100644 --- a/app/rss/articles/10 Kotlin Tricks in 10(ish) Minutes by Jake Wharton.md +++ b/articles/english/2016/10 Kotlin Tricks in 10(ish) Minutes by Jake Wharton.kts @@ -1,15 +1,29 @@ ---- -title: '10 Kotlin Tricks in 10(ish) Minutes' -url: https://www.youtube.com/watch?v=YKzUbeUtTak -categories: - - Kotlin -type: video -author: Jake Wharton -date: Nov 10, 2016 10:31 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Kotlin is a new and popular language for Android development. Its major advantages and features are immediately appealing and quick to learn, but it also has a lot of small and thoughtful parts which are harder to discover. This talk will cover 10 of my favorites with real-world examples. [Slides](https://speakerdeck.com/jakewharton/10-kotlin-tricks-in-10ish-minutes-square-nyc-november-2016) [Post on Authors Site](http://jakewharton.com/10-kotlin-tricks-in-10ish-minutes/) + +""" + +Article( + title = "10 Kotlin Tricks in 10(ish) Minutes", + url = "https://www.youtube.com/watch?v=YKzUbeUtTak", + categories = listOf( + "Kotlin" + ), + type = video, + lang = EN, + author = "Jake Wharton", + date = LocalDate.of(2016, 11, 10), + body = body +) diff --git a/app/rss/articles/10 Kotlin Tutorials for Beginners Dive Into Kotlin Programming.md b/articles/english/2016/10 Kotlin Tutorials for Beginners Dive Into Kotlin Programming.kts similarity index 91% rename from app/rss/articles/10 Kotlin Tutorials for Beginners Dive Into Kotlin Programming.md rename to articles/english/2016/10 Kotlin Tutorials for Beginners Dive Into Kotlin Programming.kts index bc86b4665..357cc8040 100644 --- a/app/rss/articles/10 Kotlin Tutorials for Beginners Dive Into Kotlin Programming.md +++ b/articles/english/2016/10 Kotlin Tutorials for Beginners Dive Into Kotlin Programming.kts @@ -1,12 +1,11 @@ ---- -title: '10 Kotlin Tutorials for Beginners: Dive Into Kotlin Programming' -url: http://petersommerhoff.com/dev/kotlin/kotlin-beginner-tutorial/ -categories: - - Kotlin - - Videos -author: Peter Sommerhoff -date: Feb 02, 2016 17:37 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ # 10 Kotlin Tutorials for Beginners: Dive Into Kotlin Programming @@ -97,3 +96,19 @@ The course will be improved and extended based on student feedback and I’ll be What do you think about Kotlin? Is it “better than Java” or just yet another JVM language for you? What else do you want to learn about Kotlin? Let me know in the comments and I’ll respond to you personally. + +""" + +Article( + title = "10 Kotlin Tutorials for Beginners: Dive Into Kotlin Programming", + url = "http://petersommerhoff.com/dev/kotlin/kotlin-beginner-tutorial/", + categories = listOf( + "Kotlin", + "Videos" + ), + type = article, + lang = EN, + author = "Peter Sommerhoff", + date = LocalDate.of(2016, 2, 2), + body = body +) diff --git a/app/rss/articles/400 percent faster layouts with Anko.md b/articles/english/2016/400 percent faster layouts with Anko.kts similarity index 92% rename from app/rss/articles/400 percent faster layouts with Anko.md rename to articles/english/2016/400 percent faster layouts with Anko.kts index 195a76b33..72f4dbcb2 100644 --- a/app/rss/articles/400 percent faster layouts with Anko.md +++ b/articles/english/2016/400 percent faster layouts with Anko.kts @@ -1,12 +1,11 @@ ---- -title: '400% faster layouts with Anko' -url: https://medium.com/@vergauwen.simon/400-faster-layouts-with-anko-da17f32c45dd#.okv8w4291 -categories: - - Kotlin - - Android -author: Simon Vergauwen -date: Nov 10, 2016 12:50 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ I’ve been playing with Anko for a while now and I was curious what advantages Anko offered. So I did some performance tests. ![](https://cdn-images-1.medium.com/max/660/1*5ZzaJr-LterwFJUy-Mu40g.png) @@ -148,3 +147,19 @@ We can now also easily calculate sizes, and the width here will be calculate at Anko offers several solutions to the traditional way of building layouts in XML. It bypasses all overhead that Android deals with when building xml layouts. You don’t have to deal with `findViewById` nor with casting. And by building layouts at runtime you can add any logic you want. It could improve your MVVM setup, or you could make your layouts more dynamic by adding some logic. And this all for a very small cost, considering all the extreme effort we do for clean and high performing apps. All code used in this example can be found on [github](https://github.com/nomisRev/FasterLayoutsWithAnko) + +""" + +Article( + title = "400% faster layouts with Anko", + url = "https://medium.com/@vergauwen.simon/400-faster-layouts-with-anko-da17f32c45dd#.okv8w4291", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Simon Vergauwen", + date = LocalDate.of(2016, 11, 10), + body = body +) diff --git "a/app/rss/articles/5 small things you probably don\342\200\231t know about Kotlin.md" "b/articles/english/2016/5 small things you probably don\342\200\231t know about Kotlin.kts" similarity index 93% rename from "app/rss/articles/5 small things you probably don\342\200\231t know about Kotlin.md" rename to "articles/english/2016/5 small things you probably don\342\200\231t know about Kotlin.kts" index 0ba960320..e055976c6 100644 --- "a/app/rss/articles/5 small things you probably don\342\200\231t know about Kotlin.md" +++ "b/articles/english/2016/5 small things you probably don\342\200\231t know about Kotlin.kts" @@ -1,11 +1,11 @@ ---- -title: '5 small things you probably don’t know about Kotlin' -url: https://medium.com/@piotr.slesarew/5-small-things-you-probably-dont-know-about-kotlin-255261940de6#.pgfivsdr7 -categories: - - Kotlin -author: 'Piotr Ślesarew' -date: Nov 25, 2016 05:04 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ > There are known knowns. These are things we know that we know. There are known unknowns. That is to say, there are things that we know we don’t know. But there are also unknown unknowns. There are things we don’t know we don’t know. — Donald Rumsfeld I have been using Kotlin for almost a two years and I started from putting it to toy project intended for my tech talks. Do you remember that time when Kotlin had _traits_ instead of _interfaces_? From the very first line, I knew that this language will change my life, and you know what? I was totally right. @@ -212,3 +212,18 @@ Sample shows usage of a built-in _vetoable_ delegate. Lambda passed to the _veto ![](https://cdn-images-1.medium.com/max/880/1*gkc1Y_YumE5sIffEmO03Yw.jpeg) [http://looneytunes.wikia.com/wiki/That's_All_Folks](http://looneytunes.wikia.com/wiki/That%27s_All_Folks) + +""" + +Article( + title = "5 small things you probably don’t know about Kotlin", + url = "https://medium.com/@piotr.slesarew/5-small-things-you-probably-dont-know-about-kotlin-255261940de6#.pgfivsdr7", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Piotr Ślesarew", + date = LocalDate.of(2016, 11, 25), + body = body +) diff --git a/app/rss/articles/A DSL Workbench with Gradle and Kotlin.md b/articles/english/2016/A DSL Workbench with Gradle and Kotlin.kts similarity index 88% rename from app/rss/articles/A DSL Workbench with Gradle and Kotlin.md rename to articles/english/2016/A DSL Workbench with Gradle and Kotlin.kts index 4092f92f5..98d0e7049 100644 --- a/app/rss/articles/A DSL Workbench with Gradle and Kotlin.md +++ b/articles/english/2016/A DSL Workbench with Gradle and Kotlin.kts @@ -1,14 +1,11 @@ ---- -title: 'A DSL Workbench with Gradle and Kotlin' -url: http://jonnyzzz.com/blog/2016/03/08/gradle-for-dsl/ -categories: - - Gradle - - DSL - - Teamcity2DSL - - Kotlin -author: Eugene Petrenko -date: Mar 08, 2016 21:02 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ Easy to use. This is one of a main tasks to solve then new tool is created. For the world of DSL this mostly mean it should be easy to a end-user to use the tool and to be able to run the tool within @@ -115,10 +112,10 @@ project.buildscript.repositories.forEach { project.repositories.add(it) } To add extra source directory we use the following code (that depends on Gradle's Java plugin) ```groovy -println("Adding DSL path to Kotlin source set: ${settings.dslPath}") +println("Adding DSL path to Kotlin source set: ${"$"}{settings.dslPath}") val sourceSets = project.convention.getPlugin(JavaPluginConvention::class.java).sourceSets -println("Source sets: ${sourceSets.names}") +println("Source sets: ${"$"}{sourceSets.names}") sourceSets.getByName("main").java.srcDir( settings.dslPath!!.path ) ``` @@ -140,3 +137,21 @@ leading to easy-to-use and easy-to-adopt solution. This pattern could be re-used for other applications. Feel free to try [TeamCity2DSL](https://github.com/jonnyzzz/TeamCity2DSL) for TeamCity project settings domain. + +""" + +Article( + title = "A DSL Workbench with Gradle and Kotlin", + url = "http://jonnyzzz.com/blog/2016/03/08/gradle-for-dsl/", + categories = listOf( + "Gradle", + "DSL", + "Teamcity2DSL", + "Kotlin" + ), + type = article, + lang = EN, + author = "Eugene Petrenko", + date = LocalDate.of(2016, 3, 8), + body = body +) diff --git "a/app/rss/articles/A Developer\342\200\231s Look at Kotlin.md" "b/articles/english/2016/A Developer\342\200\231s Look at Kotlin.kts" similarity index 90% rename from "app/rss/articles/A Developer\342\200\231s Look at Kotlin.md" rename to "articles/english/2016/A Developer\342\200\231s Look at Kotlin.kts" index ab61ac4d8..c1b28a29c 100644 --- "a/app/rss/articles/A Developer\342\200\231s Look at Kotlin.md" +++ "b/articles/english/2016/A Developer\342\200\231s Look at Kotlin.kts" @@ -1,11 +1,11 @@ ---- -title: 'A Developer’s Look at Kotlin' -url: http://insights.dice.com/2016/09/09/developers-look-kotlin/ -categories: - - Kotlin -author: David Bolton -date: Sep 9, 2016 02:02 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ![shutterstock_379642018](http://insights.dice.com/wp-content/uploads/2016/09/shutterstock_379642018.jpg) Named after an island near St. Petersburg, Russia (take a gander at its spectacular sunset, above), [Kotlin](https://kotlinlang.org/) is a statically typed open-source programming language that runs on the JVM, just like Java. JetBrains released version 1 in February 2016, after five years of development. @@ -40,7 +40,7 @@ val a: Int = 10000 // read-only val b: Int = 0x0F   // hexadecimal read-only var c = 0b1011 // binary also type inferred -println("a = $a b = $b c = $c") +println("a = ${"$"}a b = ${"$"}b c = ${"$"}c") ``` This outputs: @@ -143,9 +143,9 @@ class LazySample { fun main(args: Array) { val sample = LazySample() - println("lazy = ${sample.lazy}") - println("lazy = ${sample.lazy}") - println("inc = ${sample.inc}") + println("lazy = ${"$"}{sample.lazy}") + println("lazy = ${"$"}{sample.lazy}") + println("inc = ${"$"}{sample.inc}") } ``` @@ -168,7 +168,7 @@ import kotlin.properties.Delegates class TaxRate { var value: Float by Delegates.observable(18.5f) { d, old, new -> - println("Rate changed from $old% to $new%") + println("Rate changed from ${"$"}old% to ${"$"}new%") } } @@ -192,3 +192,18 @@ I’m a great believer that reduced cognitive load is good for programmers. It Kotlin has been compared to Scala, though is somewhat simpler and compiles a lot faster. It’s not quite a snapshot of the language, [but the Idioms page](http://kotlinlang.org/docs/reference/idioms.html) tells you a lot about features and syntax in one go. Any developers wanting to know differences between Kotlin and Java at a glance can refer to the [Comparison to Java page](https://kotlinlang.org/docs/reference/comparison-to-java.html) via Kotlin’s reference materials. + +""" + +Article( + title = "A Developer’s Look at Kotlin", + url = "http://insights.dice.com/2016/09/09/developers-look-kotlin/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "David Bolton", + date = LocalDate.of(2016, 9, 9), + body = body +) diff --git a/app/rss/articles/A Geospatial Messenger with Kotlin, Spring Boot and PostgreSQL.md b/articles/english/2016/A Geospatial Messenger with Kotlin, Spring Boot and PostgreSQL.kts similarity index 94% rename from app/rss/articles/A Geospatial Messenger with Kotlin, Spring Boot and PostgreSQL.md rename to articles/english/2016/A Geospatial Messenger with Kotlin, Spring Boot and PostgreSQL.kts index 050777f79..0390a4a49 100644 --- a/app/rss/articles/A Geospatial Messenger with Kotlin, Spring Boot and PostgreSQL.md +++ b/articles/english/2016/A Geospatial Messenger with Kotlin, Spring Boot and PostgreSQL.kts @@ -1,12 +1,11 @@ ---- -title: 'A Geospatial Messenger with Kotlin, Spring Boot and PostgreSQL' -url: https://spring.io/blog/2016/03/20/a-geospatial-messenger-with-kotlin-spring-boot-and-postgresql -categories: - - Kotlin - - Spring -author: 'Sébastien Deleuze' -date: Mar 20, 2016 10:51 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Following my first [Kotlin blog post](https://spring.io/blog/2016/02/15/developing-spring-boot-applications-with-kotlin), today I want introduce the new Spring Boot + Kotlin application I have developed for my upcoming [Spring I/O 2016 conference](http://www.springio.net/) talk “Developing Geospatial Web Services with Kotlin and Spring Boot”. @@ -162,3 +161,19 @@ The few pain points I have encountered ([array annotation attributes](https://yo And keep in mind that officially supported [Spring Data projects](http://projects.spring.io/spring-data/) works well with Kotlin as shown in the [spring-boot-kotlin-demo](https://github.com/sdeleuze/spring-boot-kotlin-demo) project in my [previous blog post](https://spring.io/blog/2016/02/15/developing-spring-boot-applications-with-kotlin). If you happen to be in Barcelona mid May (never a bad time to be in Barcelona anyway!), don’t miss the chance to join the [Spring I/O conference](http://www.springio.net/). Also, the registration for [SpringOne Platform](http://springoneplatform.io/) (early August, Las Vegas) has opened recently, in case you want to benefit from early bird ticket pricing. The latter is also still open for talk proposals. So if you’re interested to give a talk about Spring or Pivotal-related technologies, feel free to submit! + +""" + +Article( + title = "A Geospatial Messenger with Kotlin, Spring Boot and PostgreSQL", + url = "https://spring.io/blog/2016/03/20/a-geospatial-messenger-with-kotlin-spring-boot-and-postgresql", + categories = listOf( + "Kotlin", + "Spring" + ), + type = article, + lang = EN, + author = "Sébastien Deleuze", + date = LocalDate.of(2016, 3, 20), + body = body +) diff --git a/app/rss/articles/A Very Peculiar, but Possibly Cunning Kotlin Language Feature.md b/articles/english/2016/A Very Peculiar, but Possibly Cunning Kotlin Language Feature.kts similarity index 91% rename from app/rss/articles/A Very Peculiar, but Possibly Cunning Kotlin Language Feature.md rename to articles/english/2016/A Very Peculiar, but Possibly Cunning Kotlin Language Feature.kts index 354d6a3e5..9003a0937 100644 --- a/app/rss/articles/A Very Peculiar, but Possibly Cunning Kotlin Language Feature.md +++ b/articles/english/2016/A Very Peculiar, but Possibly Cunning Kotlin Language Feature.kts @@ -1,12 +1,11 @@ ---- -title: 'A Very Peculiar, but Possibly Cunning Kotlin Language Feature.' -url: http://blog.jooq.org/2016/02/22/a-very-peculiar-but-possibly-cunning-kotlin-language-feature/ -categories: - - Kotlin - - Puzzlers -author: Lukas Eder -date: Feb 22, 2016 15:33 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ This has caught me by surprise. After studying the [Kotlin language](https://kotlinlang.org/) to learn about how to best leverage this interesting new language for [jOOQ](http://www.jooq.org/), I stumbled upon this puzzler. What do you think the following program will print? ```kotlin @@ -147,3 +146,19 @@ Weird. Cunning. Clever. But a bit unexpected. Is this a good idea? Or will the language designers regret this, later on? Are all lambdas / closures potentially “language construct-ish”, where such a return statement is expected to leave the outer scope? Or are there clear cases where this inline behaviour just makes total sense? We’ll see. In any case, it is very interesting for a language to have chosen this path. + +""" + +Article( + title = "A Very Peculiar, but Possibly Cunning Kotlin Language Feature.", + url = "http://blog.jooq.org/2016/02/22/a-very-peculiar-but-possibly-cunning-kotlin-language-feature/", + categories = listOf( + "Kotlin", + "Puzzlers" + ), + type = article, + lang = EN, + author = "Lukas Eder", + date = LocalDate.of(2016, 2, 22), + body = body +) diff --git a/app/rss/articles/A Whirlwind Tour of the Kotlin Type Hierarchy.md b/articles/english/2016/A Whirlwind Tour of the Kotlin Type Hierarchy.kts similarity index 95% rename from app/rss/articles/A Whirlwind Tour of the Kotlin Type Hierarchy.md rename to articles/english/2016/A Whirlwind Tour of the Kotlin Type Hierarchy.kts index 93b8f1544..920ff2057 100644 --- a/app/rss/articles/A Whirlwind Tour of the Kotlin Type Hierarchy.md +++ b/articles/english/2016/A Whirlwind Tour of the Kotlin Type Hierarchy.kts @@ -1,11 +1,11 @@ ---- -title: 'A Whirlwind Tour of the Kotlin Type Hierarchy' -url: http://natpryce.com/articles/000818.html -categories: - - Kotlin -author: Nat Pryce -date: Oct 28, 2016 03:23 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ Kotlin has plenty of good [language documentation](https://kotlinlang.org/docs/reference/) and [tutorials](https://kotlinlang.org/docs/tutorials/). But I’ve not found an article that describes in one place how Kotlin’s type hierarchy fits together. That’s a shame, because I find it to be really neat[1](#fn1). Kotlin’s type hierarchy has very few rules to learn. Those rules combine together consistently and predictably. Thanks to those rules, Kotlin can provide useful, user extensible language features – null safety, polymorphism, and unreachable code analysis – without resorting to special cases and ad-hoc checks in the compiler and IDE. @@ -149,7 +149,7 @@ By having Nothing as a subtype of every other type, the type system allows any e ```kotlin fun formatCell(value: Double): String = if (value.isNaN()) - throw IllegalArgumentException("$value is not a number") + throw IllegalArgumentException("${"$"}value is not a number") else value.toString() ``` @@ -209,3 +209,18 @@ I hope this article has demonstrated that Kotlin has a simple and consistent typ 2. Apart from loops, which are statements. Variable assignments are also statements. + +""" + +Article( + title = "A Whirlwind Tour of the Kotlin Type Hierarchy", + url = "http://natpryce.com/articles/000818.html", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Nat Pryce", + date = LocalDate.of(2016, 10, 28), + body = body +) diff --git a/app/rss/articles/A clean status bar with Android System UI and QuickDemo.md b/articles/english/2016/A clean status bar with Android System UI and QuickDemo.kts similarity index 95% rename from app/rss/articles/A clean status bar with Android System UI and QuickDemo.md rename to articles/english/2016/A clean status bar with Android System UI and QuickDemo.kts index 355d25e6c..96246a52f 100644 --- a/app/rss/articles/A clean status bar with Android System UI and QuickDemo.md +++ b/articles/english/2016/A clean status bar with Android System UI and QuickDemo.kts @@ -1,12 +1,11 @@ ---- -title: 'A clean status bar with Android System UI and QuickDemo' -url: https://pspdfkit.com/blog/2016/clean-statusbar-with-systemui-and-quickdemo/ -categories: - - Kotlin - - Android -author: David Schreiber‑Ranner -date: Nov 17, 2016 11:56 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ More often than necessary, screenshots and videos of Android apps suffer from showing an untidy status bar with unwanted notification icons, a drained battery indicator, and a different time on every screenshot. In this blog post, we take a look at the Android System UI demo mode that remedies the aforementioned problems and present a tool [_QuickDemo_](https://github.com/PSPDFKit-labs/QuickDemo) for fast and convenient status bar cleansing. > A special _Thank You_ to everyone who joined this month's [Android Heads Meetup](https://www.meetup.com/de-DE/AndroidHeads/events/234524954/) at Google Vienna. It was a real pleasure talking to you. You can [find my talk's slides here](https://speakerdeck.com/davidschreiberranner/writing-a-system-ui-demo-mode-quick-settings-tile-in-kotlin). For all of you that couldn't listen to my presentation, check out this blog post! 😉 @@ -157,3 +156,19 @@ class DemoModeTileService : TileService() { ``` That's it! You can check out the full source code of [QuickDemo on GitHub](https://github.com/PSPDFKit-labs/QuickDemo). If you have any questions on the System UI Demo Mode or the Android tiles API, feel free to [ping me on Twitter](https://twitter.com/Flashmasterdash) or [Google+](https://plus.google.com/112371263315253005287). + +""" + +Article( + title = "A clean status bar with Android System UI and QuickDemo", + url = "https://pspdfkit.com/blog/2016/clean-statusbar-with-systemui-and-quickdemo/", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "David Schreiber‑Ranner", + date = LocalDate.of(2016, 11, 17), + body = body +) diff --git a/app/rss/articles/A new hope for the JVM Kotlin.md b/articles/english/2016/A new hope for the JVM Kotlin.kts similarity index 93% rename from app/rss/articles/A new hope for the JVM Kotlin.md rename to articles/english/2016/A new hope for the JVM Kotlin.kts index 241cbc2b8..cbe2ee393 100644 --- a/app/rss/articles/A new hope for the JVM Kotlin.md +++ b/articles/english/2016/A new hope for the JVM Kotlin.kts @@ -1,11 +1,11 @@ ---- -title: 'A new hope for the JVM: Kotlin' -url: http://engineering.facile.it/blog/eng/kotlin-intro/ -categories: - - Kotlin -author: Giacomo Bresciani -date: Oct 17, 2016 10:08 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ![Kotlin](http://engineering.facile.it/images/kotlin-intro/logo_Kotlin.svg) ## Premise @@ -67,3 +67,18 @@ data class City(val name: String, val state: String) Java has to maintain backward compatibility with previous versions and still has to support the huge amount of developers and codebases present all around the world; therefore it is natural that every new feature and design change is to be considered, weighted and reasoned really carefully, inevitably **slowing down its evolution**. But this does not have to mean that us, as Android developers, “tied” to the JVM, should not try more modern and advanced languages such as Kotlin. At bottom, a part of our job (one of the best!) is to try and **experiment** new technologies and to **learn** new concepts and techniques that improve our ability to address problems in the best possible way (and of course, to have some fun 😄). I think that it is fundamental for a software engineer to be **exposed to more than a single programming language**: learning new patterns, exploring other programming paradigms or simply using and understanding a never-seen syntax has an immeasurable value for our growth and most of the times it turns out to be unexpectedly useful even when coding with ”our” language. So why not do it with a language that allows us to continue working on projects targeting our beloved JVM? + +""" + +Article( + title = "A new hope for the JVM: Kotlin", + url = "http://engineering.facile.it/blog/eng/kotlin-intro/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Giacomo Bresciani", + date = LocalDate.of(2016, 10, 17), + body = body +) diff --git a/app/rss/articles/Ad-hoc polymorphism in Kotlin.md b/articles/english/2016/Ad-hoc polymorphism in Kotlin.kts similarity index 95% rename from app/rss/articles/Ad-hoc polymorphism in Kotlin.md rename to articles/english/2016/Ad-hoc polymorphism in Kotlin.kts index abde65f18..b2c1f252f 100644 --- a/app/rss/articles/Ad-hoc polymorphism in Kotlin.md +++ b/articles/english/2016/Ad-hoc polymorphism in Kotlin.kts @@ -1,11 +1,11 @@ ---- -title: 'Ad-hoc polymorphism in Kotlin' -url: http://beust.com/weblog/2016/06/20/ad-hoc-polymorphism-in-kotlin/ -categories: - - Kotlin -author: Cédric Beust -date: Jun 20, 2016 08:47 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Even though Kotlin doesn’t natively support ad-hoc polymorphism today, it’s actually pretty straightforward to use it with little effort. Doing so is not as straightforward as it is in Haskell, obviously, but it’s been simple enough that I haven’t really encountered situations in Kotlin where the lack of native support in the language was a showstopper. In this article, I present two techniques you can use to leverage ad-hoc polymorphism in Kotlin. ## Extending for “fun” and some profit @@ -116,3 +116,18 @@ The more I think about it, the more convinced I am that the value offered by ad- Another important aspect of deciding how useful ad-hoc polymorphism would be in a language is whether that language supports higher kinds (type families). Without higher kinds, your ability to abstract is limited, which lessens the value of ad-hoc polymorphism significantly. And since Kotlin doesn’t support higher kinds as of this writing, the importance of native support for ad-hoc polymorphism is questionable, or at least, certainly not as high a priority as other features. At any rate, I have used the two techniques described above in my own code bases with reasonable benefit, so I hope they will be useful to others as well. + +""" + +Article( + title = "Ad-hoc polymorphism in Kotlin", + url = "http://beust.com/weblog/2016/06/20/ad-hoc-polymorphism-in-kotlin/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Cédric Beust", + date = LocalDate.of(2016, 6, 20), + body = body +) diff --git a/app/rss/articles/Algebraic Data Types In Kotlin.md b/articles/english/2016/Algebraic Data Types In Kotlin.kts similarity index 87% rename from app/rss/articles/Algebraic Data Types In Kotlin.md rename to articles/english/2016/Algebraic Data Types In Kotlin.kts index 91279b5a8..b1d9679ea 100644 --- a/app/rss/articles/Algebraic Data Types In Kotlin.md +++ b/articles/english/2016/Algebraic Data Types In Kotlin.kts @@ -1,12 +1,11 @@ ---- -title: 'Algebraic Data Types In Kotlin' -url: http://engineering.pivotal.io/post/algebraic-data-types-in-kotlin/ -categories: - - Kotlin - - Functional Programming -author: Mike Gehard -date: Mar 19, 2016 12:15 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Lately I have been doing a good amount of reading on functional programming, specifically [Haskell](http://haskellbook.com/) and [Elm](http://elm-lang.org/). As part of this reading, I've been exposed to the wonderful world of type systems more advanced than the ones that I am used to, i.e. the Java type system. Exposure to [algebraic data types (ADTs)](https://en.wikipedia.org/wiki/Algebraic_data_type) is one of the things that I've enjoyed about these readings. In the rest of this article, I will demonstrate how ADTs can be used in the Kotlin type system to assure that you've handled all of the possible outcomes from a business use case. For those already familiar with the [`Either` type](https://hackage.haskell.org/package/base-4.8.2.0/docs/Data-Either.html) much of this will be old news to you. @@ -52,3 +51,19 @@ By using the type system to do this, I enable a faster feedback loop than had I One place I have been experimenting with this type of pattern is in my [Spring controllers](https://github.com/mikegehard/user-management-evolution-kotlin/blob/master/applications/ums/src/main/kotlin/com/example/ums/subscriptions/SubscriptionsController.kt#L36-L47). I like how it makes the code that handles the outcomes easy to read and understand. Another benefit is that I now have an explicit contract between the use case and the consumer that outlines all of the possible outcomes for the use case. When I combine this contract with the `when` keyword, the compiler will enforce that the client either handles each outcome or decides to explicitly punt on some by using the `else` keyword. Have some feedback? I'd love to hear it. Reach out to me on Twitter @mikegehard and we can have a conversation about it. + +""" + +Article( + title = "Algebraic Data Types In Kotlin", + url = "http://engineering.pivotal.io/post/algebraic-data-types-in-kotlin/", + categories = listOf( + "Kotlin", + "Functional Programming" + ), + type = article, + lang = EN, + author = "Mike Gehard", + date = LocalDate.of(2016, 3, 19), + body = body +) diff --git a/app/rss/articles/An Introduction to Kotlin.md b/articles/english/2016/An Introduction to Kotlin.kts similarity index 95% rename from app/rss/articles/An Introduction to Kotlin.md rename to articles/english/2016/An Introduction to Kotlin.kts index 51d78a043..8337283ac 100644 --- a/app/rss/articles/An Introduction to Kotlin.md +++ b/articles/english/2016/An Introduction to Kotlin.kts @@ -1,11 +1,11 @@ ---- -title: 'An Introduction to Kotlin' -url: https://objectpartners.com/2016/02/23/an-introduction-to-kotlin/ -categories: - - Kotlin -author: Mike Plummer -date: Feb 23, 2016 12:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ [Kotlin](https://kotlinlang.org/) is a relatively new language that keeps the good parts of Java while eliminating boilerplate and encouraging better Object Oriented programming style while still allowing a Functional paradigm. Best of all, it’s 100% Java-compatible which allows you to mix it with Java, Groovy, or any other Java-bytecode language. Kotlin is similar in many ways to Groovy by handling a lot of the more mundane aspects of coding in Java but unlike Groovy, which took a Dynamic Typing approach, Kotlin doubled-down on Static typing to help eliminate many of the common annoyances in Java. ## Kotlin Features @@ -73,7 +73,7 @@ Extension functions can be added to any class at runtime which enables you to ad ```kotlin // Anywhere this function is imported all Duration objects will gain this function fun Duration.prettyPrint(): String { - return "${toHours()}:${toMinutes() % 60}:${get(ChronoUnit.SECONDS) % 60}" + return "${"$"}{toHours()}:${"$"}{toMinutes() % 60}:${"$"}{get(ChronoUnit.SECONDS) % 60}" } Duration.ZERO.prettyPrint() // Outputs '0:0:0' @@ -115,7 +115,7 @@ var adhoc = object { val second = "secondValue" } -println("${adhoc.first}, ${adhoc.second}") // Prints "firstValue, secondValue" +println("${"$"}{adhoc.first}, ${"$"}{adhoc.second}") // Prints "firstValue, secondValue" ``` #### Singleton @@ -256,3 +256,18 @@ I’ve coded up a simple example of using Kotlin in a standalone program [out on ## Conclusion I hope I’ve shown you a few reasons to get excited about Kotlin and want to use it in your next project. Especially now that version 1.0 has dropped it’s never been a better time. Popular frameworks like Spring Boot are [adding support](https://spring.io/blog/2016/02/15/developing-spring-boot-applications-with-kotlin) which makes it downright easy to gain the power and expressiveness of Kotlin. If you have any questions leave a comment below. If you would like to see more detail on specific Kotlin features leave that below too; if there’s enough interest I will explore them in future posts. In the meantime, take a look at the [example code](https://github.com/mike-plummer/KotlinCalendar) and [Kotlin docs](https://kotlinlang.org/docs/). Happy coding! + +""" + +Article( + title = "An Introduction to Kotlin", + url = "https://objectpartners.com/2016/02/23/an-introduction-to-kotlin/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Mike Plummer", + date = LocalDate.of(2016, 2, 23), + body = body +) diff --git "a/app/rss/articles/An in-depth look at Kotlin\342\200\231s initializers.md" "b/articles/english/2016/An in-depth look at Kotlin\342\200\231s initializers.kts" similarity index 91% rename from "app/rss/articles/An in-depth look at Kotlin\342\200\231s initializers.md" rename to "articles/english/2016/An in-depth look at Kotlin\342\200\231s initializers.kts" index db86bc503..83748f172 100644 --- "a/app/rss/articles/An in-depth look at Kotlin\342\200\231s initializers.md" +++ "b/articles/english/2016/An in-depth look at Kotlin\342\200\231s initializers.kts" @@ -1,11 +1,11 @@ ---- -title: 'An in-depth look at Kotlin’s initializers' -url: https://medium.com/keepsafe-engineering/an-in-depth-look-at-kotlins-initializers-a0420fcbf546#.bf7j3he2b -categories: - - Kotlin -author: AJ Alt -date: Sep 23, 2016 10:30 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Yesterday I had a co-worker come to me with an interesting bug in a Kotlin class he was writing. He had a read-only property with an inline initializerlike this: ```kotlin @@ -129,3 +129,18 @@ As you can see, initializers are run top to bottom at the beginning of a class The crash I talked about at the beginning of the article was due to the fact that the parent constructor was calling a method that was overridden in the child class. That overridden method tried to access a property it had defined with an initializer. But since subclass initializers don’t run until the superclass constructor finishes, the property hadn’t been initialized yet. So there you have it: Kotlin’s execution order for constructors and initializers is straight forward, but there are a lot of pieces that come in to play. Since it’s not documented very explicitly, it’s easy to get tripped up. + +""" + +Article( + title = "An in-depth look at Kotlin’s initializers", + url = "https://medium.com/keepsafe-engineering/an-in-depth-look-at-kotlins-initializers-a0420fcbf546#.bf7j3he2b", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "AJ Alt", + date = LocalDate.of(2016, 9, 23), + body = body +) diff --git a/articles/english/2016/Andrey Breslav Kotlin Coroutines, JVMLS 2016.kts b/articles/english/2016/Andrey Breslav Kotlin Coroutines, JVMLS 2016.kts new file mode 100644 index 000000000..949146a77 --- /dev/null +++ b/articles/english/2016/Andrey Breslav Kotlin Coroutines, JVMLS 2016.kts @@ -0,0 +1,26 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ + + + +""" + +Article( + title = "Andrey Breslav: Kotlin Coroutines, JVMLS 2016", + url = "https://www.youtube.com/watch?v=4W3ruTWUhpw", + categories = listOf( + "Kotlin", + "Coroutines" + ), + type = video, + lang = EN, + author = "Andrey Breslav", + date = LocalDate.of(2016, 8, 3), + body = body +) diff --git a/app/rss/articles/Android And Kotlin.md b/articles/english/2016/Android And Kotlin.kts similarity index 91% rename from app/rss/articles/Android And Kotlin.md rename to articles/english/2016/Android And Kotlin.kts index 9543eb687..e6d821ffa 100644 --- a/app/rss/articles/Android And Kotlin.md +++ b/articles/english/2016/Android And Kotlin.kts @@ -1,12 +1,11 @@ ---- -title: 'Android And Kotlin' -url: https://stxnext.com/blog/android-and-kotlin/ -categories: - - Android - - Kotlin -author: Bartosz Kosarzycki -date: Apr 07, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ **Kotlin** – one of the popular programming languages built on top of Java that runs on JVM. Thanks to JetBrains support and excellent IDE integration, it’s an ideal choice for Android development. 100% Java compatibility, interoperability and no runtime overhead is just the beginning of a long list of strengths. Kotlin is supposed to be a subset of SCALA, has clear benefits for developers on one hand and keeps short compile times on the other. @@ -40,3 +39,19 @@ Kotlin really shines in Android development when one looks at “Enum translatio ### Bartosz Kosarzycki Senior developer focused on new technologies and particularly interested in mobile development. Has 3 years experience in Android platform. Bartosz enjoys problem solving, is a huge fan of Agile methodologies and functional programming. For some time already is vividly interested in JVM-based languages like Scala & Kotlin. + +""" + +Article( + title = "Android And Kotlin", + url = "https://stxnext.com/blog/android-and-kotlin/", + categories = listOf( + "Android", + "Kotlin" + ), + type = article, + lang = EN, + author = "Bartosz Kosarzycki", + date = LocalDate.of(2016, 4, 7), + body = body +) diff --git a/app/rss/articles/Android development with Kotlin.md b/articles/english/2016/Android development with Kotlin.kts similarity index 88% rename from app/rss/articles/Android development with Kotlin.md rename to articles/english/2016/Android development with Kotlin.kts index 98ebf0208..675adab00 100644 --- a/app/rss/articles/Android development with Kotlin.md +++ b/articles/english/2016/Android development with Kotlin.kts @@ -1,12 +1,11 @@ ---- -title: 'Android development with Kotlin' -url: http://inaka.net/blog/2016/01/15/android-development-with-kotlin/ -categories: - - Kotlin - - Android -author: Fernando Ramirez -date: Jan 15, 2016 21:54 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ## What is Kotlin? @@ -60,8 +59,8 @@ buildscript { mavenCentral() } dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${"$"}kotlin_version" + classpath "org.jetbrains.kotlin:kotlin-android-extensions:${"$"}kotlin_version" } } @@ -72,7 +71,7 @@ repositories { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.1.1' - compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + compile "org.jetbrains.kotlin:kotlin-stdlib:${"$"}kotlin_version" } ``` @@ -174,7 +173,7 @@ Then you can call MainActivity.PICK_CONTACT and it will receive the value 100. ```kotlin fun printFirst(array: Array) { if (array.size == 0) return - print("First value: ${array[0]}") + print("First value: ${"$"}{array[0]}") } ``` @@ -232,3 +231,19 @@ textView1.text = "example text" * [RxKotlin](https://github.com/ReactiveX/RxKotlin) * [kotterknife](https://github.com/JakeWharton/kotterknife) * [kotlin-nosql](https://github.com/cheptsov/kotlin-nosql) + +""" + +Article( + title = "Android development with Kotlin", + url = "http://inaka.net/blog/2016/01/15/android-development-with-kotlin/", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Fernando Ramirez", + date = LocalDate.of(2016, 1, 15), + body = body +) diff --git a/app/rss/articles/App State as a tree.md b/articles/english/2016/App State as a tree.kts similarity index 91% rename from app/rss/articles/App State as a tree.md rename to articles/english/2016/App State as a tree.kts index 59d44bb59..85acbb6cf 100644 --- a/app/rss/articles/App State as a tree.md +++ b/articles/english/2016/App State as a tree.kts @@ -1,11 +1,11 @@ ---- -title: 'App State as a tree' -url: https://medium.com/lewisrhine/app-state-as-a-tree-a8eb6b26dd1b#.f9j7p0x89 -categories: - - Kotlin -author: Lewis Rhine -date: Nov 21, 2016 02:08 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ We tend to think of app state as just the current values at a given time. But what if we thought about state at a higher level? Wouldn’t it be useful to have more information, not just of the values of our properties, but the state of an application as a whole. Image your whole app broken into trees. Let’s say for example, a restaurant review app, why a restaurant review app? I don’t know! I’m just trying to think of anything that’s not a To Do app, okay. Let’s draw out what the state tree of this kind of app would be. @@ -84,3 +84,18 @@ when (restaurantNearby) { ``` Now there is a big part of this idea that is missing. How do you pass these classes around? How should you set it? Should it be immutable? The idea of building your state’s into trees is part of a library I am working on called [Akorn](https://github.com/LewisRhine/Akorn). It is a Flux style architecture, open source library, that uses RxJava to reactivity pass your state trees. Akron is still a little baby and I would love for people check it out. + +""" + +Article( + title = "App State as a tree", + url = "https://medium.com/lewisrhine/app-state-as-a-tree-a8eb6b26dd1b#.f9j7p0x89", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Lewis Rhine", + date = LocalDate.of(2016, 11, 21), + body = body +) diff --git a/app/rss/articles/Better Android Development with Kotlin and Gradle.md b/articles/english/2016/Better Android Development with Kotlin and Gradle.kts similarity index 79% rename from app/rss/articles/Better Android Development with Kotlin and Gradle.md rename to articles/english/2016/Better Android Development with Kotlin and Gradle.kts index 7e0c286ee..c4a66b028 100644 --- a/app/rss/articles/Better Android Development with Kotlin and Gradle.md +++ b/articles/english/2016/Better Android Development with Kotlin and Gradle.kts @@ -1,14 +1,11 @@ ---- -title: 'Better Android Development with Kotlin and Gradle' -url: https://www.youtube.com/watch?v=bVSeKexyzhs -type: video -categories: - - Kotlin - - Android - - Gradle -author: Ty Smith -date: Oct 3, 2016 11:53 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ # v1 @@ -30,3 +27,20 @@ Ty Smith, Uber In this talk, Ty will walk you through setting up and using Kotlin with Gradle to streamline your workflow for Android development, both within the build tool phase and within the application itself, so that you can use a consistent language through the entire Android stack. After a brief overview of Kotlin, we’ll dive into how it can be used with Gradle to accelerate Android Development with a consistent language. I'll walk through a real world example of building a Gradle plugin in and scripts in Groovy, then I'll convert those into Kotlin. An open source repo of the sample will be provided to follow along. + +""" + +Article( + title = "Better Android Development with Kotlin and Gradle", + url = "https://www.youtube.com/watch?v=bVSeKexyzhs", + categories = listOf( + "Kotlin", + "Android", + "Gradle" + ), + type = video, + lang = EN, + author = "Ty Smith", + date = LocalDate.of(2016, 10, 3), + body = body +) diff --git a/app/rss/articles/Building DSL Instead of an IDE Plugin.md b/articles/english/2016/Building DSL Instead of an IDE Plugin.kts similarity index 91% rename from app/rss/articles/Building DSL Instead of an IDE Plugin.md rename to articles/english/2016/Building DSL Instead of an IDE Plugin.kts index 9d4ca5ba0..e8755d6e1 100644 --- a/app/rss/articles/Building DSL Instead of an IDE Plugin.md +++ b/articles/english/2016/Building DSL Instead of an IDE Plugin.kts @@ -1,14 +1,14 @@ ---- -title: 'Building DSL Instead of an IDE Plugin' -url: http://jonnyzzz.com/blog/2016/09/02/dsl-building/ -categories: - - Kotlin - - DSL -author: Eugene Petrenko -date: Sep 02, 2016 03:04 -features: - - mathjax ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.ArticleFeature +import link.kotlin.scripts.ArticleFeature.highlightjs +import link.kotlin.scripts.ArticleFeature.mathjax +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ An alternative way of doing IDE support without any IDE plugin code for not yet supported and specific languages. Problem Statement @@ -177,3 +177,20 @@ You may follow to [this post](http://jonnyzzz.com/blog/2016/03/08/gradle-for-dsl for The DSL Way toolset *PS*. Do you have more examples for \\(Original Language\\)? Please share in comments below + +""" + +Article( + title = "Building DSL Instead of an IDE Plugin", + url = "http://jonnyzzz.com/blog/2016/09/02/dsl-building/", + categories = listOf( + "Kotlin", + "DSL" + ), + type = article, + lang = EN, + author = "Eugene Petrenko", + date = LocalDate.of(2016, 9, 2), + body = body, + features = listOf(mathjax, highlightjs) +) diff --git a/app/rss/articles/Building a Kotlin project 1-2.md b/articles/english/2016/Building a Kotlin project 1-2.kts similarity index 85% rename from app/rss/articles/Building a Kotlin project 1-2.md rename to articles/english/2016/Building a Kotlin project 1-2.kts index 0ca055a44..3437fb704 100644 --- a/app/rss/articles/Building a Kotlin project 1-2.md +++ b/articles/english/2016/Building a Kotlin project 1-2.kts @@ -1,12 +1,11 @@ ---- -title: 'Building a Kotlin project 1/2' -url: http://cirorizzo.net/2016/03/04/building-a-kotlin-project/ -categories: - - Android - - Kotlin -author: Ciro Rizzo -date: Mar 04, 2016 21:19 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ ### Part 1 The best way to learn a new language is to use it in a real use case. That's way this new series of posts are focused on building a proper Android project using Kotlin. @@ -106,7 +105,7 @@ buildscript { } dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_ver" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${"$"}kotlin_ver" } } ``` @@ -123,15 +122,15 @@ Before adding the dependencies for the libraries we're going to use in the proje ```groovy android { - compileSdkVersion "$compileSdkVersion_ver".toInteger() - buildToolsVersion "$buildToolsVersion_ver" + compileSdkVersion "${"$"}compileSdkVersion_ver".toInteger() + buildToolsVersion "${"$"}buildToolsVersion_ver" defaultConfig { applicationId "com.github.cirorizzo.kshows" - minSdkVersion "$minSdkVersion_ver".toInteger() - targetSdkVersion "$targetSdkVersion_ver".toInteger() - versionCode "$versionCode_ver".toInteger() - versionName "$versionName_ver" + minSdkVersion "${"$"}minSdkVersion_ver".toInteger() + targetSdkVersion "${"$"}targetSdkVersion_ver".toInteger() + versionCode "${"$"}versionCode_ver".toInteger() + versionName "${"$"}versionName_ver" } ... ``` @@ -165,25 +164,25 @@ Next step is to declare the Libraries used in the project ```groovy dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) - testCompile "junit:junit:$junit_ver" + testCompile "junit:junit:${"$"}junit_ver" - compile "com.android.support:appcompat-v7:$support_ver" - compile "com.android.support:cardview-v7:$support_ver" - compile "com.android.support:recyclerview-v7:$support_ver" - compile "com.github.bumptech.glide:glide:$glide_ver" + compile "com.android.support:appcompat-v7:${"$"}support_ver" + compile "com.android.support:cardview-v7:${"$"}support_ver" + compile "com.android.support:recyclerview-v7:${"$"}support_ver" + compile "com.github.bumptech.glide:glide:${"$"}glide_ver" - compile "com.squareup.retrofit2:retrofit:$retrofit_ver" - compile ("com.squareup.retrofit2:converter-simplexml:$retrofit_ver") { + compile "com.squareup.retrofit2:retrofit:${"$"}retrofit_ver" + compile ("com.squareup.retrofit2:converter-simplexml:${"$"}retrofit_ver") { exclude module: 'xpp3' exclude group: 'stax' } - compile "io.reactivex:rxjava:$rxjava_ver" - compile "io.reactivex:rxandroid:$rxandroid_ver" - compile "com.squareup.retrofit2:adapter-rxjava:$retrofit_ver" + compile "io.reactivex:rxjava:${"$"}rxjava_ver" + compile "io.reactivex:rxandroid:${"$"}rxandroid_ver" + compile "com.squareup.retrofit2:adapter-rxjava:${"$"}retrofit_ver" - compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_ver" - compile "org.jetbrains.anko:anko-common:$anko_ver" + compile "org.jetbrains.kotlin:kotlin-stdlib:${"$"}kotlin_ver" + compile "org.jetbrains.anko:anko-common:${"$"}anko_ver" } ``` @@ -214,3 +213,19 @@ A special thanks for the translation to the gold.xitu.io Team + +""" + +Article( + title = "Building a Kotlin project 1/2", + url = "http://cirorizzo.net/2016/03/04/building-a-kotlin-project/", + categories = listOf( + "Android", + "Kotlin" + ), + type = article, + lang = EN, + author = "Ciro Rizzo", + date = LocalDate.of(2016, 3, 4), + body = body +) diff --git a/app/rss/articles/Building a Kotlin project 2-2.md b/articles/english/2016/Building a Kotlin project 2-2.kts similarity index 97% rename from app/rss/articles/Building a Kotlin project 2-2.md rename to articles/english/2016/Building a Kotlin project 2-2.kts index 51508b544..dc4b2962e 100644 --- a/app/rss/articles/Building a Kotlin project 2-2.md +++ b/articles/english/2016/Building a Kotlin project 2-2.kts @@ -1,12 +1,11 @@ ---- -title: 'Building a Kotlin project 2/2' -url: http://cirorizzo.net/2016/03/04/building-a-kotlin-project-2/ -categories: - - Android - - Kotlin -author: Ciro Rizzo -date: Mar 04, 2016 21:22 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ###### _Part 2_ In the previous [post](http://www.cirorizzo.net/building-a-kotlin-project/) we started a new project from scratch, and adjusted the `build.gradle` for the Kitten App purpose. @@ -379,3 +378,19 @@ The same project has been written in Java as well [JShows](https://github.com/ci This post is also available in Chinese on [gold.xitu.io](https://goo.gl/3YpGoR) A special thanks for the translation to the **gold.xitu.io** Team + +""" + +Article( + title = "Building a Kotlin project 2/2", + url = "http://cirorizzo.net/2016/03/04/building-a-kotlin-project-2/", + categories = listOf( + "Android", + "Kotlin" + ), + type = article, + lang = EN, + author = "Ciro Rizzo", + date = LocalDate.of(2016, 3, 4), + body = body +) diff --git a/app/rss/articles/Building a compiler for your own language validation.md b/articles/english/2016/Building a compiler for your own language validation.kts similarity index 82% rename from app/rss/articles/Building a compiler for your own language validation.md rename to articles/english/2016/Building a compiler for your own language validation.kts index 23a36c207..9f9f658f0 100644 --- a/app/rss/articles/Building a compiler for your own language validation.md +++ b/articles/english/2016/Building a compiler for your own language validation.kts @@ -1,11 +1,11 @@ ---- -title: 'Building a compiler for your own language: validation' -url: http://tomassetti.me/building-compiler-language-validation/ -categories: - - Kotlin -author: Federico Tomassetti -date: Sep 06, 2016 01:20 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ ![validation_for_your_own_programming_language](http://i0.wp.com/tomassetti.me/wp-content/uploads/2016/08/validation_for_your_own_programming_language.jpg?resize=730%2C489) So you have parsed your code and built a clean AST for it. Now it is time to check if what the user has expressed make sense at all. We should perform validation, identifying semantical errors, to communicate together with lexical and syntactical errors (provided by the parser). @@ -49,7 +49,7 @@ fun SandyFile.validate() : List { val varsByName = HashMap() this.specificProcess(VarDeclaration::class.java) { if (varsByName.containsKey(it.varName)) { - errors.add(Error("A variable named '${it.varName}' has been already declared at ${varsByName[it.varName]!!.position!!.start}", + errors.add(Error("A variable named '${"$"}{it.varName}' has been already declared at ${"$"}{varsByName[it.varName]!!.position!!.start}", it.position!!.start)) } else { varsByName[it.varName] = it @@ -59,16 +59,16 @@ fun SandyFile.validate() : List { // check a variable is not referred before being declared this.specificProcess(VarReference::class.java) { if (!varsByName.containsKey(it.varName)) { - errors.add(Error("There is no variable named '${it.varName}'", it.position!!.start)) + errors.add(Error("There is no variable named '${"$"}{it.varName}'", it.position!!.start)) } else if (it.isBefore(varsByName[it.varName]!!)) { - errors.add(Error("You cannot refer to variable '${it.varName}' before its declaration", it.position!!.start)) + errors.add(Error("You cannot refer to variable '${"$"}{it.varName}' before its declaration", it.position!!.start)) } } this.specificProcess(Assignment::class.java) { if (!varsByName.containsKey(it.varName)) { - errors.add(Error("There is no variable named '${it.varName}'", it.position!!.start)) + errors.add(Error("There is no variable named '${"$"}{it.varName}'", it.position!!.start)) } else if (it.isBefore(varsByName[it.varName]!!)) { - errors.add(Error("You cannot refer to variable '${it.varName}' before its declaration", it.position!!.start)) + errors.add(Error("You cannot refer to variable '${"$"}{it.varName}' before its declaration", it.position!!.start)) } } @@ -167,8 +167,8 @@ _Will it fly? _Let’s verify that. class ValidationTest { @test fun duplicateVar() { - val errors = SandyParserFacade.parse("""var a = 1 - |var a =2""".trimMargin("|")).errors + val errors = SandyParserFacade.parse(\"\"\"var a = 1 + |var a =2\"\"\".trimMargin("|")).errors assertEquals(listOf(Error("A variable named 'a' has been already declared at Line 1, Column 0", Point(2,0))), errors) } @@ -178,8 +178,8 @@ class ValidationTest { } @test fun varReferenceBeforeDeclaration() { - val errors = SandyParserFacade.parse("""var a = b + 2 - |var b = 2""".trimMargin("|")).errors + val errors = SandyParserFacade.parse(\"\"\"var a = b + 2 + |var b = 2\"\"\".trimMargin("|")).errors assertEquals(listOf(Error("You cannot refer to variable 'b' before its declaration", Point(1,8))), errors) } @@ -189,8 +189,8 @@ class ValidationTest { } @test fun varAssignmentBeforeDeclaration() { - val errors = SandyParserFacade.parse("""a = 1 - |var a =2""".trimMargin("|")).errors + val errors = SandyParserFacade.parse(\"\"\"a = 1 + |var a =2\"\"\".trimMargin("|")).errors assertEquals(listOf(Error("You cannot refer to variable 'a' before its declaration", Point(1,0))), errors) } @@ -199,3 +199,18 @@ class ValidationTest { ## Conclusions This is all nice and well: with a simple call we can get a list of all errors we have. For each of them we have a description and the position. This is enough for our compiler but we would now need to show these errors in the editor. We will do that in out of the future posts. + +""" + +Article( + title = "Building a compiler for your own language: validation", + url = "http://tomassetti.me/building-compiler-language-validation/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Federico Tomassetti", + date = LocalDate.of(2016, 9, 6), + body = body +) diff --git a/app/rss/articles/Building microservices with Kotlin and Spring Boot.md b/articles/english/2016/Building microservices with Kotlin and Spring Boot.kts similarity index 87% rename from app/rss/articles/Building microservices with Kotlin and Spring Boot.md rename to articles/english/2016/Building microservices with Kotlin and Spring Boot.kts index 988c581c2..7cb95eb30 100644 --- a/app/rss/articles/Building microservices with Kotlin and Spring Boot.md +++ b/articles/english/2016/Building microservices with Kotlin and Spring Boot.kts @@ -1,11 +1,11 @@ ---- -title: 'Building microservices with Kotlin and Spring Boot' -url: http://www.thedevpiece.com/building-microservices-with-kotlin-and-springboot/ -categories: - - Kotlin -author: Gabriel Francisco -date: Dec 15, 2016 02:16 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ ![Kotlin and Spring-Boot Logo.](http://www.thedevpiece.com/content/images/2016/12/kotlin-springboot.png) It's been a while since Kotlin arrived. Kotlin is a JVM language created by JetBrains developed to be interoperate with Java libraries and apis. @@ -28,7 +28,7 @@ buildscript { dependencies { classpath "org.springframework.boot:spring-boot-gradle-plugin:1.4.2.RELEASE" - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${"$"}kotlin_version" } } @@ -47,7 +47,7 @@ sourceSets { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + compile "org.jetbrains.kotlin:kotlin-stdlib:${"$"}kotlin_version" compile 'org.slf4j:slf4j-api:1.7.14' @@ -146,3 +146,18 @@ And I guess that's all. As you can see, Kotlin is a interesting language, very p Thank you and, any questions, please, leave a comment. []'s + +""" + +Article( + title = "Building microservices with Kotlin and Spring Boot", + url = "http://www.thedevpiece.com/building-microservices-with-kotlin-and-springboot/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Gabriel Francisco", + date = LocalDate.of(2016, 12, 15), + body = body +) diff --git a/app/rss/articles/Calling on EAPers.md b/articles/english/2016/Calling on EAPers.kts similarity index 87% rename from app/rss/articles/Calling on EAPers.md rename to articles/english/2016/Calling on EAPers.kts index f56571fa1..fc0063948 100644 --- a/app/rss/articles/Calling on EAPers.md +++ b/articles/english/2016/Calling on EAPers.kts @@ -1,12 +1,11 @@ ---- -title: 'Calling on EAPers' -url: https://blog.jetbrains.com/kotlin/2016/08/calling-on-eapers/ -categories: - - Kotlin - - EAP -author: Roman Belov -date: Aug 04, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ At JetBrains we’ve always believed in our Early Access Program for our tools, giving developers a chance to use the latest features or fixes as soon as they’re ready. We’ve followed the same philosophy with Kotlin, knowing of course that with a language, some decisions can haunt you for life. That is why during the pre-release days of Kotlin, we’d have milestone releases with features and important changes for our early adopters (including ourselves at JetBrains), collect feedback on whether things were working as designed. This release-feedback-adjust cycle has proven invaluable in so many occasions and has definitely helped shape Kotlin 1.0. @@ -28,3 +27,19 @@ Most of the Kotlin team are available on our public ([Slack community](http://ko One of our main goals with Kotlin has always been to make it an industrial language that is pragmatic. And it’s by using Kotlin in many types of applications and scenarios that will help us achieve this goal. For this, we continue to need your help! Thank you and let’s Kotlin! + +""" + +Article( + title = "Calling on EAPers", + url = "https://blog.jetbrains.com/kotlin/2016/08/calling-on-eapers/", + categories = listOf( + "Kotlin", + "EAP" + ), + type = article, + lang = EN, + author = "Roman Belov", + date = LocalDate.of(2016, 8, 4), + body = body +) diff --git a/app/rss/articles/Christina Lee Kotlin in Production.md b/articles/english/2016/Christina Lee Kotlin in Production.kts similarity index 70% rename from app/rss/articles/Christina Lee Kotlin in Production.md rename to articles/english/2016/Christina Lee Kotlin in Production.kts index 1447c9ce5..d7801ac9c 100644 --- a/app/rss/articles/Christina Lee Kotlin in Production.md +++ b/articles/english/2016/Christina Lee Kotlin in Production.kts @@ -1,12 +1,11 @@ ---- -title: 'Christina Lee: Kotlin in Production' -url: https://www.youtube.com/watch?v=xRDqDe4rxkM -categories: - - Kotlin -author: Android Dialogs -type: video -date: Oct 18, 2016 05:39 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ # v1 While in New York for Droidcon NYC, Huyen hangs out with Christina Lee, Pinterest Android engineer and cross-country runner, to talk about bringing Kotlin into your production apps. @@ -19,3 +18,18 @@ Christina Lee, Pinterest It is hard to argue that Kotlin is not an amazing language. What is easy to argue is that there are many unknowns about its performance in the wild and at scale, which makes it hard to make an informed decision about incorporating it into your app. Fortunately for you, we went there and have lived to tell the tale. After more than a year of maintaining a pure Kotlin app at Highlight, and more recently helping Pinterest ramp up Kotlin in Android, we've learned much about the ramifications of moving away from Java. Come learn from our mistakes and successes as we cover the highs, and lows, of using Kotlin in the wild! + +""" + +Article( + title = "Christina Lee: Kotlin in Production", + url = "https://www.youtube.com/watch?v=xRDqDe4rxkM", + categories = listOf( + "Kotlin" + ), + type = video, + lang = EN, + author = "Android Dialogs", + date = LocalDate.of(2016, 10, 18), + body = body +) diff --git a/app/rss/articles/Code Swarm for kotlin.md b/articles/english/2016/Code Swarm for kotlin.kts similarity index 55% rename from app/rss/articles/Code Swarm for kotlin.md rename to articles/english/2016/Code Swarm for kotlin.kts index 03d2abaad..75064dd99 100644 --- a/app/rss/articles/Code Swarm for kotlin.md +++ b/articles/english/2016/Code Swarm for kotlin.kts @@ -1,12 +1,11 @@ ---- -title: 'Code Swarm for Kotlin' -url: https://www.youtube.com/watch?v=UTN2_YXEzL4 -categories: - - Kotlin -type: video -author: Landon Wilkins -date: Nov 24, 2016 11:54 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ @@ -21,3 +20,18 @@ https://github.com/rictic/code_swarm Why make this visualization? - I'm studying how popular projects evolve + +""" + +Article( + title = "Code Swarm for Kotlin", + url = "https://www.youtube.com/watch?v=UTN2_YXEzL4", + categories = listOf( + "Kotlin" + ), + type = video, + lang = EN, + author = "Landon Wilkins", + date = LocalDate.of(2016, 11, 24), + body = body +) diff --git a/app/rss/articles/Code improvements with Kotlin.md b/articles/english/2016/Code improvements with Kotlin.kts similarity index 93% rename from app/rss/articles/Code improvements with Kotlin.md rename to articles/english/2016/Code improvements with Kotlin.kts index 057c5097c..f2cfdd446 100644 --- a/app/rss/articles/Code improvements with Kotlin.md +++ b/articles/english/2016/Code improvements with Kotlin.kts @@ -1,12 +1,11 @@ ---- -title: 'Code improvements with Kotlin' -url: https://blog.frankel.ch/code-improvement-kotlin -categories: - - Kotlin - - -author: Nicolas Frankel -date: Apr 17, 2016 16:23 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ [![](https://blog.frankel.ch/wp-content/resources/code-improvement-kotlin/icon_Kotlin.png)](https://kotlinlang.org/)This week, I tried to improve my pet Android application developed in Kotlin. As I was very new to Kotlin when I started it, most of the code just looks like Java written in Kotlin. ### Starting simple @@ -185,3 +184,19 @@ Learning a new programming language is easy: many books promise to do that in 21 * sdtlib functions [reference](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/#functions) * [Safe calls](https://kotlinlang.org/docs/reference/null-safety.html#safe-calls) * [Local functions](https://kotlinlang.org/docs/reference/functions.html#local-functions) + +""" + +Article( + title = "Code improvements with Kotlin", + url = "https://blog.frankel.ch/code-improvement-kotlin", + categories = listOf( + "Kotlin", + "null" + ), + type = article, + lang = EN, + author = "Nicolas Frankel", + date = LocalDate.of(2016, 4, 17), + body = body +) diff --git a/app/rss/articles/Composing functions in Kotlin with extensions and operators.md b/articles/english/2016/Composing functions in Kotlin with extensions and operators.kts similarity index 90% rename from app/rss/articles/Composing functions in Kotlin with extensions and operators.md rename to articles/english/2016/Composing functions in Kotlin with extensions and operators.kts index a39296cc1..3f234c279 100644 --- a/app/rss/articles/Composing functions in Kotlin with extensions and operators.md +++ b/articles/english/2016/Composing functions in Kotlin with extensions and operators.kts @@ -1,11 +1,11 @@ ---- -title: 'Composing functions in Kotlin with extensions and operators' -url: https://medium.com/@fourlastor/composing-functions-in-kotlin-with-extensions-and-operators-76a499f5b4b7#.72408kmql -categories: - - Kotlin -author: Daniele Conti -date: Oct 27, 2016 02:15 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Today I was wondering if I could achieve a more elegant way to compose functions with Kotlin. Let’s imagine we have this: ```kotlin @@ -126,3 +126,18 @@ fun composed(val: Int) = (::trice..::twice..::same) (val) We’re applying the `..` operator to `trice`, `twice`, and `same`, in order. Since the return type is a function, the result of `::trice..::twice` can be then chained with `::same`. The result of this last operation is again a function, which then we invoke with `(val)` as an argument. Kotlin metaprogramming features are extremely intersting, and give you the chance to make your code more expressive, especially when you combine features like extensions and operator overloading. This is only a small example of what you can achieve, so start playing with it if you aren’t already! + +""" + +Article( + title = "Composing functions in Kotlin with extensions and operators", + url = "https://medium.com/@fourlastor/composing-functions-in-kotlin-with-extensions-and-operators-76a499f5b4b7#.72408kmql", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Daniele Conti", + date = LocalDate.of(2016, 10, 27), + body = body +) diff --git a/app/rss/articles/Concurrency Primitives in Kotlin.md b/articles/english/2016/Concurrency Primitives in Kotlin.kts similarity index 84% rename from app/rss/articles/Concurrency Primitives in Kotlin.md rename to articles/english/2016/Concurrency Primitives in Kotlin.kts index e4ab3a73e..795295612 100644 --- a/app/rss/articles/Concurrency Primitives in Kotlin.md +++ b/articles/english/2016/Concurrency Primitives in Kotlin.kts @@ -1,11 +1,11 @@ ---- -title: 'Concurrency Primitives in Kotlin' -url: https://blog.egorand.me/concurrency-primitives-in-kotlin/ -categories: - - Kotlin -author: Egor Andreevici -date: Dec 23, 2016 01:03 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ I've recently started reading ["Android Concurrency" by G. Blake Meike](https://www.goodreads.com/book/show/26260944-android-concurrency), and so far I can highly recommend this great book: it contains quite a lot of insight into how various Android concurrency mechanisms work, when to prefer one approach over the other and how to get the best of the tools at your disposal. I decided to follow along with the code examples and recreate them on my computer, and since I'm deeply in love with Kotlin, I thought it would be a great idea to translate the examples into Kotlin on the go. In one of the first chapters the author revisits concurrency basics in Java, and when I started rewriting the code examples in Kotlin, I was quite surprised to find out that: * There's no `synchronized` keyword in Kotlin @@ -25,7 +25,7 @@ There are two ways to create a thread in Java: extending the `Thread` class, or ```kotlin object : Thread() { override fun run() { - println("running from Thread: ${Thread.currentThread()}") + println("running from Thread: ${"$"}{Thread.currentThread()}") } }.start() ``` @@ -34,7 +34,7 @@ This code uses Kotlin's [`Object Expressions`](https://kotlinlang.org/docs/refer ```kotlin Thread({ - println("running from lambda: ${Thread.currentThread()}") + println("running from lambda: ${"$"}{Thread.currentThread()}") }).start() ``` @@ -42,7 +42,7 @@ You don't see a `Runnable` here: in Kotlin it can easily be replaced with a [lam ```kotlin thread(start = true) { - println("running from thread(): ${Thread.currentThread()}") + println("running from thread(): ${"$"}{Thread.currentThread()}") } ``` @@ -77,7 +77,7 @@ It's just a very convenient wrapper function that's a joy to use. ```kotlin @Synchronized fun synchronizedMethod() { - println("inside a synchronized method: ${Thread.currentThread()}") + println("inside a synchronized method: ${"$"}{Thread.currentThread()}") } ``` @@ -85,9 +85,9 @@ The annotation has the same effect as Java's `synchronized`: it'll mark the JVM ```kotlin fun methodWithSynchronizedBlock() { - println("outside of a synchronized block: ${Thread.currentThread()}") + println("outside of a synchronized block: ${"$"}{Thread.currentThread()}") synchronized(this) { - println("inside a synchronized block: ${Thread.currentThread()}") + println("inside a synchronized block: ${"$"}{Thread.currentThread()}") } } ``` @@ -105,14 +105,14 @@ fun start() { running = true thread(start = true) { while (running) { - println("Still running: ${Thread.currentThread()}") + println("Still running: ${"$"}{Thread.currentThread()}") } } } fun stop() { running = false - println("Stopped: ${Thread.currentThread()}") + println("Stopped: ${"$"}{Thread.currentThread()}") } ``` @@ -131,7 +131,7 @@ fun produce() = synchronized(lock) { } Thread.sleep(rand.nextInt(100).toLong()) items++ - println("Produced, count is $items: ${Thread.currentThread()}") + println("Produced, count is ${"$"}items: ${"$"}{Thread.currentThread()}") lock.notifyAll() } @@ -141,7 +141,7 @@ fun consume() = synchronized(lock) { } Thread.sleep(rand.nextInt(100).toLong()) items-- - println("Consumed, count is $items: ${Thread.currentThread()}") + println("Consumed, count is ${"$"}items: ${"$"}{Thread.currentThread()}") lock.notifyAll() } ``` @@ -155,3 +155,18 @@ All code samples from this article are available on [GitHub](https://github.com/ Although they're not used frequently, it's still important to know and understand the basic concurrency tools. Turns out those work a bit differently in Kotlin than in Java, but all major mechanisms are supported. And remember that Kotlin interacts really well with Java, so you can just rely on Java classes if the Kotlin counterparts are missing. Have fun! If you've enjoyed this short article, please share it with your network using one of the buttons below. Thanks, and have a Merry Christmas! + +""" + +Article( + title = "Concurrency Primitives in Kotlin", + url = "https://blog.egorand.me/concurrency-primitives-in-kotlin/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Egor Andreevici", + date = LocalDate.of(2016, 12, 23), + body = body +) diff --git a/app/rss/articles/Crafting Log4j Configuration DSL.md b/articles/english/2016/Crafting Log4j Configuration DSL.kts similarity index 94% rename from app/rss/articles/Crafting Log4j Configuration DSL.md rename to articles/english/2016/Crafting Log4j Configuration DSL.kts index d30710491..ac3afd7a4 100644 --- a/app/rss/articles/Crafting Log4j Configuration DSL.md +++ b/articles/english/2016/Crafting Log4j Configuration DSL.kts @@ -1,14 +1,13 @@ ---- -title: 'Crafting Log4j Configuration DSL' -url: http://jonnyzzz.com/blog/2016/09/09/log4j-dsl/ -categories: - - Kotlin - - DSL -author: Eugene Petrenko -date: Sep 9, 2016 02:45 -features: - - mathjax ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.ArticleFeature.highlightjs +import link.kotlin.scripts.ArticleFeature.mathjax +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ In this post I show how to implement The DSL Way to manage Log4j configuration and extend an IDE without writing a plugin for it @@ -330,3 +329,20 @@ You may have a look (or contribute) to the project sources on [my GitHub](https: You may follow to [this post](http://jonnyzzz.com/blog/2016/03/08/gradle-for-dsl/) for details on how to create a zero-configuration package for such DSLs and for The DSL Way approach. + +""" + +Article( + title = "Crafting Log4j Configuration DSL", + url = "http://jonnyzzz.com/blog/2016/09/09/log4j-dsl/", + categories = listOf( + "Kotlin", + "DSL" + ), + type = article, + lang = EN, + author = "Eugene Petrenko", + date = LocalDate.of(2016, 9, 9), + body = body, + features = listOf(mathjax, highlightjs) +) diff --git a/app/rss/articles/Creating an AndroidWear watchface using Kotlin.md b/articles/english/2016/Creating an AndroidWear watchface using Kotlin.kts similarity index 93% rename from app/rss/articles/Creating an AndroidWear watchface using Kotlin.md rename to articles/english/2016/Creating an AndroidWear watchface using Kotlin.kts index 159e7c0cf..a2c054962 100644 --- a/app/rss/articles/Creating an AndroidWear watchface using Kotlin.md +++ b/articles/english/2016/Creating an AndroidWear watchface using Kotlin.kts @@ -1,13 +1,11 @@ ---- -title: 'Creating an AndroidWear watchface using Kotlin' -url: https://medium.com/@robj.perez/creating-an-androidwear-watchface-using-kotlin-e5f725813fa9#.xcftwvys6 -categories: - - Android - - Android Wear - - Kotlin -author: Roberto Perez -date: Mar 28, 2016 09:19 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ### Creating an AndroidWear watchface using Kotlin ![](https://d262ilb51hltx0.cloudfront.net/max/600/1*78W0Fk8Ca3OGCdZiebTvSw.png) @@ -122,3 +120,20 @@ One of the important things when using a new technology is the how its users com #### Conclusions I could be talking about the features of Kotlin which we used while developing the watch face for hours, things like the functional features of Kotlin, the pattern matching of “switch” clauses, the bugs that optional types and immutability has saved us time of debugging and so on. In our experience choosing of Kotlin has been a great decision, it made our code more readable and one of the most important outcomes, we enjoyed a lot while developing the application which at the end is all that matters, isn’t it? :). + +""" + +Article( + title = "Creating an AndroidWear watchface using Kotlin", + url = "https://medium.com/@robj.perez/creating-an-androidwear-watchface-using-kotlin-e5f725813fa9#.xcftwvys6", + categories = listOf( + "Android", + "Android Wear", + "Kotlin" + ), + type = article, + lang = EN, + author = "Roberto Perez", + date = LocalDate.of(2016, 3, 28), + body = body +) diff --git a/app/rss/articles/DSL builder in Kotlin.md b/articles/english/2016/DSL builder in Kotlin.kts similarity index 90% rename from app/rss/articles/DSL builder in Kotlin.md rename to articles/english/2016/DSL builder in Kotlin.kts index 9adf65818..0b5f65a87 100644 --- a/app/rss/articles/DSL builder in Kotlin.md +++ b/articles/english/2016/DSL builder in Kotlin.kts @@ -1,11 +1,11 @@ ---- -title: 'DSL builder in Kotlin' -url: https://medium.com/@piotr.slesarew/dsl-builder-in-kotlin-be5816ba3ca7#.xbcofn4hp -categories: - - Kotlin -author: Piotr Ślesarew -date: Oct 21, 2016 02:27 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ > Design patterns describe simple and elegant solutions to specific problems in object-oriented software design. (GoF) We all use design patterns even if we do not know their names. Builder pattern is one of the most famous and liked patterns for creating objects in an easy and scalable way. Being Java engineer I have had a lot of opportunities to master it. After a few times, I realized there is no fun in writing a builder. Thanks to IntelliJ IDEA we can generate it. @@ -124,3 +124,18 @@ This sample shows how amazing Kotlin is and what kind of crazy structures we can > Functional programming is like a blessed curse. Purity feels amazing but you feel like you can’t program the “dirty” way anymore. — ([André Staltz](https://twitter.com/andrestaltz/status/696716396626124801)) _If this was interesting to you, please do hit the heart button ❤ or_ [_let me know on Twitter_](https://twitter.com/SliskiCode)_._ + +""" + +Article( + title = "DSL builder in Kotlin", + url = "https://medium.com/@piotr.slesarew/dsl-builder-in-kotlin-be5816ba3ca7#.xbcofn4hp", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Piotr Ślesarew", + date = LocalDate.of(2016, 10, 21), + body = body +) diff --git a/app/rss/articles/Data Binding in Anko.md b/articles/english/2016/Data Binding in Anko.kts similarity index 91% rename from app/rss/articles/Data Binding in Anko.md rename to articles/english/2016/Data Binding in Anko.kts index 699237474..e6ce1bfb5 100644 --- a/app/rss/articles/Data Binding in Anko.md +++ b/articles/english/2016/Data Binding in Anko.kts @@ -1,12 +1,11 @@ ---- -title: 'Data Binding in Anko' -url: https://medium.com/lewisrhine/data-binding-in-anko-77cd11408cf9#.ym6ibevib -categories: - - Kotlin - - Anko -author: Lewis Rhine -date: Dec 01, 2016 10:36 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ Ever since Google announced their data binding library there has been a debate in the community whether it is “the best thing since fragments” or “the worst thing since fragments”. (I knew you would see that coming, but I did it anyways) @@ -24,7 +23,7 @@ class MainActivityUI : AnkoComponent { verticalLayout { val name = editText() button("Say Hello") { - onClick { ctx.toast("Hello, ${name.text}!") } + onClick { ctx.toast("Hello, ${"$"}{name.text}!") } } } } @@ -85,7 +84,7 @@ class MainActivityUI(private val bindText: Binder) : AnkoComponent - bindText.item = “$charSequence” + bindText.item = “${"$"}charSequence” } } } @@ -166,3 +165,19 @@ This was mostly a proof of concept. I’m sure there are better ways of doing th The source code is up on my GitHub. Thank you. + +""" + +Article( + title = "Data Binding in Anko", + url = "https://medium.com/lewisrhine/data-binding-in-anko-77cd11408cf9#.ym6ibevib", + categories = listOf( + "Kotlin", + "Anko" + ), + type = article, + lang = EN, + author = "Lewis Rhine", + date = LocalDate.of(2016, 12, 1), + body = body +) diff --git a/app/rss/articles/Data Driven Testing with Spek.md b/articles/english/2016/Data Driven Testing with Spek.kts similarity index 93% rename from app/rss/articles/Data Driven Testing with Spek.md rename to articles/english/2016/Data Driven Testing with Spek.kts index e2269ad25..724fdf826 100644 --- a/app/rss/articles/Data Driven Testing with Spek.md +++ b/articles/english/2016/Data Driven Testing with Spek.kts @@ -1,12 +1,11 @@ ---- -title: 'Data Driven Testing with Spek ' -url: http://engineering.pivotal.io/post/spek-data-driven-tests/ -categories: - - Kotlin - - Testing -author: Konstantin Semenov -date: Jul 3, 2016 03:25 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ Several days ago, when we were developing a parser in Kotlin, we found ourselves copying and pasting series of tests with slight adjustments. This has become really annoying, especially when we thought of all the tests we would need to change every time the behaviour of our parser is going to change. As we have used Spock on previous projects, we wanted to replicate Spock's [Data Driven Testing](https://spockframework.github.io/spock/docs/1.0/data_driven_testing.html) approach in [Spek](https://jetbrains.github.io/spek/). ## Spock Example @@ -83,7 +82,7 @@ class HeroTests: Spek({ listOf("when standing", false, false, true, Hero().apply { stand() }) ).forEach { test -> describe(test.first) { - fun testLabel(flag: Boolean, action: String): String = "${if (flag) "should" else "shouldn't"} be $action" + fun testLabel(flag: Boolean, action: String): String = "${"$"}{if (flag) "should" else "shouldn't"} be ${"$"}action" it(testLabel(test[1], "running")) { expect(test[1]) { test[4].isRunning } @@ -120,9 +119,9 @@ data class HeroQueryTest(val state: String, val subject: Hero, val isRunning: Bo val runningTestLabel = testLabel(isRunning, "running") val standingTestLabel = testLabel(isStanding, "standing") val jumpingTestLabel = testLabel(isJumping, "jumping") - val testGroupLabel = "when $state" + val testGroupLabel = "when ${"$"}state" - private fun testLabel(condition: Boolean, action: String) = if (condition) "should be $action" else "shouldn't be $action" + private fun testLabel(condition: Boolean, action: String) = if (condition) "should be ${"$"}action" else "shouldn't be ${"$"}action" } ``` @@ -135,10 +134,10 @@ data class HeroQueryTest(val state: String, val subject: Hero, val isRunning: Bo val runningTestLabel = HeroQueryTest::isRunning.testLabel(this) val standingTestLabel = HeroQueryTest::isStanding.testLabel(this) val jumpingTestLabel = HeroQueryTest::isJumping.testLabel(this) - val testGroupLabel = "when $state" + val testGroupLabel = "when ${"$"}state" private val KProperty.action: String get() = this.name.substring(2).toLowerCase() - private fun KProperty.testLabel(owner: Any): String = if (this.getter.call(owner)) "should be ${this.action}" else "shouldn't be ${this.action}" + private fun KProperty.testLabel(owner: Any): String = if (this.getter.call(owner)) "should be ${"$"}{this.action}" else "shouldn't be ${"$"}{this.action}" } ``` @@ -235,7 +234,7 @@ class MathTests : Spek({ MaxTest(a = 7, b = 4, c = 4), MaxTest(a = 0, b = 0, c = 0) ).forEach { test -> - it("calculates maximum of ${test.a} and ${test.b} as ${test.c}") { + it("calculates maximum of ${"$"}{test.a} and ${"$"}{test.b} as ${"$"}{test.c}") { expect(test.c) { Math.max(test.a, test.b) } } } @@ -274,7 +273,7 @@ class MathTests : Spek({ 0 I 0 I 0 ).forEach { data -> maxTest(data).apply { - it("calculates maximum of $a and $b as $c") { + it("calculates maximum of ${"$"}a and ${"$"}b as ${"$"}c") { expect(c) { Math.max(a, b) } } } @@ -290,3 +289,19 @@ Although we were unable to fully replicate the simplicity of Spock's data tables The shortest implementation can be made by using lists of arbitrary objects to hold the test data, but it would be hard to maintain. By introducing a few DTOs and a factory object, we have been able to increase both usability and maintainability of the test suite. And although the DTOs are tightly coupled to the test, the factory could be easily reused elsewhere in the test suite. Even so, the size of the whole test case is still kept under 50 lines of code, as opposed to a hundred lines of duplicated unmaintainable test code for the regular, non-data-driven approach. + +""" + +Article( + title = "Data Driven Testing with Spek ", + url = "http://engineering.pivotal.io/post/spek-data-driven-tests/", + categories = listOf( + "Kotlin", + "Testing" + ), + type = article, + lang = EN, + author = "Konstantin Semenov", + date = LocalDate.of(2016, 7, 3), + body = body +) diff --git a/app/rss/articles/Decision Trees with Kotlin.md b/articles/english/2016/Decision Trees with Kotlin.kts similarity index 96% rename from app/rss/articles/Decision Trees with Kotlin.md rename to articles/english/2016/Decision Trees with Kotlin.kts index 19c10ab9b..b3a299e86 100644 --- a/app/rss/articles/Decision Trees with Kotlin.md +++ b/articles/english/2016/Decision Trees with Kotlin.kts @@ -1,13 +1,13 @@ ---- -title: 'Decision Trees with Kotlin' -url: http://cloudmark.github.io/Decision-Trees/ -categories: - - Kotlin -author: Mark Galea -date: Aug 20, 2016 03:28 -features: - - mathjax ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.ArticleFeature.highlightjs +import link.kotlin.scripts.ArticleFeature.mathjax +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ It has been quite a while since my last post; things have been pretty busy in preparation for the launch of our new product [VoodooDreams](https://www.voodoodreams.com). Now that we have shipped our baby, I am super eager to try out [Kotlin](https://www.kotlin.com) - a new programming language from JetBrains targeting the JVM. One interesting aspect about Kotlin (similar to Scala and other JVM-based languages) is that it treats functions as first class citizens (_IMO Functional Interfaces just patch the gap_). In order to try out this language we will create a Decision Tree Learning algorithm which is one of the most used and practical methods for learning inductive inference. @@ -334,3 +334,19 @@ Note that `it.first` will contain the attribute value (e.g. Sunny) whilst the it # Conclusion In this post we have looked at some of Kotlin's key features and we have used these to build an ID3 decision tree. If you are further interested in learning about Kotlin I'd suggest you have a look at the [reference guide](https://kotlinlang.org/docs/reference/). If you are interested in learn more about Decision Tree Learning consider buying the book linked above. It is an absolute classic! Stay safe and keep hacking! + +""" + +Article( + title = "Decision Trees with Kotlin", + url = "http://cloudmark.github.io/Decision-Trees/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Mark Galea", + date = LocalDate.of(2016, 8, 20), + body = body, + features = listOf(mathjax, highlightjs) +) diff --git a/app/rss/articles/Developing Spring Boot applications with Kotlin.md b/articles/english/2016/Developing Spring Boot applications with Kotlin.kts similarity index 89% rename from app/rss/articles/Developing Spring Boot applications with Kotlin.md rename to articles/english/2016/Developing Spring Boot applications with Kotlin.kts index 992c4cda8..6e04b3b4f 100644 --- a/app/rss/articles/Developing Spring Boot applications with Kotlin.md +++ b/articles/english/2016/Developing Spring Boot applications with Kotlin.kts @@ -1,12 +1,11 @@ ---- -title: Developing Spring Boot applications with Kotlin. -url: https://spring.io/blog/2016/02/15/developing-spring-boot-applications-with-kotlin -categories: - - Kotlin - - Spring -author: 'Sébastien Deleuze' -date: Feb 15, 2016 12:58 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Just in time for [Kotlin 1.0 release](http://blog.jetbrains.com/kotlin/2016/02/kotlin-1-0-released-pragmatic-language-for-jvm-and-android/), we are adding support for Kotlin language to [https://start.spring.io](https://start.spring.io/#!language=kotlin) in order to make it easier to start new Spring Boot projects with this language. This blog post is also an opportunity for me to explain why I find this language interesting, to show you a sample project in detail and to give you some tips. @@ -119,7 +118,7 @@ class CustomerController { ### Property placeholders -`$` is used for [String interpolation](https://kotlinlang.org/docs/reference/basic-types.html#string-templates) in Kotlin, so you should escape it when using property placeholders: `@Value("\${some.property}")`. As an alternative you can also use `@ConfigurationProperties` instead, see [this Stack Overflow](http://stackoverflow.com/a/33883230/1092077) answer for more details. +`${"$"}` is used for [String interpolation](https://kotlinlang.org/docs/reference/basic-types.html#string-templates) in Kotlin, so you should escape it when using property placeholders: `@Value("\${"$"}{some.property}")`. As an alternative you can also use `@ConfigurationProperties` instead, see [this Stack Overflow](http://stackoverflow.com/a/33883230/1092077) answer for more details. ### Array annotation attribute @@ -152,3 +151,19 @@ Last tip, the Java to Kotlin converter available in IntelliJ IDEA (Menu Code -> ## Feedbacks We are interested by your feedbacks about developing Spring applications with Kotlin. This blog post is just an introduction, there is much more to say especially about using Spring Boot with more Kotlin idiomatic code like with [Exposed](https://github.com/JetBrains/Exposed) SQL library, so stay tuned ... + +""" + +Article( + title = "Developing Spring Boot applications with Kotlin.", + url = "https://spring.io/blog/2016/02/15/developing-spring-boot-applications-with-kotlin", + categories = listOf( + "Kotlin", + "Spring" + ), + type = article, + lang = EN, + author = "Sébastien Deleuze", + date = LocalDate.of(2016, 2, 15), + body = body +) diff --git a/app/rss/articles/Developing a Geospatial Webservice with Kotlin and Spring Boot.md b/articles/english/2016/Developing a Geospatial Webservice with Kotlin and Spring Boot.kts similarity index 68% rename from app/rss/articles/Developing a Geospatial Webservice with Kotlin and Spring Boot.md rename to articles/english/2016/Developing a Geospatial Webservice with Kotlin and Spring Boot.kts index 6d22cb536..bc05b4819 100644 --- a/app/rss/articles/Developing a Geospatial Webservice with Kotlin and Spring Boot.md +++ b/articles/english/2016/Developing a Geospatial Webservice with Kotlin and Spring Boot.kts @@ -1,13 +1,11 @@ ---- -title: 'Developing a Geospatial Webservice with Kotlin and Spring Boot' -url: https://www.youtube.com/watch?v=tTTEiQj4BHA -type: video -categories: - - Kotlin - - Spring -author: Sébastien Deleuze -date: Nov 25, 2016 02:33 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Spring I/O 2016 - 19 -20 May Barcelona As described in this announcement I made on [Spring blog](https://spring.io/blog/2016/02/15/developing-spring-boot-applications-with-kotlin), it is now easy to create a Spring Boot application using Kotlin. @@ -23,3 +21,19 @@ That talk will also provide an opportunity to show how to use a relational datab Update Nov 25 2016: Also see new version of this talk at Spring One Platform [Developing a Geospatial Webservice with Kotlin and Spring Boot](https://www.infoq.com/presentations/geospatial-kotlin-boot) + +""" + +Article( + title = "Developing a Geospatial Webservice with Kotlin and Spring Boot", + url = "https://www.youtube.com/watch?v=tTTEiQj4BHA", + categories = listOf( + "Kotlin", + "Spring" + ), + type = video, + lang = EN, + author = "Sébastien Deleuze", + date = LocalDate.of(2016, 11, 25), + body = body +) diff --git a/app/rss/articles/Developing on Android sucks a lot less with Kotlin.md b/articles/english/2016/Developing on Android sucks a lot less with Kotlin.kts similarity index 92% rename from app/rss/articles/Developing on Android sucks a lot less with Kotlin.md rename to articles/english/2016/Developing on Android sucks a lot less with Kotlin.kts index f312e5356..4749e34cf 100644 --- a/app/rss/articles/Developing on Android sucks a lot less with Kotlin.md +++ b/articles/english/2016/Developing on Android sucks a lot less with Kotlin.kts @@ -1,12 +1,11 @@ ---- -title: 'Developing on Android sucks a lot less with Kotlin' -url: https://wiredcraft.com/blog/android-apps-development-kotlin/ -categories: - - Android - - Kotlin -author: Kuno Qing -date: Mar 01, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ![Kotlin](https://wiredcraft.com/images/posts/Android-app-development-Kotlin.jpg) While Android development has improved tremendously in the past few years, many think that it still sucks when compared to iOS. A lot of folks are working hard to make it better, maybe even enjoyable. And [Kotlin](https://kotlinlang.org/), a new programming language, seems to be headed in that direction. Having been brought onboard by Starbucks in China to work on their mobile apps, we've been experimenting with Kotlin as a viable option to improving the UX of the Android app and making it overall more maintainable. @@ -133,4 +132,19 @@ Kotlin probably isn't as hot in the Android community as Swift is for the iOS wo Kotlin fixed a lot of the issues we had with developing for Android. There's still room for improvement, but I encourage all of you out there who shared the frustrations of building Android apps to give it a try on your next project. -And finally, if you're looking for a rock-solid team of nerds and creatives in NYC, Berlin, or Shanghai to work on your next Android or iOS project, [reach out on Twitter](http://twitter.com/wiredcraft) or shoot us an email either [on our site](https://wiredcraft.typeform.com/to/GG4GQz) or at [info@wiredcraft.com](mailto:info@wiredcraft.com). \ No newline at end of file +And finally, if you're looking for a rock-solid team of nerds and creatives in NYC, Berlin, or Shanghai to work on your next Android or iOS project, [reach out on Twitter](http://twitter.com/wiredcraft) or shoot us an email either [on our site](https://wiredcraft.typeform.com/to/GG4GQz) or at [info@wiredcraft.com](mailto:info@wiredcraft.com). +""" + +Article( + title = "Developing on Android sucks a lot less with Kotlin", + url = "https://wiredcraft.com/blog/android-apps-development-kotlin/", + categories = listOf( + "Android", + "Kotlin" + ), + type = article, + lang = EN, + author = "Kuno Qing", + date = LocalDate.of(2016, 3, 1), + body = body +) diff --git a/app/rss/articles/Easy DSL design with Kotlin.md b/articles/english/2016/Easy DSL design with Kotlin.kts similarity index 87% rename from app/rss/articles/Easy DSL design with Kotlin.md rename to articles/english/2016/Easy DSL design with Kotlin.kts index 2bd0c7eb4..9cf4f7bae 100644 --- a/app/rss/articles/Easy DSL design with Kotlin.md +++ b/articles/english/2016/Easy DSL design with Kotlin.kts @@ -1,11 +1,11 @@ ---- -title: 'Easy DSL design with Kotlin' -url: https://blog.frankel.ch/easy-dsl-design-with-kotlin/ -categories: - - Kotlin -author: Nicolas Fränkel -date: Oct 30, 2016 01:32 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ In Android, every tutorial teaching you the basics describe how to design screen through XML files. It’s also possible to achieve the same result with Java (or any JVM-based language). Android screen design is not the only domain where XML and Java are valid options. For example, Spring configuration and Vaadin screen design allow both. In all those domains, there’s however a trade-off involved: on one hand, XML has a quite rigid structure enforced by an XML-schema while Java gives power to do pretty well anything at the cost of readability. “With great power comes great responsibility”. In the latter case, it’s up to the individual developer to exercise his/her judgement in order to keep the code as readable as possible. [Domain-Specific Languages](https://en.wikipedia.org/wiki/Domain-specific_language) sit between those two ends of the spectrum, as they offer a structured syntax close to the problem at hand but with the full support of the underlying language constructs when necessary. As an example, the AssertJ library provides a DSL for assertions, using a fluent API. The following snippet is taken from its documentation: @@ -29,7 +29,7 @@ DSLs can be provided in any language, even if some feel more natural. Scala natu verticalLayout { val name = editText() button("Say Hello") { - onClick { toast("Hello, ${name.text}!") } + onClick { toast("Hello, ${"$"}{name.text}!") } } } ``` @@ -81,7 +81,7 @@ Getting back to the [Anko snippet above](#anko), let’s check how the `vertical ```kotlin inline fun ViewManager.verticalLayout(theme: Int = 0, init: _LinearLayout.() -> Unit): LinearLayout { - return ankoView(`$Anko$Factories$CustomViews`.VERTICAL_LAYOUT_FACTORY, theme, init) + return ankoView(`${"$"}Anko${"$"}Factories${"$"}CustomViews`.VERTICAL_LAYOUT_FACTORY, theme, init) } ``` @@ -94,3 +94,18 @@ The second paragraph explained what represents the content of the braces: the `i Hopefully, this post show how easy it is to create DSL with Kotlin thanks to its syntax. I developed one such DSL to create GUI for the [Vaadin](https://vaadin.com/) framework: the name is Kaadin and the result is [available online](https://nfrankel.github.io/kaadin/). + +""" + +Article( + title = "Easy DSL design with Kotlin", + url = "https://blog.frankel.ch/easy-dsl-design-with-kotlin/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Nicolas Fränkel", + date = LocalDate.of(2016, 10, 30), + body = body +) diff --git a/app/rss/articles/Exercises in Kotlin Part 1 - Getting Started.md b/articles/english/2016/Exercises in Kotlin Part 1 - Getting Started.kts similarity index 95% rename from app/rss/articles/Exercises in Kotlin Part 1 - Getting Started.md rename to articles/english/2016/Exercises in Kotlin Part 1 - Getting Started.kts index 6013ef345..f91572e6e 100644 --- a/app/rss/articles/Exercises in Kotlin Part 1 - Getting Started.md +++ b/articles/english/2016/Exercises in Kotlin Part 1 - Getting Started.kts @@ -1,11 +1,11 @@ ---- -title: 'Exercises in Kotlin: Part 1 - Getting Started' -url: http://blog.dhananjaynene.com/2016/04/exercises-in-kotlin-part-1-getting-started/ -categories: - - Kotlin -author: Dhananjay Nene -date: Apr 18, 2016 05:32 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ Kotlin is an exciting new language I have been working with for a couple of months now. I believe it has a lot of features going for it, and I think many will be benefited from learning a bit more about it. Hence this series of posts. This post helps you with getting the necessary software installed on your desktop for compiling and running kotlin code @@ -148,7 +148,7 @@ Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/I Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) - at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) + at sun.misc.Launcher${"$"}AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 1 more ``` @@ -229,3 +229,18 @@ Hello World! ``` Congratulations you are now able to compile and run Kotlin programs. In the next post in this series, we shall attempt to understand the code that we just wrote, and explore the Kotlin language further. + +""" + +Article( + title = "Exercises in Kotlin: Part 1 - Getting Started", + url = "http://blog.dhananjaynene.com/2016/04/exercises-in-kotlin-part-1-getting-started/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Dhananjay Nene", + date = LocalDate.of(2016, 4, 18), + body = body +) diff --git a/app/rss/articles/Exercises in Kotlin Part 2 - High level syntax and Variables.md b/articles/english/2016/Exercises in Kotlin Part 2 - High level syntax and Variables.kts similarity index 89% rename from app/rss/articles/Exercises in Kotlin Part 2 - High level syntax and Variables.md rename to articles/english/2016/Exercises in Kotlin Part 2 - High level syntax and Variables.kts index e3601a6c3..571eb507c 100644 --- a/app/rss/articles/Exercises in Kotlin Part 2 - High level syntax and Variables.md +++ b/articles/english/2016/Exercises in Kotlin Part 2 - High level syntax and Variables.kts @@ -1,11 +1,11 @@ ---- -title: 'Exercises in Kotlin: Part 2 - High level syntax and Variables' -url: http://blog.dhananjaynene.com/2016/04/exercises-in-kotlin-part-2-high-level-syntax-and-variables/ -categories: - - Kotlin -author: Dhananjay Nene -date: Apr 19, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ This post first discusses the code that was written so far in the last post, [Exercises in Kotlin: Part 1 - Getting Started](http://blog.dhananjaynene.com/2016/04/exercises-in-kotlin-part-1-getting-started/). Subsequently it focuses on the basic syntax of variables, discusses a bit about packaging and also about Type Inference ## A review of code so far @@ -82,9 +82,9 @@ fun main(args: Array) { var radius: Double = 1.0 val increment = 1 // increment = increment + 1 <-- will not compile since increment is a val - println("The radius of a circle with radius ${radius} is ${circleArea(radius)}") + println("The radius of a circle with radius ${"$"}{radius} is ${"$"}{circleArea(radius)}") radius = radius + increment - println("The radius of a circle with radius ${radius} is ${circleArea(radius)}") + println("The radius of a circle with radius ${"$"}{radius} is ${"$"}{circleArea(radius)}") } ``` @@ -123,7 +123,7 @@ Note the following: #### String templates -* String interpolation is supported by allowing expressions to be embedded in strings using the ${`expr`} syntax as in the arguments to `println()`. This feature is called string templates in Kotlinspeak +* String interpolation is supported by allowing expressions to be embedded in strings using the ${"$"}{`expr`} syntax as in the arguments to `println()`. This feature is called string templates in Kotlinspeak ## (Optional) Some more advanced aspects about variables @@ -148,12 +148,12 @@ val area: Double fun main(args: Array) { var radius = 1.0 val increment = 1 - println("The radius of a circle with radius ${radius} is ${circleArea(radius)}") + println("The radius of a circle with radius ${"$"}{radius} is ${"$"}{circleArea(radius)}") radius = radius + increment - println("The radius of a circle with radius ${radius} is ${circleArea(radius)}") - println("The radius of a circle with radius 5.0 is ${area}") + println("The radius of a circle with radius ${"$"}{radius} is ${"$"}{circleArea(radius)}") + println("The radius of a circle with radius 5.0 is ${"$"}{area}") defaultRadius = 6.0 - println("The radius of a circle with radius 6.0 is ${area}") + println("The radius of a circle with radius 6.0 is ${"$"}{area}") } ``` @@ -174,3 +174,18 @@ Things to be noted. * _package namespaces and visibility_: Just like top level functions, you can also have top level variables/constants being declared. Also note that all the standalone functions get declared in the namespace of the package. So if you have multiple files with the same package and also same function (or top level variable) names, that will be treated as an error since one of them will end up attempting to redeclare the other. On the other hand if you declare a top level variable as private, it is not private to that package namespace, but is instead treated as private within a file We shall be reviewing functions in the next post [Exercises in Kotlin: Part 3 - Functions](http://blog.dhananjaynene.com/2016/04/exercises-in-kotlin-part-3-functions/) + +""" + +Article( + title = "Exercises in Kotlin: Part 2 - High level syntax and Variables", + url = "http://blog.dhananjaynene.com/2016/04/exercises-in-kotlin-part-2-high-level-syntax-and-variables/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Dhananjay Nene", + date = LocalDate.of(2016, 4, 19), + body = body +) diff --git a/app/rss/articles/Exercises in Kotlin Part 3 - Functions.md b/articles/english/2016/Exercises in Kotlin Part 3 - Functions.kts similarity index 96% rename from app/rss/articles/Exercises in Kotlin Part 3 - Functions.md rename to articles/english/2016/Exercises in Kotlin Part 3 - Functions.kts index fbc6a863f..d2f83eb75 100644 --- a/app/rss/articles/Exercises in Kotlin Part 3 - Functions.md +++ b/articles/english/2016/Exercises in Kotlin Part 3 - Functions.kts @@ -1,11 +1,11 @@ ---- -title: 'Exercises in Kotlin: Part 3 - Functions' -url: http://blog.dhananjaynene.com/2016/04/exercises-in-kotlin-part-3-functions/ -categories: - - Kotlin -author: Dhananjay Nene -date: Apr 20, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ We looked at a bit of syntax and variable declarations in the last post [Exercises in Kotlin: Part 2 - High level syntax and Variables](http://blog.dhananjaynene.com/2016/04/exercises-in-kotlin-part-2-high-level-syntax-and-variables/). We explore functions in this post. Here's how a typical function in Kotlin would look like. ```kotlin @@ -282,3 +282,18 @@ inline fun doubleAndThen(n: Int, noinline then: (Int) -> Int): Int = then(n * 2) If a function is inlined, then the lambdas passed to it are allowed to have a `return` The next post in the series is [Exercises in Kotlin: Part 4 - Control flows and return](http://blog.dhananjaynene.com/2016/04/exercises-in-kotlin-part-4-control-flows-and-return/) + +""" + +Article( + title = "Exercises in Kotlin: Part 3 - Functions", + url = "http://blog.dhananjaynene.com/2016/04/exercises-in-kotlin-part-3-functions/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Dhananjay Nene", + date = LocalDate.of(2016, 4, 20), + body = body +) diff --git a/app/rss/articles/Exercises in Kotlin Part 4 - Control flows and return.md b/articles/english/2016/Exercises in Kotlin Part 4 - Control flows and return.kts similarity index 91% rename from app/rss/articles/Exercises in Kotlin Part 4 - Control flows and return.md rename to articles/english/2016/Exercises in Kotlin Part 4 - Control flows and return.kts index 77a4a3755..596e1a102 100644 --- a/app/rss/articles/Exercises in Kotlin Part 4 - Control flows and return.md +++ b/articles/english/2016/Exercises in Kotlin Part 4 - Control flows and return.kts @@ -1,11 +1,11 @@ ---- -title: 'Exercises in Kotlin: Part 4 - Control flows and return' -url: http://blog.dhananjaynene.com/2016/04/exercises-in-kotlin-part-4-control-flows-and-return/ -categories: - - Kotlin -author: Dhananjay Nene -date: Apr 27, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ After [Exercises in Kotlin: Part 3 - Functions](http://blog.dhananjaynene.com/2016/04/exercises-in-kotlin-part-3-functions/) we now take a look at control flows and actually doing some basic exercises. ## if/else @@ -175,7 +175,7 @@ fun sundaysInTwentiethCentury(): Int { year % 4 == 0 -> 29 else -> 28 } - else -> throw Exception("Invalid Month ${month}") + else -> throw Exception("Invalid Month ${"$"}{month}") } fun daysInYear(year: Int): Int { var days = 0 @@ -196,3 +196,18 @@ fun sundaysInTwentiethCentury(): Int { return totalSundays } ``` + +""" + +Article( + title = "Exercises in Kotlin: Part 4 - Control flows and return", + url = "http://blog.dhananjaynene.com/2016/04/exercises-in-kotlin-part-4-control-flows-and-return/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Dhananjay Nene", + date = LocalDate.of(2016, 4, 27), + body = body +) diff --git a/app/rss/articles/Exercises in Kotlin Part 5 - Classes.md b/articles/english/2016/Exercises in Kotlin Part 5 - Classes.kts similarity index 95% rename from app/rss/articles/Exercises in Kotlin Part 5 - Classes.md rename to articles/english/2016/Exercises in Kotlin Part 5 - Classes.kts index 92d753daa..1b0e1b24f 100644 --- a/app/rss/articles/Exercises in Kotlin Part 5 - Classes.md +++ b/articles/english/2016/Exercises in Kotlin Part 5 - Classes.kts @@ -1,11 +1,11 @@ ---- -title: 'Exercises in Kotlin: Part 5 - Classes' -url: http://blog.dhananjaynene.com/2016/04/exercises-in-kotlin-part-5-classes/ -categories: - - Kotlin -author: Dhananjay Nene -date: Apr 29, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ After the last post [Exercises in Kotlin: Part 4 - Control flows and return](http://dnblog.ddesk/2016/04/exercises-in-kotlin-part-4-control-flows-and-return/), we shall be exploring classes and objects in the exercises in this post. While retaining many similarities to Java classes, there are actually significant differences in syntax as well and these help classes become a little easier to work with in Kotlin. And save a lot of unnecessary boilerplate code. ## Minimalist Syntax @@ -281,3 +281,18 @@ enum class Color(r: Int, g: Int, b: Int) { ``` We have looked at the basics of classes in this post. We will look at inheritance next. + +""" + +Article( + title = "Exercises in Kotlin: Part 5 - Classes", + url = "http://blog.dhananjaynene.com/2016/04/exercises-in-kotlin-part-5-classes/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Dhananjay Nene", + date = LocalDate.of(2016, 4, 29), + body = body +) diff --git a/app/rss/articles/Experimental Kotlin and mutation testing.md b/articles/english/2016/Experimental Kotlin and mutation testing.kts similarity index 84% rename from app/rss/articles/Experimental Kotlin and mutation testing.md rename to articles/english/2016/Experimental Kotlin and mutation testing.kts index 58f0d8d6f..aeb5b3c45 100644 --- a/app/rss/articles/Experimental Kotlin and mutation testing.md +++ b/articles/english/2016/Experimental Kotlin and mutation testing.kts @@ -1,13 +1,11 @@ ---- -title: 'Experimental: Kotlin and mutation testing' -url: https://blog.frankel.ch/experimental-kotlin-mutation-testing -categories: - - Testing - - Mutation Testing - - Kotlin -author: Nicolas Frankel -date: Apr 03, 2016 15:36 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ [![](https://blog.frankel.ch/wp-content/resources/experimental-kotlin-mutation-testing/icon_Kotlin.png)](https://kotlinlang.org/)Since about a year and a half, I do a [lot](https://player.vimeo.com/video/105758362) [of](https://youtu.be/uC_8l69ArXs) [presentations](https://youtu.be/biLyXaJwO3c) on [Mutation Testing](https://en.wikipedia.org/wiki/Mutation_testing). In those, my point is to show that [Code Coverage](https://en.wikipedia.org/wiki/Code_coverage)‘s only benefit is that it’s easy to compute but that it’s meaningless – hence Mutation Testing. Since some time, I’ve been interested in [Kotlin](http://kotlinlang.org), a language from JetBrains that runs on the JVM. It’s only natural that I wanted to check how Mutation Testing could be applied to the Kotlin language. As Kotlin is too young to have its own dedicated mutation testing tool, I used [Pit](http://pitest.org), a Java dedicated tool. I didn’t expected much, here are my findings. @@ -50,7 +48,7 @@ Here’s a sample of the report: Again, Pit is able to bind the real lines to the problems found. Isn’t life good? If you stop at this point, it probably is. But running Pit on another project – say, ktor-features/ktor-locations fails miserably. ``` -The class org.jetbrains.ktor.locations.Locations$WhenMappings does not contain a source debug information. All classes must be compiled with source and line number debug information +The class org.jetbrains.ktor.locations.Locations${"$"}WhenMappings does not contain a source debug information. All classes must be compiled with source and line number debug information ``` It seems using the `when` construct in Kotlin generates an inner class that doesn’t contain debug information, which Pit need to works its magic. Let’s exclude the offending class and its inner mappings class: @@ -64,3 +62,20 @@ It works again and produces expected results: ![](https://blog.frankel.ch/wp-content/resources/experimental-kotlin-mutation-testing/conversionservice.png) There are no mutation testing tools for Kotlin (yet), and considering Java ecosystem’s history, there might never be one. However, mutation testing is an invaluable tool to assert the real quality of your tests. Even if Pit is not a perfect match for Kotlin, it would be foolish to discard it. + +""" + +Article( + title = "Experimental: Kotlin and mutation testing", + url = "https://blog.frankel.ch/experimental-kotlin-mutation-testing", + categories = listOf( + "Testing", + "Mutation Testing", + "Kotlin" + ), + type = article, + lang = EN, + author = "Nicolas Frankel", + date = LocalDate.of(2016, 4, 3), + body = body +) diff --git a/app/rss/articles/Experimenting with mutation testing and Kotlin.md b/articles/english/2016/Experimenting with mutation testing and Kotlin.kts similarity index 87% rename from app/rss/articles/Experimenting with mutation testing and Kotlin.md rename to articles/english/2016/Experimenting with mutation testing and Kotlin.kts index 726460e1e..9bbe33924 100644 --- a/app/rss/articles/Experimenting with mutation testing and Kotlin.md +++ b/articles/english/2016/Experimenting with mutation testing and Kotlin.kts @@ -1,11 +1,11 @@ ---- -title: 'Experimenting with “mutation testing” and Kotlin' -url: https://medium.com/@s4n1ty/experimenting-with-mutation-testing-and-kotlin-b515d77e85b5#.9ps78uqer -categories: - - Kotlin -author: Ian Clarke -date: Oct 16, 2016 11:30 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ The most common approach to measuring how comprehensive your unit tests are is to look at “code coverage”, literally the number of lines of your code that are executed by your unit tests. While this isn’t a bad approach, it really only tests what code is executed by your tests, it doesn’t directly measure their ability to detect bugs in your code, which is their purpose. You could easily write unit tests that execute every line of code, and yet will pass regardless of what your code actually does. @@ -45,3 +45,18 @@ If you mouseover this you can see that reversing the condition (>= becomes <=) d Every instance where a code mutation doesn’t result in a unit test failure prompts an interesting train of thought about why not. Is it because the code is unimportant (like a toString() method only really used for debugging)? Is it because the change is too subtle and the difference in code behavior is unimportant? Or is it something that should really have been tested? This is a very healthy thought process if you really care about the correctness of your code. If I was working on code where I needed a very high degree of reliability, I think mutation coverage is an excellent way to ensure that your unit tests are effective, and at pointing out areas where they might require further work. + +""" + +Article( + title = "Experimenting with “mutation testing” and Kotlin", + url = "https://medium.com/@s4n1ty/experimenting-with-mutation-testing-and-kotlin-b515d77e85b5#.9ps78uqer", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Ian Clarke", + date = LocalDate.of(2016, 10, 16), + body = body +) diff --git a/app/rss/articles/Exploring Delegation in Kotlin.md b/articles/english/2016/Exploring Delegation in Kotlin.kts similarity index 88% rename from app/rss/articles/Exploring Delegation in Kotlin.md rename to articles/english/2016/Exploring Delegation in Kotlin.kts index 0c4050c76..278737b4d 100644 --- a/app/rss/articles/Exploring Delegation in Kotlin.md +++ b/articles/english/2016/Exploring Delegation in Kotlin.kts @@ -1,11 +1,11 @@ ---- -title: 'Exploring Delegation in Kotlin' -url: http://codemonkeyism.com/exploring-delegation-in-kotlin/ -categories: - - Kotlin -author: '@codemonkeyism' -date: Apr 04, 2016 09:49 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ I’m a huge fan of interfaces in Java and also of composition over inheritance. Inheritance is some magic wiring with tight coupling that creates lots of friction when evolving a code base. I’ve written about interfaces before several times, for example [here](http://codemonkeyism.com/how-to-improve-programming-with-interfaces/) or [here](http://codemonkeyism.com/generation-java-programming-style/). Looking at Kotlin I wanted to see what I can do with interfaces and composition. Take this example: @@ -134,3 +134,18 @@ class Person(n:String): HasName { ``` where I have access to name and more control over it. It would also be nice to have a way to access other Mixins from a Mixin. But overall, some nice functionality in Kotlin. + +""" + +Article( + title = "Exploring Delegation in Kotlin", + url = "http://codemonkeyism.com/exploring-delegation-in-kotlin/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "@codemonkeyism", + date = LocalDate.of(2016, 4, 4), + body = body +) diff --git a/app/rss/articles/Exploring an Either Monad in Kotlin.md b/articles/english/2016/Exploring an Either Monad in Kotlin.kts similarity index 91% rename from app/rss/articles/Exploring an Either Monad in Kotlin.md rename to articles/english/2016/Exploring an Either Monad in Kotlin.kts index 82aad55da..077139ac7 100644 --- a/app/rss/articles/Exploring an Either Monad in Kotlin.md +++ b/articles/english/2016/Exploring an Either Monad in Kotlin.kts @@ -1,12 +1,11 @@ ---- -title: 'Exploring an Either Monad in Kotlin' -url: https://blog.exallium.com/exploring-an-either-monad-in-kotlin-92618b9c4623#.nlt1cxd96 -categories: - - Kotlin - - FP -author: Alex Hart -date: Nov 22, 2016 11:11 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Recently, I was enlightened. I finally, fully grasped how the Either Monad works. At least I think I do. In this post, I am looking to report my findings, both for the education of others of this powerful tool, as well as to see if my understanding of this monadic concept really holds water. ### What’s an Either Monad? @@ -32,11 +31,11 @@ An example, written in Kotlin: ```kotlin sealed class Either { class Left(val l: L) : Either() { - override fun toString(): String = "Left $l" + override fun toString(): String = "Left ${"$"}l" } class Right(val r: R) : Either() { - override fun toString(): String = "Right $r" + override fun toString(): String = "Right ${"$"}r" } infix fun bind(f: (R) -> (Either)): Either { @@ -96,7 +95,7 @@ fun main(args: Array) { try { println(Either.Right(5) bind { Either.fail("asdf") }) } catch (e: Exception) { - println("exception: ${e.message}") + println("exception: ${"$"}{e.message}") } } ``` @@ -112,3 +111,19 @@ Thus, Monads should be understood as a general concept, not as some base class w Monads are powerful. Really powerful. They’ve started to take the OOP world by storm, from simple language conventions like Nullability in Kotlin, to the advent of RxJava over the last year or so. As we move into a more multi-processed world, where core count continues to rise and processor speeds continue to stagnate, it will be more important than ever to understand Functional programming concepts, whether it be immutability, pure functions, or this, the Monad. Thanks for reading. + +""" + +Article( + title = "Exploring an Either Monad in Kotlin", + url = "https://blog.exallium.com/exploring-an-either-monad-in-kotlin-92618b9c4623#.nlt1cxd96", + categories = listOf( + "Kotlin", + "FP" + ), + type = article, + lang = EN, + author = "Alex Hart", + date = LocalDate.of(2016, 11, 22), + body = body +) diff --git a/app/rss/articles/Extension Functions Can Be Utility Functions.md b/articles/english/2016/Extension Functions Can Be Utility Functions.kts similarity index 86% rename from app/rss/articles/Extension Functions Can Be Utility Functions.md rename to articles/english/2016/Extension Functions Can Be Utility Functions.kts index 65c89e83a..5e93b4582 100644 --- a/app/rss/articles/Extension Functions Can Be Utility Functions.md +++ b/articles/english/2016/Extension Functions Can Be Utility Functions.kts @@ -1,11 +1,11 @@ ---- -title: 'Extension Functions Can Be Utility Functions' -url: http://oneeyedmen.com/extension-functions-can-be-utility-functions.html -categories: - - Kotlin -author: Duncan McGregor -date: Oct 05, 2016 03:42 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ I enjoyed [Extension functions are not utility functions](https://medium.com/@dimsuz/extension-functions-are-not-utility-functions-74a5f9b53892#.o57pbn5k2) I thought that I disagreed, but on more careful reading maybe not. Instead I’ll pull out some extension functions from my current codebase. @@ -63,10 +63,10 @@ val isInUK = node.toAddress().isInUK() You may have noticed the `private` in the examples above - most of the extension functions that we write this way are used locally - just to make a few lines of code more intuitive. But that’s by no means universally true - this is from some library code to extend Jackson in more general ways: ```kotlin -fun JsonNode.getExpected(name: String): JsonNode = get(name) ?: throw MissingPropertyException("property '$name' is missing") +fun JsonNode.getExpected(name: String): JsonNode = get(name) ?: throw MissingPropertyException("property '${"$"}name' is missing") fun JsonNode.getNonBlankText(name: String) = getExpected(name).asText().apply { - if (isBlank()) throw JsonInterpretationException("property $name is blank") + if (isBlank()) throw JsonInterpretationException("property ${"$"}name is blank") } ``` @@ -104,3 +104,18 @@ There are more thoughts on this subject in a follow up article - [More Kotlin Ex If you like this, [Nat Pryce](www.natpryce.com) and I are going to be talking about Expressive Kotlin at the [Kotlin Night London](https://info.jetbrains.com/Kotlin-Night-London.html) next Wednesday, 12 October 2016. Thanks to [Springer Nature](http://www.springernature.com) for allowing me to publish examples from their code. If you’re looking for a Kotlin job in London, they are hiring - please contact me using one of the links in the sidebar. + +""" + +Article( + title = "Extension Functions Can Be Utility Functions", + url = "http://oneeyedmen.com/extension-functions-can-be-utility-functions.html", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Duncan McGregor", + date = LocalDate.of(2016, 10, 5), + body = body +) diff --git a/app/rss/articles/Extension functions for more consistent APIs.md b/articles/english/2016/Extension functions for more consistent APIs.kts similarity index 84% rename from app/rss/articles/Extension functions for more consistent APIs.md rename to articles/english/2016/Extension functions for more consistent APIs.kts index c0242c728..24fa77883 100644 --- a/app/rss/articles/Extension functions for more consistent APIs.md +++ b/articles/english/2016/Extension functions for more consistent APIs.kts @@ -1,11 +1,11 @@ ---- -title: 'Extension functions for more consistent APIs' -url: https://blog.frankel.ch/extension-functions-for-more-consistent-apis/ -categories: - - Kotlin -author: Nicolas Fränkel -date: Oct 16, 2016 07:54 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Kotlin’s [extension functions](https://kotlinlang.org/docs/reference/extensions.html#extension-functions) are a great way to add behavior to a type sitting outside one’s control - the JDK or a third-party library. For example, the JDK’s `String` class offers the `toLowerCase()` and `toUpperCase()` methods but nothing to capitalize the string. In Kotlin, this can be helped by adding the desired behavior to the `String` class through an extension function: @@ -102,3 +102,18 @@ null ``` Extension functions are a great way to make API more consistent and to handle `null` elegantly instead of dropping the burden on caller code. + +""" + +Article( + title = "Extension functions for more consistent APIs", + url = "https://blog.frankel.ch/extension-functions-for-more-consistent-apis/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Nicolas Fränkel", + date = LocalDate.of(2016, 10, 16), + body = body +) diff --git a/articles/english/2016/FRP + Kotlin.kts b/articles/english/2016/FRP + Kotlin.kts new file mode 100644 index 000000000..07dea1616 --- /dev/null +++ b/articles/english/2016/FRP + Kotlin.kts @@ -0,0 +1,28 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ + +![Photo from meetup](http://i.imgur.com/DOlI1Of.jpg) + +[Slides](https://drive.google.com/file/d/0BxCm4NRlzb3PWjNNaG1KS0Utckk/view) + +""" + +Article( + title = "FRP + Kotlin", + url = "https://drive.google.com/file/d/0BxCm4NRlzb3PWjNNaG1KS0Utckk/view", + categories = listOf( + "Kotlin", + "FP" + ), + type = slides, + lang = EN, + author = "Giorgio Natili", + date = LocalDate.of(2016, 11, 25), + body = body +) diff --git a/app/rss/articles/Feedback on the Jospehus problem.md b/articles/english/2016/Feedback on the Jospehus problem.kts similarity index 90% rename from app/rss/articles/Feedback on the Jospehus problem.md rename to articles/english/2016/Feedback on the Jospehus problem.kts index 5ab1bf556..d16040425 100644 --- a/app/rss/articles/Feedback on the Jospehus problem.md +++ b/articles/english/2016/Feedback on the Jospehus problem.kts @@ -1,11 +1,11 @@ ---- -title: 'Feedback on the Josephus problem' -url: https://blog.frankel.ch/feedback-jospehus-problem -categories: - - Kotlin -author: Nicolas Frankel -date: Mar 13, 2016 19:14 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ My last week [article](https://blog.frankel.ch/solving-the-josephus-problem-in-kotlin) was about the solving the Josephus problem in Kotlin. For ease of comparison, here’s the version I wrote originally: ```kotlin @@ -134,3 +134,18 @@ This experience reinforced my belief that learning a language by just reading ab 3. ask for feedback, 4. read, analyze and understand the feedback, 5. rinse and repeat. + +""" + +Article( + title = "Feedback on the Josephus problem", + url = "https://blog.frankel.ch/feedback-jospehus-problem", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Nicolas Frankel", + date = LocalDate.of(2016, 3, 13), + body = body +) diff --git a/app/rss/articles/Few thoughts about Kotlin and why I like it so much.md b/articles/english/2016/Few thoughts about Kotlin and why I like it so much.kts similarity index 90% rename from app/rss/articles/Few thoughts about Kotlin and why I like it so much.md rename to articles/english/2016/Few thoughts about Kotlin and why I like it so much.kts index 187c855c8..a52639306 100644 --- a/app/rss/articles/Few thoughts about Kotlin and why I like it so much.md +++ b/articles/english/2016/Few thoughts about Kotlin and why I like it so much.kts @@ -1,11 +1,11 @@ ---- -title: 'Few thoughts about Kotlin and why I like it so much' -url: http://blog.dhananjaynene.com/2016/04/few-thoughts-about-kotlin-and-why-i-like-it-so-much/ -categories: - - Kotlin -author: Dhananjay Nene -date: Apr 15, 2016 15:44 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ It doesn't matter how many languages you have learnt, learning yet another one is always a wonderful experience. I have been working for a couple of months with Kotlin. Have got one app to ready for production state and another in the works. To cut to the chase, I am really impressed by this language. As in really really impressed. And so I decided that I should write a few posts that can help readers get a better idea and learn about this language. So I started writing out the series and am already onto the third post now. But as I was writing it, I realised what I was writing was really about the mechanics of the language. Not so much about its spirit. Cos when one gets into the tactical nitty gritty details, one tends to miss the forest for the trees. So I decided to pen that here before I start that series (next week), and here's my few thoughts about why I really enjoy the language. @@ -37,4 +37,18 @@ Does that make it the better language? I personally think it has achieved amongs * It is non opinionated. For XML parsing I wanted to ensure very low memory footprint because I wanted to use it on android. I was able to write a library which heavily used mutation even as it maintained very low memory usage by keeping extra object allocation counts down. For another situation I wanted to use immutable functional paradigm, and Kotlin happily let me create my own Option/Either/List classes and use that paradigm end to end. It doesn't get in your way. And focuses on getting work done. * I have been interfacing with a large number of java libraries. The interoperability has been an absolute breeze. It is actually refreshing to go through that experience. Doesn't matter if you are dealing with HTTP client APIs, integrating into a Slack HTTP service, interfacing with Java PKCS API, Kotlin does it easily and safely. -In a nutshell, I can write code that is safer, shorter, uses better building blocks, is easier to grok, gives me all the nice capabilities such as HOFs, lambdas, pretty competent type system that gives me all the feedback necessary when writing code and makes refactoring a breeze, and interoperates nicely and leverages the JVM universe. \ No newline at end of file +In a nutshell, I can write code that is safer, shorter, uses better building blocks, is easier to grok, gives me all the nice capabilities such as HOFs, lambdas, pretty competent type system that gives me all the feedback necessary when writing code and makes refactoring a breeze, and interoperates nicely and leverages the JVM universe. +""" + +Article( + title = "Few thoughts about Kotlin and why I like it so much", + url = "http://blog.dhananjaynene.com/2016/04/few-thoughts-about-kotlin-and-why-i-like-it-so-much/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Dhananjay Nene", + date = LocalDate.of(2016, 4, 15), + body = body +) diff --git a/app/rss/articles/First glimpse of Kotlin 1.1 Coroutines, Type aliases and more.md b/articles/english/2016/First glimpse of Kotlin 1.1 Coroutines, Type aliases and more.kts similarity index 94% rename from app/rss/articles/First glimpse of Kotlin 1.1 Coroutines, Type aliases and more.md rename to articles/english/2016/First glimpse of Kotlin 1.1 Coroutines, Type aliases and more.kts index a12860914..11913e642 100644 --- a/app/rss/articles/First glimpse of Kotlin 1.1 Coroutines, Type aliases and more.md +++ b/articles/english/2016/First glimpse of Kotlin 1.1 Coroutines, Type aliases and more.kts @@ -1,11 +1,11 @@ ---- -title: 'First glimpse of Kotlin 1.1: Coroutines, Type aliases and more' -url: https://blog.jetbrains.com/kotlin/2016/07/first-glimpse-of-kotlin-1-1-coroutines-type-aliases-and-more/ -categories: - - Kotlin -author: Andrey Breslav -date: Jul 14, 2016 15:01 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ While Kotlin 1.0.X releases keep delivering incremental updates and tooling features, we are working on the new language features in Kotlin 1.1. Today we are presenting the first preview version of 1.1, it’s far from Beta, but the brave and curious ones can play with new exciting things (and hopefully give us their invaluable feedback). ## Compatibility @@ -148,4 +148,18 @@ Press _Check for updates_ in the same dialog, and, when the new version is show, Your feedback is very welcome, as always. -### Have a nice Kotlin! \ No newline at end of file +### Have a nice Kotlin! +""" + +Article( + title = "First glimpse of Kotlin 1.1: Coroutines, Type aliases and more", + url = "https://blog.jetbrains.com/kotlin/2016/07/first-glimpse-of-kotlin-1-1-coroutines-type-aliases-and-more/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Andrey Breslav", + date = LocalDate.of(2016, 7, 14), + body = body +) diff --git a/app/rss/articles/From Groovy to Kotlin.md b/articles/english/2016/From Groovy to Kotlin.kts similarity index 96% rename from app/rss/articles/From Groovy to Kotlin.md rename to articles/english/2016/From Groovy to Kotlin.kts index a559e1882..8c38c0370 100644 --- a/app/rss/articles/From Groovy to Kotlin.md +++ b/articles/english/2016/From Groovy to Kotlin.kts @@ -1,11 +1,11 @@ ---- -title: 'From Groovy to Kotlin' -url: https://dkandalov.github.io/groovy/kotlin/2016/06/06/From-Groovy-to-Kotlin.html -categories: - - Kotlin -author: Dmitry Kandalov -date: Jun 06, 2016 02:57 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ This is a write-up of my experience converting source code of [Activity Tracker](https://github.com/dkandalov/activity-tracker) plugin for IntelliJ IDEs from [Groovy](http://www.groovy-lang.org/) to [Kotlin](https://kotlinlang.org/). It is written for anyone familiar with Groovy or Kotlin and might be especially relevant if you are considering move from Groovy to Kotlin. Hopefully, it can be interesting for non-Groovy and non-Kotlin people as well. @@ -373,3 +373,18 @@ To conclude, here is the final code snippet showing strategically designed Kotli ```kotlin public operator fun times(other: Long): Long ``` + +""" + +Article( + title = "From Groovy to Kotlin", + url = "https://dkandalov.github.io/groovy/kotlin/2016/06/06/From-Groovy-to-Kotlin.html", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Dmitry Kandalov", + date = LocalDate.of(2016, 6, 6), + body = body +) diff --git a/articles/english/2016/Fun with Kotlin.kts b/articles/english/2016/Fun with Kotlin.kts new file mode 100644 index 000000000..b4bf8e687 --- /dev/null +++ b/articles/english/2016/Fun with Kotlin.kts @@ -0,0 +1,25 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ + +[Fun with Kotlin](https://vimeo.com/151846078) + +""" + +Article( + title = "Fun with Kotlin", + url = "https://vimeo.com/151846078", + categories = listOf( + "Kotlin" + ), + type = video, + lang = EN, + author = "Eder Bastos", + date = LocalDate.of(2016, 1, 14), + body = body +) diff --git a/articles/english/2016/Functional Programming in Kotlin with funKTionale (Video).kts b/articles/english/2016/Functional Programming in Kotlin with funKTionale (Video).kts new file mode 100644 index 000000000..db0e0ea6d --- /dev/null +++ b/articles/english/2016/Functional Programming in Kotlin with funKTionale (Video).kts @@ -0,0 +1,27 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ + +[Slides](https://speakerdeck.com/marioariasc/functional-programming-in-kotlin-with-funktionale-2) + + + +""" + +Article( + title = "Functional Programming in Kotlin with funKTionale (Video)", + url = "https://www.youtube.com/watch?v=klakgWp1KWg", + categories = listOf( + "Kotlin" + ), + type = video, + lang = EN, + author = "Mario Arias", + date = LocalDate.of(2016, 12, 16), + body = body +) diff --git a/articles/english/2016/Functional Programming in Kotlin with funKTionale.kts b/articles/english/2016/Functional Programming in Kotlin with funKTionale.kts new file mode 100644 index 000000000..c5453a529 --- /dev/null +++ b/articles/english/2016/Functional Programming in Kotlin with funKTionale.kts @@ -0,0 +1,32 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ + +_v1_ + +[Slides on SpeakerDeck](https://speakerdeck.com/marioariasc/functional-programming-in-kotlin-with-funktionale-1) + +_v2_ + +[Slides on SpeakerDeck](https://speakerdeck.com/marioariasc/functional-programming-in-kotlin-with-funktionale-2) + +""" + +Article( + title = "Functional Programming in Kotlin with funKTionale", + url = "https://speakerdeck.com/marioariasc/functional-programming-in-kotlin-with-funktionale-1", + categories = listOf( + "Kotlin", + "Functional Programming" + ), + type = slides, + lang = EN, + author = "Mario Arias", + date = LocalDate.of(2016, 9, 29), + body = body +) diff --git a/app/rss/articles/Functions as Data.md b/articles/english/2016/Functions as Data.kts similarity index 95% rename from app/rss/articles/Functions as Data.md rename to articles/english/2016/Functions as Data.kts index 908faf0f3..ce17a1db0 100644 --- a/app/rss/articles/Functions as Data.md +++ b/articles/english/2016/Functions as Data.kts @@ -1,11 +1,11 @@ ---- -title: 'Functions as Data' -url: http://cloudmark.github.io/Functions-As-Data/ -categories: - - Kotlin -author: Mark Galea -date: Oct 19, 2016 05:44 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ![Brain](http://cloudmark.github.io/images/func_as_data/brain.png) @@ -291,3 +291,18 @@ Hence the characteristic function for the set union between `s1` and `s2` when a In this post we have looked at how we can use functions as data elements. Using functions as a data representation might feel unnatural at first but this blurred boundary between functions as elements of control and functions as elements of data is quite powerful. I really hope that you find this technique useful. Stay safe and keep hacking! + +""" + +Article( + title = "Functions as Data", + url = "http://cloudmark.github.io/Functions-As-Data/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Mark Galea", + date = LocalDate.of(2016, 10, 19), + body = body +) diff --git a/articles/english/2016/Generating Kotlin Code for Better Refactorings, Tests, and IDE Support.kts b/articles/english/2016/Generating Kotlin Code for Better Refactorings, Tests, and IDE Support.kts new file mode 100644 index 000000000..cc61093a9 --- /dev/null +++ b/articles/english/2016/Generating Kotlin Code for Better Refactorings, Tests, and IDE Support.kts @@ -0,0 +1,24 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ +[Slides on Google Slides](https://docs.google.com/presentation/d/1pgzNnA4R3LU4hPnx0KTvQ0NFj23rPyq-ROr8kOiaxlM/edit#slide=id.p) + +""" + +Article( + title = "Generating Kotlin Code for Better Refactorings, Tests, and IDE Support", + url = "https://docs.google.com/presentation/d/1pgzNnA4R3LU4hPnx0KTvQ0NFj23rPyq-ROr8kOiaxlM/edit#slide=id.p", + categories = listOf( + "Kotlin" + ), + type = slides, + lang = EN, + author = "Eugene Petrenko", + date = LocalDate.of(2016, 9, 20), + body = body +) diff --git a/app/rss/articles/Getting Started with Kotlin and Anko on Android.md b/articles/english/2016/Getting Started with Kotlin and Anko on Android.kts similarity index 96% rename from app/rss/articles/Getting Started with Kotlin and Anko on Android.md rename to articles/english/2016/Getting Started with Kotlin and Anko on Android.kts index 128c52331..bc09efe89 100644 --- a/app/rss/articles/Getting Started with Kotlin and Anko on Android.md +++ b/articles/english/2016/Getting Started with Kotlin and Anko on Android.kts @@ -1,12 +1,11 @@ ---- -title: 'Getting Started with Kotlin and Anko on Android' -url: https://realm.io/news/getting-started-with-kotlin-and-anko/ -categories: - - Android - - Kotlin -author: Donn Felker -date: Mar 09, 2016 15:44 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ by [Donn Felker](https://twitter.com/donnfelker) ### Getting Started With Kotlin and Anko on Android @@ -162,7 +161,7 @@ dependencies { testCompile 'junit:junit:4.12' // Kotlin - compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + compile "org.jetbrains.kotlin:kotlin-stdlib:${"$"}kotlin_version" // Anko compile 'org.jetbrains.anko:anko-sdk15:0.8.2' // sdk19, sdk21, sdk23 are also available @@ -182,7 +181,7 @@ buildscript { mavenCentral() } dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${"$"}kotlin_version" } } repositories { @@ -390,3 +389,19 @@ Best of luck on your Kotlin adventures! * [Starter Project](https://github.com/donnfelker/KotlinMix/archive/fresh.zip) * [Finished Code For This Article](https://github.com/donnfelker/KotlinMix/) + +""" + +Article( + title = "Getting Started with Kotlin and Anko on Android", + url = "https://realm.io/news/getting-started-with-kotlin-and-anko/", + categories = listOf( + "Android", + "Kotlin" + ), + type = article, + lang = EN, + author = "Donn Felker", + date = LocalDate.of(2016, 3, 9), + body = body +) diff --git a/app/rss/articles/Getting started with Kotlin and third-party libraries Glide, Dagger 2, Retrofit 2, Realm, MVP and RxJava on Android.md b/articles/english/2016/Getting started with Kotlin and third-party libraries Glide, Dagger 2, Retrofit 2, Realm, MVP and RxJava on Android.kts similarity index 88% rename from app/rss/articles/Getting started with Kotlin and third-party libraries Glide, Dagger 2, Retrofit 2, Realm, MVP and RxJava on Android.md rename to articles/english/2016/Getting started with Kotlin and third-party libraries Glide, Dagger 2, Retrofit 2, Realm, MVP and RxJava on Android.kts index 5b4e26c69..24ba32abd 100644 --- a/app/rss/articles/Getting started with Kotlin and third-party libraries Glide, Dagger 2, Retrofit 2, Realm, MVP and RxJava on Android.md +++ b/articles/english/2016/Getting started with Kotlin and third-party libraries Glide, Dagger 2, Retrofit 2, Realm, MVP and RxJava on Android.kts @@ -1,12 +1,11 @@ ---- -title: 'Getting started with Kotlin and third-party libraries Glide, Dagger 2, Retrofit 2, Realm, MVP and RxJava on Android' -url: http://steelkiwi.com/blog/getting-started-kotlin-libraries-Glide-Dagger/ -categories: - - Kotlin - - Android -author: Yaroslav Polyakov -date: Nov 17, 2016 11:04 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ It’s not a secret to Android developers all around the globe that IT community has been trying to find a distinct replacement of Java. Until 2011 before Kotlin creation was announced the most suitable candidate was Scala. Kotlin source code was published in 2012, and in 2016 the 1.0 version was released. Kotlin was claimed to be a response to massive Java code and Scala low-speed compilation. Today many famous IT companies use Kotlin in their projects. The attention to this language is continuing to grow, as it wins over the developers with its syntax and the fact that Kotlin is supported in IDE by the means of plugin. Even Jake Wharton, recognized Android gospeller, uses Kotlin in the projects of his own thus encouraging Android community to use this language. @@ -97,24 +96,24 @@ To activate it you need to add this in the [build.gradle](https://github.com/ste }) compile 'com.android.support:appcompat-v7:25.0.0' testCompile 'junit:junit:4.12' - compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - compile "com.android.support:cardview-v7:${supportVersion}" - compile "com.android.support:design:${supportVersion}" + compile "org.jetbrains.kotlin:kotlin-stdlib:${"$"}kotlin_version" + compile "com.android.support:cardview-v7:${"$"}{supportVersion}" + compile "com.android.support:design:${"$"}{supportVersion}" // Dagger 2 - compile "com.google.dagger:dagger:${daggerVersion}" - kapt "com.google.dagger:dagger-compiler:${daggerVersion}" + compile "com.google.dagger:dagger:${"$"}{daggerVersion}" + kapt "com.google.dagger:dagger-compiler:${"$"}{daggerVersion}" provided "org.glassfish:javax.annotation:3.1.1" //Retrofit 2 - compile "com.squareup.retrofit2:retrofit:${retrofitVersion}" - compile "com.squareup.retrofit2:adapter-rxjava:${retrofitVersion}" - compile "com.squareup.retrofit2:converter-gson:${retrofitVersion}" + compile "com.squareup.retrofit2:retrofit:${"$"}{retrofitVersion}" + compile "com.squareup.retrofit2:adapter-rxjava:${"$"}{retrofitVersion}" + compile "com.squareup.retrofit2:converter-gson:${"$"}{retrofitVersion}" compile 'com.google.code.gson:gson:2.8.0' - compile "io.reactivex:rxjava:${rxVersion}" - compile "io.reactivex:rxandroid:${rxVersion}" + compile "io.reactivex:rxjava:${"$"}{rxVersion}" + compile "io.reactivex:rxandroid:${"$"}{rxVersion}" compile 'com.github.bumptech.glide:glide:3.7.0' @@ -200,3 +199,19 @@ Projects source code is available on [Repository](https://github.com/steelkiwi/G ### Let’s sum up All in all, Kotlin is a modern and secure programming language that simplifies Android apps development. It looks like a distinct alternative to Java as it has good documentation and it is simple enough for understanding. We hope that this article helped you to figure out how to create a project on Kotlin and integrate the needed libraries. + +""" + +Article( + title = "Getting started with Kotlin and third-party libraries Glide, Dagger 2, Retrofit 2, Realm, MVP and RxJava on Android", + url = "http://steelkiwi.com/blog/getting-started-kotlin-libraries-Glide-Dagger/", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Yaroslav Polyakov", + date = LocalDate.of(2016, 11, 17), + body = body +) diff --git a/app/rss/articles/Getting started with Kotlin in Android development.md b/articles/english/2016/Getting started with Kotlin in Android development.kts similarity index 96% rename from app/rss/articles/Getting started with Kotlin in Android development.md rename to articles/english/2016/Getting started with Kotlin in Android development.kts index 908adae64..139f8b2e9 100644 --- a/app/rss/articles/Getting started with Kotlin in Android development.md +++ b/articles/english/2016/Getting started with Kotlin in Android development.kts @@ -1,12 +1,11 @@ ---- -title: 'Getting started with Kotlin in Android development' -url: https://datarockets.com/blog/kotlin-in-android-development -categories: - - Kotlin - - Android -author: Dmitry Chyrta -date: Aug 30, 2016 11:54 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ Kotlin programming language now on everyone's lips. Some people seriously considered it as a full-fledged replacement of Java in Android development. It is a modern, statically-typed language aimed at trying to make the code simpler and clearer for everyone and bring long-awaited Java features to Android developers. Let's look at the history of that language, sort out the pros and cons of the language, as well as a look at an example and how you can start using Kotlin in current projects. @@ -106,7 +105,7 @@ Classes and methods in Kotlin are final by default. We can construct classes in ```kotlin class Cat(val name: String)  { init { - println("We've just initialized Cat with ${name}") + println("We've just initialized Cat with ${"$"}{name}") } } ``` @@ -437,3 +436,19 @@ Kotlin already being used in production. In May, I was able to listen to the pre ## What’s next? The developers of Kotlin are constantly improving their language to provide the best experience to developers. For now, we can say that the goals which have been set in the beginning of the development of Kotlin have been achieved. Kotlin makes you write a better, cleaner and safer code, provides long-awaited Java features, and lets you use Java-code along with Kotlin. These are the pros, but we have cons too: compile time is a little bit longer than in Java and some of library is not compatible with Kotlin. But it’s not a serious issue, because the most popular libraries are used by developers from all over the world. So, Kotlin is a great choice to start development for Android now. + +""" + +Article( + title = "Getting started with Kotlin in Android development", + url = "https://datarockets.com/blog/kotlin-in-android-development", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Dmitry Chyrta", + date = LocalDate.of(2016, 8, 30), + body = body +) diff --git a/app/rss/articles/Gradle Elevates the Build to First-Class Programming With Kotlin Language.md b/articles/english/2016/Gradle Elevates the Build to First-Class Programming With Kotlin Language.kts similarity index 92% rename from app/rss/articles/Gradle Elevates the Build to First-Class Programming With Kotlin Language.md rename to articles/english/2016/Gradle Elevates the Build to First-Class Programming With Kotlin Language.kts index 95724eade..5c5c4a48e 100644 --- a/app/rss/articles/Gradle Elevates the Build to First-Class Programming With Kotlin Language.md +++ b/articles/english/2016/Gradle Elevates the Build to First-Class Programming With Kotlin Language.kts @@ -1,12 +1,11 @@ ---- -title: 'Gradle Elevates the Build to First-Class Programming With Kotlin Language' -url: http://www.businesswire.com/news/home/20160517006230/en/Gradle-Elevates-Build-First-Class-Programming-Kotlin-Language -categories: - - Kotlin - - Gradle -author: BusinessWire -date: May 17, 2016 11:16 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ## Alliance between Gradle Inc. and JetBrains makes the Build a first-class citizen in Software Development SAN FRANCISCO--([BUSINESS WIRE](http://www.businesswire.com/))--Gradle Inc. today announced an alliance with JetBrains to provide a Kotlin-based Build Programming Language for Gradle, the popular open source build automation software. @@ -45,3 +44,19 @@ Gradle Inc. is a Silicon Valley startup whose mission is to transform how softwa **About JetBrains** JetBrains s.r.o. is a technology-leading software development firm specializing in the creation of intelligent, productivity-enhancing software. It maintains its headquarters in Prague, Czech Republic, with its R&D labs located in St. Petersburg, Moscow, Munich and Boston. JetBrains employs over 600 people and is organically grown. Its product catalogue includes award-winning tools such as IntelliJ IDEA and ReSharper, and its IntelliJ Platform has been chosen by variety of companies to build their own tooling on, including Google's Android Studio. For more information, see [www.jetbrains.com](http://cts.businesswire.com/ct/CT?id=smartlink&url=https%3A%2F%2Fwww.jetbrains.com%2F&esheet=51343942&newsitemid=20160517006230&lan=en-US&anchor=www.jetbrains.com&index=4&md5=b00800605a6efcea3b36eed88b76c699). + +""" + +Article( + title = "Gradle Elevates the Build to First-Class Programming With Kotlin Language", + url = "http://www.businesswire.com/news/home/20160517006230/en/Gradle-Elevates-Build-First-Class-Programming-Kotlin-Language", + categories = listOf( + "Kotlin", + "Gradle" + ), + type = article, + lang = EN, + author = "BusinessWire", + date = LocalDate.of(2016, 5, 17), + body = body +) diff --git a/app/rss/articles/Gradle Meets Kotlin.md b/articles/english/2016/Gradle Meets Kotlin.kts similarity index 83% rename from app/rss/articles/Gradle Meets Kotlin.md rename to articles/english/2016/Gradle Meets Kotlin.kts index aebb4fa12..0492b491a 100644 --- a/app/rss/articles/Gradle Meets Kotlin.md +++ b/articles/english/2016/Gradle Meets Kotlin.kts @@ -1,12 +1,11 @@ ---- -title: 'Gradle Meets Kotlin' -url: http://blog.jetbrains.com/kotlin/2016/05/gradle-meets-kotlin/ -categories: - - Kotlin - - Gradle -author: Hadi Hariri -date: May 18, 2016 02:18 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Back at **JavaOne 2015**, during a lunch break we started chatting with **Hans Dockter, CEO of Gradle**. A couple of days after the conference, a few of us were at the Gradle offices talking about what would be the beginning of the collaboration between JetBrains and Gradle; to bring first-class tooling and support for a static language to Gradle. Today, at the [Kotlin Night in San Francisco](http://info.jetbrains.com/Kotlin-Night-2016.html), Hans Dockter demoed the first milestone of writing a Gradle build script using Kotlin. @@ -40,3 +39,19 @@ For the past 6 months, we’ve been working closely with the Gradle team, in par We are very excited for what Gradle has in store and are happy to continue collaborating with them closely in bringing a great experience to Gradle users. For more information and how to get the bits to start playing with this, make sure you read the [blog post by the Gradle team](http://gradle.org/blog/kotlin-meets-gradle) for more details. In addition, if you are on the public [**Kotlin Slack**](https://kotlinlang.slack.com), there’s a newly created **#gradle** channel for discussions. + +""" + +Article( + title = "Gradle Meets Kotlin", + url = "http://blog.jetbrains.com/kotlin/2016/05/gradle-meets-kotlin/", + categories = listOf( + "Kotlin", + "Gradle" + ), + type = article, + lang = EN, + author = "Hadi Hariri", + date = LocalDate.of(2016, 5, 18), + body = body +) diff --git a/app/rss/articles/How to Hot Deploy Java-Kotlin classes in Dev.md b/articles/english/2016/How to Hot Deploy Java-Kotlin classes in Dev.kts similarity index 82% rename from app/rss/articles/How to Hot Deploy Java-Kotlin classes in Dev.md rename to articles/english/2016/How to Hot Deploy Java-Kotlin classes in Dev.kts index 2f97298b0..21de6b11b 100644 --- a/app/rss/articles/How to Hot Deploy Java-Kotlin classes in Dev.md +++ b/articles/english/2016/How to Hot Deploy Java-Kotlin classes in Dev.kts @@ -1,12 +1,11 @@ ---- -title: 'How to Hot Deploy Java/Kotlin classes in Dev' -url: https://hashnode.com/post/how-to-hot-deploy-javakotlin-classes-in-dev-cim3u5oen00fnek53ho7q1t0v -categories: - - Deploy - - Kotlin -author: Jan Vladimir Mostert -date: Mar 22, 2016 19:55 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ One thing the majority of JVM developers find annoying is having to constantly restart their container. Make a small change, restart Tomcat/Jetty, wait 30+ seconds for code to build / compile (or several minutes in the case of large monolithic projects), see results; repeat. Compared to Dart which auto-reloads your changes as soon as you hit save, this is very inefficient and kills productivity. @@ -26,3 +25,19 @@ Download the [jar](http://repo.spring.io/release/org/springframework/springloade Now when you run your application using the maven jetty plugin or maven tomcat plugin (`mvn jetty:run`), every time you compile a class, it will be reloaded for you without having to do `Ctrl + C` and restarting `mvn jetty:run`. In Eclipse this will happen automatically if you have auto build turned on, in IntellJ, just assign a shortcut to the compile command (I'm using `Cmd + S`), once you're done with your changes, simply hit `Cmd + S` and you can immediately see your changes without restarts. Happy coding!! + +""" + +Article( + title = "How to Hot Deploy Java/Kotlin classes in Dev", + url = "https://hashnode.com/post/how-to-hot-deploy-javakotlin-classes-in-dev-cim3u5oen00fnek53ho7q1t0v", + categories = listOf( + "Deploy", + "Kotlin" + ), + type = article, + lang = EN, + author = "Jan Vladimir Mostert", + date = LocalDate.of(2016, 3, 22), + body = body +) diff --git a/app/rss/articles/How to get IDEA to detect kotlin generated sources using Gradle.md b/articles/english/2016/How to get IDEA to detect kotlin generated sources using Gradle.kts similarity index 70% rename from app/rss/articles/How to get IDEA to detect kotlin generated sources using Gradle.md rename to articles/english/2016/How to get IDEA to detect kotlin generated sources using Gradle.kts index c6a0cd4dc..3ff7154b9 100644 --- a/app/rss/articles/How to get IDEA to detect kotlin generated sources using Gradle.md +++ b/articles/english/2016/How to get IDEA to detect kotlin generated sources using Gradle.kts @@ -1,11 +1,11 @@ ---- -title: 'How to get IDEA to detect kotlin generated sources using Gradle' -url: https://blog.nishtahir.com/2016/06/25/how-to-get-idea-to-detect-kotlin-generated-sources-using-gradle/ -categories: - - Kotlin -author: Nish Tahir -date: Jun 25, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ So I recently got my hands on Kotlin and it's been great so far. However one of the things that the IDEA kotlin plugin doesn't do[1](#fn:1) is detect the `kapt` folder which contains any sources generated from annotation processing. This can be fixed using the IDEA gradle plugin[2](#fn:2). @@ -13,7 +13,7 @@ However one of the things that the IDEA kotlin plugin doesn't do Docs.gradle.org. (2016). The IDEA Plugin - Gradle User Guide Version 2.14. [online] Available at: [https://docs.gradle.org/current/userguide/idea_plugin.html](https://docs.gradle.org/current/userguide/idea_plugin.html) [Accessed 25 Jun. 2016]. [↩](#fnref:2 "return to article") -3. Docs.gradle.org. (2016). IdeaModule - Gradle DSL Version 2.14. [online] Available at: [https://docs.gradle.org/current/dsl/org.gradle.plugins.ide.idea.model.IdeaModule.html](https://docs.gradle.org/current/dsl/org.gradle.plugins.ide.idea.model.IdeaModule.html) [Accessed 25 Jun. 2016]. [↩](#fnref:3 "return to article") \ No newline at end of file +3. Docs.gradle.org. (2016). IdeaModule - Gradle DSL Version 2.14. [online] Available at: [https://docs.gradle.org/current/dsl/org.gradle.plugins.ide.idea.model.IdeaModule.html](https://docs.gradle.org/current/dsl/org.gradle.plugins.ide.idea.model.IdeaModule.html) [Accessed 25 Jun. 2016]. [↩](#fnref:3 "return to article") +""" + +Article( + title = "How to get IDEA to detect kotlin generated sources using Gradle", + url = "https://blog.nishtahir.com/2016/06/25/how-to-get-idea-to-detect-kotlin-generated-sources-using-gradle/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Nish Tahir", + date = LocalDate.of(2016, 6, 25), + body = body +) diff --git a/app/rss/articles/Improved Pattern Matching in Kotlin.md b/articles/english/2016/Improved Pattern Matching in Kotlin.kts similarity index 90% rename from app/rss/articles/Improved Pattern Matching in Kotlin.md rename to articles/english/2016/Improved Pattern Matching in Kotlin.kts index 041a1e637..9369cfa92 100644 --- a/app/rss/articles/Improved Pattern Matching in Kotlin.md +++ b/articles/english/2016/Improved Pattern Matching in Kotlin.kts @@ -1,11 +1,11 @@ ---- -title: 'Improved Pattern Matching in Kotlin' -url: https://programmingideaswithjake.wordpress.com/2016/08/27/improved-pattern-matching-in-kotlin/ -categories: - - Kotlin -author: Jacob Zimmerman -date: Aug 27, 2016 08:58 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Kotlin doesn’t have true pattern matching, and that’s fine. In order to make matchable classes in Scala, there is an awful lot of overhead required to make it work, and I highly respect Kotlin’s goal of _not_ adding much overhead anywhere. But that doesn’t mean we can’t try to make our own way to get something closer to pattern matching. ## **Using `when`** @@ -144,3 +144,18 @@ when(x) { ## **Outro** So, there you have it! Better pattern matching in Kotlin! What do you think? I realize it’s a misuse of `equals()`, but I think it’s worth it in some cases. + +""" + +Article( + title = "Improved Pattern Matching in Kotlin", + url = "https://programmingideaswithjake.wordpress.com/2016/08/27/improved-pattern-matching-in-kotlin/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Jacob Zimmerman", + date = LocalDate.of(2016, 8, 27), + body = body +) diff --git a/app/rss/articles/Issues Faced With Kotlin During Android Development.md b/articles/english/2016/Issues Faced With Kotlin During Android Development.kts similarity index 90% rename from app/rss/articles/Issues Faced With Kotlin During Android Development.md rename to articles/english/2016/Issues Faced With Kotlin During Android Development.kts index a18e539bf..b6e3dd953 100644 --- a/app/rss/articles/Issues Faced With Kotlin During Android Development.md +++ b/articles/english/2016/Issues Faced With Kotlin During Android Development.kts @@ -1,12 +1,11 @@ ---- -title: 'Issues Faced With Kotlin During Android Development' -url: http://blog.bilue.com.au/issues-faced-with-kotlin-during-android-development-1 -categories: - - Kotlin - - Android -author: Elisha Lye -date: Aug 10, 2016 11:20 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ [Kotlin](https://kotlinlang.org/) seems like the future of Android development. It is a new statically-typed programming language that runs on JVM, with a very refined syntax and enhanced features. There is a lot to love about it. Kotlin is interoperable with Java, which should reduce the risk of future incompatibility. The additional language features such as Function Extensions and High Order Function make it much more extensible and scalable. The code is concise with data classes, single expression function, infix and many more... enough said. Kotlin is just great! ![Screen_Shot_2016-08-10_at_2.10.19_pm.png](http://offers.bilue.com.au/hs-fs/hubfs/Screen_Shot_2016-08-10_at_2.10.19_pm.png?t=1470802416157&width=733&height=294) @@ -60,3 +59,19 @@ None of these issues are show stoppers. The advantage and fun of learning new th As with any new thing, one other challenge is finding community support. Suppose you are experimenting with new Android Features and face a road-block. If you post your question to Stackoverflow using your Kotlin code, you are unlikely to generate support. So... you might as well be the one who supports others... which is in itself a good thing! :) + +""" + +Article( + title = "Issues Faced With Kotlin During Android Development", + url = "http://blog.bilue.com.au/issues-faced-with-kotlin-during-android-development-1", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Elisha Lye", + date = LocalDate.of(2016, 8, 10), + body = body +) diff --git a/app/rss/articles/JDK7-8 features in Kotlin 1.0.md b/articles/english/2016/JDK7-8 features in Kotlin 1.0.kts similarity index 85% rename from app/rss/articles/JDK7-8 features in Kotlin 1.0.md rename to articles/english/2016/JDK7-8 features in Kotlin 1.0.kts index 671b28523..a5e085a8e 100644 --- a/app/rss/articles/JDK7-8 features in Kotlin 1.0.md +++ b/articles/english/2016/JDK7-8 features in Kotlin 1.0.kts @@ -1,11 +1,11 @@ ---- -title: 'JDK7/8 features in Kotlin 1.0' -url: https://discuss.kotlinlang.org/t/jdk7-8-features-in-kotlin-1-0/1625 -categories: - - Kotlin -author: Ilya Gorbunov -date: Apr 21, 2016 19:36 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Currently it's rather inconvenient to use those methods of mapped builtin types, that were added in JDK8. These include `Collection.stream()`, `Map.getOrDefault(K, V)`, etc. We have several long-standing issues related in our tracker: [KT-9194](https://youtrack.jetbrains.com/issue/KT-9194), [KT-5175](https://youtrack.jetbrains.com/issue/KT-5175) and [KT-10864](https://youtrack.jetbrains.com/issue/KT-10864). This happens because Kotlin targets JDK 1.6 as the minimum JDK version, so it can't expose those members of builtin types that are not available in JDK 1.6. @@ -52,3 +52,18 @@ val result = Resource(faultyClose = true).use { throw IllegalStateException("operation failed") } ``` + +""" + +Article( + title = "JDK7/8 features in Kotlin 1.0", + url = "https://discuss.kotlinlang.org/t/jdk7-8-features-in-kotlin-1-0/1625", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Ilya Gorbunov", + date = LocalDate.of(2016, 4, 21), + body = body +) diff --git a/app/rss/articles/JMock and Kotlin.md b/articles/english/2016/JMock and Kotlin.kts similarity index 92% rename from app/rss/articles/JMock and Kotlin.md rename to articles/english/2016/JMock and Kotlin.kts index 8f31677d6..eb9c70b48 100644 --- a/app/rss/articles/JMock and Kotlin.md +++ b/articles/english/2016/JMock and Kotlin.kts @@ -1,12 +1,11 @@ ---- -title: 'JMock and Kotlin' -url: http://www.oneeyedmen.com/jmock-and-kotlin.html -categories: - - Unit Testing - - Kotlin -author: Duncan McGregor -date: May 01, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ [JMock](http://www.jmock.org/) may have lost the mocking war, but for the London crowd it's still the go-to mocking tool. It turns out that a little Kotlin fairy-dust can make it even more expressive. @@ -202,3 +201,19 @@ The final bonus marks in this post go for spotting Ignoring the fact that it breaks [Prism](http://prismjs.com/)'s Kotlin highlighter, this hack was pointed out by [Nat Pryce](http://natpryce.com) - backticks allow spaces in method names, giving beautifully readable specs in code and test runners. + +""" + +Article( + title = "JMock and Kotlin", + url = "http://www.oneeyedmen.com/jmock-and-kotlin.html", + categories = listOf( + "Unit Testing", + "Kotlin" + ), + type = article, + lang = EN, + author = "Duncan McGregor", + date = LocalDate.of(2016, 5, 1), + body = body +) diff --git a/app/rss/articles/JUnit 5 with Spring Boot (plus Kotlin).md b/articles/english/2016/JUnit 5 with Spring Boot (plus Kotlin).kts similarity index 95% rename from app/rss/articles/JUnit 5 with Spring Boot (plus Kotlin).md rename to articles/english/2016/JUnit 5 with Spring Boot (plus Kotlin).kts index b6ffbb7dd..3603ec97a 100644 --- a/app/rss/articles/JUnit 5 with Spring Boot (plus Kotlin).md +++ b/articles/english/2016/JUnit 5 with Spring Boot (plus Kotlin).kts @@ -1,12 +1,11 @@ ---- -title: 'JUnit 5 with Spring Boot (plus Kotlin)' -url: https://objectpartners.com/2016/07/26/junit-5-with-spring-boot-plus-kotlin/ -categories: - - Kotlin - - Spring Boot -author: Mike Plummer -date: Jul 26, 2016 09:22 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ This summer the JUnit team released a beta version of the next iteration, [version five](http://junit.org/junit5/). This newest version adds a ton of new features that will be a welcome relief for JVM developers who have been dealing with the limitations and idiosyncrasies of version four over the past decade. I’ve put together an [example project](https://github.com/mike-plummer/junit5-springboot-kotlin) to learn about the new feature set and tried to summarize some of my favorites in this post. # Features of JUnit 5 @@ -163,3 +162,19 @@ This is the only really tricky area. Kotlin’s null-safety rules can cause prob # Wrap Up Hopefully this article has gotten you interested in checking out JUnit5 and maybe even giving Kotlin a try. JUnit may not be the most flexible or powerful testing framework out there but this newest version improves what continues to be the simplest, most-used testing platform for the JVM and is ideal for anyone who is looking to incrementally update an existing test suite or wants to write tests that are easy, familiar, and maintainable. Be sure to check out the [example project](https://github.com/mike-plummer/junit5-springboot-kotlin) to see these features in action as part of a SpringBoot Kotlin application. Happy coding! + +""" + +Article( + title = "JUnit 5 with Spring Boot (plus Kotlin)", + url = "https://objectpartners.com/2016/07/26/junit-5-with-spring-boot-plus-kotlin/", + categories = listOf( + "Kotlin", + "Spring Boot" + ), + type = article, + lang = EN, + author = "Mike Plummer", + date = LocalDate.of(2016, 7, 26), + body = body +) diff --git a/app/rss/articles/JVM Newcomer Kotlin 1.0 is GA.md b/articles/english/2016/JVM Newcomer Kotlin 1.0 is GA.kts similarity index 89% rename from app/rss/articles/JVM Newcomer Kotlin 1.0 is GA.md rename to articles/english/2016/JVM Newcomer Kotlin 1.0 is GA.kts index c00f44c06..5147bfa9d 100644 --- a/app/rss/articles/JVM Newcomer Kotlin 1.0 is GA.md +++ b/articles/english/2016/JVM Newcomer Kotlin 1.0 is GA.kts @@ -1,12 +1,11 @@ ---- -title: 'JVM Newcomer Kotlin 1.0 is GA' -url: https://www.voxxed.com/blog/2016/02/kotlin/ -categories: - - Kotlin - - JVM, -author: Lucy Carey -date: Feb 15, 2016 17:50 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ After a long and winding road to development, pragmatic JVM and Android newcomer [Kotlin](http://blog.jetbrains.com/kotlin/2016/02/kotlin-1-0-released-pragmatic-language-for-jvm-and-android/) 1.0 is officially GA. The open source progeny of Java IDE supremo JetBrains (it was developed on [GitHub](https://github.com/JetBrains/kotlin) under the Apache 2.0 Open-Source license), Kotlin has been cooking since 2010, and as you’d expect, runs seamlessly on the company’s signature Java IDE, [IntelliJ](https://www.voxxed.com/blog/2015/09/partying-with-intellij-idea-dart-java-websocket-and-glassfish/) IDEA. A key characteristic of Kotlin is its end user focus, and a steadfast effort has been made in its development to ensure features lists are sharp and concise. It’s also lightweight and fully interoperable with the Java language, making it a natural fit for mobile development. @@ -26,3 +25,19 @@ For a taste of what Kotlin has to offer, its creators recommend giving this onli To learn more about Kotlin and how it compares to fellow Java-botherer Ceylon, as well as Java itself, we suggest checking out this Devoxx UK 2015 session by Russel Winder: [https://www.youtube.com/watch?v=Q_Z_8HXt68k](https://www.youtube.com/watch?v=Q_Z_8HXt68k) + +""" + +Article( + title = "JVM Newcomer Kotlin 1.0 is GA", + url = "https://www.voxxed.com/blog/2016/02/kotlin/", + categories = listOf( + "Kotlin", + "JVM," + ), + type = article, + lang = EN, + author = "Lucy Carey", + date = LocalDate.of(2016, 2, 15), + body = body +) diff --git a/app/rss/articles/Keddit - Part 7 Infinite Scroll Higher-Order functions and Lambdas.md b/articles/english/2016/Keddit - Part 7 Infinite Scroll Higher-Order functions and Lambdas.kts similarity index 92% rename from app/rss/articles/Keddit - Part 7 Infinite Scroll Higher-Order functions and Lambdas.md rename to articles/english/2016/Keddit - Part 7 Infinite Scroll Higher-Order functions and Lambdas.kts index a0268eb21..691b441a7 100644 --- a/app/rss/articles/Keddit - Part 7 Infinite Scroll Higher-Order functions and Lambdas.md +++ b/articles/english/2016/Keddit - Part 7 Infinite Scroll Higher-Order functions and Lambdas.kts @@ -1,13 +1,11 @@ ---- -title: 'Keddit — Part 7: Infinite Scroll: Higher-Order functions & Lambdas' -url: https://medium.com/@juanchosaravia/keddit-part-7-infinite-scroll-higher-order-functions-lambdas-3a11fbd5090e#.cdsuea4kc -categories: - - Android - - Kotlin - - Keddit -author: Juan Ignacio Saravia -date: Apr 09, 2016 15:36 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ![](https://d262ilb51hltx0.cloudfront.net/max/2000/1*coKbXMpkG8Fc1NJtM6Jp4w.png) ### Content @@ -169,3 +167,20 @@ Higher-Order functions is an incredible feature and hope it is more clear now wi See you in the next story! **Twitter**: [https://twitter.com/juanchosaravia](https://twitter.com/juanchosaravia) + +""" + +Article( + title = "Keddit — Part 7: Infinite Scroll: Higher-Order functions & Lambdas", + url = "https://medium.com/@juanchosaravia/keddit-part-7-infinite-scroll-higher-order-functions-lambdas-3a11fbd5090e#.cdsuea4kc", + categories = listOf( + "Android", + "Kotlin", + "Keddit" + ), + type = article, + lang = EN, + author = "Juan Ignacio Saravia", + date = LocalDate.of(2016, 4, 9), + body = body +) diff --git a/app/rss/articles/KillerTask, the solution to AsyncTask implementation.md b/articles/english/2016/KillerTask, the solution to AsyncTask implementation.kts similarity index 87% rename from app/rss/articles/KillerTask, the solution to AsyncTask implementation.md rename to articles/english/2016/KillerTask, the solution to AsyncTask implementation.kts index d9f0c5e10..c3195d2ef 100644 --- a/app/rss/articles/KillerTask, the solution to AsyncTask implementation.md +++ b/articles/english/2016/KillerTask, the solution to AsyncTask implementation.kts @@ -1,12 +1,11 @@ ---- -title: 'KillerTask, the solution to AsyncTask implementation' -url: http://inaka.net/blog/2016/01/25/killertask-the-solution-to-asynctask-implementation/ -categories: - - Kotlin - - Android -author: Fernando Ramirez -date: Jan 25, 2016 21:54 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ## Introduction [KillerTask](https://github.com/inaka/KillerTask) is an Android library to create asynchronous background tasks. @@ -150,3 +149,19 @@ If you find any bugs or have a problem while using this library, please [open an You can check all of our open-source projects at [inaka.github.io](http://inaka.github.io/). + +""" + +Article( + title = "KillerTask, the solution to AsyncTask implementation", + url = "http://inaka.net/blog/2016/01/25/killertask-the-solution-to-asynctask-implementation/", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Fernando Ramirez", + date = LocalDate.of(2016, 1, 25), + body = body +) diff --git a/app/rss/articles/Konsent.md b/articles/english/2016/Konsent.kts similarity index 87% rename from app/rss/articles/Konsent.md rename to articles/english/2016/Konsent.kts index 40727e005..c47c2d849 100644 --- a/app/rss/articles/Konsent.md +++ b/articles/english/2016/Konsent.kts @@ -1,12 +1,11 @@ ---- -title: 'Kosent' -url: http://oneeyedmen.com/konsent.html -categories: - - Testing - - Kotlin -author: Duncan McGregor -date: May 12, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ I've just released [Kosent](https://github.com/dmcg/konsent), an acceptance testing library for Kotlin. The basic idea is that you can write your tests in a nice IDE-friendly and refactorable Kotlin DSL, but they generate @@ -74,3 +73,19 @@ Thanks to my patrons at [Springer Nature](http://springernature.com), on whose d hiring, so [get in touch](https://twitter.com/duncanmcg) if you're in London and this stuff interests you. Stay tuned - I'm planning a post soon on how to implement a DSL like this in Kotlin. + +""" + +Article( + title = "Kosent", + url = "http://oneeyedmen.com/konsent.html", + categories = listOf( + "Testing", + "Kotlin" + ), + type = article, + lang = EN, + author = "Duncan McGregor", + date = LocalDate.of(2016, 5, 12), + body = body +) diff --git a/app/rss/articles/Kotlin & Android A Brass Tacks Experiment Wrap-Up.md b/articles/english/2016/Kotlin & Android A Brass Tacks Experiment Wrap-Up.kts similarity index 94% rename from app/rss/articles/Kotlin & Android A Brass Tacks Experiment Wrap-Up.md rename to articles/english/2016/Kotlin & Android A Brass Tacks Experiment Wrap-Up.kts index 77e5f228a..379149ab1 100644 --- a/app/rss/articles/Kotlin & Android A Brass Tacks Experiment Wrap-Up.md +++ b/articles/english/2016/Kotlin & Android A Brass Tacks Experiment Wrap-Up.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin & Android: A Brass Tacks Experiment Wrap-Up' -url: https://medium.com/@CodingDoug/kotlin-android-a-brass-tacks-experiment-wrap-up-2b37e3ac8957#.nf83hy78g -categories: - - Android - - Kotlin -author: Doug Stevenson -date: Mar 14, 2016 20:57 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ![](https://d262ilb51hltx0.cloudfront.net/max/1600/1*UN-S8ELMC2kpHf4tJKfbLQ.png) _Disclaimer: I am a Google employee, but the views expressed in this article are not those of my employer._ @@ -94,3 +93,19 @@ If you want to see my test project and compare XML layouts with views built by K I hope you enjoyed reading about my experiences with Kotlin for Android as much as I enjoyed learning about it myself! I work extensively with Android, so be sure to follow me on [Medium](https://medium.com/@CodingDoug) and [Twitter](https://twitter.com/CodingDoug) to get my upcoming blogs. + +""" + +Article( + title = "Kotlin & Android: A Brass Tacks Experiment Wrap-Up", + url = "https://medium.com/@CodingDoug/kotlin-android-a-brass-tacks-experiment-wrap-up-2b37e3ac8957#.nf83hy78g", + categories = listOf( + "Android", + "Kotlin" + ), + type = article, + lang = EN, + author = "Doug Stevenson", + date = LocalDate.of(2016, 3, 14), + body = body +) diff --git a/app/rss/articles/Kotlin & Android A Brass Tacks Experiment, Part 1.md b/articles/english/2016/Kotlin & Android A Brass Tacks Experiment, Part 1.kts similarity index 93% rename from app/rss/articles/Kotlin & Android A Brass Tacks Experiment, Part 1.md rename to articles/english/2016/Kotlin & Android A Brass Tacks Experiment, Part 1.kts index 85ddf3710..02a8cb566 100644 --- a/app/rss/articles/Kotlin & Android A Brass Tacks Experiment, Part 1.md +++ b/articles/english/2016/Kotlin & Android A Brass Tacks Experiment, Part 1.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin & Android: A Brass Tacks Experiment, Part 1.' -url: https://medium.com/@CodingDoug/kotlin-android-a-brass-tacks-experiment-part-1-3e5028491bcc#.5c7ixfzdv -categories: - - Kotlin - - Android -author: Doug Stevenson -date: Feb 01, 2016 17:31 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ![](https://d262ilb51hltx0.cloudfront.net/max/800/1*UN-S8ELMC2kpHf4tJKfbLQ.png) _Disclaimer: I am a Google employee, but the views expressed in this article are not those of my employer._ @@ -41,7 +40,7 @@ buildscript { } dependencies { classpath 'com.android.tools.build:gradle:1.5.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${"$"}kotlin_version" } } ``` @@ -69,7 +68,7 @@ Don’t forget to create that directory because we’ll use it later. You’ll a ```kotlin dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + compile "org.jetbrains.kotlin:kotlin-stdlib:${"$"}kotlin_version" } ``` @@ -102,3 +101,19 @@ _MainActivity moved from java source dir to kotlin source dir_ I’m sure you’ve already started to dig around in the converted activity, so you’ve probably already got a taste for what Kotlin looks like. I’ll point out a couple things that look different from the Java language. You’ll never see the keyword “new” in Kotlin; constructors are invoked simply by treating the name of the class as a function and passing it arguments. Also, the types of variables are typically missing from a declaration with val (final) or var (variable), and Kotlin can usually figure out what the type is. I’ll leave it up to you to make the initial leap from Java world to Kotlin world, and we’ll continue [next time](https://medium.com/@CodingDoug/kotlin-android-a-brass-tacks-experiment-part-2-c67661cfdf5f) with the beginning of a small project to see what Kotlin can uniquely offer Android developers. If you follow me, [@CodingDoug](https://medium.com/@CodingDoug), here on Medium, or [the same on Twitter](https://twitter.com/codingdoug), you’ll get notified as soon as new parts are available in this series! + +""" + +Article( + title = "Kotlin & Android: A Brass Tacks Experiment, Part 1.", + url = "https://medium.com/@CodingDoug/kotlin-android-a-brass-tacks-experiment-part-1-3e5028491bcc#.5c7ixfzdv", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Doug Stevenson", + date = LocalDate.of(2016, 2, 1), + body = body +) diff --git a/app/rss/articles/Kotlin & Android A Brass Tacks Experiment, Part 2.md b/articles/english/2016/Kotlin & Android A Brass Tacks Experiment, Part 2.kts similarity index 94% rename from app/rss/articles/Kotlin & Android A Brass Tacks Experiment, Part 2.md rename to articles/english/2016/Kotlin & Android A Brass Tacks Experiment, Part 2.kts index 4a5b5f40b..fe24156da 100644 --- a/app/rss/articles/Kotlin & Android A Brass Tacks Experiment, Part 2.md +++ b/articles/english/2016/Kotlin & Android A Brass Tacks Experiment, Part 2.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin & Android: A Brass Tacks Experiment, Part 2.' -url: https://medium.com/@CodingDoug/kotlin-android-a-brass-tacks-experiment-part-2-c67661cfdf5f#.x698dgmuz -categories: - - Kotlin - - Android -author: Doug Stevenson -date: Feb 01, 2016 18:09 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ![](https://d262ilb51hltx0.cloudfront.net/max/800/1*UN-S8ELMC2kpHf4tJKfbLQ.png) _Disclaimer: I am a Google employee, but the views expressed in this article are not those of my employer._ @@ -101,3 +100,19 @@ Since the compiler doesn’t know exactly what a TV is yet in the method body of That’s a whole lot of convenience for a few lines of code! If you’re new to Kotlin, you might want to go back and digest this a second time, because some of these concepts can be very foreign to Java programmers. It certainly took me a bit of studying to grok all this new stuff. This is just the beginning of my experiment. There’s still many ways this function could be enhanced and made easier to use. For example, it would be great if we could build entire nested view hierarchies in a single expression. So stay tuned for [the next post in this series](https://medium.com/@CodingDoug/kotlin-android-a-brass-tacks-experiment-part-3-84e65d567a37) to see how we can use Kotlin to do that! + +""" + +Article( + title = "Kotlin & Android: A Brass Tacks Experiment, Part 2.", + url = "https://medium.com/@CodingDoug/kotlin-android-a-brass-tacks-experiment-part-2-c67661cfdf5f#.x698dgmuz", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Doug Stevenson", + date = LocalDate.of(2016, 2, 1), + body = body +) diff --git a/app/rss/articles/Kotlin & Android A Brass Tacks Experiment, Part 3.md b/articles/english/2016/Kotlin & Android A Brass Tacks Experiment, Part 3.kts similarity index 91% rename from app/rss/articles/Kotlin & Android A Brass Tacks Experiment, Part 3.md rename to articles/english/2016/Kotlin & Android A Brass Tacks Experiment, Part 3.kts index b3286d39d..f7feb9b75 100644 --- a/app/rss/articles/Kotlin & Android A Brass Tacks Experiment, Part 3.md +++ b/articles/english/2016/Kotlin & Android A Brass Tacks Experiment, Part 3.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin & Android: A Brass Tacks Experiment, Part 3.' -url: https://medium.com/@CodingDoug/kotlin-android-a-brass-tacks-experiment-part-3-84e65d567a37#.lgtyczp3h -categories: - - Kotlin - - Android -author: Doug Stevenson -date: Feb 16 2016 19:39 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ![](https://d262ilb51hltx0.cloudfront.net/max/800/1*UN-S8ELMC2kpHf4tJKfbLQ.png) _Disclaimer: I am a Google employee, but the views expressed in this article are not those of my employer._ @@ -123,3 +122,19 @@ TypedValue.applyDimension( ``` Super yuck! Stay tuned for [next week’s post](https://medium.com/@CodingDoug/kotlin-android-a-brass-tacks-experiment-part-4-4b7b501fa457) where we’ll make use of another Kotlin language feature to address this problem and further tighten up expressions for view creation using our dynamic duo of v functions. Be sure to follow me here on Medium as [@CodingDoug](https://medium.com/@CodingDoug) or on [Twitter as the same](https://twitter.com/CodingDoug) to stay on top of this series! + +""" + +Article( + title = "Kotlin & Android: A Brass Tacks Experiment, Part 3.", + url = "https://medium.com/@CodingDoug/kotlin-android-a-brass-tacks-experiment-part-3-84e65d567a37#.lgtyczp3h", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Doug Stevenson", + date = LocalDate.of(2016, 2, 16), + body = body +) diff --git a/app/rss/articles/Kotlin & Android A Brass Tacks Experiment, Part 4.md b/articles/english/2016/Kotlin & Android A Brass Tacks Experiment, Part 4.kts similarity index 94% rename from app/rss/articles/Kotlin & Android A Brass Tacks Experiment, Part 4.md rename to articles/english/2016/Kotlin & Android A Brass Tacks Experiment, Part 4.kts index 3c70550fd..90980a95d 100644 --- a/app/rss/articles/Kotlin & Android A Brass Tacks Experiment, Part 4.md +++ b/articles/english/2016/Kotlin & Android A Brass Tacks Experiment, Part 4.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin & Android: A Brass Tacks Experiment, Part 4' -url: https://medium.com/@CodingDoug/kotlin-android-a-brass-tacks-experiment-part-4-4b7b501fa457#.dllcmjpbu -categories: - - Kotlin - - Android -author: Doug Stevenson -date: Feb 04, 2016 21:54 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ![Header Picture](https://cdn-images-1.medium.com/max/800/1*UN-S8ELMC2kpHf4tJKfbLQ.png) *Disclaimer: I am a Google employee, but the views expressed in this article are not those of my employer.* @@ -161,3 +160,19 @@ v { It’s pretty ugly to mix a method call to setPadding() with the synthetic property accessors for layoutParams and text. setPadding() is causing us problems here because it’s not a JavaBeans-style setter — it has more than one argument. Therefore, Kotlin can’t assign a synthetic property to it. But fear not! This can be fixed with clever use of another Kotlin language feature, as we’ll discover in the upcoming part 5. If you want to stay on top of this series, you can follow me both [here on Medium](https://medium.com/@CodingDoug) and [on Twitter](https://twitter.com/CodingDoug) as CodingDoug and get instant notification of future parts! + +""" + +Article( + title = "Kotlin & Android: A Brass Tacks Experiment, Part 4", + url = "https://medium.com/@CodingDoug/kotlin-android-a-brass-tacks-experiment-part-4-4b7b501fa457#.dllcmjpbu", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Doug Stevenson", + date = LocalDate.of(2016, 2, 4), + body = body +) diff --git a/app/rss/articles/Kotlin & Android A Brass Tacks Experiment, Part 5.md b/articles/english/2016/Kotlin & Android A Brass Tacks Experiment, Part 5.kts similarity index 91% rename from app/rss/articles/Kotlin & Android A Brass Tacks Experiment, Part 5.md rename to articles/english/2016/Kotlin & Android A Brass Tacks Experiment, Part 5.kts index 7a84c09b0..2df5648f0 100644 --- a/app/rss/articles/Kotlin & Android A Brass Tacks Experiment, Part 5.md +++ b/articles/english/2016/Kotlin & Android A Brass Tacks Experiment, Part 5.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin & Android: A Brass Tacks Experiment, Part 5' -url: https://medium.com/@CodingDoug/kotlin-android-a-brass-tacks-experiment-part-5-bd79eb9c85d4#.tyblv8pv8 -categories: - - Kotlin - - Android -author: Doug Stevenson -date: Mar 01, 2016 22:14 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ![Header Picture](https://cdn-images-1.medium.com/max/800/1*UN-S8ELMC2kpHf4tJKfbLQ.png) *Disclaimer: I am a Google employee, but the views expressed in this article are not those of my employer.* @@ -79,3 +78,19 @@ If you ever need more from a class API that you don’t control, just add what y There a couple more simple tricks that can be used to tighten up the syntax even more. One trick allows you to get rid of all references to “v” in your view builder expressions, and another will make it easier to specify complicated layout parameters. So check in next time to see how these work! As usual, you can follow me [here on Medium](https://medium.com/@CodingDoug) and also [on Twitter as CodingDoug](https://twitter.com/CodingDoug) to get notified of the next part to this series. I hope you’ve found it useful for learning Kotlin language features as well as learning some new things about Android views. + +""" + +Article( + title = "Kotlin & Android: A Brass Tacks Experiment, Part 5", + url = "https://medium.com/@CodingDoug/kotlin-android-a-brass-tacks-experiment-part-5-bd79eb9c85d4#.tyblv8pv8", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Doug Stevenson", + date = LocalDate.of(2016, 3, 1), + body = body +) diff --git a/app/rss/articles/Kotlin & Android A Brass Tacks Experiment, Part 6.md b/articles/english/2016/Kotlin & Android A Brass Tacks Experiment, Part 6.kts similarity index 94% rename from app/rss/articles/Kotlin & Android A Brass Tacks Experiment, Part 6.md rename to articles/english/2016/Kotlin & Android A Brass Tacks Experiment, Part 6.kts index 0376a37fb..40fac9d7d 100644 --- a/app/rss/articles/Kotlin & Android A Brass Tacks Experiment, Part 6.md +++ b/articles/english/2016/Kotlin & Android A Brass Tacks Experiment, Part 6.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin & Android: A Brass Tacks Experiment, Part 6' -url: https://medium.com/@CodingDoug/kotlin-android-a-brass-tacks-experiment-part-6-49fea0ed3a7#.53axmkcxt -categories: - - Android - - Kotlin -author: Doug Stevenson -date: Mar 8, 2016 20:57 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ![](https://d262ilb51hltx0.cloudfront.net/max/1600/1*UN-S8ELMC2kpHf4tJKfbLQ.png) _Disclaimer: I am a Google employee, but the views expressed in this article are not those of my employer._ @@ -131,3 +130,19 @@ Some readers of this series have pointed out that this method using the type-saf You might be wondering now if it’s better in general to create your Android views programmatically like this in Kotlin than the traditional XML layout resources. Up till now, it certainly seems like a big win to use Kotlin in this way. So, for the next part in this series, I’ll compare the two techniques with each other to see how they compare to each other. Also, I’ll provide a sample project that you can use to easily compare equivalent implementations. Don’t forget that you can follow me [here on Medium](https://medium.com/@CodingDoug) to get [the next part to this series](https://medium.com/p/kotlin-android-a-brass-tacks-experiment-wrap-up-2b37e3ac8957) (in addition to future blogs and series!). And for even faster updates, [follow me on Twitter](https://twitter.com/CodingDoug)! + +""" + +Article( + title = "Kotlin & Android: A Brass Tacks Experiment, Part 6", + url = "https://medium.com/@CodingDoug/kotlin-android-a-brass-tacks-experiment-part-6-49fea0ed3a7#.53axmkcxt", + categories = listOf( + "Android", + "Kotlin" + ), + type = article, + lang = EN, + author = "Doug Stevenson", + date = LocalDate.of(2016, 3, 8), + body = body +) diff --git a/app/rss/articles/Kotlin + Android First Impressions.md b/articles/english/2016/Kotlin + Android First Impressions.kts similarity index 91% rename from app/rss/articles/Kotlin + Android First Impressions.md rename to articles/english/2016/Kotlin + Android First Impressions.kts index ddec366c5..103b7655c 100644 --- a/app/rss/articles/Kotlin + Android First Impressions.md +++ b/articles/english/2016/Kotlin + Android First Impressions.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin + Android First Impressions' -url: https://www.javacodegeeks.com/2016/04/kotlin-android-first-impressions.html -categories: - - Kotlin - - Android -author: Keyhole Software -date: Apr 20, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ I am a huge Android fanboy, and have been one ever since the Nexus One came out. The Android OS has evolved so much and into so many variations. Almost a year ago, one of the Android developers I follow on Twitter was pushing for Kotlin to be the main language for Android. What was more interesting was it was retweeted by an Android Developer from Google. Fast forward to around this time, and the guys behinds IntelliJ announce 1.0 of Kotlin. I decided to see what the big hype was about on Kotlin. Consider this blog as a first impression rather than a review. @@ -66,3 +65,19 @@ So what are the chances that Kotlin will indeed be the official, main go-to when There have been rumors that Google is seeking to stray away from Java for Android development, there have been reports that [Google is looking into adopting Apple’s Swift language](http://thenextweb.com/dd/2016/04/07/google-facebook-uber-swift/). However, that same report also stated that Google isn’t considering Kotlin because of its long build times. With all that said, if you’re an existing Java developer looking into something new or looking into developing Android apps, I would suggest to look into Kotlin and give it a try. + +""" + +Article( + title = "Kotlin + Android First Impressions", + url = "https://www.javacodegeeks.com/2016/04/kotlin-android-first-impressions.html", + categories = listOf( + "Kotlin", + "Android" + ), + type = article, + lang = EN, + author = "Keyhole Software", + date = LocalDate.of(2016, 4, 20), + body = body +) diff --git a/articles/english/2016/Kotlin + Android.kts b/articles/english/2016/Kotlin + Android.kts new file mode 100644 index 000000000..02c1d93a2 --- /dev/null +++ b/articles/english/2016/Kotlin + Android.kts @@ -0,0 +1,22 @@ +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.slides +import link.kotlin.scripts.LanguageCodes.EN +import java.time.LocalDate.of + +val body = """ +[Slides](https://speakerdeck.com/dmytrodanylyk/kotlin-plus-android) +""" + +Article( + title = "Kotlin + Android", + url = "https://speakerdeck.com/dmytrodanylyk/kotlin-plus-android", + categories = listOf( + "Kotlin", + "Android" + ), + type = slides, + lang = EN, + author = "Dmytro Danylyk", + date = of(2016, 4, 21), + body = body +) \ No newline at end of file diff --git a/app/rss/articles/Kotlin + RxJava = Functional Powerhouse.md b/articles/english/2016/Kotlin + RxJava = Functional Powerhouse.kts similarity index 96% rename from app/rss/articles/Kotlin + RxJava = Functional Powerhouse.md rename to articles/english/2016/Kotlin + RxJava = Functional Powerhouse.kts index b59470a61..3e3440464 100644 --- a/app/rss/articles/Kotlin + RxJava = Functional Powerhouse.md +++ b/articles/english/2016/Kotlin + RxJava = Functional Powerhouse.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin + RxJava = Functional Powerhouse' -url: http://tomstechnicalblog.blogspot.com.by/2016/02/kotlin-rxjava-what-rxjava-should-be.html?spref=tw -categories: - - Kotlin -author: Thomas Nield -date: Feb 04, 2016 08:27 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ As a software developer working in a tactical business environment, I'm always looking for ways to do more with less code. Even better, if I can modify and scale code to constantly adapt to business demands then I have to do less code re-writes. Java has been my go-to language as it is practical, scalable, performant, portable, and statically-typed. As I became proficient and took on more ambitious projects, it started to feel cumbersome (and I kept eyeing C# wishfully). Thankfully I found RxJava last year, and reactive programming enabled me to take on tasks that I would hesitate to do before. @@ -225,3 +225,18 @@ We declared a `CodePair` class right inside the `main()` function, and it only e I have only scratched the surface in sharing what Kotlin can do, with or without RxJava. This was not a tutorial but just a quick showcase of how RxJava expresses differently in Kotlin. I hope I have effectively shared my experience and you are curious to check out Kotlin. I know Scala can do quite a bit with RxScala, but Kotlin is different. It really serves folks who need the tactical abilities and simplicity of Python with the scalability and power of Java. When you throw RxJava into the mix with Kotlin, I have found it to be a very rewarding combination. Did I forget to mention that there are no primitives or boxed types either? There are so many features in Kotlin that would be out of scope to post here, [like nullable types](https://kotlinlang.org/docs/reference/null-safety.html) As a sidenote, [Kotlin is supported on Android](https://kotlinlang.org/docs/tutorials/kotlin-android.html). You can also checkout the [RxKotlin](https://github.com/ReactiveX/RxKotlin) library which extends RxJava to take advantage of Kotlin functionalities (such as adding `toObservable()` methods to collections). + +""" + +Article( + title = "Kotlin + RxJava = Functional Powerhouse", + url = "http://tomstechnicalblog.blogspot.com.by/2016/02/kotlin-rxjava-what-rxjava-should-be.html?spref=tw", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Thomas Nield", + date = LocalDate.of(2016, 2, 4), + body = body +) diff --git a/app/rss/articles/Kotlin - 2 Years On.md b/articles/english/2016/Kotlin - 2 Years On.kts similarity index 90% rename from app/rss/articles/Kotlin - 2 Years On.md rename to articles/english/2016/Kotlin - 2 Years On.kts index 1237dcd75..6ad1c15c8 100644 --- a/app/rss/articles/Kotlin - 2 Years On.md +++ b/articles/english/2016/Kotlin - 2 Years On.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin - 2 Years On' -url: https://yobriefca.se/blog/2016/02/24/kotlin-2-years-on/ -categories: - - Kotlin -author: James Hughes -date: Feb 24, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ I [first played](https://yobriefca.se/blog/2012/07/14/kotlin-heres-what-i-think-for-now/) with Kotlin back in 2012, I've written some Android apps with and without it and generally played around with it. Since the [release of Kotlin 1.0](http://blog.jetbrains.com/kotlin/2016/02/kotlin-1-0-released-pragmatic-language-for-jvm-and-android/) a few days ago I've decided to jump back into it and see if my original views still hold up. > Herein lies opinion of the personal kind. Proceed with an open mind. @@ -23,3 +23,18 @@ I'd also proffer that it has an easier transition from Java to Kotlin than it is You could ask "but why not one of the other many languages available on the JVM?" and that would be fair. Many JVM languages haven't seen a great deal of traction or remain relatively niche but I think Kotlin is much better placed. It's more "general purpose" than a lot of the alt languages which means it will map better to current practises. It's closer to Java and/or Scala than other languages, it strikes the right balance around the type system with features like type inference and enhanced generics and it doesn't hurt that Jetbrains; a major player in the JVM world; is heavily invested in Kotlins future. In the two years since I started playing with Kotlin it has aged well. It resisted adding a plethora of features for the sake of it and instead created a core syntax and feature set that allows developers enough wiggle room for being creative without turning them into Wizards of Arcane DSLs. This is a sweet spot for me when it comes to building and supporting a service over many years as it avoids the unnecessary pain that comes from the extreme ends of spectrum that Java and Scala tend to reside. Of course this doesn't mean it's perfect, nothing is. You're still adding another language to a project and taking on the associated baggage that comes with it like tooling differences and additional upskilling. Its not suddenly going to make your organisation move the JVM if they aren't already there. It's also not going to fix all your problems - bad architecture will remain bad architecture and bad patterns will remain bad patterns. However, with that said, **I believe Kotlin will reduce enough of the friction of general software development and maintenance on the JVM to make it worth the investment**. + +""" + +Article( + title = "Kotlin - 2 Years On", + url = "https://yobriefca.se/blog/2016/02/24/kotlin-2-years-on/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "James Hughes", + date = LocalDate.of(2016, 2, 24), + body = body +) diff --git a/app/rss/articles/Kotlin - Love at first line.md b/articles/english/2016/Kotlin - Love at first line.kts similarity index 94% rename from app/rss/articles/Kotlin - Love at first line.md rename to articles/english/2016/Kotlin - Love at first line.kts index a45a04efe..65c099980 100644 --- a/app/rss/articles/Kotlin - Love at first line.md +++ b/articles/english/2016/Kotlin - Love at first line.kts @@ -1,13 +1,11 @@ ---- -title: Kotlin — Love at first line -url: https://medium.com/@dime.kotevski/kotlin-love-at-first-line-7127befe240f#.p5hp6dxlh -categories: - - Anko - - Android - - Kotlin -author: Dimitar Kotevski -date: Feb 21, 2016 12:13 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ## Kotlin — Love at first line Kotlin 1.0 has been [released](https://blog.jetbrains.com/kotlin/2016/02/kotlin-1-0-released-pragmatic-language-for-jvm-and-android/) @@ -233,3 +231,20 @@ val parser = rowParser { Task(id, name, priority, completed) } ``` + +""" + +Article( + title = "Kotlin — Love at first line", + url = "https://medium.com/@dime.kotevski/kotlin-love-at-first-line-7127befe240f#.p5hp6dxlh", + categories = listOf( + "Anko", + "Android", + "Kotlin" + ), + type = article, + lang = EN, + author = "Dimitar Kotevski", + date = LocalDate.of(2016, 2, 21), + body = body +) diff --git a/articles/english/2016/Kotlin - Ready for Production.kts b/articles/english/2016/Kotlin - Ready for Production.kts new file mode 100644 index 000000000..ff679f578 --- /dev/null +++ b/articles/english/2016/Kotlin - Ready for Production.kts @@ -0,0 +1,28 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ + + +Kotlin - Ready for Production : Hadi Hariri from JavaZone on Vimeo. + +[Transcript](https://realm.io/news/gotocph-hadi-hariri-kotlin-ready-for-production/) + +""" + +Article( + title = "Kotlin - Ready for Production", + url = "https://vimeo.com/181814363", + categories = listOf( + "Kotlin" + ), + type = video, + lang = EN, + author = "Hadi Hariri", + date = LocalDate.of(2016, 9, 7), + body = body +) diff --git a/app/rss/articles/Kotlin 1.0 Release Candidate is Out!.md b/articles/english/2016/Kotlin 1.0 Release Candidate is Out!.kts similarity index 92% rename from app/rss/articles/Kotlin 1.0 Release Candidate is Out!.md rename to articles/english/2016/Kotlin 1.0 Release Candidate is Out!.kts index df8d244eb..881035573 100644 --- a/app/rss/articles/Kotlin 1.0 Release Candidate is Out!.md +++ b/articles/english/2016/Kotlin 1.0 Release Candidate is Out!.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin 1.0 Release Candidate is Out!' -url: http://blog.jetbrains.com/kotlin/2016/02/kotlin-1-0-release-candidate-is-out/ -categories: - - Kotlin - - Release -author: Andrey Breslav -date: Feb 04, 2016 14:39 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Finally, Kotlin has graduated the Beta and we are happy to present the Release Candidate Build! **NOTE**: as we [announced earlier](http://blog.jetbrains.com/kotlin/2015/12/kotlin-1-0-beta-4-is-out/), **RC requires all code to be recompiled** to make sure no code compiled with older versions is kept around (please recompile even if you were on the EAP version!). @@ -129,3 +128,19 @@ Sorry for the inconvenience. The final release is approaching, meanwhile — have a nice Kotlin! ![:)](http://i2.wp.com/blog.jetbrains.com/kotlin/wp-includes/images/smilies/simple-smile.png?w=640) _P.S. See the discussions on [Hacker News](https://news.ycombinator.com/item?id=11034273) and [Reddit](https://www.reddit.com/r/programming/comments/445jih/jvm_languages_news_kotlin_10_release_candidate_is/)_. + +""" + +Article( + title = "Kotlin 1.0 Release Candidate is Out!", + url = "http://blog.jetbrains.com/kotlin/2016/02/kotlin-1-0-release-candidate-is-out/", + categories = listOf( + "Kotlin", + "Release" + ), + type = article, + lang = EN, + author = "Andrey Breslav", + date = LocalDate.of(2016, 2, 4), + body = body +) diff --git a/app/rss/articles/Kotlin 1.0 Released Pragmatic Language for JVM and Android.md b/articles/english/2016/Kotlin 1.0 Released Pragmatic Language for JVM and Android.kts similarity index 94% rename from app/rss/articles/Kotlin 1.0 Released Pragmatic Language for JVM and Android.md rename to articles/english/2016/Kotlin 1.0 Released Pragmatic Language for JVM and Android.kts index 4875116cf..3c0c2bcf0 100644 --- a/app/rss/articles/Kotlin 1.0 Released Pragmatic Language for JVM and Android.md +++ b/articles/english/2016/Kotlin 1.0 Released Pragmatic Language for JVM and Android.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin 1.0 Released: Pragmatic Language for JVM and Android' -url: http://blog.jetbrains.com/kotlin/2016/02/kotlin-1-0-released-pragmatic-language-for-jvm-and-android/ -categories: - - JetBrains - - Kotlin -author: Andrey Breslav -date: Feb 15, 2016 12:57 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ This is it. 1.0 is here! It’s been a long and exciting road but we’ve finally reached the first big 1.0, and we’re celebrating the release by also presenting you with the new logo: @@ -121,4 +120,19 @@ Once again, **we want to thank everyone**. We couldn’t have done this without Have a nice Kotlin! **Now** :) -P.S. See discussions on [Reddit](https://www.reddit.com/r/programming/comments/45wcnd/kotlin_10_released_pragmatic_language_for_jvm_and/) and [Hacker News](https://news.ycombinator.com/item?id=11103087) \ No newline at end of file +P.S. See discussions on [Reddit](https://www.reddit.com/r/programming/comments/45wcnd/kotlin_10_released_pragmatic_language_for_jvm_and/) and [Hacker News](https://news.ycombinator.com/item?id=11103087) +""" + +Article( + title = "Kotlin 1.0 Released: Pragmatic Language for JVM and Android", + url = "http://blog.jetbrains.com/kotlin/2016/02/kotlin-1-0-released-pragmatic-language-for-jvm-and-android/", + categories = listOf( + "JetBrains", + "Kotlin" + ), + type = article, + lang = EN, + author = "Andrey Breslav", + date = LocalDate.of(2016, 2, 15), + body = body +) diff --git a/app/rss/articles/Kotlin 1.0 The good, the bad and the evident.md b/articles/english/2016/Kotlin 1.0 The good, the bad and the evident.kts similarity index 90% rename from app/rss/articles/Kotlin 1.0 The good, the bad and the evident.md rename to articles/english/2016/Kotlin 1.0 The good, the bad and the evident.kts index 8a684a02f..5d2241798 100644 --- a/app/rss/articles/Kotlin 1.0 The good, the bad and the evident.md +++ b/articles/english/2016/Kotlin 1.0 The good, the bad and the evident.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin 1.0: The good, the bad and the evident.' -url: https://jaxenter.com/kotlin-1-0-the-good-the-bad-and-the-evidence-124041.html -categories: - - Kotlin - - Review -author: Gabriela Motroc -date: Feb 16, 2016 17:11 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Kotlin 1.0 is a programming language made by JetBrains, the creator of the popular IntelliJ IDEA development environment. This programming language for the JVM and Android focuses on safety, interoperability, clarity and tooling support and combines OO and functional features. @@ -31,3 +30,19 @@ As Breslav remarked in the official announcement, the team took their time befor Hearn also criticized the size of the community, which was smaller at that time. However, according to Breslav, over 11.000 people were using Kotlin last month and almost 5.000 earlier this month. Plus, there is a growing list of companies using Kotlin, including Expedia and Prezi. Language docs and tutorials can be found on the [official website](https://kotlinlang.org/). + +""" + +Article( + title = "Kotlin 1.0: The good, the bad and the evident.", + url = "https://jaxenter.com/kotlin-1-0-the-good-the-bad-and-the-evidence-124041.html", + categories = listOf( + "Kotlin", + "Review" + ), + type = article, + lang = EN, + author = "Gabriela Motroc", + date = LocalDate.of(2016, 2, 16), + body = body +) diff --git a/app/rss/articles/Kotlin 1.0 is finally released!.md b/articles/english/2016/Kotlin 1.0 is finally released!.kts similarity index 67% rename from app/rss/articles/Kotlin 1.0 is finally released!.md rename to articles/english/2016/Kotlin 1.0 is finally released!.kts index 8702eeba3..a0c9f2335 100644 --- a/app/rss/articles/Kotlin 1.0 is finally released!.md +++ b/articles/english/2016/Kotlin 1.0 is finally released!.kts @@ -1,15 +1,29 @@ ---- -title: 'Kotlin 1.0 is finally released!' -url: https://programmingideaswithjake.wordpress.com/2016/02/22/kotlin-1-0-is-finally-released/ -categories: - - Kotlin -author: Jacob Zimmerman -date: Feb 23, 2016 02:09 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Last week, there was a wonderful announcement: (see title of post)! No more milestones, betas, or release candidates required! Obviously, release candidates for later versions will be coming out, but now you don’t have to worry about them if you don’t want to. If you’re like me and were waiting until release before trying to convince company management to consider Kotlin as a development option, now is the time to speak out! In celebration of Kotlin’s proper release, I will be doing a short series of articles describing some of my favorite things about the language. Starting this weekend with a quick overview of smaller features that I don’t have a ton to say about. I’m calling it Kotlin Month, and I only slightly regret that the first one will be in one month while the others are in the next month :P -Also, you may notice that there’s now a page at the top pertaining to Kotlin articles. This won’t be much more useful than selecting the Kotlin tag from the tag cloud to the right, but it will at least stay there, even if Kotlin posts dwindle far enough to remove the tag from the cloud. \ No newline at end of file +Also, you may notice that there’s now a page at the top pertaining to Kotlin articles. This won’t be much more useful than selecting the Kotlin tag from the tag cloud to the right, but it will at least stay there, even if Kotlin posts dwindle far enough to remove the tag from the cloud. +""" + +Article( + title = "Kotlin 1.0 is finally released!", + url = "https://programmingideaswithjake.wordpress.com/2016/02/22/kotlin-1-0-is-finally-released/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Jacob Zimmerman", + date = LocalDate.of(2016, 2, 23), + body = body +) diff --git a/app/rss/articles/Kotlin 1.0.1 is Here.md b/articles/english/2016/Kotlin 1.0.1 is Here.kts similarity index 73% rename from app/rss/articles/Kotlin 1.0.1 is Here.md rename to articles/english/2016/Kotlin 1.0.1 is Here.kts index 6d4147a10..937094b88 100644 --- a/app/rss/articles/Kotlin 1.0.1 is Here.md +++ b/articles/english/2016/Kotlin 1.0.1 is Here.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin 1.0.1 is Here!' -url: http://blog.jetbrains.com/kotlin/2016/03/kotlin-1-0-1-is-here/ -categories: - - Kotlin - - Release -author: Andrey Breslav -date: Mar 16, 2016 19:54 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ It’s been a month since we released Kotlin 1.0, and while our user base roughly doubled during this time, we prepared the first bugfix update. Kotlin 1.0.1 starts a series of 1.0.X versions delivering safe bug fixes and performance improvements to the language (as well as other parts of the project), and new features to our tools and integrations. This time it’s only relatively small IDE features, but bigger things are on the horizon for 1.0.2 and later. @@ -26,3 +25,19 @@ Please find the full change log [here](https://github.com/JetBrains/kotlin/blob/ * and 39 assorted fixes in the IDE. We thank the participants of the EAP who tried the preview builds and reported feedback. Please join the [EAP](https://discuss.kotlinlang.org/t/kotlin-1-0-1-eap/1525) and let’s make Kotlin better together! + +""" + +Article( + title = "Kotlin 1.0.1 is Here!", + url = "http://blog.jetbrains.com/kotlin/2016/03/kotlin-1-0-1-is-here/", + categories = listOf( + "Kotlin", + "Release" + ), + type = article, + lang = EN, + author = "Andrey Breslav", + date = LocalDate.of(2016, 3, 16), + body = body +) diff --git a/app/rss/articles/Kotlin 1.0.2 is Here.md b/articles/english/2016/Kotlin 1.0.2 is Here.kts similarity index 91% rename from app/rss/articles/Kotlin 1.0.2 is Here.md rename to articles/english/2016/Kotlin 1.0.2 is Here.kts index 2d05c3e39..24efa1b71 100644 --- a/app/rss/articles/Kotlin 1.0.2 is Here.md +++ b/articles/english/2016/Kotlin 1.0.2 is Here.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin 1.0.2 is Here' -url: http://blog.jetbrains.com/kotlin/2016/05/kotlin-1-0-2-is-here/ -categories: - - Kotlin - - Release -author: Dmitry Jemerov -date: May 13, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ We’re happy to announce the release of Kotlin 1.0.2, the second bugfix and tooling update for Kotlin. In addition to compiler and language bugfixes, Kotlin 1.0.2 adds a number of major features to the IDE and the build tools. ### Incremental Compilation in Gradle and the IDE @@ -64,3 +63,19 @@ You can see the full list of bugfixes and changes to the compiler, standard libr While working on the release, we received a lot of valuable feedback from the users of the [Early Access Preview builds](https://discuss.kotlinlang.org/t/kotlin-1-0-2-eap/1581). We’re really grateful to everyone who has provided feedback, and we welcome you to join the EAP program for future updates. As usual, if you run into any problems with the new release, you’re welcome to ask for help on the [forums](https://discuss.kotlinlang.org/), on Slack (get an invite [here](http://kotlinslackin.herokuapp.com/)), or to report issues in the [issue tracker](https://youtrack.jetbrains.com/issues/KT). + +""" + +Article( + title = "Kotlin 1.0.2 is Here", + url = "http://blog.jetbrains.com/kotlin/2016/05/kotlin-1-0-2-is-here/", + categories = listOf( + "Kotlin", + "Release" + ), + type = article, + lang = EN, + author = "Dmitry Jemerov", + date = LocalDate.of(2016, 5, 13), + body = body +) diff --git a/app/rss/articles/Kotlin 1.0.3 EAP.md b/articles/english/2016/Kotlin 1.0.3 EAP.kts similarity index 69% rename from app/rss/articles/Kotlin 1.0.3 EAP.md rename to articles/english/2016/Kotlin 1.0.3 EAP.kts index d3a83d0a1..f459c7ecd 100644 --- a/app/rss/articles/Kotlin 1.0.3 EAP.md +++ b/articles/english/2016/Kotlin 1.0.3 EAP.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin 1.0.3 EAP' -url: https://discuss.kotlinlang.org/t/kotlin-1-0-3-eap/1729 -categories: - - Kotlin -author: Pavel Talanov -date: Jun 8, 2016 21:57 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ We're starting Kotlin `1.0.3` EAP. ### What's new @@ -26,3 +26,18 @@ To use the new version of the Kotlin plugin for IntelliJ IDEA, configure Early A Build number is `1.0.3-eap-30` Please do provide feedback and report any issues to our [issue tracker](https://youtrack.jetbrains.com/issues/KT#newissue) (please specify your plugin version and IDE version) + +""" + +Article( + title = "Kotlin 1.0.3 EAP", + url = "https://discuss.kotlinlang.org/t/kotlin-1-0-3-eap/1729", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Pavel Talanov", + date = LocalDate.of(2016, 6, 8), + body = body +) diff --git a/app/rss/articles/Kotlin 1.0.3 Is Here!.md b/articles/english/2016/Kotlin 1.0.3 Is Here!.kts similarity index 88% rename from app/rss/articles/Kotlin 1.0.3 Is Here!.md rename to articles/english/2016/Kotlin 1.0.3 Is Here!.kts index 7bc02f4c4..27b9bbf19 100644 --- a/app/rss/articles/Kotlin 1.0.3 Is Here!.md +++ b/articles/english/2016/Kotlin 1.0.3 Is Here!.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin 1.0.3 Is Here!' -url: https://blog.jetbrains.com/kotlin/2016/06/kotlin-1-0-3-is-here/ -categories: - - Kotlin -author: Roman Belov -date: Jun 30, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ We are delighted to present **Kotlin 1.0.3**. This update is not full of brand new and shiny features, it is more about bug fixes, tooling improvements and performance boosts. That’s why you’ll like it ![😉](https://s.w.org/images/core/emoji/72x72/1f609.png) Take a look at the full [change log](https://github.com/JetBrains/kotlin/blob/1.0.3/ChangeLog.md) and issues stats by subsystem: ![Kotlin 1.0.3. Fixed issues](https://d3nmt5vlzunoa1.cloudfront.net/kotlin/files/2016/06/Pasted-image-at-2016_06_28-07_25-PM.png) @@ -52,3 +52,18 @@ To update the plugin, use Tools | Kotlin | Configure Kotlin Plugin Updates and p As usual, if you run into any problems with the new release, you’re welcome to ask for help on the [forums](https://discuss.kotlinlang.org/), on Slack (get an invite [here](http://kotlinslackin.herokuapp.com/)), or to report issues in the [issue tracker](https://youtrack.jetbrains.com/issues/KT). Let’s Kotlin! + +""" + +Article( + title = "Kotlin 1.0.3 Is Here!", + url = "https://blog.jetbrains.com/kotlin/2016/06/kotlin-1-0-3-is-here/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Roman Belov", + date = LocalDate.of(2016, 6, 30), + body = body +) diff --git a/app/rss/articles/Kotlin 1.0.4 is here.md b/articles/english/2016/Kotlin 1.0.4 is here.kts similarity index 91% rename from app/rss/articles/Kotlin 1.0.4 is here.md rename to articles/english/2016/Kotlin 1.0.4 is here.kts index 5bcf0282d..d465dd67a 100644 --- a/app/rss/articles/Kotlin 1.0.4 is here.md +++ b/articles/english/2016/Kotlin 1.0.4 is here.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin 1.0.4 is here' -url: https://blog.jetbrains.com/kotlin/2016/09/kotlin-1-0-4-is-here/ -categories: - - Kotlin - - Release -author: Dmitry Jemerov -date: Sep 22, 2016 01:28 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ We’re happy to announce the release of a new bugfix and tooling update of Kotlin, version **1.0.4**. This version brings many improvements related to the IDE and build tools, as well as JavaScript support. Once again we’d like to thank our external contributors who implemented some of the features in this release, [**Kirill Rakhman**](https://github.com/cypressious) and [**Yoshinori Isogai**](https://github.com/shiraji), as well as everyone who tried the EAP builds of 1.0.4 and sent us feedback. @@ -106,3 +105,19 @@ To update the plugin, use Tools | Kotlin | Configure Kotlin Plugin Updates and p As usual, if you run into any problems with the new release, you’re welcome to ask for help on the [forums](https://discuss.kotlinlang.org/), on Slack (get an invite [here](http://kotlinslackin.herokuapp.com/)), or to report issues in the [issue tracker](https://youtrack.jetbrains.com/issues/KT). Let’s Kotlin! + +""" + +Article( + title = "Kotlin 1.0.4 is here", + url = "https://blog.jetbrains.com/kotlin/2016/09/kotlin-1-0-4-is-here/", + categories = listOf( + "Kotlin", + "Release" + ), + type = article, + lang = EN, + author = "Dmitry Jemerov", + date = LocalDate.of(2016, 9, 22), + body = body +) diff --git a/app/rss/articles/Kotlin 1.0.5 is here.md b/articles/english/2016/Kotlin 1.0.5 is here.kts similarity index 90% rename from app/rss/articles/Kotlin 1.0.5 is here.md rename to articles/english/2016/Kotlin 1.0.5 is here.kts index c71c5d5e5..c64dd51c5 100644 --- a/app/rss/articles/Kotlin 1.0.5 is here.md +++ b/articles/english/2016/Kotlin 1.0.5 is here.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin 1.0.5 is here' -url: https://blog.jetbrains.com/kotlin/2016/11/kotlin-1-0-5-is-here/ -categories: - - Kotlin -author: Dmitry Jemerov -date: Nov 8, 2016 10:55 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ We’re happy to announce that we’ve just released **Kotlin 1.0.5**, which continues the series of bugfix and tooling updates for Kotlin 1.0. We’d like to thank our external contributors whose pull requests were included in this release: [Kirill Rakhman](https://github.com/cypressious), [Vladislav Golub](https://github.com/ensirius), [Vsevolod Tolstopyatov](https://github.com/qwwdfsad), [Yoshinori Isogai](https://github.com/shiraji), [takahirom](https://github.com/takahirom) and [gitreelike](https://github.com/gitreelike). Thanks to everyone who tried the EAP builds and sent us feedback, too! @@ -65,3 +65,18 @@ To update the plugin, use Tools | Kotlin | Configure Kotlin Plugin Updates and p As usual, if you run into any problems with the new release, you’re welcome to ask for help on the [forums](https://discuss.kotlinlang.org/), on Slack (get an invite [here](http://kotlinslackin.herokuapp.com/)), or to report issues in the [issue tracker](https://youtrack.jetbrains.com/issues/KT). Let’s Kotlin! + +""" + +Article( + title = "Kotlin 1.0.5 is here", + url = "https://blog.jetbrains.com/kotlin/2016/11/kotlin-1-0-5-is-here/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Dmitry Jemerov", + date = LocalDate.of(2016, 11, 8), + body = body +) diff --git a/app/rss/articles/Kotlin 1.0.6 is here!.md b/articles/english/2016/Kotlin 1.0.6 is here!.kts similarity index 88% rename from app/rss/articles/Kotlin 1.0.6 is here!.md rename to articles/english/2016/Kotlin 1.0.6 is here!.kts index 9c06c56d5..ae806fce2 100644 --- a/app/rss/articles/Kotlin 1.0.6 is here!.md +++ b/articles/english/2016/Kotlin 1.0.6 is here!.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin 1.0.6 is here!' -url: https://blog.jetbrains.com/kotlin/2016/12/kotlin-1-0-6-is-here/ -categories: - - Kotlin -author: Yan Zhulanow -date: Dec 27, 2016 11:29 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ We are happy to announce the release of Kotlin 1.0.6, the new bugfix and tooling update for Kotlin 1.0. This version brings a significant number of improvements related to the IDE plugin and Android support. We’d like to thank our external contributors whose pull requests are included in this release: [Kirill Rakhman](https://github.com/cypressious) and [Yoshinori Isogai](https://github.com/shiraji). We also want to thank everyone of our EAP users for their feedback. It is really valuable for us, as always. @@ -57,7 +57,7 @@ We provide all-open plugin support both for Gradle and Maven, as well as the IDE ```gradle buildscript { dependencies { - classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version" + classpath "org.jetbrains.kotlin:kotlin-allopen:${"$"}kotlin_version" } } @@ -83,7 +83,7 @@ We also provide the “kotlin-spring” plugin that already has all required ann ```gradle buildscript { dependencies { - classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version" + classpath "org.jetbrains.kotlin:kotlin-allopen:${"$"}kotlin_version" } } @@ -98,7 +98,7 @@ Of course, you can use both `kotlin-allopen` and `kotlin-spring` in the same pro kotlin-maven-plugin org.jetbrains.kotlin - ${kotlin.version} + ${"$"}{kotlin.version} @@ -117,7 +117,7 @@ Of course, you can use both `kotlin-allopen` and `kotlin-spring` in the same pro org.jetbrains.kotlin kotlin-maven-allopen - ${kotlin.version} + ${"$"}{kotlin.version} @@ -134,7 +134,7 @@ The usage is pretty similar to all-open. ```gradle buildscript { dependencies { - classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version" + classpath "org.jetbrains.kotlin:kotlin-noarg:${"$"}kotlin_version" } } @@ -152,7 +152,7 @@ noArg { kotlin-maven-plugin org.jetbrains.kotlin - ${kotlin.version} + ${"$"}{kotlin.version} @@ -169,7 +169,7 @@ noArg { org.jetbrains.kotlin kotlin-maven-noarg - ${kotlin.version} + ${"$"}{kotlin.version} @@ -182,3 +182,18 @@ To update the IDEA plugin, use Tools | Kotlin | Configure Kotlin Plugin Updates As usual, if you run into any problems with the new release, you’re welcome to ask for help on the [forums](https://discuss.kotlinlang.org/), on Slack (get an invite [here](http://kotlinslackin.herokuapp.com/)), or to report issues in the [issue tracker](https://youtrack.jetbrains.com/issues/KT). Let’s Kotlin! + +""" + +Article( + title = "Kotlin 1.0.6 is here!", + url = "https://blog.jetbrains.com/kotlin/2016/12/kotlin-1-0-6-is-here/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Yan Zhulanow", + date = LocalDate.of(2016, 12, 27), + body = body +) diff --git a/app/rss/articles/Kotlin 1.1-M02 is here!.md b/articles/english/2016/Kotlin 1.1-M02 is here!.kts similarity index 91% rename from app/rss/articles/Kotlin 1.1-M02 is here!.md rename to articles/english/2016/Kotlin 1.1-M02 is here!.kts index 32021cb95..ee0774604 100644 --- a/app/rss/articles/Kotlin 1.1-M02 is here!.md +++ b/articles/english/2016/Kotlin 1.1-M02 is here!.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin 1.1-M02 is here!' -url: https://blog.jetbrains.com/kotlin/2016/10/kotlin-1-1-m02-is-here/ -categories: - - Kotlin -author: Denis Zharkov -date: Oct 20, 2016 01:10 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ We’re happy to announce the second milestone release of Kotlin 1.1. This release brings one long-awaited new language feature, **destructuring in lambdas**, as well as many improvements to features introduced in 1.1-M1, including type aliases, coroutines and bound references. The new release also includes all tooling features introduced in Kotlin 1.0.4 and 1.0.5-eap-66, and is fully compatible with IntelliJ IDEA 2016.3 EAP and Android Studio 2.2. As with Kotlin 1.1-M01, we give **no backward compatibility guarantees** for new language and library features. Anything introduced in milestone releases of 1.1 is **subject to change** before the final 1.1 release. @@ -64,3 +64,18 @@ In addition to that, we’re working to make more of the Kotlin API available in If you are using [kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) library please use updated version 0.1-alpha-2, it’s almost the same, but it’s recompiled with 1.1-M02 compiler. You can follow the updates in the [readme file](https://github.com/Kotlin/kotlinx.coroutines/blob/master/README.md). Have a nice Kotlin! + +""" + +Article( + title = "Kotlin 1.1-M02 is here!", + url = "https://blog.jetbrains.com/kotlin/2016/10/kotlin-1-1-m02-is-here/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Denis Zharkov", + date = LocalDate.of(2016, 10, 20), + body = body +) diff --git a/app/rss/articles/Kotlin 1.1-M03 is here!.md b/articles/english/2016/Kotlin 1.1-M03 is here!.kts similarity index 91% rename from app/rss/articles/Kotlin 1.1-M03 is here!.md rename to articles/english/2016/Kotlin 1.1-M03 is here!.kts index e878baf44..7743f6d78 100644 --- a/app/rss/articles/Kotlin 1.1-M03 is here!.md +++ b/articles/english/2016/Kotlin 1.1-M03 is here!.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin 1.1-M03 is here!' -url: https://blog.jetbrains.com/kotlin/2016/11/kotlin-1-1-m03-is-here/ -categories: - - Kotlin -author: Ilya Chernikov -date: Nov 24, 2016 03:47 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ We are pleased to announce the third milestone of the upcoming Kotlin 1.1. This release brings new language features as well as improvements and fixes in the JavaScript backend, compiler and IDEA plugin. The new release also includes all tooling features introduced in Kotlin 1.0.5, and is compatible with IntelliJ IDEA 2016.3 EAP and Android Studio 2.2 and 2.3. As with other milestone releases, we give **no backwards compatibility guarantees** for new language and library features. Anything introduced in milestone releases of 1.1 is **subject to change** before the final 1.1 release. @@ -102,3 +102,18 @@ JavaScript backend now generates more statically checkable code, which is friend **In IntelliJ IDEA:** Go to _Tools → Kotlin → Configure Kotlin Plugin Updates_, then select “Early Access Preview 1.1” in the _Update channel_ drop-down list, then press _Check for updates_. Drive to Kotlin! + +""" + +Article( + title = "Kotlin 1.1-M03 is here!", + url = "https://blog.jetbrains.com/kotlin/2016/11/kotlin-1-1-m03-is-here/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Ilya Chernikov", + date = LocalDate.of(2016, 11, 24), + body = body +) diff --git a/app/rss/articles/Kotlin 1.1-M04 is here!.md b/articles/english/2016/Kotlin 1.1-M04 is here!.kts similarity index 97% rename from app/rss/articles/Kotlin 1.1-M04 is here!.md rename to articles/english/2016/Kotlin 1.1-M04 is here!.kts index c02612a40..71b1a9c03 100644 --- a/app/rss/articles/Kotlin 1.1-M04 is here!.md +++ b/articles/english/2016/Kotlin 1.1-M04 is here!.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin 1.1-M04 is here!' -url: https://blog.jetbrains.com/kotlin/2016/12/kotlin-1-1-m04-is-here/ -categories: - - Kotlin -author: Ilya Chernikov -date: Dec 21, 2016 12:30 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ We are glad to present you the fourth milestone of the upcoming Kotlin release. We’re wrapping up the development of the version 1.1, with the final release planned for Q1 2017. Most features are already in decent shape, so it is a good time to try it and give us your feedback. We will appreciate it a lot! As with other milestone releases, we give **no backwards compatibility guarantees** for new language and library features. Anything introduced in milestone releases of 1.1 is **subject to change** before the final 1.1 release. @@ -230,3 +230,18 @@ The **command-line compiler** can be downloaded from the [Github release page](h **On [try.kotlinlang.org](http://try.kotlinlang.org)**. Use the drop-down list at the bottom-right corner to change the compiler version to 1.1-M04. Merry Kotlin! + +""" + +Article( + title = "Kotlin 1.1-M04 is here!", + url = "https://blog.jetbrains.com/kotlin/2016/12/kotlin-1-1-m04-is-here/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Ilya Chernikov", + date = LocalDate.of(2016, 12, 21), + body = body +) diff --git a/app/rss/articles/Kotlin Coding.md b/articles/english/2016/Kotlin Coding.kts similarity index 93% rename from app/rss/articles/Kotlin Coding.md rename to articles/english/2016/Kotlin Coding.kts index d235c684a..41fd02240 100644 --- a/app/rss/articles/Kotlin Coding.md +++ b/articles/english/2016/Kotlin Coding.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin Coding' -url: http://cirorizzo.net/2016/02/03/kotlin-code/ -categories: - - Android - - Kotlin -author: Ciro Rizzo -date: Feb 03, 2016 00:38 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ###### _Part 2_ As mentioned in the previous [post](http://www.cirorizzo.net/2016/01/23/kotlin-at-glance/), Kotlin representing a better way to program on the Android platform and the better companion for it is [Android Studio](http://developer.android.com/sdk/index.html). @@ -192,3 +191,19 @@ Well, I know you're a developer (_stubborn skeptical people_) ;) Let's go further on this thing improving our project step by step later on... See you soon on the next post! + +""" + +Article( + title = "Kotlin Coding", + url = "http://cirorizzo.net/2016/02/03/kotlin-code/", + categories = listOf( + "Android", + "Kotlin" + ), + type = article, + lang = EN, + author = "Ciro Rizzo", + date = LocalDate.of(2016, 2, 3), + body = body +) diff --git a/app/rss/articles/Kotlin Configuration Scripts - An Introduction.md b/articles/english/2016/Kotlin Configuration Scripts - An Introduction.kts similarity index 94% rename from app/rss/articles/Kotlin Configuration Scripts - An Introduction.md rename to articles/english/2016/Kotlin Configuration Scripts - An Introduction.kts index d15259bd1..9fa9048dc 100644 --- a/app/rss/articles/Kotlin Configuration Scripts - An Introduction.md +++ b/articles/english/2016/Kotlin Configuration Scripts - An Introduction.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin Configuration Scripts: An Introduction' -url: https://blog.jetbrains.com/teamcity/2016/11/kotlin-configuration-scripts-an-introduction/ -categories: - - Kotlin - - TeamCity -author: Hadi Hariri -date: Nov 18, 2016 11:15 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ This is a five part series on working with Kotlin to create Configuration Scripts for TeamCity. 1. **An Introduction to Configuration Scripts** @@ -114,3 +113,19 @@ Finally, we have the actual meat of where the build happens. This object defines In this first part we’ve seen the components of a TeamCity configuration script. In the next part we’ll dive a little deeper into the DSL, modify the script, and see some of the benefits that Kotlin and IntelliJ IDEA already start providing us in terms of guidance via code assistants. [1] While enabling [version control storage for settings](https://confluence.jetbrains.com/display/TCD10/Storing+Project+Settings+in+Version+Control) has been available since version 9, it was only available in XML format. TeamCity 10 brings Kotlin to this. + +""" + +Article( + title = "Kotlin Configuration Scripts: An Introduction", + url = "https://blog.jetbrains.com/teamcity/2016/11/kotlin-configuration-scripts-an-introduction/", + categories = listOf( + "Kotlin", + "TeamCity" + ), + type = article, + lang = EN, + author = "Hadi Hariri", + date = LocalDate.of(2016, 11, 18), + body = body +) diff --git a/app/rss/articles/Kotlin Digest 2016.Q1.md b/articles/english/2016/Kotlin Digest 2016.Q1.kts similarity index 94% rename from app/rss/articles/Kotlin Digest 2016.Q1.md rename to articles/english/2016/Kotlin Digest 2016.Q1.kts index 15bd4a9ae..799a37cdd 100644 --- a/app/rss/articles/Kotlin Digest 2016.Q1.md +++ b/articles/english/2016/Kotlin Digest 2016.Q1.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin Digest 2016.Q1' -url: http://blog.jetbrains.com/kotlin/2016/04/kotlin-digest-2016-q1/ -categories: - - Kotlin - - Digest -author: Roman Belov -date: Apr 06, 2016 15:37 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Welcome the Kotlin Digest of Q1 2016. It was in this quarter that Kotlin 1.0 was released, and naturally the number of articles and coverage received has substantially increased. We want to thank everyone for their contributions, and highlight some of the most notable articles and blog posts. @@ -86,3 +85,19 @@ By the way, you can [join us on slack](http://kotlinslackin.herokuapp.com/) and * [Kotlin Coding](http://www.cirorizzo.net/2016/02/03/kotlin-code/) * Building a Kotlin project ([part 1](http://www.cirorizzo.net/2016/03/04/building-a-kotlin-project/) and [part 2](http://www.cirorizzo.net/2016/03/04/building-a-kotlin-project-2/)) + +""" + +Article( + title = "Kotlin Digest 2016.Q1", + url = "http://blog.jetbrains.com/kotlin/2016/04/kotlin-digest-2016-q1/", + categories = listOf( + "Kotlin", + "Digest" + ), + type = article, + lang = EN, + author = "Roman Belov", + date = LocalDate.of(2016, 4, 6), + body = body +) diff --git a/app/rss/articles/Kotlin Easily storing a list in SharedPreferences with Custom Accessors.md b/articles/english/2016/Kotlin Easily storing a list in SharedPreferences with Custom Accessors.kts similarity index 89% rename from app/rss/articles/Kotlin Easily storing a list in SharedPreferences with Custom Accessors.md rename to articles/english/2016/Kotlin Easily storing a list in SharedPreferences with Custom Accessors.kts index 3f4454ca3..c19634548 100644 --- a/app/rss/articles/Kotlin Easily storing a list in SharedPreferences with Custom Accessors.md +++ b/articles/english/2016/Kotlin Easily storing a list in SharedPreferences with Custom Accessors.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin: Easily storing a list in SharedPreferences with Custom Accessors' -url: http://blog.dennislysenko.com/2016/01/22/kotlin-easily-storing-a-list-in-sharedpreferences-with-custom-accessors/ -categories: - - Android - - Kotlin -author: Dennis Lysenko -date: Feb 22, 2016 12:36 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ SharedPreferences is at its core a simple tool with a deceptively verbose interface that weighs heavily on developer productivity. Kotlin on its own will not necessarily make Java-interfacing code pretty and concise, but you can apply a few particular concepts to create an elegant, downright easy-to-use solution to a common use-case: **Storing a list of strings that will persist across app sessions.** @@ -69,3 +68,19 @@ That’s actually all you need to do for really simple strings that are guarante **NB: Because we call `apply()` in the setter rather than `commit`, this code is relatively safe to call on the main thread but it does NOT have immediate consistency**. That is, if you call `syncingSongIds += "asdf"; print(syncingSongIds)` it may not include “asdf” in the printout. **To fix this, change `apply()` to `commit()`, but beware of incurring additional overhead** as the setter now has to write to disk synchronously every time it is called. It is your decision as to whether or not to call the setter on the main thread; I think it is relatively safe when done sparingly, but I would certainly keep an eye on that particular setter and make sure it doesn’t adversely impact performance in your app noticeably. \* I’m not making any synchronicity guarantees–maybe as a part two, but ultimately if your code is not thread-safe, you should still modify and test these code snippets to fit your synchronicity needs. + +""" + +Article( + title = "Kotlin: Easily storing a list in SharedPreferences with Custom Accessors", + url = "http://blog.dennislysenko.com/2016/01/22/kotlin-easily-storing-a-list-in-sharedpreferences-with-custom-accessors/", + categories = listOf( + "Android", + "Kotlin" + ), + type = article, + lang = EN, + author = "Dennis Lysenko", + date = LocalDate.of(2016, 2, 22), + body = body +) diff --git a/app/rss/articles/Kotlin Eclipse Plugin 0.7 Is Here!.md b/articles/english/2016/Kotlin Eclipse Plugin 0.7 Is Here!.kts similarity index 83% rename from app/rss/articles/Kotlin Eclipse Plugin 0.7 Is Here!.md rename to articles/english/2016/Kotlin Eclipse Plugin 0.7 Is Here!.kts index cd5585a7d..c2224800b 100644 --- a/app/rss/articles/Kotlin Eclipse Plugin 0.7 Is Here!.md +++ b/articles/english/2016/Kotlin Eclipse Plugin 0.7 Is Here!.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin Eclipse Plugin 0.7 Is Here!' -url: http://blog.jetbrains.com/kotlin/2016/06/kotlin-eclipse-plugin-0-7-is-here/ -categories: - - Kotlin - - Eclipse -author: Nikolay Krasko -date: Jun 03, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ We are happy to present a new release of our plugin for Eclipse IDE. Along with the support for Kotlin **1.0.2** compiler, this update brings very important features and improvements. The code formatting feature was rebuilt in this release. Instead of our first naive implementation we have mostly managed to port the advanced formatter from the Kotlin IntelliJ Idea plugin into Eclipse. This means that [a lot of fixes](https://youtrack.jetbrains.com/issues/KT?q=Formatter%20State:%20Fixed%20Subsystems:%20IDE) are already there and upcoming improvements will be picked up automatically! @@ -38,3 +37,19 @@ Please give it a try. [![Drag to your running Eclipse workspace to install Kotlin Plugin for Eclipse](http://i2.wp.com/marketplace.eclipse.org/sites/all/themes/solstice/_themes/solstice_marketplace/public/images/btn-install.png?zoom=1.5&w=640)](http://marketplace.eclipse.org/marketplace-client-intro?mpc_install=2257536 "Drag to your running Eclipse workspace to install Kotlin Plugin for Eclipse") If you run into any problems or encounter missing features, please don’t hesitate to leave your feedback here or file issues in YouTrack. + +""" + +Article( + title = "Kotlin Eclipse Plugin 0.7 Is Here!", + url = "http://blog.jetbrains.com/kotlin/2016/06/kotlin-eclipse-plugin-0-7-is-here/", + categories = listOf( + "Kotlin", + "Eclipse" + ), + type = article, + lang = EN, + author = "Nikolay Krasko", + date = LocalDate.of(2016, 6, 3), + body = body +) diff --git a/app/rss/articles/Kotlin Educational Plugin.md b/articles/english/2016/Kotlin Educational Plugin.kts similarity index 71% rename from app/rss/articles/Kotlin Educational Plugin.md rename to articles/english/2016/Kotlin Educational Plugin.kts index 649c872b9..f65456190 100644 --- a/app/rss/articles/Kotlin Educational Plugin.md +++ b/articles/english/2016/Kotlin Educational Plugin.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin Educational Plugin' -url: http://blog.jetbrains.com/kotlin/2016/03/kotlin-educational-plugin/ -categories: - - Kotlin - - Education -author: Roman Belov -date: Mar 17, 2016 14:47 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ We always said that Kotlin is really easy to learn. And it is! But it’s not only about the language: learning materials make a difference too. Today we are making another important step in this direction. We are happy to present Kotlin Educational Plugin. @@ -19,3 +18,19 @@ At the moment, there is only one course — the well-known Kotlin Koans, which h If you have any questions about Kotlin Koans, feel free to ask them in the **#koans** channel [in our Slack](http://blog.jetbrains.com/kotlin/2016/03/kotlin-educational-plugin/kotlinslackin.herokuapp.com). P.S. If you want to create your own course, contact us directly via [email](mailto:roman.belov@jetbrains.com). + +""" + +Article( + title = "Kotlin Educational Plugin", + url = "http://blog.jetbrains.com/kotlin/2016/03/kotlin-educational-plugin/", + categories = listOf( + "Kotlin", + "Education" + ), + type = article, + lang = EN, + author = "Roman Belov", + date = LocalDate.of(2016, 3, 17), + body = body +) diff --git a/app/rss/articles/Kotlin How to Make Your Java Code Base Cleaner and More Readable.md b/articles/english/2016/Kotlin How to Make Your Java Code Base Cleaner and More Readable.kts similarity index 92% rename from app/rss/articles/Kotlin How to Make Your Java Code Base Cleaner and More Readable.md rename to articles/english/2016/Kotlin How to Make Your Java Code Base Cleaner and More Readable.kts index b12becc92..b8bd140a0 100644 --- a/app/rss/articles/Kotlin How to Make Your Java Code Base Cleaner and More Readable.md +++ b/articles/english/2016/Kotlin How to Make Your Java Code Base Cleaner and More Readable.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin: How to Make Your Java Code Base Cleaner and More Readable' -url: https://medium.com/@kford55/kotlin-why-i-feel-its-useful-in-a-java-only-code-base-206bdb37c79#.4jgdz27kr -categories: - - Kotlin -author: Kenneth Ford -date: Oct 27, 2016 01:10 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ TLDR; Kotlin is a JVM language developed by JetBrains that compiles to Java 6 Bytecode. It is interoperable with Java and allows you to work with both languages in the same project. It lets you take advantage of a lot of great features in a legacy code base, such as lambdas, filters and streams, null safety, and top class IDE support as well. [https://kotlinlang.org](https://kotlinlang.org/) @@ -66,3 +66,18 @@ Useful Links: * Amazing talk by Jake Wharton on Kotlin (Android): [https://www.youtube.com/watch?v=A2LukgT2mKc](https://www.youtube.com/watch?v=A2LukgT2mKc) Thank you! :) + +""" + +Article( + title = "Kotlin: How to Make Your Java Code Base Cleaner and More Readable", + url = "https://medium.com/@kford55/kotlin-why-i-feel-its-useful-in-a-java-only-code-base-206bdb37c79#.4jgdz27kr", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Kenneth Ford", + date = LocalDate.of(2016, 10, 27), + body = body +) diff --git a/app/rss/articles/Kotlin How to Make a Java Developer's Life Easier.md b/articles/english/2016/Kotlin How to Make a Java Developer's Life Easier.kts similarity index 93% rename from app/rss/articles/Kotlin How to Make a Java Developer's Life Easier.md rename to articles/english/2016/Kotlin How to Make a Java Developer's Life Easier.kts index edfe1864a..51014915d 100644 --- a/app/rss/articles/Kotlin How to Make a Java Developer's Life Easier.md +++ b/articles/english/2016/Kotlin How to Make a Java Developer's Life Easier.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin: How to Make a Java Developer''s Life Easier?' -url: https://anadea.info/blog/kotlin-how-to-make-java-developers-life-easier -categories: - - Kotlin -author: Stanislav Sinitsky, Alexander Mikhalchenko -date: Dec 7, 2016 02:12 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ![Kotlin](https://anadea.info/uploads/image_attachment/image/1025/xKotlin.jpg.pagespeed.ic.Wy-yOp4EYc.jpg) On February 15, 2016 JetBrains company released version 1.0 of [Kotlin](https://kotlinlang.org/), a programming language that has been in development for about 5 years. This language works on JVM. We've already talked about [what Java is](https://anadea.info/blog/java-myths-realities-and-prospects-for-application-development) with our developer Alexander Mihalchenko. Today, we met again with Alexander, this time to discuss Kotlin - why Kotlin is good and if there are any drawbacks of using this language, both for developers and for entrepreneurs. @@ -59,3 +59,18 @@ In fact, Kotlin's direct purpose is to facilitate life of coders, give them oppo One of the undoubted advantages of Kotlin is the full compatibility with Java, including backwards one. All libraries for Java will work on Kotlin and vice versa. Also, this language reveals the charms of Closure and Scala for Android developers. Entrepreneurs will be pleased as well as now software projects will be delivered faster and cheaper. The only drawback of the language is its young age. However, considering the fact that JetBrains spent five years on its development, they will unlikely abandon their brainchild any time soon. Therefore, it is a good idea to start adopting Kotlin right now, especially if you're developing apps for Android. + +""" + +Article( + title = "Kotlin: How to Make a Java Developer's Life Easier?", + url = "https://anadea.info/blog/kotlin-how-to-make-java-developers-life-easier", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Stanislav Sinitsky, Alexander Mikhalchenko", + date = LocalDate.of(2016, 12, 7), + body = body +) diff --git a/articles/english/2016/Kotlin Lang.kts b/articles/english/2016/Kotlin Lang.kts new file mode 100644 index 000000000..fdbb3ceb2 --- /dev/null +++ b/articles/english/2016/Kotlin Lang.kts @@ -0,0 +1,26 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ + +[Slides](https://speakerdeck.com/developer/kotlin-lang) + +""" + +Article( + title = "Kotlin Lang", + url = "https://speakerdeck.com/developer/kotlin-lang", + categories = listOf( + "Kotlin", + "Android" + ), + type = slides, + lang = EN, + author = "Jemo Mgebrishvili", + date = LocalDate.of(2016, 11, 20), + body = body +) diff --git a/app/rss/articles/Kotlin Meets Gradle.md b/articles/english/2016/Kotlin Meets Gradle.kts similarity index 90% rename from app/rss/articles/Kotlin Meets Gradle.md rename to articles/english/2016/Kotlin Meets Gradle.kts index 9ec9ca877..8e13afa4f 100644 --- a/app/rss/articles/Kotlin Meets Gradle.md +++ b/articles/english/2016/Kotlin Meets Gradle.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin Meets Gradle' -url: http://gradle.org/blog/kotlin-meets-gradle/ -categories: - - Kotlin - - Gradle -author: Chris Beams -date: May 18, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Many readers will be familiar with JetBrains’ excellent [Kotlin](http://kotlinlang.com) programming language. It’s been under development since 2010, had its first public release in 2012, and went 1.0 GA earlier this year. We’ve been watching Kotlin over the years, and have been increasingly impressed with what the language has to offer, as well as with its considerable uptake—particularly in the Android community. @@ -41,3 +40,19 @@ Of course, all this is just the beginning. We’re happy to announce that Kotlin And we hope you do, because we’d love your feedback. We’d love to hear what you think, and how you’d like to see this new work evolve. You can file issues via the project’s [GitHub Issues](https://github.com/gradle/gradle-script-kotlin/issues) and please come chat with us in the #gradle channel of the public [Kotlin Slack](http://kotlinslackin.herokuapp.com/). I’d like to say a big thanks to my colleague Rodrigo B. de Oliveira for the last few months of working together on this project—it’s been a lot of fun! And a big thanks to the Kotlin team, in particular Ilya Chernikov and Ilya Ryzhenkov for being so responsive in providing us with everything we needed in the Kotlin compiler and Kotlin IDEA plugin. Onward! + +""" + +Article( + title = "Kotlin Meets Gradle", + url = "http://gradle.org/blog/kotlin-meets-gradle/", + categories = listOf( + "Kotlin", + "Gradle" + ), + type = article, + lang = EN, + author = "Chris Beams", + date = LocalDate.of(2016, 5, 18), + body = body +) diff --git a/app/rss/articles/Kotlin Month Post 1 Assorted Features.md b/articles/english/2016/Kotlin Month Post 1 Assorted Features.kts similarity index 90% rename from app/rss/articles/Kotlin Month Post 1 Assorted Features.md rename to articles/english/2016/Kotlin Month Post 1 Assorted Features.kts index 9e22d17ec..7dfc93c0d 100644 --- a/app/rss/articles/Kotlin Month Post 1 Assorted Features.md +++ b/articles/english/2016/Kotlin Month Post 1 Assorted Features.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin Month Post 1: Assorted Features' -url: https://programmingideaswithjake.wordpress.com/2016/02/27/kotlin-month-post-1-assorted-features/ -categories: - - Kotlin -author: Jacob Zimmerman -date: Feb 27, 2016 06:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ To open up Kotlin Month, we’ll look at a small assortment of Kotlin’s features that aren’t big enough to merit their own post and don’t fit into a grouping for the upcoming posts, starting with operator overloading. ## Operator Overloading @@ -45,3 +45,18 @@ In an older article, I tried to recreate this for Python, then someone commented I could on and on, as everything that Kotlin does differently from Java is generally pretty good, but then I’d be digging a bit too deep into the minutia of it all and bore you. If you want to learn more about it, check out [my other Kotlin articles](https://programmingideaswithjake.wordpress.com/kotlin/) or look at [Kotlin’s awesome reference page](https://kotlinlang.org/docs/reference/). Next week, I’ll be shouting my praises of Kotlin’s decisions about inheritance, its special cases, and defaults. + +""" + +Article( + title = "Kotlin Month Post 1: Assorted Features", + url = "https://programmingideaswithjake.wordpress.com/2016/02/27/kotlin-month-post-1-assorted-features/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Jacob Zimmerman", + date = LocalDate.of(2016, 2, 27), + body = body +) diff --git a/app/rss/articles/Kotlin Month Post 2 Inheritance and Defaults.md b/articles/english/2016/Kotlin Month Post 2 Inheritance and Defaults.kts similarity index 92% rename from app/rss/articles/Kotlin Month Post 2 Inheritance and Defaults.md rename to articles/english/2016/Kotlin Month Post 2 Inheritance and Defaults.kts index 9b1164465..6b99c1cfb 100644 --- a/app/rss/articles/Kotlin Month Post 2 Inheritance and Defaults.md +++ b/articles/english/2016/Kotlin Month Post 2 Inheritance and Defaults.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin Month Post 2: Inheritance and Defaults' -url: https://programmingideaswithjake.wordpress.com/2016/03/05/kotlin-month-post-2-inheritance-and-defaults/ -categories: - - Kotlin -author: Jacob Zimmerman -date: Mar 05, 2016 06:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ## Intro Continuing on with [Kotlin Month](https://programmingideaswithjake.wordpress.com/kotlin/#kotlinmonth), this week, I’ll be discussing topics in Kotlin that have to do with inheritance and default values. @@ -84,4 +84,18 @@ Another awesome thing about extension methods is how Kotlin combines them with l ## Outro -That’s the end of *this* article. Tune in next week for the third post of [Kotlin Month!](https://programmingideaswithjake.wordpress.com/kotlin/#kotlinmonth) That one will go over the safety features that Kotlin has, such as null safety and improved generics. \ No newline at end of file +That’s the end of *this* article. Tune in next week for the third post of [Kotlin Month!](https://programmingideaswithjake.wordpress.com/kotlin/#kotlinmonth) That one will go over the safety features that Kotlin has, such as null safety and improved generics. +""" + +Article( + title = "Kotlin Month Post 2: Inheritance and Defaults", + url = "https://programmingideaswithjake.wordpress.com/2016/03/05/kotlin-month-post-2-inheritance-and-defaults/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Jacob Zimmerman", + date = LocalDate.of(2016, 3, 5), + body = body +) diff --git a/app/rss/articles/Kotlin Month Post 3 Safety.md b/articles/english/2016/Kotlin Month Post 3 Safety.kts similarity index 93% rename from app/rss/articles/Kotlin Month Post 3 Safety.md rename to articles/english/2016/Kotlin Month Post 3 Safety.kts index 783de22ff..f0f76ef60 100644 --- a/app/rss/articles/Kotlin Month Post 3 Safety.md +++ b/articles/english/2016/Kotlin Month Post 3 Safety.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin Month Post 3: Safety' -url: https://programmingideaswithjake.wordpress.com/2016/03/13/kotlin-month-post-3-safety/ -categories: - - Kotlin -author: Jacob Zimmerman -date: Mar 13, 2016 22:53 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ## **Intro** In this third post for [Kotlin Month](https://programmingideaswithjake.wordpress.com/kotlin/#kotlinmonth), I’m going to go over some of the safety features that Kotlin comes with. Follow the link to see the previous posts. @@ -76,3 +76,18 @@ Kotlin allows you to define inline functions (functions that are compiled in a w ## **Outro** Thus ends my list of safety features in Kotlin. You should totally just go and fall in love with Kotlin now, as I have. Even if you won’t do it now, I still have next week’s post to sway you, so look forward to that. + +""" + +Article( + title = "Kotlin Month Post 3: Safety", + url = "https://programmingideaswithjake.wordpress.com/2016/03/13/kotlin-month-post-3-safety/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Jacob Zimmerman", + date = LocalDate.of(2016, 3, 13), + body = body +) diff --git a/app/rss/articles/Kotlin Month Post 4 Properties.md b/articles/english/2016/Kotlin Month Post 4 Properties.kts similarity index 92% rename from app/rss/articles/Kotlin Month Post 4 Properties.md rename to articles/english/2016/Kotlin Month Post 4 Properties.kts index a154e241d..0cbd2b860 100644 --- a/app/rss/articles/Kotlin Month Post 4 Properties.md +++ b/articles/english/2016/Kotlin Month Post 4 Properties.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin Month Post 4: Properties' -url: https://programmingideaswithjake.wordpress.com/2016/03/19/kotlin-month-post-4-properties/ -categories: - - Kotlin -author: Jacob Zimmerman -date: Mar 19, 2016 05:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ## **Intro** In this, the fourth and final post in the Kotlin Month series, we take a look at a widely overarching feature of Kotlin that is tightly coupled with a few other features: Properties. Besides the obvious benefits of properties that they provide in all languages, Kotlin has reusable properties via Delegated Properties as well as really clean syntax for distinguishing between read-only and full properties. @@ -48,3 +48,18 @@ If there were only 4 things I could take from Kotlin and put into Java, they wou So, this is the end of this post as well as the Kotlin Month! series. But this definitely isn’t the end of me praising Kotlin. In fact, I’ve submitted an abstract to do a talk on Kotlin at [That Conference](https://www.thatconference.com/). It’s a talk that does an introduction to Kotlin before (unless I decide to do it _while_) showing the steps involved in migrating Java code to Kotlin. For those too lazy to click the link, That Conference is a dev conference from August 8 – 10 in Wisconsin Dells (a bit south of central Wisconsin). At an indoor themepark/waterpark. How cool is that. I hope to meet some of you guys there! + +""" + +Article( + title = "Kotlin Month Post 4: Properties", + url = "https://programmingideaswithjake.wordpress.com/2016/03/19/kotlin-month-post-4-properties/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Jacob Zimmerman", + date = LocalDate.of(2016, 3, 19), + body = body +) diff --git a/app/rss/articles/Kotlin Native.md b/articles/english/2016/Kotlin Native.kts similarity index 96% rename from app/rss/articles/Kotlin Native.md rename to articles/english/2016/Kotlin Native.kts index f922a7b87..68f6d84e5 100644 --- a/app/rss/articles/Kotlin Native.md +++ b/articles/english/2016/Kotlin Native.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin Native' -url: https://medium.com/@octskyward/kotlin-native-310ffac94af2#.3oep6gxpa -categories: - - Kotlin -author: Mike Hearn -date: Jun 17, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ### Kotlin Native A frequent question about Kotlin is if/when it will support compilation to native binaries that run without a JVM. Usually this takes the form of a more technical question like, “will the Kotlin compiler get an LLVM backend?” @@ -100,3 +100,18 @@ Instead, I think the right direction for the community to go is: This approach isn’t flawless: the AOT mode being added to HotSpot is planned to be a commercial feature, and big upgrades like Panama are long term projects. But adding an LLVM backend to the Kotlin or Scala compilers would be a long term project too, it’d mean sacrificing other features that might be more useful, and it would likely never close the performance gap. As always in engineering, there are no solutions — only trade offs. I’d rather have more features in the core Kotlin language/tooling than a native backend, and let other teams tackle the varying challenges involved. + +""" + +Article( + title = "Kotlin Native", + url = "https://medium.com/@octskyward/kotlin-native-310ffac94af2#.3oep6gxpa", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Mike Hearn", + date = LocalDate.of(2016, 6, 17), + body = body +) diff --git a/app/rss/articles/Kotlin NetBeans plugin beta is out!.md b/articles/english/2016/Kotlin NetBeans plugin beta is out!.kts similarity index 89% rename from app/rss/articles/Kotlin NetBeans plugin beta is out!.md rename to articles/english/2016/Kotlin NetBeans plugin beta is out!.kts index 0d3eb738a..b2972fa6e 100644 --- a/app/rss/articles/Kotlin NetBeans plugin beta is out!.md +++ b/articles/english/2016/Kotlin NetBeans plugin beta is out!.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin NetBeans plugin beta is out!' -url: https://blog.jetbrains.com/kotlin/2016/09/kotlin-netbeans-plugin-beta-is-out/ -categories: - - Kotlin - - Netbeans -author: Dmitry Jemerov -date: Sep 19, 2016 11:37 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Today we are happy to present the first BETA release of the Kotlin plugin for the NetBeans IDE. The main features are: @@ -101,3 +100,19 @@ To write tests in Kotlin you should have JUnit in the classpath of your project. Your feedback is very important. Feel free to add issues and feature requests in the [plugin issue tracker](https://github.com/Baratynskiy/kotlin-netbeans/issues). Just like Kotlin itself, the NetBeans plugin is an open-source project, so your contributions can help it evolve faster. + +""" + +Article( + title = "Kotlin NetBeans plugin beta is out!", + url = "https://blog.jetbrains.com/kotlin/2016/09/kotlin-netbeans-plugin-beta-is-out/", + categories = listOf( + "Kotlin", + "Netbeans" + ), + type = article, + lang = EN, + author = "Dmitry Jemerov", + date = LocalDate.of(2016, 9, 19), + body = body +) diff --git a/articles/english/2016/Kotlin Night London - Nov 2016.kts b/articles/english/2016/Kotlin Night London - Nov 2016.kts new file mode 100644 index 000000000..e1c8a897d --- /dev/null +++ b/articles/english/2016/Kotlin Night London - Nov 2016.kts @@ -0,0 +1,26 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ +[Announce](https://blog.jetbrains.com/kotlin/2016/09/kotlin-night-in-london/) | [Post in Kotlin Blog](https://blog.jetbrains.com/kotlin/2016/11/kotlin-night-in-london-recordings/) + + + +""" + +Article( + title = "Kotlin Night London", + url = "https://www.youtube.com/watch?list=PLoo7Ank5cc7FaemZS4sZC0oFnSbdJ-PiH&v=TMZD1GxAC8E", + categories = listOf( + "Kotlin" + ), + type = video, + lang = EN, + author = "JetBrains", + date = LocalDate.of(2016, 11, 15), + body = body +) diff --git a/app/rss/articles/Kotlin Night in San Francisco Recordings.md b/articles/english/2016/Kotlin Night in San Francisco Recordings.kts similarity index 87% rename from app/rss/articles/Kotlin Night in San Francisco Recordings.md rename to articles/english/2016/Kotlin Night in San Francisco Recordings.kts index f62a8ef3d..652abed5a 100644 --- a/app/rss/articles/Kotlin Night in San Francisco Recordings.md +++ b/articles/english/2016/Kotlin Night in San Francisco Recordings.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin Night in San Francisco Recordings' -url: https://blog.jetbrains.com/kotlin/2016/06/kotlin-night-recordings/ -categories: - - Kotlin - - 'K.Night' -author: Roman Belov -date: Jun 14, 2016 15:32 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ On May 17th we held an evening event at San Francisco in cooperation with Realm and Netflix. Thanks to everyone who joined us this evening! There were great talks and important announcements, and the good news is that all of them were recorded: ## Talk #1: Andrey Breslav. **Where We Stand and What’s Next** @@ -52,3 +51,19 @@ Thanks all participants and speakers for great atmosphere and engaging discussio ![Kotlin&Gradle](https://i1.wp.com/blog.jetbrains.com/kotlin/files/2016/06/IMG_0150-1.jpg?zoom=1.5&resize=370%2C278&ssl=1) **See you on next K•NIGHT!** + +""" + +Article( + title = "Kotlin Night in San Francisco Recordings", + url = "https://blog.jetbrains.com/kotlin/2016/06/kotlin-night-recordings/", + categories = listOf( + "Kotlin", + "K.Night" + ), + type = article, + lang = EN, + author = "Roman Belov", + date = LocalDate.of(2016, 6, 14), + body = body +) diff --git a/app/rss/articles/Kotlin Post-1.0 Roadmap.md b/articles/english/2016/Kotlin Post-1.0 Roadmap.kts similarity index 94% rename from app/rss/articles/Kotlin Post-1.0 Roadmap.md rename to articles/english/2016/Kotlin Post-1.0 Roadmap.kts index e43ded5d1..5649b351a 100644 --- a/app/rss/articles/Kotlin Post-1.0 Roadmap.md +++ b/articles/english/2016/Kotlin Post-1.0 Roadmap.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin Post-1.0 Roadmap' -url: http://blog.jetbrains.com/kotlin/2016/04/kotlin-post-1-0-roadmap/ -categories: - - Kotlin -author: Dmitry Jemerov -date: Apr 14, 2016 12:34 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ It’s been almost two months since Kotlin 1.0 was released, and the team is now switching from stabilisation and bug fixes to new feature work, so it’s a great time to talk about our plans for the future. We’ve already published our [Android roadmap](http://blog.jetbrains.com/kotlin/2016/03/kotlins-android-roadmap/), but there are many other areas where we’re applying our efforts. Our current development is organised in two main branches: @@ -73,3 +73,18 @@ The Android roadmap post already mentioned some of the improvements that we plan ## Summary As you can see, there are quite a lot of exciting things coming, and there’s plenty of opportunity for you to get involved. Stop by our [Slack chat](http://kotlinslackin.herokuapp.com/), try out the [EAP builds](https://discuss.kotlinlang.org/c/eap), file [issues](http://youtrack.jetbrains.com/issues/KT) – the future of Kotlin depends on you, our users, and we’re always happy to hear anything that you have to say. + +""" + +Article( + title = "Kotlin Post-1.0 Roadmap", + url = "http://blog.jetbrains.com/kotlin/2016/04/kotlin-post-1-0-roadmap/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Dmitry Jemerov", + date = LocalDate.of(2016, 4, 14), + body = body +) diff --git a/app/rss/articles/Kotlin Practical Experience .md b/articles/english/2016/Kotlin Practical Experience .kts similarity index 97% rename from app/rss/articles/Kotlin Practical Experience .md rename to articles/english/2016/Kotlin Practical Experience .kts index 8cc96eb90..e7e0888ce 100644 --- a/app/rss/articles/Kotlin Practical Experience .md +++ b/articles/english/2016/Kotlin Practical Experience .kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin: Practical Experience' -url: http://blog.scottlogic.com/2016/04/04/practical-kotlin.html -categories: - - Kotlin -author: Allen Wallis -date: Apr 04, 2016 21:54 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Kotlin 1.0.0 was officially released in February this year. Kotlin is a new language from JetBrains (of IntelliJ IDEA and ReSharper fame). It was originally announced in 2011 when a development version was made available to the public. While it can be compiled to JavaScript, the primary target is the JVM, and one of its core goals is 100% Java interoperability. I have spent some time recently experimenting with Kotlin. There are many features of the language to enjoy when comparing against Java, terseness being high in the list. However, this post primarily serves to highlight a few gotchas that caught me out in the hopes that others may save some time when dealing with similar issues. While this may seem a slightly negative approach for a blog post, my goal is to offer a more practical take instead of only mentioning all the cool things you can do. @@ -303,3 +303,18 @@ I may wait and see where this goes before embracing type-safe builders. I like t Overall I have had a very positive experience. I quickly adapted to the Kotlin syntax and enjoyed using it. The issues I’ve raised in this post should not be viewed in a negative light - for every issue I’ve raised here there are countless times I found myself impressed at how Kotlin integrates cohesively with Java. My main reason for creating this post is to collect my experiences for future reference, and hopefully to help people who run into the same issues. + +""" + +Article( + title = "Kotlin: Practical Experience", + url = "http://blog.scottlogic.com/2016/04/04/practical-kotlin.html", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Allen Wallis", + date = LocalDate.of(2016, 4, 4), + body = body +) diff --git a/app/rss/articles/Kotlin Retrofit + RxAndroid + Realm.md b/articles/english/2016/Kotlin Retrofit + RxAndroid + Realm.kts similarity index 94% rename from app/rss/articles/Kotlin Retrofit + RxAndroid + Realm.md rename to articles/english/2016/Kotlin Retrofit + RxAndroid + Realm.kts index 7cef76f3f..c7fb33d38 100644 --- a/app/rss/articles/Kotlin Retrofit + RxAndroid + Realm.md +++ b/articles/english/2016/Kotlin Retrofit + RxAndroid + Realm.kts @@ -1,14 +1,11 @@ ---- -title: 'Kotlin : Retrofit + RxAndroid + Realm' -url: 'https://medium.com/@ahmedrizwan/kotlin-retrofit-rxandroid-realm-39d7be5dc9dc#.w7ufbebxh' -categories: - - Retrofit - - Realm - - RxAndroid - - Kotlin -author: Ahmed Rizwan -date: Mar 15, 2016 15:44 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ### Kotlin : Retrofit + RxAndroid + Realm In this article I thought I should cover some of the libraries (that I use regularly), like Retrofit and Realm in the context of Kotlin and Rx. @@ -208,3 +205,21 @@ You can find the full code example [here](https://github.com/ahmedrizwan/RxRealm Happy coding! + +""" + +Article( + title = "Kotlin : Retrofit + RxAndroid + Realm", + url = "https://medium.com/@ahmedrizwan/kotlin-retrofit-rxandroid-realm-39d7be5dc9dc#.w7ufbebxh", + categories = listOf( + "Retrofit", + "Realm", + "RxAndroid", + "Kotlin" + ), + type = article, + lang = EN, + author = "Ahmed Rizwan", + date = LocalDate.of(2016, 3, 15), + body = body +) diff --git a/app/rss/articles/Kotlin Ternary Operator.md b/articles/english/2016/Kotlin Ternary Operator.kts similarity index 67% rename from app/rss/articles/Kotlin Ternary Operator.md rename to articles/english/2016/Kotlin Ternary Operator.kts index e3c4b28bc..a79a64b1a 100644 --- a/app/rss/articles/Kotlin Ternary Operator.md +++ b/articles/english/2016/Kotlin Ternary Operator.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin ternary operator' -url: https://gist.github.com/naixx/9d94c1498c4d45ffda3a -categories: - - Kotlin -author: naixx -date: Nov 30, 2016 02:14 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ## Motivation Kotlin is very expressive language, but like Scala it lacks of ternary operator. Currently language provided alternative `if` looks a bit verbose. @@ -41,3 +41,18 @@ class Ternary(val expr: Boolean, val then: T) { public fun Boolean.mod(a: T): Ternary = Ternary(this, a) ``` + +""" + +Article( + title = "Kotlin ternary operator", + url = "https://gist.github.com/naixx/9d94c1498c4d45ffda3a", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "naixx", + date = LocalDate.of(2016, 11, 30), + body = body +) diff --git a/app/rss/articles/Kotlin The Good, The Bad, and The Ugly.md b/articles/english/2016/Kotlin The Good, The Bad, and The Ugly.kts similarity index 97% rename from app/rss/articles/Kotlin The Good, The Bad, and The Ugly.md rename to articles/english/2016/Kotlin The Good, The Bad, and The Ugly.kts index 088101aed..1f28ebc42 100644 --- a/app/rss/articles/Kotlin The Good, The Bad, and The Ugly.md +++ b/articles/english/2016/Kotlin The Good, The Bad, and The Ugly.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin: The Good, The Bad, and The Ugly' -url: https://medium.com/keepsafe-engineering/kotlin-the-good-the-bad-and-the-ugly-bf5f09b87e6f#.prwij1b6d -categories: - - Kotlin -author: AJ Alt -date: Aug 20, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ![](https://d262ilb51hltx0.cloudfront.net/max/2000/1*qPZUptAisHb0s0TSLrBvHA.jpeg) *Photo By [Johhy Silvercloud](https://www.flickr.com/photos/johnnysilvercloud/) / [CC-BY-SA](https://creativecommons.org/licenses/by-sa/2.0/)* @@ -283,3 +283,18 @@ Interested in working with us? Have a look at our [job openings](https://jobs.le **[3]** The lazy _Sequence_ operators can outperform the eager versions by up to 20%, but only once list sizes start growing very large. For lists under a megabyte or so in size, the lazy versions often perform the same or worse than the eager versions. **[4]** This is a bit of a simplification. Kotlin will only generate a backing field if you don’t define a get function, or if the defined get function doesn’t reference the implicit _field_ identifier. + +""" + +Article( + title = "Kotlin: The Good, The Bad, and The Ugly", + url = "https://medium.com/keepsafe-engineering/kotlin-the-good-the-bad-and-the-ugly-bf5f09b87e6f#.prwij1b6d", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "AJ Alt", + date = LocalDate.of(2016, 8, 20), + body = body +) diff --git a/app/rss/articles/Kotlin XML Binding.md b/articles/english/2016/Kotlin XML Binding.kts similarity index 89% rename from app/rss/articles/Kotlin XML Binding.md rename to articles/english/2016/Kotlin XML Binding.kts index 358d03131..f6086eefc 100644 --- a/app/rss/articles/Kotlin XML Binding.md +++ b/articles/english/2016/Kotlin XML Binding.kts @@ -1,13 +1,11 @@ ---- -title: 'Kotlin XML Binding' -url: http://jonnyzzz.com/blog/2016/01/06/kotlin-xml/ -categories: - - kotlin - - xml - - dsl -author: Eugene Petrenko -date: Jan 06, 2016 21:02 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ I like creating DSLs in [Kotlin](https://kotlinlang.org/). It was fun to try creating a DSL for XML data binding. Of course there are so many other libraries for JVM that implements it in the other way. @@ -117,3 +115,20 @@ Improve, finalize and document binding DSL Invite contributors! Have more fun! + +""" + +Article( + title = "Kotlin XML Binding", + url = "http://jonnyzzz.com/blog/2016/01/06/kotlin-xml/", + categories = listOf( + "kotlin", + "xml", + "dsl" + ), + type = article, + lang = EN, + author = "Eugene Petrenko", + date = LocalDate.of(2016, 1, 6), + body = body +) diff --git a/app/rss/articles/Kotlin a new JVM language you should try.md b/articles/english/2016/Kotlin a new JVM language you should try.kts similarity index 96% rename from app/rss/articles/Kotlin a new JVM language you should try.md rename to articles/english/2016/Kotlin a new JVM language you should try.kts index 89bf4b259..cfbe5dd77 100644 --- a/app/rss/articles/Kotlin a new JVM language you should try.md +++ b/articles/english/2016/Kotlin a new JVM language you should try.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin: a new JVM language you should try' -url: https://opencredo.com/kotlin/ -categories: - - - - Kotlin -author: Rafal Gancarz -date: Mar 03, 2016 09:55 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ ## Kotlin 1.0 is here [JetBrains](https://www.jetbrains.com/) (the people behind IntelliJ IDEA) have [recently announced](http://blog.jetbrains.com/kotlin/2016/02/kotlin-1-0-released-pragmatic-language-for-jvm-and-android/) the first RC for version 1.0 of [Kotlin](https://kotlinlang.org/), a new programming language for the JVM. I say ‘new’, but Kotlin has been in the making for a few years now, and has been used by JetBrains to develop several of their products, including Intellij IDEA. The company [open-sourced](https://github.com/JetBrains/kotlin) Kotlin in 2011, and have worked with the community since then to make the language what it is today. @@ -191,7 +190,7 @@ val readWriteMap = hashMapOf("foo" to 1, "bar" to 2) println(readWriteMap["foo"]) val readOnlyView: Map = HashMap(readWriteMap) val doubled = readOnlyView.mapValues { entry -> entry.value * 2 } -for ((key, value) in doubled) println("$key -> $value") +for ((key, value) in doubled) println("${"$"}key -> ${"$"}value") ``` ## Control flow @@ -228,7 +227,7 @@ for (item in collection) print(item) for ((index, value) in array.withIndex()) { - println("the element at $index is $value") + println("the element at ${"$"}index is ${"$"}value") } ``` @@ -240,7 +239,7 @@ I think we’ve covered quite a lot already, but there are still a few more feat ```kotlin val s = "abc" -val str = "$s.length is ${s.length}" // evaluates to "abc.length is 3" +val str = "${"$"}s.length is ${"$"}{s.length}" // evaluates to "abc.length is 3" ``` * [destructuring](https://kotlinlang.org/docs/reference/multi-declarations.html) allows convenient extraction of data class or collection elements ```kotlin @@ -322,3 +321,19 @@ The official Kotlin website lists several [tools, libraries and frameworks](http I believe Kotlin deserves at least a try, especially if you are coming from the Java background. The language brings a lot of good features from Scala and Groovy closer to Java, so you can benefit from the best of both worlds: the vastness of the Java ecosystem with expressiveness and productivity enhanced by constructs and features coming from other languages. If you do want to give Kotlin a go, why don’t you [try it online](http://try.kotlinlang.org/) first or just create a Kotlin project in your favourite IDE and start experimenting with it. Throughout this post I was covering Kotlin from the perspective of somebody coming from Java as I believe this is a primary expansion area for the new language. It’s worth knowing that Kotlin is also targeting Android development (also Java but still on version 6) as well as (still experimental) JavaScript runtime as an alternative to the JVM. With such a wide range of applications and some great features I reckon Kotlin stands a good chance of attracting quite a few new users. + +""" + +Article( + title = "Kotlin: a new JVM language you should try", + url = "https://opencredo.com/kotlin/", + categories = listOf( + "null", + "Kotlin" + ), + type = article, + lang = EN, + author = "Rafal Gancarz", + date = LocalDate.of(2016, 3, 3), + body = body +) diff --git a/app/rss/articles/Kotlin and Ceylon.md b/articles/english/2016/Kotlin and Ceylon.kts similarity index 87% rename from app/rss/articles/Kotlin and Ceylon.md rename to articles/english/2016/Kotlin and Ceylon.kts index 4b88f48b4..b82b29563 100644 --- a/app/rss/articles/Kotlin and Ceylon.md +++ b/articles/english/2016/Kotlin and Ceylon.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin and Ceylon' -url: https://medium.com/@elviraw/kotlin-and-ceylon-3ee011125b7d#.lzdgs065k -categories: - - Ceylon - - Kotlin -author: Elvira -date: Feb 28, 2016 21:06 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ I recently got a chance to dive into two interesting JVM languages, Kotlin (1.0) and Ceylon (1.2.1). They’re both attempts at being better Javas. My thoughts and observations in no particular order: * Kotlin has many commercial users already and it’s the JVM language besides Java and Scala that people talk about at the conferences I attend. @@ -29,4 +28,19 @@ I recently got a chance to dive into two interesting JVM languages, Kotlin (1.0) I ended up liking Kotlin a lot and I’m already using it in a real Android-client, AWS-backend project. Ceylon has a lot of good ideas, but I never felt at home. You should try both languages though. -I’m currently learning Clojure. It will be interesting to see if I can get the chance to finally do a lisp project. \ No newline at end of file +I’m currently learning Clojure. It will be interesting to see if I can get the chance to finally do a lisp project. +""" + +Article( + title = "Kotlin and Ceylon", + url = "https://medium.com/@elviraw/kotlin-and-ceylon-3ee011125b7d#.lzdgs065k", + categories = listOf( + "Ceylon", + "Kotlin" + ), + type = article, + lang = EN, + author = "Elvira", + date = LocalDate.of(2016, 2, 28), + body = body +) diff --git a/app/rss/articles/Kotlin census call to action.md b/articles/english/2016/Kotlin census call to action.kts similarity index 70% rename from app/rss/articles/Kotlin census call to action.md rename to articles/english/2016/Kotlin census call to action.kts index 428bd281d..8431b30fe 100644 --- a/app/rss/articles/Kotlin census call to action.md +++ b/articles/english/2016/Kotlin census call to action.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin census: call to action' -url: https://blog.jetbrains.com/kotlin/2016/09/kotlin-census-call-to-action/ -categories: - - Kotlin -author: Roman Belov -date: Sep 01, 2016 04:14 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ Many times we’re asked by people working with or planning to work with Kotlin, what our adoption rate is and who’s using Kotlin and what for. While we do accept [pull requests](https://github.com/JetBrains/kotlin-web-site/blob/master/_data/companies-using-kotlin.yml) and run into an occasional _tweet_ we would really like to know first-hand from you, whether you’re using Kotlin in production and if so, how, and what issues you have faced. This not only helps us answer the question when someone asks about our adoption, but learn more about our community. With close to 4000 people on our [Kotlin Slack](http://kotlinslackin.herokuapp.com/) alone, it’s hard to keep track of every piece of feedback! @@ -15,3 +15,18 @@ As such, we’re asking you if you could kindly give us two minutes of your time Thank you! ### [Fill Out Survey](https://blog.jetbrains.com/kotlin/2016/09/kotlin-census-call-to-action/) + +""" + +Article( + title = "Kotlin census: call to action", + url = "https://blog.jetbrains.com/kotlin/2016/09/kotlin-census-call-to-action/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Roman Belov", + date = LocalDate.of(2016, 9, 1), + body = body +) diff --git a/app/rss/articles/Kotlin for Data Science.md b/articles/english/2016/Kotlin for Data Science.kts similarity index 96% rename from app/rss/articles/Kotlin for Data Science.md rename to articles/english/2016/Kotlin for Data Science.kts index 3bfe38034..648d50fd1 100644 --- a/app/rss/articles/Kotlin for Data Science.md +++ b/articles/english/2016/Kotlin for Data Science.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin for Data Science' -url: http://tomstechnicalblog.blogspot.com.by/2016/10/kotlin-for-data-science.html -categories: - - Kotlin -author: Thomas Nield -date: Oct 28, 2016 02:18 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ ## Can Kotlin be an Effective Alternative for Python and Scala? As I started diving formally into data science, I cannot help but notice there is a large gap between data science and software engineering. It is good to come up with prototypes, ideas, and models out of data analysis. However, executing those ideas is another animal. You can outsource the execution to a software engineering team, and that can go well or badly depending on a number of factors. In my experience, it is often helpful to do the execution yourself or at least offer assistance by modeling towards production. @@ -151,8 +151,8 @@ data class User(val id: Int, val name: String) val user = User(10,"Tom") val changedUser = user.copy(name = "Thomas") -println("Old user: $user") -println("New user: $changedUser") +println("Old user: ${"$"}user") +println("New user: ${"$"}changedUser") ``` **OUTPUT:** @@ -369,3 +369,18 @@ Kotlin merely provides a pragmatic abstraction layer that provides a tactical an I believe Kotlin could make a great first JVM language, more so than Java or Scala. There is a new [O'Reilly video series](http://shop.oreilly.com/product/0636920052982.do) that covers Kotlin from scatch, and its instructor Hadi Hariri (one of the JetBrains folks behind Kotlin) believes Pythonistas should be able to follow along. He said anybody familiar with classes, functions, properties, etc should be able to learn Kotlin in a day with this video series. Unfortunately, the existing [Kotlin documentation](https://kotlinlang.org/docs/reference/) and [books](https://www.manning.com/books/kotlin-in-action) assume prior Java knowledge, and hopefully more resources other than the video pop up in the future. There is a lot of exciting features I have not covered about Kotlin in this article. Features like [nullable types](https://kotlinlang.org/docs/reference/null-safety.html), [extension properties and functions](https://kotlinlang.org/docs/reference/extensions.html), and [boilerplate-free delegates](https://kotlinlang.org/docs/reference/delegation.html) make the language pleasant to use and highly productive. So check out Kotlin if you are using Python or Scala for data science. I will continue blogging about my experiences, and showcase it being used in deeper data science topics as well as Spark. + +""" + +Article( + title = "Kotlin for Data Science", + url = "http://tomstechnicalblog.blogspot.com.by/2016/10/kotlin-for-data-science.html", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Thomas Nield", + date = LocalDate.of(2016, 10, 28), + body = body +) diff --git a/app/rss/articles/Kotlin for Scala Developers.md b/articles/english/2016/Kotlin for Scala Developers.kts similarity index 94% rename from app/rss/articles/Kotlin for Scala Developers.md rename to articles/english/2016/Kotlin for Scala Developers.kts index 4336722a8..ad2bfbb75 100644 --- a/app/rss/articles/Kotlin for Scala Developers.md +++ b/articles/english/2016/Kotlin for Scala Developers.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin for Scala Developers' -url: http://www.51zero.com/blog/2016/4/14/kotlin-for-scala-developers -categories: - - Scala - - Kotlin -author: Stephen Samuel -date: Apr 14, 2016 15:44 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ At [51zero](/about) we pride ourselves on being flexible when it comes to language choice. Java, Scala, C#, and more recently, [Kotlin](https://kotlinlang.org/). Kotlin is a JVM language developed by Jetbrains (the people behind IntelliJ amongst other things) and recently has just reached version 1.0 public. We’ve even ported ScalaTest over to Kotlin in the guise of [KotlinTest](https://github.com/kotlintest/kotlintest) (of which we’ll do a blog soon). There are some great articles already published on the main features of Kotlin, for example [here](http://petersommerhoff.com/dev/kotlin/kotlin-for-java-devs/), [here](https://medium.com/@octskyward/why-kotlin-is-my-next-programming-language-c25c001e26e3#.8e0v3qg1x) and [here](https://opencredo.com/kotlin/), which are useful introductions for Java developers wishing to look at a different language. This blog is for Scala developers interested in having a play with Kotlin, where we review features of Scala you use every day, and their equivalents, or closest features, are in Kotlin. @@ -237,3 +236,19 @@ for ((a,b) in person) { } ``` That’s all for now. Hopefully this article provides some hints and tips for Scala developers who are interested in exploring a little bit of Kotlin. + +""" + +Article( + title = "Kotlin for Scala Developers", + url = "http://www.51zero.com/blog/2016/4/14/kotlin-for-scala-developers", + categories = listOf( + "Scala", + "Kotlin" + ), + type = article, + lang = EN, + author = "Stephen Samuel", + date = LocalDate.of(2016, 4, 14), + body = body +) diff --git a/app/rss/articles/Kotlin in Practice with Spring Boot and Vaadin.md b/articles/english/2016/Kotlin in Practice with Spring Boot and Vaadin.kts similarity index 96% rename from app/rss/articles/Kotlin in Practice with Spring Boot and Vaadin.md rename to articles/english/2016/Kotlin in Practice with Spring Boot and Vaadin.kts index 4e8577556..644dd7fdc 100644 --- a/app/rss/articles/Kotlin in Practice with Spring Boot and Vaadin.md +++ b/articles/english/2016/Kotlin in Practice with Spring Boot and Vaadin.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin in Practice with Spring Boot and Vaadin' -url: https://blog.philipphauer.de/kotlin-practice-spring-boot-vaadin/ -categories: - - Kotlin - - Vaadin -author: Philipp Hauer -date: Dec 21, 2016 04:13 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ Coding with Kotlin is great fun. But things are getting really interesting when we try to use Kotlin in conjunction with popular frameworks like Spring Boot and Vaadin. The development with those frameworks can benefit a lot from Kotlin. However, we have to pay attention to some pitfalls. ![Kotlin in Practice with Spring Boot and Vaadin](https://blog.philipphauer.de/wp-content/uploads/2016/12/kotlin-in-practice-featured-image.png "Kotlin in Practice") @@ -250,7 +249,7 @@ val layout = FormLayout().apply { val stateLabel = Label().apply { contentMode = ContentMode.HTML caption = Labels.STATE - value = "${snippet.state.toIcon().html} ${snippet.state.toLabel()}" + value = "${"$"}{snippet.state.toIcon().html} ${"$"}{snippet.state.toLabel()}" } val authorLabel = Label().apply { caption = Labels.AUTHOR @@ -330,7 +329,7 @@ fun mapToBeans(entities: List) = entities.map(::mapToBean) fun mapToBean(entity: SnippetEntity) = SnippetOverviewBean( code = entity.code, date = entity.date, - author = "${entity.author.firstName} ${entity.author.lastName}" + author = "${"$"}{entity.author.firstName} ${"$"}{entity.author.lastName}" ) ``` @@ -392,7 +391,7 @@ private object ShortenedValueColumnGenerator : Table.ColumnGenerator { fun String.shortenWithEllipsis(): String{ if (this.length > MAX_LENGTH){ - return "${this.substring(0, MAX_LENGTH)}..." + return "${"$"}{this.substring(0, MAX_LENGTH)}..." } return this } @@ -421,3 +420,19 @@ object StringToInstantConverter : Converter { override fun getModelType() = Instant::class.java } ``` + +""" + +Article( + title = "Kotlin in Practice with Spring Boot and Vaadin", + url = "https://blog.philipphauer.de/kotlin-practice-spring-boot-vaadin/", + categories = listOf( + "Kotlin", + "Vaadin" + ), + type = article, + lang = EN, + author = "Philipp Hauer", + date = LocalDate.of(2016, 12, 21), + body = body +) diff --git a/app/rss/articles/Kotlin in Production - What works, Whats broken.md b/articles/english/2016/Kotlin in Production - What works, Whats broken.kts similarity index 89% rename from app/rss/articles/Kotlin in Production - What works, Whats broken.md rename to articles/english/2016/Kotlin in Production - What works, Whats broken.kts index 17cafc9d9..a7cbe184c 100644 --- a/app/rss/articles/Kotlin in Production - What works, Whats broken.md +++ b/articles/english/2016/Kotlin in Production - What works, Whats broken.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin in Production - What works, Whats broken' -url: http://blog.dripstat.com/kotlin-in-production-the-good-the-bad-and-the-ugly-2/ -categories: - - Kotlin -author: DripStat -date: Sep 24, 2016 11:57 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ We have been using Kotlin in the [DripStat](https://dripstat.com) backend since Kotlin's 1.0 release using the Kotlin Intellij plugin. Here is a summary of our experiences as of Kotlin 1.0.3. ### The Good @@ -83,3 +83,18 @@ Postfix completion and Duplicate detection come to mind as some of the many feat ### Conclusion Kotlin seemed to promise a better Java, without compromises. It does achieve that at the language level. However, a big part of using Java is Jetbrains' own excellent Java tooling. Here the Kotlin plugin has a lot of work to do to catch up with what Jetbrains has built over 15 years for Java. + +""" + +Article( + title = "Kotlin in Production - What works, Whats broken", + url = "http://blog.dripstat.com/kotlin-in-production-the-good-the-bad-and-the-ugly-2/", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "DripStat", + date = LocalDate.of(2016, 9, 24), + body = body +) diff --git a/articles/english/2016/Kotlin in Real Projects.kts b/articles/english/2016/Kotlin in Real Projects.kts new file mode 100644 index 000000000..20447497d --- /dev/null +++ b/articles/english/2016/Kotlin in Real Projects.kts @@ -0,0 +1,26 @@ + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ + + + + +""" + +Article( + title = "Kotlin in Real Projects", + url = "https://www.youtube.com/watch?v=lpPbCWpBM3I", + categories = listOf( + "Kotlin" + ), + type = video, + lang = EN, + author = "Anton Keks", + date = LocalDate.of(2016, 11, 1), + body = body +) diff --git a/app/rss/articles/Kotlin is cheating on me.md b/articles/english/2016/Kotlin is cheating on me.kts similarity index 89% rename from app/rss/articles/Kotlin is cheating on me.md rename to articles/english/2016/Kotlin is cheating on me.kts index f2fcdd6b8..316ae8130 100644 --- a/app/rss/articles/Kotlin is cheating on me.md +++ b/articles/english/2016/Kotlin is cheating on me.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin is cheating on me...' -url: https://hackernoon.com/kotlin-is-cheating-on-me-e048cde4f66#.5vq8chhbz -categories: - - Kotlin -author: Andrea Franceschini -date: Dec 24, 2016 02:37 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """ ## ... but I’m OK with it. Earlier this month, I published an account of my very first experience of Android development. It wasn’t pretty. @@ -33,3 +33,18 @@ The single reason for me to switch to Kotlin, vaporised. I let that sink in for ... and then I still got on with Kotlin because overall it’s a much nicer language to look at. For those who are wondering, “_non sequuntur_” is the correct plural of “_non sequitur_”. Get your Latin straight, you Anglophones. + +""" + +Article( + title = "Kotlin is cheating on me...", + url = "https://hackernoon.com/kotlin-is-cheating-on-me-e048cde4f66#.5vq8chhbz", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Andrea Franceschini", + date = LocalDate.of(2016, 12, 24), + body = body +) diff --git a/app/rss/articles/Kotlin null safety and its performance considerations -- part 1.md b/articles/english/2016/Kotlin null safety and its performance considerations -- part 1.kts similarity index 96% rename from app/rss/articles/Kotlin null safety and its performance considerations -- part 1.md rename to articles/english/2016/Kotlin null safety and its performance considerations -- part 1.kts index fa3c41d7f..0d5a094dc 100644 --- a/app/rss/articles/Kotlin null safety and its performance considerations -- part 1.md +++ b/articles/english/2016/Kotlin null safety and its performance considerations -- part 1.kts @@ -1,11 +1,11 @@ ---- -title: 'Kotlin null safety and its performance considerations -- part 1' -url: http://allegro.tech/2016/06/kotlin-null-safety-part1.html -categories: - - Kotlin -author: Konrad Kamiński -date: Jun 20, 2016 00:00 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LanguageCodes.EN +import link.kotlin.scripts.LinkType.article +import java.time.LocalDate + +// language=Markdown +val body = """ [Kotlin](http://kotlinlang.org) may seem like a new kid on the block – itʼs been officially released only in [February](http://blog.jetbrains.com/kotlin/2016/02/kotlin-1-0-released-pragmatic-language-for-jvm-and-android/). Its history however dates [a few years back](http://www.infoworld.com/article/2622405/java/jetbrains-readies-jvm-based-language.html) and itʼs mature and stable enough to be used for developing solid reliable applications. Therefore at [Allegro](http://allegro.pl) we decided to give it a chance – we built our new shiny server-side system using Kotlin as its primary language and we do not regret it. One of the first features a Kotlin developer learns is the languageʼs approach to handling `null` values. It is quite interesting – especially at times like these when the most popular way of handling this problem is to use some kind of [Option monad](https://en.wikipedia.org/wiki/Option_type). As weʼll soon see Kotlin actually does not introduce any new special wrapper type – it uses regular Java types albeit with slight variance. @@ -17,7 +17,7 @@ In Kotlin when you declare a variable, a field or a function parameter, by defau ```kotlin class Greeter { fun hello(who: String): Unit { - println ("Hello $who") + println ("Hello ${"$"}who") } } ``` @@ -27,7 +27,7 @@ We declared `who` to be of type `String` which is interpreted by the compiler to ```kotlin class Greeter { fun hello(who: String?): Unit { - println ("Hello $who") + println ("Hello ${"$"}who") } } ``` @@ -323,9 +323,9 @@ public String findUserNameWithRun(int userId) { SimpleUser simpleUser = getUser(userId); if (simpleUser != null) { - SimpleUser $receiver = simpleUser; + SimpleUser ${"$"}receiver = simpleUser; - result = $receiver.getName(); // { name } + result = ${"$"}receiver.getName(); // { name } } else { result = null; } @@ -357,9 +357,9 @@ public SimpleUser findUserNameWithApply(int userId) { SimpleUser simpleUser = getUser(userId); if (simpleUser != null) { - SimpleUser $receiver = simpleUser; + SimpleUser ${"$"}receiver = simpleUser; - $receiver.setName("Jane"); // { name = "Jane" } + ${"$"}receiver.setName("Jane"); // { name = "Jane" } result = simpleUser; } else { @@ -564,3 +564,18 @@ Exception in thread "main" java.lang.IllegalStateException: System.getProperty(" ### Summary Weʼve taken a tour of different Kotlin language constructs where you could observe the code generated by the compiler. During regular development you rarely have to think about how things work under the hood. Nonetheless it is useful to know a thing or two about it. And if youʼre interested in the performance issues surrounding some of those constructs check out the second part of this article which will be soon published. + +""" + +Article( + title = "Kotlin null safety and its performance considerations -- part 1", + url = "http://allegro.tech/2016/06/kotlin-null-safety-part1.html", + categories = listOf( + "Kotlin" + ), + type = article, + lang = EN, + author = "Konrad Kamiński", + date = LocalDate.of(2016, 6, 20), + body = body +) diff --git a/app/rss/articles/Kotlin recipes for Android (I) OnGlobalLayoutListener.md b/articles/english/2016/Kotlin recipes for Android (I) OnGlobalLayoutListener.kts similarity index 90% rename from app/rss/articles/Kotlin recipes for Android (I) OnGlobalLayoutListener.md rename to articles/english/2016/Kotlin recipes for Android (I) OnGlobalLayoutListener.kts index b8f60992f..940fa4096 100644 --- a/app/rss/articles/Kotlin recipes for Android (I) OnGlobalLayoutListener.md +++ b/articles/english/2016/Kotlin recipes for Android (I) OnGlobalLayoutListener.kts @@ -1,12 +1,11 @@ ---- -title: 'Kotlin recipes for Android (I): OnGlobalLayoutListener' -url: http://antonioleiva.com/kotlin-ongloballayoutlistener/ -categories: - - Android - - Kotlin -author: Antonio Leiva -date: Mar 16, 2016 00:52 ---- + +import link.kotlin.scripts.Article +import link.kotlin.scripts.LinkType.* +import link.kotlin.scripts.LanguageCodes.* +import java.time.LocalDate + +// language=Markdown +val body = """