Thursday, 16 August 2018

Russia and Samara, 12 years later

My thoughts about Russia and my home town, after 12 years of living abroad, in ever popular format of a Twitter thread:

Tuesday, 28 November 2017

The end of headphones saga - Bowers Wilkins PX and Bose QC 35.

So a short while ago I was complaining about Sony's 1000XM2, which I, after some suffering, ended up returning to Amazon. That left me in a situation when I was in the market for noise-cancelling around-ears, again.

I must say I am somewhat biased - my last two models of travel headphones were Bose QC25 and Bose's again SoundLink around-ears, and they've been performing great. Obviously QC25 is out of question now that my Pixel 2 doesn't fancy a headphone jack (and frankly I'm not at all keen on wired travel headphones).

After lurking around, I first settled on Bowers Wilkins PX. I played with them for almost two weeks, and it was a mixed bag. On the positive side, sound quality is frankly better than anything else I've tried in the wireless department - it is that audiophile-grade 'clear' sound which is neither too bassy nor too strong on middles. Noise cancellation was also really good, and it was not suffering Sony's problem of "movement compensation". Finally, they did look absolutely gorgeous - leagues beyond Sony and Bose.

Tuesday, 31 October 2017

Sony 1000XM2 - the good, the bad, the ugly

I've been on a headphone shopping spree lately - after most excellent Sony WI-1000X (which I am loving after installing custom earbud tips) I decided to splash a bit more cash and went for the ultimate headphones of all (or so they said) - a remake of already great Sony 1000X, namely Sony 1000XM2.

Wouldn't bother you with a full review: after all, you can just go to What HiFi review and find out for yourself why did they award them full five stars. The sound is great and rich, noise cancelling is not affecting the richness of the sound in the slightest (with a small caveat, but more below). The fact that they support LDAC codec (available in Sony devices for a while, and for other OEMs since Android Oreo) only contributes to rock-solid bluetooth connection with the quality frankly way beyond what most accomplished listeners can distinguish from wired connection.

So how these cans fare in real life?

A big problem in my opinion is that as soon as you start moving your head around - bobbing or swaying sideways, or just quickly turning it left or right, the sound starts ... floating. I can't find better word to describe it, but sometimes it feels like centre of the sound stage is flowing sideways. You don't need to do this deliberately - merely turning your head to look for sideways is enough to trigger this behaviour. It almost feels like noise cancellation algorithm is trying to compensate for the movement somehow, but is late for just a fraction of second, and this is incredibly distracting.

So the sound quality is amazing, and noise cancellation is top notch - but only if and until you are staying relatively still or at least move very carefully and gently. I guess it would work really well on long flights (didn't have a chance to do my usual LHR-to-SFO in this headphones yet) but if you are walking, or standing in the train, you will feel the pain.

Lo and behold, the headphones will probably go back to Sony, despite all their greatness. Which is a shame really - I feel like a little bit of testing in more realistic scenarios could've resolved many of these problems.

Update: the end of headphones saga

Thursday, 3 November 2016

Managed Android Demo

One launch I am very happy to see - Android Management Experience, was briefly described by wonderful Ron Amadeo of ArsTechnica.

In a nutshell, this is a way to enable managed (work) profile on your Android device, which you can manage remotely — something that your employer's IT desk would usually do if you want to use your personal device for work. Greatest thing about Managed Android experience is that it is effectively a very small, very limited, yet fully functional enterprise mobility management tool for Android: greatly stripped down of features, but working nevertheless.

Another thing which I didn't realise until I tried it - you can even upload private apps via Play Developer Console and distribute these apps within your "organisation" using Android management experience. In short, if you are Android enthusiast this is definitely something worth playing with!

Wednesday, 13 July 2016

Arrivals just arrived to @london_tube_bot

After some more fiddling with @london_tube_bot I figured a feature I really need for myself: as I often run to the timetable, I need a way of quickly checking when is my next train due at my station. Naturally, I decided that I had to add it to my bot. And boy, was it an interesting journey ...

The problem as I see it is that TfL's API inherits their data model, which, in its turn, inherits their complex relationship with different train operators. Did you know, for example, that Kew Gardens is not a station, but, in fact, two stations located exactly at the same place - Kew Gardens London Underground station, and Kew Gardens National Rail station? And yes, if you want to fetch arrivals from this station, you will have to do it separately from these two. More interesting: from TfL's perspective there's no Tube on this station - just Overground and National Rail. That probably makes District Line a commuter train somewhere half the way.

Anyway, here it is, enjoy!

Sunday, 10 July 2016

Telegram bots all the way

So it suddenly became rather cool writing various bots, and I was like, I want to build one as well. There was no good reason for it, and distinct lack of good ideas, but then I got an email from TfL, reminding that once upon a time I signed up for their API key ... bingo! That did sound like a plan.
And this is how @london_tube_bot was born. Right now it is fairly stupid, and can either:
  • Give full status breakdown for all lines (/status/ command)
  • Give an update on specific line (/line <line-name> command)
  • Send a not very helpful help message (/help)

Not really sure if I'm planning to develop it any further, as this was a very simple proof of concept ("because I can") -- but if you are interested, I can publish the code to GitHub at some point.
From the technical standpoint there were a few interesting observations:
  • Telegram documentation is shit. Most of what I learned I did by reverse-engineering the messages they send.
  • OTOH, Telegram API is awesomely simple - I used Advanced Rest Client to do most of my testing to play with it (cUrl would work as well, but former is far more user-friendly).
  • Building a bot on AppEngine is surprisingly easy once you get a gist of it -- I think this is the best platform for doing this at this point, as you get fully-working WebHooks for free.
  • totally rocks - I used it to build Java wrappers (yes, I used Java - just because I didn't feel like learning yet another language at this point) for JSON messages, without even having any dedicated JSON schema document. Works like a charm and requires only minimal manual fixing after classes are generated.
All things considered, I think this were half a day well spent - should I add support for Google Allo once it's out? :)

Friday, 22 April 2016

Formatting time in Android/Java, the right way

I suppose this is very obvious for someone, but I spent a fair bit of time trying to understand what is the right, no, the right way to do time formatting in Java. I know about Joda, and don't really want to use it (because size, and frankly, I don't need all of it's features). I know about SimpleDateFormat and hate it because I have to hardcode my format. What I wanted is the way to use system-defined, user-preferred way to format time - i.e. if user specified 12-hour time, we want to add AM/PM, and if they happen to use Russian layout, that should magically become "ДП/ПП" however odd I would find this. This is, I think, the quickest the way to get it - using standard framework features:

When using this approach, you will get correctly formatted time, e.g. for 23:10 you will get "23:10" in 24-hour time, "11:10 PM" with English locale and 12-hour time, and "11:10 ПП" in Russian. Makes me very happy this is actually achievable without resorting to hacks like this, or, even worse, this.