Дима Дорошев

Жизнь

Хорошо там, где нас нет

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

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

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

Посыл же вышеуказанных советчиков в том, что радикальные изменения не нужны, а то, что ты себе надумал - это блажь. Сиди, где обосновался, занимайся тем, чем занимался последние *дцать лет, и все будет хорошо. Все ведь уже хорошо, а ты что-то грустишь. Смирись. Не надо тебе никуда переезжать. Там тоже плохо. От своих проблем не убежишь. К чему вообще эти напряги?

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

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

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

Что-то менять, безусловно, сложно, и совет "хорошо там, где нас нет" как бы освобождает человека от этих сложностей. Более того, люди сами себя в этом убеждают, каждый раз ловя себя на настроении "как же все достало! я же хотел быть гонщиком Формулы-1, а не бумажки перекладывать".

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

Принципиальных выходов здесь примерно два:

  1. Менять вещи, перешагивая через страхи. Страхов много, начиная от боязни предстоящих трудностей, заканчивая тем, что "ой, а вдруг ничего не получится, и там будет настолько плохо, что мне придется вернуться обратно с позором?". Никакого позора не будет. Ты можешь уехать на несколько лет, вернуться и жить дальше. Можешь поменять работу и потом вернуться на прежнюю. Можешь создать несколько семей и каждую неделю их менять. (Конечно, если средства позволяют содержать всех их в достатке.)

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

  2. Стать стоиком! Стоицизм - это такая штука, которая помогает принять вообще любую ситуацию и не беспокоиться по этому поводу.

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

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

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

Как видите, в любом случае надо что-то менять. Ну или оставаться несчастным. Такие дела.

размышления страх стоицизм
Жизнь

Яндекс.Лавка

До сих пор не могу привыкнуть к тому, насколько быстрой стала доставка Лавки у нас на районе. Буквально сегодняшний случай: Юля просит заказать сыр, потому что закончился, а на завтрак хочется, уходит в душ, я набираю заказ из шести позиций в разном количестве (ну чтобы курьер не только с пачкой сыра к нам мотался), в 9:25 нажимаю "Оплатить", в 9:31 уже забираю пакет с продуктами у курьера, а спустя пару минут Юля выходит из душа. Сыр к завтраку уже на столе!

Окей, склад Лавки расположен довольно близко к нам, где-то в 500 метрах от дома. Но 6 минут - это то, что я ожидаю, если бы еду доставляли из соседней квартиры на моем этаже!

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

Я другой такой страны не знаю,
Где так шустро хавку привезут.

яндекс.лавка
Идея

Идея для стартапа

Недавно беседовал с приятелем о способах хранения сбережений. Один из неплохих - покупка недвижимости. Например, коммерческой. Покупаешь помещение, сдаешь его, получаешь доход раз в месяц. Надоело - продал подороже. Проблема, правда, в том, что хорошее помещение в Москве стоит дорого, не каждый может приземлить "в бетоне" 40-50 миллионов.

Что если позволить людям покупать нежвижку частями? Типа как во всяких современных инвестиционных приложениях. Листаешь каталог объектов, выбираешь понравившийся и покупаешь от него чуток. Либо находишь других чуваков, вы кооперируетесь и покупаете все помещение целиком. Допустим, вас набралось 40 человек, готовых скинуться по 1 миллиону, и каждому после сдачи помещения ежемесячно капает копеечка. Ну или не капает, если не нашел арендатора, зато деньги в сохранности. Захочешь их обратно - продашь свою долю по текущей рыночной цене.

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

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

Что думаете?

идея
Web

Старомодный сайт

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

Виджет подписки через Subscribe.ru - вишенка на торте.

Кому интересно - https://www.linuxrsp.ru/.

ностальгия
Жизнь

Chippendales

​​Однажды в детстве я наткнулся на передачу про нечто под названием Chippendales. Я тогда особо не вникал, просто сразу захотел ее посмотреть, потому что был полностью уверен в том, что это так или иначе связано с мультфильмом "Чип и Дейл".

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

Так и не дождался.

детство
Безопасность

Безопасность персональных данных

Вчерашнее событие с публикацией слитых с Яндекс.Еды персональных данных напомнило о базовых правилах предоставления информации онлайн-сервисам (особенно тем, что связаны с офлайном):

1. Никогда не сообщать свое настоящее имя. Лучше для каждого сервиса завести свое имя, в этом случае можно будет опознать, откуда случился слив, когда вам позвонят из службы безопасности Сбербанка со словами "Здравствуйте, Аристарх Акакиевич".

2. Все заказы оформлять на отдельный номер телефона. Вообще, очень удобно иметь разные номера "для своих" и для всего остального. Лучший пример - регистрация ИП. С первого же дня на каждого новоявленного ИПшника в РФ обрушивается шквал звонков от всех банков с предложениями обслуживания счета. В идеале, конечно, можно иметь разные номера для разных случаев, но звонилок не напасёшься.

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

3*. Для ценителей и богачей: можно покупать безымянные предоплаченные карты за криптовалюту. Выйдет дороговато, карта может жить недолго, пополнить ее нельзя, зато полная анонимность.

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

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

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

5***. Менять время от времени улицу, город или страну проживания.

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

Такие дела, обжоркины. Кидайте свои лайфхаки, если вас тоже иногда волнует безопасность своей частной жизни.


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

И имейте ввиду, что это список от человека, у которого смартфон со всеми включенными функциями, почта на именном домене, а номер телефона не менялся уже лет 15. Все мы лицемеры, да.

интернет персональные данные безопасность
Жизнь

Рублевые банкноты 1995 года

Оказывается, банкноты в том виде, к которому мы привыкли, выпустили еще в 1995 году. Но то было до обесценивания рубля в 1998 году, поэтому на всех купюрах было три дополнительных нуля. Купюры в 5 000 000 рублей тогда еще не было (современный "хабарыч" нарисовали только в 2006 году), зато приятно посмотреть на те 5000 рублей, сопоставимые по номиналу с более поздними 5 рублями.

Я таких денег совсем не помню. Зато хорошо помню купюры 1993 года, они были в ходу, и за синие 100 рублей можно было купить коробок спичек.

Эх, были времена.

деньги
Dev

Docker Buildkit: Правильное использование --mount=type=cache

TL;DR Содержимое каталогов, смонтированных через --mount=type=cache, не сохраняется в docker-образе, поэтому кэшировать надо не целевые каталоги, а промежуточные.

В dockerfile:1.3 появилась возможность монтировать файловые системы во время построения образа, в том числе и в целях кэширования: можно кэшировать скачанные пакеты или промежуточные артефакты компиляции.

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

# syntax=docker/dockerfile:1.3
FROM python:3.10

RUN mkdir /pip-packages

RUN --mount=type=cache,target=/pip-packages \
      pip install --target=/pip-packages uwsgi
> docker build -t pip-cache -f Dockerfile.pip .
# ...
[+] Building 14.6s (7/7) FINISHED

Выглядит, что все прошло успешно, но целевой каталог пуст:

> docker run -it --rm pip-cache ls -l /pip-packages
total 0

Что-то явно пошло не так. Во время сборки было видно, что uWSGI компилируется и устанавливается. Можно даже это проверить, добавив ls в процесс сборки:

RUN --mount=type=cache,target=/pip-packages \
      pip install --target=/pip-packages uwsgi \
      && ls -1 /pip-packages
> docker build -t pip-cache --progress=plain -f Dockerfile.pip .
<...>
#6 12.48 Successfully installed uwsgi-2.0.20
<...>
#6 12.91 __pycache__
#6 12.91 bin
#6 12.91 uWSGI-2.0.20.dist-info
#6 12.91 uwsgidecorators.py
#6 DONE 13.0s
<...>

Всё на месте. Но нет, в конечном образе снова пусто:

> docker run -it --rm pip-cache ls -l /pip-packages
total 0

А дело в том, что каталог /pip-packages, находящийся внутри образа, и каталог, который указан в RUN --mount=type=cache,target=<dirname>, разные. Попробуем что-нибудь положить в него заранее и посмотрим, как меняется его содержимое в процессе сборки:

RUN mkdir /pip-packages \
    && touch /pip-packages/foo \
    && ls -1 /pip-packages

RUN --mount=type=cache,target=/pip-packages \
    ls -1 /pip-packages \
    && pip install --target=/pip-packages uwsgi \
    && ls -1 /pip-packages

RUN ls -1 /pip-packages
> docker build -t pip-cache --progress=plain -f Dockerfile.pip-track .
<...>
#5 [stage-0 2/4] RUN mkdir /pip-packages
      && touch /pip-packages/foo
      && ls -1 /pip-packages
#5 sha256:fb542<...>
#5 0.211 foo  👈1️⃣
#5 DONE 0.2s

#6 [stage-0 3/4] RUN --mount=type=cache,target=/pip-packages
      ls -1 /pip-packages
      && pip install --target=/pip-packages uwsgi
      && ls -1 /pip-packages
#6 sha256:10ed6<...>
#6 0.292 __pycache__            👈2️⃣
#6 0.292 bin
#6 0.292 uWSGI-2.0.20.dist-info
#6 0.292 uwsgidecorators.py
#6 2.802 Collecting uwsgi       🤔3️⃣
#6 3.189   Downloading uwsgi-2.0.20.tar.gz (804 kB)
#6 4.400 Building wheels for collected packages: uwsgi
<...>
#6 13.34 __pycache__            👈4️⃣
#6 13.34 bin
#6 13.34 uWSGI-2.0.20.dist-info
#6 13.34 uwsgidecorators.py
#6 DONE 13.4s

#7 [stage-0 4/4] RUN ls -1 /pip-packages
#7 sha256:fb6f4<...>
#7 0.227 foo  👈5️⃣
#7 DONE 0.2s
<...>
  • 1️⃣ файл foo успешно создан
  • 2️⃣ примонтировался каталог с результатами предыдущего docker build, и файла foo там нет
  • 3️⃣ uWSGI снова скачивается, компилируется и устанавливается
  • 4️⃣ в каталоге появилась обновленная сборка uWSGI
  • 5️⃣ в каталоге остался только файл foo

Это означает, что --mount=type=cache работает только в контексте одной инструкции RUN, заменяя директорию, созданную внутри образа RUN mkdir /pip-packages, и затем возвращая ее обратно. При этом кэширование оказалось неэффективным, потому что pip заново установил uWSGI с полной компиляцией.

В данном случае корректно было бы кэшировать не целевую директорию, а /root/.cache, в которую pip складывает все артефакты:

RUN --mount=type=cache,target=/root/.cache \
    pip install --target=/pip-packages uwsgi
> docker build -t pip-cache -f Dockerfile.pip-right .
> docker run -it --rm pip-cache ls -1 /pip-packages
__pycache__
bin
uWSGI-2.0.20.dist-info
uwsgidecorators.py

Теперь все на месте, установленные пакеты никуда не делись.

Проверим эффективность кэширования, добавив пакет requests:

RUN --mount=type=cache,target=/root/.cache \
    pip install --target=/pip-packages uwsgi requests
                                                👆
> docker build -t pip-cache --progress=plain -f Dockerfile.pip-right .
<...>
#6 6.297 Collecting uwsgi
#6 6.297   Using cached uWSGI-<...>.whl  👈
#6 6.561 Collecting requests
#6 6.980   Downloading requests-2.27.1-py2.py3-none-any.whl (63 kB)
<...>

pip взял заранее собранный wheel-файл из /root/.cache и установил из него готовый к использованию пакет.

Все исходники доступны на GitHub.

docker cache python
Рефлексия

​​В прошлое за долларами

"А лучше в 1995-й вернуться и купить долларов по пять рублей, вот богатая бы стала, да?" - крикнула одна продавщица другой в продуктовом магазине, когда мы туда зашли. Диалог у них был из серии "если бы да кабы", но давайте предположим, что такая возможность есть: существует машина времени (и пространства, чтобы не умереть по дороге), которая может тебя отправить в 1995 год и вернуть обратно.

Весь такой радостный, ты набираешь кредитов, занимаешь у родственников, друзей, врагов, сгребаешь свои последние сбережения, и вот у тебя на руках 100 миллионов рублей. На них ты сможешь там купить 20 миллионов долларов и продать сегодня за 1,5 миллиарда рублей. Неплохо? Неплохо.

Садишься в машину, высаживаешься летом 1995 года в центре Москвы, оглядываешься вокруг и начинаешь понимать, что доллар стоит не 5 рублей, а 5000 рублей (на самом деле, около 4500), и не тех, что у тебя в чемодане, а вообще других. Твои сто миллионов, конечно, могли бы здесь стать сотней миллиардов, но поменять их негде.

Как поступить в этой ситуации, чтобы вернуться не с пустыми руками?

Можно поискать своих родственников или друзей (если они уже тогда были взрослыми) и попытаться уговорить их дать тебе все свои сбережения еще раз. Допустим, они поверили твоей истории, что в 2022 году все плохо, срочно нужно много долларов, и отдали тебе все, что у них осталось. На эти деньги ты купил валюту, вернулся в 2022 год, а тут всё поменялось. Те, у кого ты отнял деньги в 1995 году, стали нищими людьми, и их жизнь сложилась совсем иначе. Тебя никто не признаёт, друзей у тебя нет, и, возможно, ты сам исчез, потому что умер от тифа. Либо не исчез, если мы рассматриваем ситуацию в контексте теории альтернативных реальностей, но точно стал очень одиноким человеком. Зато с долларами.

Либо можно попробовать немножко заработать прямо тут, в 1995 году. Но вот беда, про тебя здесь никто не знает, а твой паспорт недействителен. И даже если ты найдешь работу без паспорта и каким-то чудом начнешь зарабатывать 500 000 рублей в месяц (500 рублей по-нашему), купить ты сможешь на эту зарплату только 100 долларов. При этом будешь жить голодный и на улице.

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

Рискованно, в общем. Если подвернется возможность сгонять за баксами в прошлое - дважды подумайте.

путешествие во времени обмен валюты
Языки

Учим немецкий

Герц (Гц) - это единица измерения частоты, сколько раз в секунду происходит какое-то событие. Названа в честь Генриха Герца (Heinrich Hertz). В спокойном состоянии сердце бьется примерно 60 раз в минуту, то есть с частотой 1 Гц. Сердце по-немецки - herz.

Подарок по-английски - gift. Gift на немецком означает яд.

Название буквы ß, "эсцет", буквально можно перевести как SZ (es-zett). На вид очень похожа на B или β (бета), но на самом деле это склейка двух букв: ſ (одно из древних начертаний s) и ʒ, которые не имеют к B никакого отношения (ſʒ → ß, красиво). При этом буква всегда была маленькая, а несколько лет назад появилась большая - ẞ.

Язык живет!

немецкий язык
Путешествия

Медовый месяц в Беларуси: Дорога и первый день в Минске

До Жуковского аэропорта от Москвы можно доехать на Рутакси за косарь и час-полтора.

Жуковский аэропорт - маленький, тихий, спокойный. Есть в зоне вылета нечего, там одна Шоколадница, в которой остались только кофе, пиво, холодные супы, куча народу и замученные официантки.

Перелет тоже шустрый, полтора часа, прямо как дорога из дома до аэропорта. Belavia - норм, дают вкусные сэндвичи.

На выходе из аэропорта можно купить местную симку МТС. Я взял ту, что с 2 Гб предоплаченного трафика, она стоит 14 белорусских рублей (~400₽) и действительна в течение месяца. Хотя можно было купить семидневную за семь рублей, где включен 1 Гб, а потом докупить трафика. А можно было использовать Drimsim, но я ее дома потерял.

Таксисты, окучивающие аэропорт, напористы, но отходчивы. То есть ты сам куда-то должен отойти, и они больше не пристают.

Местный Убер стоил 27 белорусских рублей до отеля (780₽). Водитель Джамалутдин половину пути молчал, потом разговорился. Рассказал, что с 5 утра до полудня ни одному самолету сесть не дали из-за тумана. Потом немного рассказал про город: вот тут дворец спорта, а тут еще один дворец спорта, вот тут хоккейный дворец, а там велотрек, и вообще у нас самый красивый и чистый город. Лукашенко, мол, любит спорт, поэтому строит кругом спорткомплексы. И еще гостиницы, в которых никто не живет, но их все равно строят. А вот этот дворец - резиденция Лукашенко. Когда он ее построил, заявил, что она будет для всех, но потом себе забрал. Примерно в таком духе экскурсия была.

Про самого Джамалутдина тоже есть история. Он родом из Грозного, в Первую чеченскую войну попал в передрягу, его чуть не убили. В самый критичный момент он что-то начал плести на белорусской мове, чем рассмешил обидчиков, и те его отпустили.

Поселились в "Юбилейном" отеле. В принципе, сносно, но в номере нет чайника (пожарная безопасность: курить можно, чайник нельзя), на этаже нет кулера-бойлера, поэтому за кипятком и чашками надо звонить. Поселили нас рядом с "конференц-залом", где группа персонажей отмечали новый год. Болтали, шумели, смеялись, стены тонкие, приятного мало. Пожаловались тётке, она сказала, что это ничего страшного, они там на час-два, ща посмотрю, ммм, нет, они до шести вечера. То есть надолго. Поспать в тишине с дороги не вышло.

Номер, кстати, тоже удачный, с видом на козырек с кондиционерами.

Решили пройтись и поискать какой-нибудь ресторан национальной кухни, потому что ну вы помните, в аэропорту есть нечего, в самолете бутербродик был, но хорошо бы нормально отобедать. Искали долго, промокли под дождем, в итоге нашли "Раковский Бровар". Помпезное двухэтажное заведение с вкусной едой, можно курить на первом этаже, что русскому глазу и носу уже очень непривычно. Поели борща, гренок, драников, клецок с ребрами, морса попили и на десерт умяли медовик на двоих с чаем. Всё вкусно, много и недорого, 53 белорусских рубля (~1550₽).

По дороге домой зашли в Euroopt за водичкой и вкусняшками. Это такой гипертрофированный Перекресток, вызывающий чувство неполноценности и ненависти к санкциям из-за огромного выбора. Полюбовались на диковинные фрукты (ох уж эта белорусская питайя!) и на сыры. Дорогущие шматы Пармиджано-Реджано и Грана падано обрадовали, но еще сильнее снизили самооценку.

Почему-то думал, что в Беларуси все по-русски шпарят по умолчанию, но кассирша в этом супермаркете говорила исключительно на белорусском. Действительно, с чего бы на такой работе билингвичать.

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

Шумные люди разошлись в шесть вечера, как и обещали.

Завтра едем в Дудутки. Пока плохо понимаю, что это, но там есть мельница. А где мельница, там я.

29 декабря 2017 года

Беларусь Минск
Рефлексия

В болезни будешь рожать детей

Размышлял пару дней назад на тему этого фрагмента из Бытия, когда Бог изгонял людей из рая

Жене сказал: умножая умножу скорбь твою в беременности твоей; в болезни будешь рождать детей...

Быт. 3:16

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

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

Как физиологически могло бы быть по-другому, если строение тела человека не менялось?

теология деторождение
Рефлексия

Дилемма об отношении к курьерам

Курьерам Деливери клаба, Яндекс.Еды, Яндекс.Лавки, Самоката и прочим пешевелосипедным трудягам зимой объективно тяжело работать (по крайней мере в Москве). Заказов много, на улице мороз. Смотришь, как он пробирается на велосипеде по льду, грязи или через сугробы, скользя колесами, и сердце кровью обливается от осознания того, что он так весь день мотается за гроши.

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

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

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

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

Сложная ситуация. Мне их все равно жалко, ничего не могу поделать.

курьеры здоровье еда
Рефлексия

Машина времени и пространства

Возможно, вы не задумывались, но машина времени должна перемещать человека не только во времени, но и в пространстве, учитывая положение Земли.

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

А если вселенная тоже не стоит на месте и двигается внутри другого пространства, о котором мы не знаем, то умереть можно примерно в 100% случаев перемещения, что бы ты там не рассчитал.

Приятного вам дня!

путешествие во времени
Жизнь

Я написал программу, которая сделала меня здоровее

Периодически из-за тонзиллита мне надо посещать лора примерно два раза в год: осмотреться, подлечиться, и всякое по мелочи.

Проблема в том, что лор в районной поликлинике один, и расписание к нему всегда забито на две недели вперед.

То есть если захочешь записаться через ЕМИАС, ничего не выйдет. Нужно постоянно перепроверять расписание и "ловить окошки".

Пару недель назад я как раз и поймал одно окошко, явился на прием, мне прописали курс поцедур, что означало еще 4-5 посещений, а следующая запись только через 10 дней.

Что ж делать, записался.

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

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

Я зашел на https://emias.info, посмотрел, как работает их API (кстати, для авторизации достаточно номера полиса и даты рождения, очень удобно) и написал за час небольшую программу, которая раз в минуту дергает расписание и присылает мне уведомление на почту об освободившемся "окошке". В телефоне настроил так, чтобы конкретно эти уведомления сразу появлялись на экране, а бонусом они появлялись и на часах.

Все сработало очень хорошо. Программа исправно и оперативно присылала мне каждый день освободившиеся слоты, и мне оставалось только их занять. А с помощью Юлиного полиса я "бронировал" запись следующего дня (пациенту нельзя записаться дважды к одному специалисту).

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

Пожалуй, это были самые полезные 200 строк кода в моей жизни.

здоровье программирование
Dev

Быстрый коммит и пуш

Хочу поделиться shell-функцией gacp (Git Add, Commit and Push), которую я придумал несколько месяцев назад и с тех пор использую ее примерно каждый час:

# fish
function gacp
    git add .
    git commit -m "$argv"
    git push origin HEAD
end
# bash/zsh
function gacp() {
    git add .
    git commit -m "$*"
    git push origin HEAD
}

Пример использования:

> gacp add some new crazy stuff
[master fb8dcc9] add some new crazy stuff
 <...>
Enumerating objects: 12, done.
 <...>
To github.com:foo/bar.git
   912c95d..fb9dcc9  master -> master

Наконец-то больше не придется городить цепочки с && и вставлять кавычки, когда надо написать в сообщении больше одного слова!

git shell
Жизнь

Мне позвонил мошенник, и я ему надоел

Позвонил чувак, представился следователем МВД по экономическим преступлениям. Затирал про то, что вчера какая-то дама ("племянница") хотела снять все мои деньги с нотариально заверенной доверенностью, потому что я в больнице. Я не в курсе такой схемы развода (и этот звонок у меня первый), поэтому решил поговорить, чтобы понять, куда оно вырулит.

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

Дальше разговор пошел в сторону, видимо, самого "расследования", и он спросил, бывал ли я у нотариуса. Я ответил "нет", тем самым предоставив еще немножко информации.

Но вот на последнем вопросе разговор совсем перестал клеиться: "Когда и кому я в последний раз показывал паспорт?" А я не помню, прям совсем, поэтому решил потупить и повспоминать. Чувака это очень злило, он давил фразами "вы тратите мое время", "вам что, смешно?", "вы будете отвечать?"

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

А этот "следователь" силой пытался вытащить из меня правильный ответ. Спрашивал, где я работаю и кому я показывал паспорт по этому поводу. Ну а так как я ИП (это открытая информация) и по этому поводу показывал документы только банку, то так и ответил. Но его это не устроило, и он захотел другого ответа.

В итоге я настоял на том, чтобы он записал мое "не помню", и чувак просто молча бросил трубку.

Я не понял, что это было и зачем. Номер, с которого звонили, не значился в спам-базах, а в поисковиках бился как "Горячая линия по вопросам ККТ ИФНС №5 по Москве". Конечно, я написал в банк и попробовал позвонить в ту налоговую, но налоговая вместо ответа сбросила звонок, а банк пока молчит.

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

А пока я словил ачивку, получил звонок из тех, о которых так много шутят вокруг, и зарепортил номер мошенников одним из первых, ура мне!

UPD: Альфа-Банк подтвердил, что это мошенники.

век живи диалоги мошенники
Работа

Не прокатило

Звонок программисту (П) от рекрутера (HR).

HR: Ало, привет, я Маша из агентства "Олег и таланты", у меня есть классная вакансия в международную компанию! Ищешь работу?

П: Ну так, чуток поглядываю. А расскажите вкратце, чем компания занимается?

HR: читает текст вакансии через строчку

Хм, ну хз.

Давай попробуем! Сколько денег хочешь?

350.

На руки?

Да.

Окей. Мне с тобой надо познакомиться поближе, я расскажу о вакансии, а ты расскажешь о себе.

Хорошо.

Когда тебе удобно?

Прямо сейчас, мы ведь уже разговариваем.

Нет, надо назначить встречу в Зуме с видеосвязью.

Хм, тогда можно завтра.

Окей, до связи!

Пока.


Знакомство рекрутера (HR) и программиста (П).

HR: Привет, как дела, ща расскажу о вакансии в этой крутой международной компании!

П: Давай.

HR: 10 минут зачитывает текст вакансии

HR: Че как?

Да вроде норм.

Тогда расскажи о себе.

П: 10 минут рассказывает о том, какой он классный и софтскиловый

Окей, супер. А сколько ты там денег хочешь?

350.

Ага. На руки?

Да.

Окей, я передам информацию и назначим собеседование!

Ок.


Техническое собеседование программиста (П) с командой программистов (КП)

КП: Привет, как дела, ща расскажем о нас!

П: Давайте.

КП: полчаса рассказывают про компанию, стек и как все дружно пишут REST-апишки

Че как?

Да вроде норм.

Тогда расскажи о себе.

П: полчаса рассказывает в деталях, какой он крутой технический специалист

ЧП: Окей, тогда давай спроектируем REST-апишку!

П: Давай.

П: полчаса проектирует REST-апишку

Супер! А сколько ты денег хочешь?

350.

Это на руки?

Да.

Окей, все круто, жди фидбек.

Пока.


Звонок программисту от рекрутера.

Вы всем понравились, надо назначить второе собеседование.

Какое еще второй собеседование?

Ну с чуваком поглавнее.

Ладно, давайте в такой-то день.

Ок!


Собеседование программиста (П) с чуваком поглавнее (ЧП).

ЧП: Привет, ты классно прошел техническое собеседование в нашу крутую международную компанию!

Супер!

Ща расскажу, че тут у нас в отделе.

ЧП: 20 минут рассказывает, че там у них в отделе

П: Ну неплохо.

А расскажи о себе?

П: 20 минут рассказывает о себе, какой он бизнес-ориентированный

Великолепно! А сколько денег хочешь?

350.

...Это на руки?

На ноги Да.

Окей, норм, жди фидбек.

Пока.


Неделю спустя программист пишет рекрутеру

Привет, че как там?

Отказались в пользу другого кандидата ¯\_(ツ)_/¯

Ок, бывает, приятно было пообщаться, до свидания.


Две недели спустя рекрутер пишет программисту

Ой, я тут все напутала, вы вообще красавчик и всем подходите!

Прикольно.

Тогда надо назначить встречу с еще там одним чуваком.

С каким?

Ну там последний чувак, в общем. Больше уже точно не будет!

Хм, ну давайте.


Собеседование программиста (П) с последним чуваком (ПЧ).

ПЧ: Привет, ты вроде клевый пацан, а мы клевая международная компания, хотим тебя брать!

П: Спасибо, я рад.

У нас тут так классно, так классно! <Рассказывает, как там классно>

Да, я понял.

Расскажешь чуть о себе?

П: рассказывает чуть о себе

ПЧ: Окей. Кстати, что у нас по REST-апишкам?

Эх... <Проектирует REST-апишку>

Окей, сколько денег хочешь?

350.

Ага, хорошо, давай, пока, скоро свяжемся.

Пока.


Звонок от рекрутера.

Знаете, вы всем так сильно понравились, и сейчас вам на почту пришлют оффер!

Ок.

Но там поменьше.

Сколько?

280.

...

...

Не, спасибо, я откажусь.

А почему? Вам денег мало?

Да. Спасибо, до свидания.


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

найм диалоги
Dev

Ж К П

В любом текстовом процессоре (Microsoft Word, Google Docs, LibreOffice) кнопки "полужирный", "курсив" и "подчеркнутый" находятся рядом:

Десятилетиями в голове устаканивался паттерн о том, что это свойства одного порядка. Хочешь сделать полужирный курсив, нажимаешь две кнопки рядом:

Хочешь жирный и подчеркнутый:

Про подчеркнутый курсив не буду - это для особенных людей.

В HTML-тегах с этим тоже просто. Есть три тега: b, i и u. Можно вкладывать их друг в друга и получать желаемую комбинацию:

<b><i>полужирный курсив</i></b>
<b><u>полужирный подчеркнутый</u></b>
<i><u>пожалуйста, не надо</u></i>

А в CSS это совершенно разные свойства:

{
/* полужирный */
font-weight: bold;

/* курсив */
font-style: italic;

/* подчеркнутый */
text-decoration: underline;
}

Про font-weight еще более-менее понятно, но правила применения двух остальных свойств я уже 13 лет не могу запомнить. Если нужно сделать подчеркнутый текст, а подсказок взять негде, я могу просто перебрать все варианты, пока не заработает:

text-style: underline;
font-style: underline;
font-decoration: underline;
text-underline: true;

Очень бесит. Хочется либо так:

font-style: bold;
font-style: bold, italic;
font-style: italic, underline;

Либо так:

font-bold: true;
font-underline: true;
font-italic: true;

Большего мне и не надо.

html css