Grumble: Virgin Media is hijacking DNS and has no customer service

Just recently we moved home and of course we had to look for an another Internet Service Provider. Due to coronavirus outbreak we could not install Vodafone. We had it previously and generally it was quite reliable and service was decent. Instead we stick to the only option - Virgin Media

TR;DR: If you can - avoid. It's a scum. Terrible service, low-end hardware, DNS spoofing, HTTP/s transparent proxy, website doesn't work, support agents are humiliating and threatening you.
Not convinced? Read further.

I'm going to repost my post from reddit and provide additional comments

If you're from IT you probably would be especially interested in what Virgin Media is doing with you internet traffic

Read moreGrumble: Virgin Media is hijacking DNS and has no customer service

Asus Zenbook UX303UA memory upgrade

I bought UX303UA Zenbook back in June 2016 for £800. It's meant to be be a temporary laptop to be used for 1-2 years max.

Although it's quite cheap it had very good spec especially for 2016: i7-6500U @ 2.5Ghz and 12Gb RAM with fair 4-6hours on single charge, just 1.2kg. It was a significant improvement from previous Zenbook with i5 and 8Gb memory. RAM is especially critical for java developers, especially for greedy Android tools.

Even now, in 2020 this spec isn't bad at all. It's still possible to get a similar device bus slightly cheaper. Having said that I was thinking to add more memory so I can continue to use laptop comfortabily. Unfortunatelly, all websites and official sources say it's impossible - the max is 8(in the slot)+4(soldered).

Read moreAsus Zenbook UX303UA memory upgrade

Installing docker-machine on Raspberry PI

One of the nicest things about docker is reproducibility and containerisation. It is possible to run multiple applications which requires different environment on the same computer and make them live happily altogether. Although Raspberry Pi has ARMv7 instructions set, we still can run docker on it - we just need different images. One would be surprised there are some official images available on docker hub.

The configuration can be very simple - literally two commands in terminal, thanks to widely available devops tools such as docker-machine and ansible. Having this setup there won't be need to login to the RPi and perform any manual configuration per service anymore. Instead, services can be configured and deployed right from your computer.

If you don't have your Rasbperry configured yet refer to previous article for the initial setup.

Read moreInstalling docker-machine on Raspberry PI

Setting up Raspberry Pi without Monitor

In this post we will setup and configure Rasbian for your RPi to be instantly available via local network and without screen on the linux or mac system. Those steps should be appliable to any Raspberry PI version

To start with we need a few things:

  • Raspberry PI itself
  • 8Gb+ SD Card, class 10 at least
  • Ethernet cable to connect RPi to the router
  • Downloaded Raspbian Lite zipped image

Read moreSetting up Raspberry Pi without Monitor

Project Sunset: PronounceMe

In year 2019 one of the projects I launched was PronounceMe. It's a service which automatically generates videos with pronunciation of the English words and publishes them on YouTube. For more details about the hypothesis and technical implementation check out all posts under #PronounceMe

Unfortunately, I have to shut it down due to recent changes in the YouTube monetisation policies.

Read moreProject Sunset: PronounceMe

Project Update: PronounceMe – implementation details

I have several post about the PronounceMe project experiments - automatic video and voice generator for English learners. If you missed previous posts please review #pronounceMe for more information about the project, ideas behind and some statistics. In this post I'd focus on the technical implementation with some diagrams and noticeable code snippets.

Read moreProject Update: PronounceMe – implementation details

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 moreFunctional Kotlin part 4: collections manipulation

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 moreProject update: Alexa London Bus Stop

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 moreFunctional kotlin part 3: scoping functions