суббота, 9 февраля 2019 г.

Медовик-йогуртовик

Сиэтлский снег я оставил для инстаграма, но надо и сюда что-нибудь написать. Пусть будет кулинарный пост. Месяц назад я решил худеть, а мой брат загорелся идеей испечь торт-медовик. Похудею я или нет, буду подводить итоги летом, а вот торт мы испекли. Два раза – первый традиционно со сметаной, а во второй раз уже я предложил заменить сметану на йогурт и посмотреть, что получится.


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


Рецепт, к которому мы пока пришли после двух итераций: к двум яйцам добавить чайную ложку соли, 4 столовые ложки сахара, перемешать (в рецептах из интернета будут мешать электрическим миксером, но мы не хотим забивать кухню разным хламом, поэтому готовим с помощью тех средневековых инструментов, которые уже есть в наличии):


Затем добавили 4 столовые ложки меда и 113 г (то есть четверть фунта) сливочного масла. Можно смесь погреть, чтобы масло растопилось. Добавили чайную ложку соды, но у нас ничего не пузырилось и в объеме не увеличивалось.

Наконец, стали сыпать муку. Для второго раза специально купили какую-то дорогую, чтобы не было потом сомнений, что плохо получилось из-за неправильной муки. Сколько сыпать муки – большой вопрос. Я читал рецепты, где получилось полужидкое тесто, но мы сыпем от души – “пока не будет отлипать от рук при замешивании”. Массу не измеряли.

Запихнули тесто на 40 минут в холодильник. Необходимость этого шага тоже пока неочевидна. В рецептах пишут: “Дайте тесту отдохнуть”. Но я в одушевленность теста не верю. Поэтому потом еще в шутку спрашивал брата: “Ты, когда тесто месил, его матом не ругал? А то оно обидится, и плохим выйдет”.


Дальше раскатали тесто на большом листе бумаги в примерно прямоугольник по размеру имеющегося у нас противня. Между прочим, с покупки скалки у нас и начались эти кулинарные эксперименты. До того мы только блины пекли. Был у нас замысел воспроизвести грузинскую пахлаву из Whole Foods, но только дешевле. Однозначного успеха мы в этом не достигли, и переключились на более понятные пироги с капустой.


Раскатанное тесто поставили в духовку на 20 минут при 350 ºF (175 ºС).


Секрет “ленивого” медовика в том, что все коржи пекутся одновременно. Не надо делить тесто на части, раскатывать, обрезать и печь каждую. У одного большого коржа отрезаются края (на пробу и на посыпку сверху), а затем он разрезается на четыре равные части.



Они смазываются кремом и складываются в стопку. В первый раз для крема мы использовали 450 г сметаны, 2 столовые ложки сахара и 113 г масла. Во второй раз решили, что йогурт и так сладкий, поэтому к 680 г йогурта добавили 113 г масла (нужно ли добавлять масло в крем – еще один предмет для споров; но брат посчитал, что маслом торт не испортишь).


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


По вкусу напоминал тот, который мы ели в детстве, но простор для экспериментов еще имеется. Следующий день становится соответственно Днем Медовика, когда его надо успеть съесть.

Расчет стоимости продуктов:
2 jumbo eggs из TJ’s - $0.33 ($1.99 за дюжину);
Tillamook butter 1/2 lb - $2.25 (но в том же TJ’s можно масло и за $2.99 за фунт купить, это уж мы экспериментируем с другими брендами);
Clover honey from TJ’s - $1.50 (12 oz стоило $3.49, но после двух медовиков мед еще остался); 1 lb (?) of Wheat Montana Flour - $1.30 (но муку, конечно, можно дешевле купить; ту же Gold Medal по $0.50 за фунт можно найти).
Greek Gods yogurt 24 oz - $3.59 (потом видели в другом магазине за $2.99; Tillamook сметана дешевле - $1.89 за фунт).
Пока получается $9 – сахар, соль и соду я не считаю ($0.10?), но можно и за $6 приготовить торт массой больше килограмма. Калории считайте сами ;)

Это сметанник:


Это йогуртовик:


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

суббота, 19 января 2019 г.

Почему я не продлеваю Amazon Prime

Я никогда не видел для себя большой пользы от Amazon Prime, на который подписано 100 млн домохозяйств. Но год назад я на фоне получения американского гражданства и создания сайта о грин-картах читал много юридической ерунды и даже подумывал о поступлении в law school в отдаленном будущем. На ютубе горячо рекомендовали сериал Suits на эту тему, а он был доступен на Amazon Prime Video. И это явилось последней каплей, чтобы попробовать подписаться на этот сервис ($109 за год с налогами; сейчас стало дороже).


Из заголовка видно, что особой ценности я в нем так для себя и не нашел. На самом amazon.com мы сделали 6 заказов на $475, пусть будет $500 с Whole Foods (который как магазин проигрывает связке Safeway–QFC–TJ’s по всем позициям; а Amazon Go – это аттракцион, куда можно зайти раз в жизни, но не более). Это мы еще старались заказывать побольше, раз Prime действует. Но дело в том, что у нас все есть, а обрастать хламом, пока у нас не будет своего дома для его хранения, я очень не люблю.

Не помогло и заведение кредитки от Chase, которая дает 5% cash back на покупки в Amazon для prime members. Без членства она дает 3%, то есть надо купить на $110 / (5% - 3%) = $5,500, чтобы окупить этим кэшбэком prime. Ну, хорошо, они дали $70 sign-up bonus, но у остальных кредиток подобные бонусы сейчас выше.

Сериал о юристах у меня не пошел дальше первого сезона, который я, так и быть, вымучил. Кино очень отличалось от того, что я читал в Federal Rules of Civil Procedure и все больше стало скатываться в разбор проблем в личной жизни жуликоватых людей. Реальным судам, подготовке документов там уделено очень мало времени. В общем, из них такие же юристы, какие ученые из чудиков в The Big Bang Theory. Все эти сериалы снимают для кого-то другого, но не для меня.

(При этом во время поездки в Нью-Йорк я бесплатно скачал на сайте сиэтлской библиотеки книгу “The Rainmaker” by John Grisham – тоже популярное чтение, тоже про юристов, но как раз на том юридическом уровне, какой я хотел найти в сериале).

Сериалы я вообще редко могу смотреть дальше первого сезона. Мне надоедает. Пробовал смотреть на Amazon Prime другие доступные там фильмы, как документальные (о Древнем Египте или о живности в Тихом океане), так и художественные. Некоторые мне весьма понравились (давно хотел посмотреть экранизацию Fiddler on the Roof 1971 года), но выбор там очень ограниченный. Если бы там были все фильмы за $120 в год, то я за такое готов платить. А так взял список из 20, которые я бы хотел посмотреть, и там нашелся только один. Мой брат вообще ничего там не посмотрел. Правильно, фильмы только от работы отвлекают, а для развлечения можно смотреть PUBG на Twitch (который принадлежит Amazon).

К тому же недавно другой принадлежащий Amazon сайт Imdb (собрание информации о фильмах) запустил сервис Freedive, где можно смотреть фильмы бесплатно, безо всякой подписки, но с рекламой. Я и в наших приложениях сторонник такой модели монетизации, и оказалось, что там выбор фильмов даже больше отвечает моим вкусам, чем на Amazon Prime. А блоки рекламы по 45 секунд каждые 10 минут я перетерплю. Все равно я фильмы сейчас смотрю, одним глазом что-то еще читая в соседнем окне. Во время рекламы читаю двумя глазами.

Что еще хорошего в Prime? Доставка за два дня? Так мы обычно все планируем заранее, никуда не торопимся и можем ждать посылку хоть неделю, хоть две. Бесплатные электронные и аудиокниги? Так тоже не все книги на свете. Чем это выгоднее сиэтлской библиотеки, где я могу те же книги скачать, чтобы читать на своем iPad (Amazon, понятное дело, пытается навязать свой Kindle)?

В общем, мое членство в Amazon Prime заканчивается через две недели, и я пока не намерен его продлевать. Этот пост я написал во многом, чтобы фанаты этого сервиса попробовали меня переубедить. Вдруг я чего-то не понимаю?

суббота, 5 января 2019 г.

Как я разбирал Chronometer и нашел “пасхальное яйцо”

Кто чем занимался 31 декабря, а я разбирал класс Chronometer из стандартной библиотеки Андроида. Как раз в 11:30 pm закончил. И вот хочу поделиться, что нового я узнал, плюс порассуждать о своем прогрессе в обучении программированию в целом.

Я уже писал, что в прошлом году, наконец, решил серьезно учить программирование. Вначале цель была – “выпускать собственные приложения”, но постепенно, осознав размах задачи, я поменял ее на более реалистичную – “понимать код, который пишет мой брат”. Искать работу разработчиком я не собираюсь, что сильно ограничивает набор тем и инструментов для изучения.

Моему брату надоели баги в кросс-платформенном движке cocos2d-x, на котором написаны наши приложения, поэтому он переписывает код на нативную для Андроида Java. Я установил Android Studio и принялся тоже учить Java и Android по разнообразным туториалам и официальной документации, чередуя теорию с практикой, то есть с написанием собственных небольших проектов.

Во всех наших приложениях есть “Игра на время”, где надо дать как можно больше правильных ответов за одну минуту. Поэтому я счел необходимым научиться вставлять в свои проекты отсчет времени. Разумеется, такие штуки не придумать самому, а надо искать в интернете готовые решения и подгонять их под свои задачи. Решений оказалось много разных. Я скопировал некий код в свой математический квиз, потратил пару часов, чтобы заставить его правильно работать, и еще пару часов, чтобы разобраться, как именно он работает:


Цифры “9.9” в верхнем правом углу и есть обратный отсчет времени: у вас осталось меньше десяти секунд, чтобы перемножить 27 на 22.

Для другого своего проектика “Отгадай цифры” я попробовал другое решение, которое подсмотрел в одном из чужих проектов на github, – готовый андроидный виджит Chronometer (в toolbar справа):


Брат посмотрел на мои поделки и сказал: “А вот теперь разберись, как этот хронометр работает?”. “Как же я могу это сделать?” – спросил я. Я уже знал, что в Android Studio можно щелкнуть на любой класс, зажав Cmd, и он откроет определение этого класса, но для стандартных андроидных классов он открывал мне только заголовки методов, без их внутренностей.

Брат покачал головой, насколько можно быть тупым, чтобы полгода учить Android, и даже не установить его исходный код, который, как оказалось, полностью открыт, и может быть легко дозагружен из интернета. После чего на меня напало воодушевление: я же могу сейчас почитать код, который настоящие гуглеры пишут, а не какие-то чудики с гитхаба. И 31 декабря я сел разбирать Chronometer.

В моем ученическом представлении разобрать класс – это прочитать его код, понять все слова и что какой метод делает. Код у Chronometer – всего 400 строчек с пробелами и комментариями.

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

Первым делом я увидел, что Chronometer наследует от TextView. Год назад я не понял бы, что это значит. Поэтому я постараюсь писать как можно проще, а если вставлять куски кода, то только для иллюстративных целей, понимать его необязательно. В общем, Chronometer – это обыкновенный кусок текста на экране, но еще с несколькими дополнительными методами, которые и определяют, что в этом тексте будет написано.


public class Chronometer extends TextView {


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


    private final Runnable mTickRunnable = new Runnable() {
        @Override
        public void run() {
            if (mRunning) {
                updateText(SystemClock.elapsedRealtime());
                dispatchChronometerTick();
                postDelayed(mTickRunnable, 1000);
            }
        }
    };


А вот время они берут разное. У меня было System.currentTimeMilles() – число миллисекунд между текущим временем и 1 января 1970 года по Гринвичу. А в Chronometer оказалась другая функция SystemClock.elapsedRealTime(), которая возвращает число миллисекунд с последней загрузки устройства, что намного логичнее, так как я не хочу, чтобы автоматическая смена часового пояса или перевод часов самим пользователем сбил мой хронометр на пару часов.

Я стал читать про разные системы времени, встретил незнакомый мне модификатор native у elapsedRealTime(), но брат, с которым я делился своими разысканиями, сказал мне не лезть в такие дебри. Native – обращение к коду, написанному не на Java. Android как операционная система является разновидностью Linux, поэтому такие фундаментальные вещи, как системное время достается через код на C.

То же самое он сказал мне о словечке synchronized, которое используется как модификатор метода updateText(long now) в Chronometer. Что это нечто, связанное с многопоточностью и что мне о таком рано знать. И вообще непонятно, что оно в хронометре делает, потому что вывод текста на экран – это основной поток. Брат решил, что это баг.

А вот следующая функция isTheFinalCountDown() багом не была:


/**
     * @return whether this is the final countdown
     */
    public boolean isTheFinalCountDown() {
        try {
            getContext().startActivity(
                    new Intent(Intent.ACTION_VIEW, Uri.parse("https://youtu.be/9jK-NcRmVcw"))
                            .addCategory(Intent.CATEGORY_BROWSABLE)
                            .addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT
                                    | Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT));
            return true;
        } catch (Exception e) {
            return false;
        }
    }


Из официальной документации класса Chronometer невозможно догадаться, что она делает. Проверят финальный ли это отсчет – что это значит?

Ответ есть в исходном коде. Моих познаний в Android уже было достаточно, чтобы понять, что при вызове этот метод попытается открыть в браузере YouTube, а там песню группы Europe “The Final Countdown” 1986 года. Популярную, судя по 500m+ просмотрам.

Зачем? Этим вопросом задавался не только я. Поэтому нашел обсуждение этого метода на Reddit, где все решили, что это так называемое “пасхальное яйцо” от разработчиков Google, добавленное, кстати, весьма недавно, в API 26 Android Oreo, вышедшей в 2017 году. Именно, чтобы заставить недоумевать, а потом улыбнуться тех, кто будет читать исходный код класса Chronometer.

Пользы от такого знания никакой, но почему-то именно в этот момент я решил, что не зря читал этот код. Намного полезнее мне было узнать, почему комментарии там написаны в таком странном формате с аннотациями типа @return. Официальная документация автоматически генерится из них с помощью программы Javadoc. То есть к исполняемому коду этот @return отношение не имеет, но позволяет писать комментарии к каждому классу и методу один раз в коде, а html для сайта со всеми гиперссылками получится автоматически.

А глобальный вывод в том, что в классе Chronometer нет ничего магического, чего я не смог бы сам воссоздать через TextView или собственный класс. Тем более оказалось, что в Chronometer нельзя задать формат, который показывал бы десятые доли секунды, как мы делаем в своих эппах. А когда знаешь, как он работает, то можешь и такую функциональность добавить и многое другое. У меня есть желание еще какой-нибудь несложный класс разобрать. Это как читать настоящие статьи вместо учебника по химии.

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

Можно заявить, что это уже не органика, а аналитика. Настоящая химия – это смешивать реагенты, а не гонять колонки. Но это не так. Вот и в программировании настоящая работа для меня еще и не начиналась. Я все еще барахтаюсь на учебном уровне, где все работает. А дальше надо заниматься скучными, сложными вещами: архитектурой, дизайном, тестированием.

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

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


Зато сегодня с утра за полчаса добавил в toolbar сердечки-жизни, которые гаснут с заполнением каждого ряда. Вот такое я уже умею. Научусь и с багами воевать. Когда-нибудь. Главное не грузить себя до потери всякой мотивации учиться.

суббота, 22 декабря 2018 г.

Швейцарцы подкинули $390

Полторы недели назад написал мне некий швейцарец (спасибо еще, что по-английски), что он отвечает в школе за покупку софта и скачал наше приложение о Кантонах Швейцарии (iOS, Android), но оно оказалось с рекламой. За сколько бы мы продали 600 копий приложения без рекламы?

Обычно я такие письма игнорирую или вежливо посылаю, как и на этот раз. Я ответил, что рекламу в приложении можно отключить через встроенную покупку, если это приложения для iOS, и нельзя отключить, если это Android. Уже не ожидал никакого ответа, но швейцарец оказался настойчивым. Видать, очень хотелось ему потратить школьные деньги в конце года.

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


Я прочитал его письмо брату, ожидая, что брат ухом не поведет ради сотен франков. Но к моему удивлению он сказал, что если приложение скомпилируется (мы ничего не обновляли и не выпускали с июня), то выпустить платную версию без рекламы и встроенных покупок несложно: удалять что-либо проще, чем добавлять.

Тут надо отметить еще несколько моментов, почему я игнорировал подобные просьбы в прошлом. И у Google, и у Apple есть такое понятие как спам-приложения. Они имеют отдаленное сходство с почтовым спамом, но в целом, запрещено выпускать много похожих приложений, которые можно было бы объединить в одно. Наши квизы на разные темы, очевидно, достаточно разные, чтобы не попадать под определение спама. И долгое время для многих разработчиков было совершенно нормальным выпускать сразу два приложения: бесплатную версию – урезанную или с рекламой – и полную платную версию без рекламы. Но в последние пару лет магазины стали требовать, чтобы приложение было одно, а отключение рекламы и дополнительный функционал приобретался бы через встроенные покупки.

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

И в этом еще одна причина, почему я не хочу ничего продавать школам. Мне нравится, что мы не получаем много денег от одного клиента, а потому имеем право игнорировать его требования. Почти все наши доходы – рекламные отчисления от больших корпораций, а сами пользователи нам напрямую ничего не платят. Редкие покупки на iOS не превышают $2-3. А тут нам предлагают в сто раз больше. Но швейцарцы богатые, и они сами напрашиваются. Я их не искал и никого не упрашивал покупать наши приложения. Наоборот, пытался склонить к бесплатной для них рекламной модели. Но вот школы настолько рекламы боятся, что готовы платить.

Новый старый эпп был собран за пару часов. Я со своей стороны немного поменял иконку, переставил слова в названии, чтобы самому не запутаться, где что. И поставил цену в 2 швейцарских франка за штуку. В iOS нельзя ставить свои цены в каждой валюте, можно только выбирать фиксированные уровни. Вот это был Tier 2. Я, конечно, мог бы выбрать Tier 1 с ценами 0.99, но швейцарец получит 50% скидку как образовательное учреждение (есть такая опция у Apple), и он сам сказал, что готов заплатить 600 за 600. Швейцарские кантоны (iOS) были одобрены к продаже на следующий день без лишних вопросов со стороны проверяющих.


А в понедельник в Швейцарии было куплено 600 копий. После вычета налогов и доли Apple в 30% наш доход оценили в $390 (швейцарский франк сейчас стоит примерно как доллар США). Когда эти деньги дойдут до моего банковского счета где-то в феврале, еще вычтут пару баксов на курсах валют. График продаж я уже помещал в начале поста. Этот день возвышается горой над обычным фоном продаж в $5-15 в день. Но мы зарабатываем на рекламе. Мы даже не побили свой рекорд по доходам за один день: с рекламой получилось $947, а рекорд в $1112 держится с 15 июля, когда флаги рвались в топ.

Забавно, что это новое приложение успел купить еще кто-то из Швейцарии (тому челу я вместе с ссылкой посылал промо-код, чтобы он мог скачать эпп бесплатно и убедиться, что это именно то, что ему нужно). Хотя в два раза дешевле было бы скачать бесплатную версию и отключить там рекламу. Я пока цену менять не собираюсь. Но и не ожидаю, что это приложение будут часто покупать. Разве что другие швейцарские школы. Возможно, есть смысл выпустить подобную платную безрекламную версию и нашего приложения о Штатах США (iOS, Android), насчет которого в прошлом тоже интересовались представители школ.

Но Швейцария – страна особенная. На той же неделе я выписывал доходы по всем 230 странам и территориям за полгода. Главной моей целью было проверить эффект от переводов географических приложений на венгерский и румынский языки, которым я занимался в феврале. И Венгрия, и Румыния продемонстрировали явный рост доходов на фоне других стран. Я бы оценил эти переводы, как дополнительные $1500-2000 в год. Намного больше, чем эта возня с кантонами, которая принесет $2000 хорошо, если за 5 лет.

В то же время обратил внимание на топ стран. То, что США на первом месте, никого не удивит. Но США большие, с населением в 320 млн человек. А вот маленькая (8,5 млн человек) Швейцария на 4-м месте – это аномалия. Я пересчитал доходы “на тысячу душ населения”, получилось:
1) США, всего 93k, “на тысячу американцев” $0.28.
2) Германия - 67k и $0.81 (с немецкого носа имеем больше, чем с американского; но в США конкуренция большая, а на немецкий переводят далеко не все).
3) Франция - 53k и $0.81.
4) Швейцария - 35k и $4.13 (в Швейцарии наши доходы на душу населения в 15 раз выше, чем в США).
5) Россия - 34k и $0.23.
6) Япония - 23k и $0.18.

И дальше ни одной стране, даже Люксембургу, не удалось и близко приблизиться к швейцарским показателям. В Швеции $1.66 на тысячу шведов, но это все равно в 2,5 раза меньше. Я когда-то читал, что Швейцария – лидер по числу олимпийских чемпионов и нобелевских лауреатов на душу населения. Для нас они тоже “сверхнация”. Пусть учат свои кантоны по нашему приложению.

Швейцария – еще единственная страна, где Apple позволяет искать ключевые слова сразу на 4 языках: английском, немецком, французском и итальянском. Так как мы свои приложения не рекламируем, а полагаемся на такой вот “органический” поиск, то это может играть свою роль. Вот в Android можно искать в любой стране на всех языках, а в Apple есть четкие таблицы. И в той же Беларуси ищутся только слова из английской версии, но не русской, что бред.

Из-за того, что Apple не поддерживал такие важные языки как польский или чешский, мы долгое время не хотели добавлять их в наши приложения. Какой смысл, если их никто не сможет найти? Польский разработчик должен был или добавлять польские слова в английскую версию, и тогда его приложение во всех странах мира искалось бы только по-польски. Или выпускать разные версии (в одной в английские ключевики вписаны польские, в другой – нормальные английские слова). Что является самым ярким примером того спама приложений, с которыми магазины борются.

И вот спустя 10 лет после запуска App Store Apple подключает возможность добавлять названия, ключевые слова и скриншоты еще на 9 языках, многие из которых мы давно уже добавили на Android (в iOS версиях они тоже были, но их никто не находил и не качал): и польский, и чешский, и украинский, и венгерский. В общем, я себе придумал занятие на следующие месяцы, не связанное с программированием, – придумывать ключевые слова на этих языках для всех наших популярных эппов. Когда мы их обновим, выход на новые рынки может принести до $1000 дополнительно каждый месяц (провожу параллели с долей доходов от этих стран на Android).

Вот такие подарки к НГ от Швейцарии и Apple.

суббота, 15 декабря 2018 г.

Tide Pods прячут от людей

Захотели мы как-то в ноябре посмотреть, сколько стоит Tide Pods в Safeway, чтобы потом сравнить с другими магазинами. Подходим к полке, а там стоят пустые банки – порошка внутри нет, а снаружи вопреки задумкам дизайнеров P&G налеплена надпись: “Чтобы купить, отнесите этот контейнер к кассиру”:


С тех пор как в нашем Safeway поставили self-checkout, мы к кассирам там не ходим (я вечно на них жаловался, что они пробивают ошибочные цены), а тут столько дополнительной возни, еще ждать, когда работник магазина принесет порошок. Будто сигареты покупаешь.

Я сразу понял, что это все последствия интернет-мема, который был особенно популярен год назад. Некоторым людям кажется, что Tide Pods внешне похожи на конфеты:


Употреблении их вовнутрь даже заслужило отдельной статьи в Wikipedia. С 2012 года, когда эти Tide Pods стали выпускать, от отравления умерло 6 человек. Ежегодно несколько тысяч человек обращаются за медицинской помощью после того, как съели эти поды. Но обычно это были дети до 5 лет или люди, страдающие слабоумием.

А тут некий шутник опубликовал на ютуб Tide Pod Challenge – предложил молодежи есть подз, чтобы показать, какие они крутые. Запретный плод сладок, вот и стала школота их жрать: и сырыми, и с молоком, и поджаренными на сковородке – и выкладывать все эти безобразия на ютуб. Большинство видео было в итоге удалено, остались только осуждающие и предупреждающие ролики. Я так понял, что никто в результате этого “вызова” не помер, но многие попали в больницу. Для здорового взрослого организма с двух-трех подов ничего не будет – ну, вырвет, пожжет в желудке некоторое время. Пить водку, скорее всего, опаснее.

В результате многие магазины в Сиэтле решили перестраховаться и стали прятать Tide Pods лучше, чем алкоголь. QFC (местный Kroger) тупо оставил пустые полки с ценниками:


И с просьбой спрашивать Tide Pods у работников магазина:


Safeway со своими пустыми банками все же элегантнее решил проблему, без исчезновения бренда Tide с полок. Walgreens стал запирать Pods за стекло, как обычно поступают с предметами, которые часто воруют:


Но магазины попроще, типа WinCo, обошлись предупреждением на ценнике, что продукт надо держать подальше от детей:


В Grocery Outlet еще и по-французски (для случайных канадцев?):


Это я уже стал в каждом магазине смотреть, как они решают проблему Tide Pods, и фоткать. В Walgreens только ради этого и зашли. Но мы в итоге купили пакет на Amazon – надо же как-то Prime Membership использовать:


К тому же там оказалась самая выгодная цена: $6.99 за 35 штук (сейчас он на Amazon $9.74, но тогда был еще электронный купон в $3) + 70 центов вашингтонский налог с продаж. У нас на одну стирку уходит 4 капсулы. Стираем раз в две недели. Где-то на 4 месяца хватит.

пятница, 7 декабря 2018 г.

Советы помещаю в блог

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

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

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

В том числе мне были заданы следующие конкретные вопросы:
1. Какие отношения должны быть между научным руководителем и сотрудником?
2. Как вообще понять, какая научная группа нацелена на получение знаний, а кого интересует только хиршево-материальная составляющая?
3. Как оптимизировать всю ненужную бумажную работу, чтобы больше времени оставалось на науку? 

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

Во-первых, я сразу же посоветовал переквалифицироваться из химии в айти – чем раньше, тем лучше. Это общее наблюдение, к которому пришел не только я сам, но и несколько знакомых мне химиков и биологов. Квантовикам перестроиться проще, органикам сложнее, но лучше переучиваться в 22 года, чем в 33 (а в 33 лучше, чем в 44). И дело не только в деньгах и общей бесперспективности химии в современном мире. Я собирался быть профессором в том числе, потому что хотел достичь той ментальной гармонии, которую можно назвать work-life balance, но для меня это комплексное состояние без постоянного стресса, без моральных дилемм и компромиссов. И когда я лучше познакомился с тем, чем именно занимаются профессора, я серьезно задумался о том, чтобы заняться чем-то другим. И вот, разрабатывая с братом мобильные приложения, я нашел ту гармонию, о которой мечтал.

Сейчас я учу Java и Android Development. Чтобы хоть немного разбираться в коде, который будет писать мой брат. Жалею, что не начал учить программирование раньше. Не в том смысле, что в детстве, вместе с братом по тем же книжкам, а не начал четыре года назад осенью 2014 года, когда у меня к этому были все возможности и мотивация.

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

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

Всю бессмысленность и несправедливость академии можно увидеть только изнутри и в процессе. Обычно к концу аспирантуры. И тут проверяется верность человека научным идеалам. Если он готов ради них страдать и писать гранты, то пусть будет профессором. Если не готов, то это тоже нормально. Но я предупреждал, что так и будет :)

Во-вторых, я дал несколько общих соображений, как выбрать профессора (спрашивать недавних выпускников, не идти к тем, у кого слишком большая группа – больше 20 человек – или, наоборот, слишком маленькая, не идти к тем, кто заставляет аспирантов преподавать по много лет), но предупредил, что самое важное – это проект. Он определяет больше половины успеха в аспирантуре. Я на это насмотрелся и в Питтсбурге, и в Беркли. И вначале не понятно ни профессору, ни аспиранту, где золотое дно, которое принесет много крутых статей, а где “гроб”, который заведет в тупик. И не всегда потом можно будет проект безболезненно поменять.

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

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

Или рассказывали мне такую историю: в группу очень известного профессора приходит новый постдок. И его ставят доделывать проект, который бросил, уйдя на работу в индустрию, предыдущий постдок. Там остается доделать пару примеров, и за две недели работы новый постдок завершает проект, который публикуется в Science, он там оказывается вторым автором – неплохо для двух недель работы и свежего постдока. Но при этом все понимают, что любой компетентный химик на его месте добился бы того же. Но публикация есть публикация. Любой другой вариант (не включать его автором; не отпускать первого постдока, пока тот все не завершит; не заканчивать проект вообще) выглядит еще несправедливее.

Я и с мобильными приложениями провожу параллели. Допустим, мы решили не сами создавать эппы, а заказывать их фрилансерам с уговором разделить доходы пополам (не самая глупая схема, но нам спокойнее все делать самим). И вот я раздаю темы приложений, мне все они кажутся хорошими и перспективными. На каждую тему уже существует много успешных приложений в магазине. Кому-то достаются “Флаги”, которые принесли нам на сегодняшний день 100k+, а кому-то “Города”, которые принесли всего 14k. Но при этом сделать базу данных для “Флагов” намного проще: список стран понятен, все есть в Wikipedia; а для городов надо определиться, какие города включать, найти для них хорошие фото. И кто-то за меньшую работу получит в 7 раз больше, чем другой за большую. Тут получилась бы такая же лотерея как с научными проектами.

В-третьих, я посоветовал искать во время или после аспирантуры возможности индустриальных стажировок. Среди компьютерщиков они распространены, а у химиков нет. И зря. Когда-то я считал индустрию скучной, несвободной, но индустрия разная бывает, как я имел возможность узнать, общаясь с друзьями, кто туда пошел. Энтузиасты науки, которыми являются многие начинающие аспиранты, не понимают, что я имею в виду под “кризисом финансирования” в академии. Им кажется, что если все, что им надо для счастья – небольшая зарплата, чтобы на нее можно было прожить, и лаба, оснащенная для занятия их любимой наукой, то государству будет несложно выделять ежегодно пару миллионов из триллионного бюджета.

И государству действительно несложно. Американское правительство готово содержать, скажем, 4000 химических лабораторий. Проблема только, что энтузиастов-химиков больше 4000. А многие хотят пожизненных гарантий, что если они один раз попали в топ-4000, их будут кормить до пенсии, а каждый год бороться с другими энтузиастами за место в кормушке они считают недостойной ученого “хиршево-материальной” возней.

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

пятница, 30 ноября 2018 г.

Нью-Йорк: “Мефистофель” и “Триптих”

Когда-то я помнил, сколько раз мы были в Нью-Йорке, а сейчас уже сбился со счета. Одних только спектаклей в Metropolitan Opera мы посетили 22 штуки. Два года мы не были в “столице мира”, и вот вновь собрались посмотреть две оперы, увидеться с друзьями в Принстоне, посетить два музея и прогуляться по трем паркам.


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


“Здания-утюга”:


Или, прости господи, Таймс-сквера:


Но мы, наконец, доросли до того, чтобы зайти в MoMA (Музей современного искусства):


И Музей Соломона Гуггенхейма:


Десять лет назад мы бы там ничего не поняли, а сейчас уже что-то начали понимать. Вот наш автопортрет-отражение в арт-объекте Эльсуорта Келли:


Только после переезда в Сиэтл и регулярных прогулок в Olympic Sculpture Park’е начался мой интерес к современной скульптуре и знакомство с такими именами как Келли, Серра, и, конечно, Александр Колдер, о чьих работах в Нью-Йорке я сейчас мог бы отдельный пост написать. Мы обошли и тщательно их все обфотографировали, а ведь раньше бы мимо прошли:


О MoMA я тоже мог бы запросто отдельный пост сочинить с десятками фото. Ну, круто же – Малевич “Белое на белом”:


Или Мерет Оппенгейм “Меховой завтрак”:


Один вид из окна – как художественная инсталляция с глубокомысленным посылом:


Но подозреваю, что мои читатели разделятся на тех, кого современное искусство не трогает, кто смотрит на эти странные объекты как шагаловская корова:


или как коза Пикассо:


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


Вот в Гуггенхейме большую часть занимала выставка шведской художницы Хильмы аф Клинт, которую мы пока понять не смогли:


Зато здание музея (1959), спроектированное главным американским архитектором Фрэнком Ллойд Райтом, прикольное:


Можно ходить по спирали и смотреть, как экскурсоводы мучают школьников современным артом:


Мне кажется, что архитектура в целом доступнее для понимания, будь то дом по проекту Захи Хадид рядом с парком High Line:


Или строящиеся небоскребы района Hudson Yard:


Да даже заброшенное здание сахарной фабрики в новом парке Domino в Бруклине:


А про оперу я тем более стараюсь в жж подробно не писать, полистав несколько старых постов с нулем комментариев. На этот раз мы целенаправленно ехали слушать оперу Арриго Бойто “Мефистофель”. Кто из моих читателей о ней до этого слышал?


Это не критика, если что: наоборот, совершенно нормально о ней никогда не слышать. Ее так редко исполняют, что когда Мет объявил новый сезон, я сразу же решил ради нее ехать в НЙ. В “нагрузку” взяли билеты на “Триптих” Пуччини - тоже не самое известное его произведение. Точнее три одноактных оперы, которые исполняются в один вечер. В третьей опере “Джанни Скикки” заглавную роль исполнял Пласидо Доминго, для которого это 50-й юбилейный сезон в Мет. И в свои 77 лет он еще живее всех живых и поет погромче многих молодых певцов:


В НЙ чувствуется приближение Рождества. Как индейку съели, так стали елки ставить:


Мы зашли в собор Св. Патрика напротив Рокфеллер-центра:


И там уже собран рождественский вертеп:


В воскресенье погода была совсем не зимняя:


За Бруклинским мостом проглядывает Статуя Свободы:


А рекламный кораблик плывет мимо Вильямсбургского моста и в данный момент призывает запретить пластиковые трубочки для напитков:


Под конец размещу фотку еды из польского ресторана, это уж все должны понять и оценить :)