суббота, 11 июля 2015 г.

Герой или нет

Нашёл забавный тест на просторах интернета. Взяты факты из историй о былинных богатырях и надо узнать, о положительном герое идёт речь или об отрицательном...

Сказка — ложь, да в ней намек, Добрым молодцам урок!

Nightwish


Оказывается, что у Nightwish уже третья вокалистка. Мне стало не интересно следить за ними после ухода Тарьи. Хотя, нынешняя поёт, вроде, нормально - мне нравится больше, чем предыдущая. Правда, обоим им до Тарьи, как до Луны...

Kotlin @ Hackathon

Завершился сорока восьми часовой марафон программирования, на котором я изучал язык Kotlin и писал известно что, а ведь до этого события я его и в глаза не видел.

Первые часов 20 прошли очень результативно, после чего пришлось пойти поспать в комнату отдыха. После обеда работа шла медленно и печально, поэтому я решил поехать домой и выспаться. Сегодня с утра полировал код и пытался найти ошибку в алгоритме подсчёта очков, из-за которой он долго думает, но плохо играет. Ещё не успел портировать Пашкин код.

Язык Kotlin мне понравился. Подобно JavaFX он сильно уменьшает количество boilerplate кода. С другой стороны, код становится плотным и насыщенным, поэтому лучше добавлять комментарии.
  data class Player(val id: Int,
                        name: String?,
                    val solver: Solver? = null) {
      val name = solver?.name ?: name ?: "Player ${id + 1}"
  }
Например, код выше является описанием класса с тремя readonly свойствами id, name и solver, для поддержки которых генерятся методы equals и hashCode.

Конструктор по-умолчанию имеет два обязательных и один опциональный параметр со значением null по умолчанию. String? означает, что параметр типа String может принимать значение null.

Свойство name задаётся не напрямую через конструктор, а на основе выражения, в котором присутствует куча проверок на null. Сначала мы спрашиваем имя solver?.name, которое вернёт null, если сам solver тоже null.

Потом идёт так называемый elvis-оператор, который возвращает левую часть, если она не null, иначе возвращает правую.

Тип свойства name напрямую не задан, а определяется из выражения. С учётом всех проверок на null, типом оказывается String, а не String?, как у соответствующего параметра.

Методы так и подмывает писать однострочными:
  fun count(id: Int) = cells.values().filter { it == id }.size()
Да, λямбды поддерживаются. Кстати, тип объекта внутри if определяется автоматически, если в if этот тип проверялся.

Поддержка range сделана простой и оптимальной в коде:
  x in 1..width && y in 1..height
Кроме того, мне очень понравились функции расширения. Обычно в Java заводят вспомогательный класс с набором статических методов, а тут можно написать следующим образом:
  fun JComponent.getInnerBounds(): Rectangle {
      val bounds = Rectangle(getWidth(), getHeight())
      val insets = getInsets()
      if (insets != null) {
          bounds.x += insets.left
          bounds.y += insets.top
          bounds.width -= insets.left + insets.right
          bounds.height -= insets.top + insets.bottom
      }
      return bounds
  }
После чего можно использовать этот метод, будто он объявлен в классе JComponent. В целом, поддержка Java отличная.

В общем, интересный опыт. Теперь надо готовить презентацию.

Вписался

И зачем я только домой ездил на ночёвку?

Утром пошёл на работу - в Рыбацком отличная погода, а на Невском дождь. Почему на Невском, вы спросите? А потому, что Василеостровскую на год сегодня закрыли.

Бесплатных автобусов на время ремонта не будет, придётся пользоваться общественным транспортом.

вторник, 7 июля 2015 г.

Helloween

Нашёл тут что-то новенькое от давно забытой группы:

Kung Fury


Это какой-то трэш, угар и содомия! В начале - так ваще!!!

понедельник, 6 июля 2015 г.

Skype

Пришло загадочное письмо от Skype:
Средства на вашем счете будут деактивированы через 7 дня (дней)

Согласно нашим данным, вы уже довольно давно не пользовались средствами на своем счете в Skype. Деньги на счете деактивируются, если вы ни разу не использовали их в течение 180 дней. Однако беспокоиться не о чем: деактивированные средства можно будет активировать, когда они вам понадобятся. Просто войдите в свою учетную запись, выберите опцию "Активировать баланс на счете" и следуйте инструкциям на экране.
Получается, что если мне потребуется позвонить, то придётся плясать с бубном? Зачем им эти сложности?

Интересный ход

Продолжил прятаться от Чужого. Когда Рипли попросила рассказать Марлоу его историю, то вместо рассказа получилась мини игра за Марлоу на странной планете. Забавный способ передать атмосферу.

воскресенье, 5 июля 2015 г.

Троица


Вести с полей: гуляют...

Сушишоп

Заказал себе суши на обед, пришёл домой и обнаружил, что они забыли положить васаби. Пришлось идти снова. Хорошо, что недалеко. И они мне наложили не только васаби, но и имбиря.

суббота, 4 июля 2015 г.

Метизы

Зашёл сегодня в магазин купить пару шурупов, а мне сказали, что продать меньше пяти штук не могут, так как у них касса округляет до рубля, а шурупы выходят по 20 копеек. Интересно, как на это смотрит Общество защиты прав потребителей?

пятница, 3 июля 2015 г.

Nokia 105 black

Купил телефон на замену 1110, у которого отказал микрофон. Выбор обуславливался не только ценой, но и совместимостью батареи, которую мы относительно недавно обновили.

105 заметно легче, но проигрывает по эргономике. У него цветной экран, который блекнет на солнце. Менее рельефная клавиатура весьма непривычна на ощупь. Пару раз промахивался и выключал телефон, ибо соответсвующий пункт меню идёт первым в списке и подтверждения нет.

Функционал такой же, поэтому Мишке привыкать не придётся. Думаю: брать ли Лёшке такой же или от другого производителя?

четверг, 2 июля 2015 г.

Башни

Посидели с коллегами по Оракл в клубе Башни, провожая ещё пару человек, покидающих эту компанию.

Сам клуб находится на территории мотоцентра в одном из сохранившихся газгольдеров. На небольшой сцене иногда играют группы, но сегодня там крутили Убойные каникулы, а фоном шла отличная музыка. Пиво, кстати, понравилось, но название забыл.

Звенигородская

Последний раз я был на улице Звенигородская более десяти лет назад, когда ещё в Borland/TogetherSoft работал.

Сегодня я вышел прямо на эту улицу с новой станции метро Звенигородская и не узнал местности. Даже пришлось у таксиста какого-то спрашивать в какой стороне Обводный канал. Я помню эту улицу тихо и пустынной, со старыми неухоженными домами. А теперь это просто какая-то оживлённая магистраль!

Летало

В полдень я опять вышел на крышу, а там тепло и облаков нет. А самое главное, что авиация уже в воздухе.


Сначала половина офиса вышла поглазеть, но полтора часа отсидели не все.


Самое прикольное, что у одного из коллег оказался бинокль, которого вполне хватало, чтобы различать разные группы самолётов.

Разбор полётов

Связался с хозяйкой гостиницы, в которой мы останавливались. Она говорит, что их район не зацепило. Судя по всему, эта статья достаточно убедительно расписывает причины затопления.

Нелётная погода

Согласно расписанию, с 10:30 до 13:20 над нами должны летать самолёты. До сих пор ещё никто не пролетел, а я уже замёрз. Какое-то холодное лето выдалось...

среда, 1 июля 2015 г.

Кубинка

Сегодня нашёл информацию о том, как надо устанавливать аудиогид для танкового музея. С этого сайта переходим в соответствующий магазин и ставим.

Интересующиеся могут поставить эту программу с описанием танков, так как в бесплатной версии их маловато будет.

Nekrogoblikon

В новом клипе группа решила показать, как можно достигнуть успеха предыдущего, но как-то неубедительно:

Всё-таки, тот ролик был гениален!

вторник, 30 июня 2015 г.

ПетроЭлектроСбыт


А они, оказывается, следят за своей репутацией. Уважаю!