Functional Kotlin part 4: collections manipulation

This is a part 4 of the #kotlin-showoff series and it's going to be about the standard functions over the collections(mostly iterables to be precise) allowing developer to express data modification in the clean and functional way.

General convention

Although one might think that kotlin has inherited all the base collection types from the Java it's not quite true. Kotlin transparently maps existing Java collections into the Kotlin by using some tricks such as typealiasing. Collections hierarchy in Kotlin make code even more safer by imposing separation between mutable and immutable data structures. Take a look on the interfaces diagram:

Read more

Project update: Alexa London Bus Stop

A while ago I have published post about the first skill for Alexa I developed. Personally I use it since then practically every day and I found it very useful. I didn't even bother to check analytics since, well, it does work for me and I expected people to use it as well if it's useful.

Thanks to my wife, I recently learnt London Bus Stop skill:

  • still in the top 30 skills in the area because I'm receiving $100 credit for AWS every month;
  • it's not listed anymore! That fact slipped through the cracks!

Read more

Functional kotlin part 3: scoping functions

In the part 3 of the series of the posts about kotlin we going to look into the one of the intensively used kotlin extension functions from the standard library - they allow to write very expressive and safe, functionally-looking code.

For folks who got lost on the word "extension functions" - it's a way to attach a function or property to the instances of the existing classes. For example, val d = 10.twice()It's very much like a classic Java Util classes with method twice(int) but done in a very clean way. Visually it looks like you're calling a member of the class, but in reality, the compiler calls your function passing receiver as an argument.

Read more

Functional kotlin part 2: elvis operator

Continuing series of posts #kotlin-showoff about functional constructions in kotlin I want to demostrate use of elvis operator

Essentially, elvis operator lvalue ?: rexpression is returning left value if it's not null or executes rexpression otherwise. The crazy thing about kotlin is most of the constructions are expressions and that gives another way to express business logic.

Read more

Functional kotlin part 1: safe calls

For the seasoned Java developer it's very easy to switch to kotlin. Even more, thanks to the great effort of JetBrains team for java interop, there is no need to wait for the greenfield project to start to write kotlin code. You can start koding straight away by either implementing new functionality in kotlin or converting existing classes into the new language by employing Intellj Idea automagic converter

This is a first of this series of posts unioned by tag #kotlin-showoff

Read more

5 Years In UK

Five years ago I started one more journey when I landed for the first time at the Heathrow Airport from Saint-Petersburg. As expected, many things have changed. Since it's quite a date I want to reflect on the life.

Read more

Presentation – GCP APIs with kotlin

I was invited for the talk as part of kotlin/everywhere at GDG Cloud London meetup on June 8th 2019. Unlike previous talks in this one I focused on the live coding part after brief intro into the language.

The demo project I prepared is a web site allowing user to upload pictures into GCP Storage, automatically annotate content using Vision API, synthesise voice which describes content of the image.

Read more

Dynamically typed languages are selling snake oil

I truly believe they are

I hear the same statements and misunderstandings over and over again from people who like dynamically typed languages. Obliviously, that spikes a lot of endless conversations and fights between two camps.

Generally, I'm avoiding conversations about static vs dynamic typing but every once in the while I drifted into that and hear the same statements, all the time. Often both sides just aren't able to listen to each other and thus conversation end up in the dead end.

Read more

Update: PronounceMe

It's been 3 months since I announced PronounceMe project I was working on at the beginning of 2019.

The initial approach was simple - build and run the MVP, see if it gets some organic traction. MVP included:

  • Written expectations and desirable figures
  • Generator engine - core which renders videos
  • Endless data source - video production process should be never stopped
  • Basic internal analytics for metrics I focus on
  • Autonomous deployed a system which restarts itself if something breaks

Read more

Backup time: bitbucket backup script

Git is decentralised version control system but let's face it - most likely we use single remote repository. Most likely it's github or bitbucket.

Some people already have learnt the hard way that backups are necessary even for the thing we believe will never break, because, you know, nothing more permanent than temporary.

Recently I was reviewing my backups of important services and noticed that I don't really have a repeatable automated way to archive repositories on Bitbucket. Scaring myself of it I immediately rushed to write a script which does so.

So, requirements for the bitbucket backup script:

  • Must work on Linux(or may be even macos) without any extra dependencies. It must work using only bash + git + tar
  • Created archives should be bz2ipped
  • Backup script must not have write access to the repositories
  • It must include all repositories/teams I was contributing to

Read more