Monterey Bay Aquarium

В городе Монтерей, Калифорния, что на берегу Тихого Океана, работает один из самых больших аквариумов (океанариумов) в США. Сегодня мы с Надей туда ездили.

Аквариум нам очень понравился. Похоже, что по выходным дням и праздникам там всегда много людей, что вполне заслуженно. Мы приехали поздно, и у нас до закрытия было только полтора часа. Мы успели всё обойти, но это было быстрее, чем хотелось бы. Я думаю, что идеально было бы провести там два-два с половиной часа. Короче говоря, мы планируем когда-нибудь съездить туда ещё.

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

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

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

Далее надины фотки с фотоаппарата и мои с телефона, некоторые с подписями. По нажатию открывается увеличенная фотография.

starfish

Continue reading “Monterey Bay Aquarium”

@VisibleForTesting не нужна

В Guava есть аннотация VisibleForTesting. Её описание из кода библиотеки:

Annotates a program element that exists, or is more widely visible than otherwise necessary, only for use in test code.

То есть предполагается, что этой аннотацией мы будем отмечать методы и поля, которые, по идее, должны были быть private, но для тестов были сделаны package-private или public.

По поводу этой аннотации я хотел бы сказать, что она, ИМХО, не нужна.

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

Так вот, нет ничего плохого в package-private членах. Они по-прежнему остаются недоступными для клиентов из других пакетов (это самое главное, потому что их обычно большинство). Для клиентов из того же пакета: сам факт того, что некоторое поле, метод или конструктор имеет ограниченную видимость, должен настораживать разработчика не хуже аннотации. Конечно, наверняка найдётся кто-нибудь, кого это не остановит от доступа к члену или методу не по назначению. Но, ей-богу, оно того не стоит:

До:

@VisibleForTesting
static final double AVOGADROS_NUMBER = 6.02214199e23;
@VisibleForTesting
static final double BOLTZMANN_CONSTANT = 1.3806503e-23;
@VisibleForTesting
static final double ELECTRON_MASS = 9.10938188e-31;

После:

static final double AVOGADROS_NUMBER = 6.02214199e23;
static final double BOLTZMANN_CONSTANT = 1.3806503e-23;
static final double ELECTRON_MASS = 9.10938188e-31;

И ещё. Описание к аннотации намекает, что некоторые члены могут быть не только раскрыты, но и созданы исключительно для тестирования. Так вот, я не Кент Бек, конечно, но вроде бы:

  1. продакшн код не должен испытывать никаких структурных изменений, сделанных исключительно для тестирования;

  2. если некоторый класс ну никак не протестировать без введения туда новых членов, то скорее всего беда с качеством кода. За подробностями можно обратиться к «Чистому коду».

А ещё я иногда вижу такое:

/* package */ class SomeClass implements SomeInterface  {

Для кого этот комментарий вообще?

Несогласные призываются в комменты.

Теннис в Mountain View

Вот уже пару месяцев мы с Надей играем в теннис.

Желание побегать по корту появилось относительно давно, а после покупки автомобиля причин откладывать первое занятие не осталось. Первым делом мы купили две самые простые ракетки и три мяча. После нескольких тренировок стало понятно, что для начала этого недостаточно: мячи разлетаются направо и налево после первого же удара, и их сбор по всему корту и его окрестностям отнимает очень много времени. Поэтому вскоре у нас появилось ещё два десятка самых дешёвых теннисных мячей и специальная корзина для их сбора и переноски. Корзина сделана из металлических прутьев. Если надавить ей на лежащий на земле мяч, тот пролезет в неё снизу, но не выпадет обратно. Это очень удобно при таком количестве мячей. С учётом чужих потерянных, которые всегда есть на корте и которые мы иногда используем и присваиваем, сейчас у нас их порядка трёх десятков. Больше не берём, потому что уже носить тяжело становится. Continue reading “Теннис в Mountain View”

Письменный экзамен на права и надмозги

Сегодня сдали письменный экзамен на водительские права в DMV (местное ГИБДД). Это тест из 48 вопросов, каждый с тремя вариантами ответа; можно сделать не более 6 ошибок. Сдавать можно, кроме английского, на ряде других языков, в том числе на русском. Дабы минимизировать риски, мы выбрали русский.

Что в общем-то было зря, потому что перевод на русский язык у них, похоже, делали надмозги с помощью Google Translate. Мне билет попался более не менее, а Наде не повезло: было несколько вопросов, явно переведённых с потерей смысла. Continue reading “Письменный экзамен на права и надмозги”

Публичность и опубликованность

Статья Мартина Фаулера Public versus Published Interfaces. В целом ничего очень нового или исключительно интересного, но заставила задуматься, почему различие public-published на уровне языка реализовано далеко не во всех языках.

Суть:

Публичный интерфейс, public interface — методы класса, которые могут быть использованы любыми другими объектами.

Опубликованный интерфейс, published interface — то, чем пользуются внешние клиенты нашей, например, библиотеки. Они вызывают методы и наследуются своими классами.

В Java нет способа явно отличить одно от другого. То есть если наша библиотека состоит из нескольких пакетов (что почти всегда), то публичные интерфейсы будут опубликованы и доступны внешним пользователям, даже если мы их делали только для внутреннего применения. Избежать этого никак, разве что в документации указывать пользователям, какие именно компоненты можно использовать.

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

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

25

Говорят, чтобы дополнительно мотивировать себя для достижения целей, нужно дать обещание себе и близким людям. Моими целями на 26-й год будут следующие:

1. Продолжать саморазвитие, как по профессии, так и во всём остальном. Понятное дело, не в ущерб работе, семье, здоровью и прочему хорошему. Continue reading “25”

Накопилось #5

В этот раз самое интересное — по медицине.

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

Ещё по теме (mi3ch). Continue reading “Накопилось #5”

О работе в Google

Nooglers

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

Проект. Я попал в проект облака сообщений для Android Google Cloud Messaging for Android. Эта система, которая, кроме прочего, доставляет на ваш андроидофон уведомления о новой почте, новых сообщениях в соц. сетях и подобном, даже если соответствующая программа не запущена. Если говорить конкретнее, то я занялся вот этим сервисом.

Люди. В проекте человек 15-20, из них только один американец. Я больше всего общаюсь с ребятами, которые начали одновременно со мной: это новозеландец и три китайца. Стоит ли говорить, сколько всего нового можно узнать от иностранцев, особенно от китайцев, которые очень любят рассказывать о своей родине. А когда у нас всех ещё уровень английского подрастёт, будет вообще фантастика. Кстати, чувак из Новой Зеландии говорит на британском английском, и в Америке его не все хорошо понимают. Continue reading “О работе в Google”

Black Friday

Black Friday, чёрная пятница — это пятница, следующая за Днём Благодарения в ноябре. В этот день, а также, в некоторой степени, за несколько дней до него, магазины Америки предлагают значительные скидки на свои товары. Толпа людей собирается у магазинов утром ко времени открытия, некоторые занимают места в очереди ещё ночью и прямо там спят. Большой популярностью пользуются брендовые магазины одежды, но самая жопа в магазинах электроники и товаров для дома, очередь в них начинается аж со среды. Я всегда думал, что это миф или по крайней мере большое преувеличение, но оказалось, что всё так и есть. Справедливости ради надо отметить, что скидки действительно очень большие, некоторые вещи расходятся считай что даром. Мы не настолько упоротые, чтобы ехать в магазин в такой день с утра, поэтому фотографий с открытия нет. Посмотрите видео, чтобы лучше представлять. Continue reading “Black Friday”

Купили

Надя написала пост про то, как мы покупали автомобиль в США.

Несколько заметок на тему от меня:

  • Любая первоначальная цена, предлагаемая дилером, может быть значительно снижена. Торговаться совсем не сложно, достаточно сравнить разные автомобили, понимать свои желания и возможности. «А в Сивике за те же деньги ещё и камера заднего вида есть», «А другой дилер нам предложил дешевле, вот посмотрите имеил», «Мы в полупустой квартире живём, а вы такой первый взнос от нас хотите», «Представляете, а в Тойоте нам то же самое про вас сказали», … Не стесняться! Здесь (но не только у автодилеров) на тебя не смотрят как на жлоба или дебила, если ты говоришь что не можешь или не хочешь себе этого позволить, или «спасибо, но $50 за чехол для телефона это вроде немного дохуя.»
  • Есть неплохие ресурсы типа carwoo.com или truecar.com, которые помогают сориентироваться по ценам и получить первые предложения от дилеров. На carwoo советую запретить дилерам звонить вам, так как эти ребята весьма настойчивые и быстро надоедают. Электронная почта рулит.
  • Грабли: часто банк устанавливает дневной лимит расходов с карточки порядка $1000 якобы во имя безопасности (редакция бложика не видит смысла в такой защите, есть же сберегательные счета). Поэтому оплата первого взноса карточкой может стать проблемой. Решение: взять с собой чековую книжку. Поскольку у редакции бложика всё как всегда, чековой книжки у нас до сих пор нет.
  • Грабли: чтобы купить автомобиль, нужна страховка. А чтобы оформить страховку, нужно взять VIN автомобиля у дилера. Это предполагает дополнительные перемещения по городу. Если времени мало, можно оформить страховку по телефону, но придётся долго диктовать разную информацию агенту (у меня заняло минут 40). Решение: иметь запас времени и ноутбук с интернетом и копиями важных документов с собой.

По поводу покупки автомобиля в целом могу посоветовать арендовать машину на выходные и оба дня посвятить выбору и оформлению. Кредитора и страховщика можно выбрать заранее; договор заключать проще в их офисах, а не по телефону или через интернет.