Клавиатура

В Яндексе у моих коллег была традиция дарить всем новым членам команды клавиатуру Microsoft Natural Ergonomic Keyboard 4000 на первый день рождения с момента начала работы. Примерно четыре с половиной года назад и я получил такую, и с тех пор работал только на ней. Когда переезжал в Штаты, непонятно зачем взял её с собой, ведь она громоздкая и не дорогая. Ну взял и взял, печатал на ней и здесь. Несколько раз вводил людей в ступор наличием кириллицы на клавишах.

Так вот, на днях на этой клавиатуре перестала работать моя любимая клавиша X. Я сразу заказал себе такую же новую клавиатуру, вот обе:

На новой клавиши более мягкие.

Эта новая клавиатура присоединилась на столе к двум вертикальным мышкам Evoluent — левой и правой (пользуюсь по очереди). К слову, они мне очень нравятся, хотя их кнопки могли быть и получше. Когда рука лежит на такой мышке, она принимает более естественное положение.

 

 

Флаги

Субботний вечер в Окленде.

Visualizing Concurrency Patterns in Go

Там вначале всё понятно и легко, а потом появляется Concurrent Prime Sieve (Многопоточное решето Эратосфена), которое слегка взрывает мозг поначалу, а потом оказывается очень элегантным.

Вообще, Go заставляет по-новому думать о многопоточности, и это делает его интересным.

Diablo

В этом году игре Diablo исполнится 20 лет. Её главный разработчик и автор идеи David Brevik выступил с докладом про создание игры. Очень интересно, посмотрел с удовольствием. Вопросы-ответы в конце не менее занятные, чем сам доклад. Понравился ответ на вопрос, как они сделали battle.net таким стабильным в 1997-то году, но не буду портить вам удовольствие.

На английском.

Desolation Wilderness

11-12 июня 2016

Desolation Wilderness (Дикий Пустырь, или что-то вроде того) — большая горная территория на Юге Тахо со множеством небольших озёр. Свежий воздух, потрясающие виды и доступ к пресной воде делают это место очень популярным среди туристов.

Как и во многих парках, там используется система разрешений (пермитов), позволяющих ставить палатку и ночевать — таким образом ограничивается поток людей. Какое-то количество пермитов можно зарезервировать заранее через интернет, ещё немного доступно только в офисе рейнджеров в день посещения в порядке живой очереди.

Поскольку мы с Надей не позаботились о разрешении заранее, а выбранное место и время были явно очень популярны, нам надо было ехать в этот офис рано утром, к открытию. Открываются они в 8, ехать туда часа два с половиной, а ложились спать мы в то время далеко за полночь. Отложенные сборы не позволили лечь спать раньше, поэтому спали мы в итоге часа два (что меньше, чем время в пути).

Это был наш первый двухдневный поход вдвоём, не считая собаки, поэтому хотелось, чтобы всё было хорошо. В итоге всё прошло вполне по плану. Мы приехали к рейнджерам аж за полчаса до открытия, к открытию были в начале небольшой очереди за разного рода разрешениями. Пермит был получен, и мы поехали к началу маршрута. Continue reading “Desolation Wilderness”

Чикаго 2016

Слетали в очередной раз в Чикаго, погуляли, встретились с Т. Мне хронически не хватает отпускных дней, поэтому я договорился с боссом, что поработаю неделю удалённо из чикагского офиса.

Утро первого рабочего дня. В прошлом году я был в этом офисе, но надо вспомнить точный адрес и построить маршрут. Беру телефон, ищу Google на карте. Нахожу почему-то только кафе, но зато примерно в том месте, где ожидал. Еду. Иду. Нахожу. Оказывается, Google съехал оттуда в прошлом году.

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

 

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

Спрашиваю на ресепшне про свободные места. Совсем незанятных столов нет, но некоторые люди работают из дома. Нахожу свободный стол, знакомлюсь с соседом, сажусь. Сосед спрашивает, над чем работаю, я ему — Spanner. — А что это?

Наверное, я так удивлённо на него посмотрел, потому что он сразу добавил, что он финансовый аналитик. А, я и забыл, что у нас кроме армии инженеров работает кто-то ещё.

 

* * *

 

Чикаго прекрасен в тёплое время года.

Плаваем на парусной лодке по Мичигану. Капитан в восторге от того, что мы взяли мыльные пузыри: ветер выдувает их много и быстро. Летя по спиралевидной траектории, пузыри быстро отдаляются от нас.

Chicago downtown view from Michigan

Chicago

Section 8 это статья в законодательстве, обеспечивающая финансовую помощь малоимущим в аренде жилья. У хозяина катера с юмором явно всё ок. Continue reading “Чикаго 2016”

The Design of Everyday Things

The Design of Everyday Things

Любопытная книга The Design of Everyday Things, автор Donald Norman. Дизайн это сложная дисциплина, которая отвечает за то, как люди взаимодействуют с материальным и нематериальным (внешний вид — это только один небольшой аспект дизайна). Эта книга покрывает многие (все?) стороны дизайна, начиная с того, что подсознательно происходит в головах у людей, и кончая местом дизайна в мире бизнеса.

Объясняется, почему мы путаем ручки конфорок на плитах и почему в очередной гостинице бывает трудно разобраться с душем. Отдельная большая глава посвящена человеческим ошибкам (автор разбирается в психологии). Я был рад получить из неё подтверждение своим мыслям по поводу человеческого фактора: поскольку всем известно, что людям свойственно ошибаться, нельзя ссылаться на эти ошибки как на причину техногенных аварий. Если человеческая погрешность привела к беде, виноват дизайн.

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

Памятка: перегрузка и переопределение

Скопировал из старого блога.

Overriding — переопределение — когда подкласс подсовывает свою реализацию метода вместо реализации в суперклассе. При вызове метода выбирается наиболее «специфическая» реализация, то есть реализация в подклассе, если она есть, приоритетнее реализации в суперклассе. В Java выбор выполняемого метода при переопределении происходит динамически (в рантайме) и не зависит от того, каким типом объявлена ссылка на объект:

public class TestOverriding {
    
    private static class Parent {
        String getName() { return "Parent"; }
    }

    private static class Child extends Parent {
        @Override
        String getName() { return "Child"; }
    }

    public static void main(String[] args) {
        Parent child = new Child();
        // Prints "Child"
        System.out.println(child.getName()); 
    }
}

Overloading — перегрузка — объявление методов (или конструкторов) с одинаковыми именами, но разными сигнатурами. Пример — все конструкторы любого класса, если их больше одного. В Java выбор имплементации при перегрузке происходит статически (во время компиляции) и не зависит от типа объекта в рантайме:

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

public class TestOverloading {

    static void classifyCollection(Collection<?> c) {
        System.out.println("Collection");
    }

    static void classifyCollection(Set<?> s) {
        System.out.println("Set");
    }

    public static void main(String[] args) {
        Collection<?> c = new HashSet<Object>();
        // prints "Collection"
        classifyCollection(c);
    }
}

Среды разработки

Работая в предыдущей команде (GCM), я писал на Java. Я пользовался Intellij IDEA (не люблю Eclipse) с плагинами для Protobuf и чего-то ещё. Всё было хорошо, и я был доволен.

В новой команде (Spanner/Test Infrastructure) я пишу на C++, Python, Go, Java — у нас тут несколько компонентов, написанных на разных языках и обильно склеенных Protobuf-ом. Я начал с Vim, мне не понравилось, попробовал нашу собственную IDE, тоже не особо. Потом подумал, что если мне нравилась Intellij, то может понравиться и CLion, среда разработки на C++ от тех же Jetbrains. Так оно и получилось, в общем. Конечно, с CLion у меня всё не идеально, и я продолжаю разбираться и подстраивать его под себя, но ничего удобнее мне пока не известно.

Как и Intellij, CLion имеет плагины для Python, Go и Protobuf. Однако у CLion нет плагина для Java, ровно как и у Intellij нет плагина для C/C++. Поэтому я, к большому своему сожалению, не могу вести всю свою разработку ни в одном из них. И я не могу понять, почему нельзя было сделать общую IDE платформу с плагинами под разные языки (чтобы некоторые плагины, например C++ и Java, были платными). Меня лично это бы очень устроило. Кажется, что сделать такую среду было бы вполне возможно, и она даже могла быть удобной и приятной в использовании (как умеют сделать в Intellij). Я не проверял, но есть подозрение, что Eclipse как раз таким комбайном и является, что, впрочем, не делает его более привлекательным для меня.

Achievement unlocked

Оставил ненадолго на весеннем калифорнийском солнышке.

iPhone needs to cool down