Дианов Иван

Блог

Automated editing of multiple files with vim

Sometimes you need to process a heap of files, selecting them by mask or by list. It’s not common deal so I usually forget a sophisticated argdo syntax and do it manually.

But it turned out to be easy! I use mvim, but it will work to vim and vi as well.

Firstly, we open a bunch of files:

mvim filename-wildcard-1.txt filename-wildcard-2.txt filename-wildcard-3.txt

Or use a wildcard:

mvim filename-wildcard-*.txt

You will see the first file of the bunch. Now we going to make the same changes to every file using the recursive macro:

  1. q q q to empty q register. If you won’t the previous macro from q register will run on step 5.
  2. q q to start recording the macro.
  3. Do something to file. For example, remove first line with d d.
  4. Hummer out :w | n to write the file and to move to the next one.
  5. Hit @q to run current macro recursively. There’s a trick! On step 1. we’ve cleared the q register and nothing will happen. But after 6 step macro will be written into q register and run in this place on the next run.
  6. q to stop writing macro.
  7. @q to run the macro. It will run untill @q command and then run itself.

Macro runs itself untill it bumps into a last file. Notification will appear. Done!

Принципы совместной работы

Расскажу о своих ожиданиях к исполнителям.

Понимание задачи

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

Потом стал нанимать первых художников и разработчиков. Я не умел правильно с ними работать. Выходило так: я вытягивал из клиента все детали задачи, потом писал задания разработчикам: объяснял задачу, составлял ТЗ, описывал условия приёмки и прочее. А в итоге оказывалось, что исполнитель что-то понял неправильно, сделал не то, а я виноват, потому что плохо объяснил.

Теперь в работе пользуюсь принципом Бюро Горбунова: «исполнитель понимает задачу».

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

исполнитель отвечает за то, что правильно понял менеджера.

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

Дедлайн

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

Из сов в жаворонки

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

Наконец, нашёл свой способ.

Ставлю будильник на 7:00. Один день страдаю, на второй — легче.

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

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

Правильное расставание

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

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

Ещё можно лично кому-то спасибо сказать. А в момент расставания просто рукой помахать и уйти.

Убираем с ютуба рекомендованные ролики

hide-youtube-suggestions.jpg

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

Наконец додумался заблокировать это дело адблоком. В его конфиг надо добавить две строчки:

www.youtube.com##DIV[id="watch7-sidebar-contents"][class="watch-sidebar-gutter   yt-card yt-card-has-padding    yt-uix-expander yt-uix-expander-collapsed"]
www.youtube.com##DIV[class="ytp-endscreen-content"]

И красота!

Перешёл с иллюстратора на скетч

За две недели до сдачи диплома в Школе стажёров решил перенести проект с иллюстратора на скетч 3.6.1.

Экспорт ассетов

В скетче безумно крутой экспорт. Можно экспортнуть объекты из нужной группы, даже если они закрыты другими объектами. Экспорт всех ассетов сводится к Команд + Шифт + E, Ентер, Ентер. В иллюстраторе приходилось экспортировать группы по одной, скрывая остальные на время. А это в сто раз дольше.

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

Стили текста

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

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

Маски

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

Веб-дизайнерские фишки

В скетче можно 10 секунд сделать сетку для вёрстки макета. Количество колонок и их ширина настраиваются.

Неразрывные пробелы

Иллюстратор почему-то не даёт пользоваться неразрывными пробелами (альт+пробел). Приходится мучительно расставлять переносы строки (шифт-ентер). Если потом поменяю размер шрифта или блока — всё делать заново. В скетче альт+пробел работает, как надо.

Режим изоляции

В скетче его нет. Приходится лочить верхние слои Команд + Шифт + L.

Глобальные цвета

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

Свежий кефир из дальнего ряда

Свежий кефир из дальнего ряда

У меня была странная привычка. В супермаркетах перед покупкой я рассматривал несколько одинаковых упаковок с кефиром, сметаной или молоком, брал самую свежую.

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

Не тратить время на мусор

Лекции Людвига Быстроновского вдохновили меня на поиск приёмчиков, которые повышают продуктивность на работе.

Среди находок — заметил за собой любовь к работе как таковой. Без понимания конечного результата. Я могу два часа редактировать абзац, потому что одно предложение в нём кривое. Ломать голову, переписывать по сто раз. А через два часа поймать озарение и удалить предложение совсем. А потом поймать другое и удалить весь абзац. Потому что не нужен он был.

Спрашивается, что я делал всё это время?

Теперь запрещаю себе тратить время на мусор. Прежде, чем что-то делать, думаю, где это будет в финальном продукте и как этим будут пользоваться. Это не всегда понятно, но иногда очевидно.

Ошибка выжившего

Так называется одно из когнитивных искажений. «Ошибку выжившего» проще всего показать на примере:

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

Обобщим: у нас в эксперименте возможен один из двух исходов. Но сам эксперимент скрывает данные одного исхода, так что другой кажется стопроцентным. Другие примеры «ошибки выжившего»:

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

Как читать книги

Наконец, нашёл способ заставить себя читать профессиональную литературу. Помог подход «little and often» из книги «Do it tomorrow»: надо каждый день читать хотя бы одну страницу. Чтение идёт небыстро, но через несколько недель книга внезапно оказывается в списке прочитанных.

Такой подход отлично помогает и с наведением порядка в квартире.

Переключение раскладки

input-source-mapping.png

Раньше переключал раскладку кэпслоком. Сейчас тестирую переключение кнопками «команд». Левая — латиница, правая — кириллица. Не надо знать активную раскладку.

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

Моя система

Ещё в школе понял: я делаю что-то не так. Поздно ложусь, не успеваю, что хотел, забываю о важных делах и трачу время на ерунду.

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

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

Зачем нужна система

Чтобы жить хорошо.

Элементы системы

Цели

Цели — смысл всей системы. Целей должно быть много. Цель не поставлена, пока нет противоположной. Ещё лучше, когда вокруг цели кучка попутно достижимых.

Задачи

Задачи ставятся

  • по целям,
  • из идей (про них ниже),
  • по просьбам окружающих.

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

Если задача не делается, значит она плохо поставлена. Для меня откровением была лекция Макса Дорофеева «Джедайская техника пустого инбокса»

Хорошо поставленная задача выполняется с наполовину выключенным мозгом

Храню список задач в Тиктике. Часть дел привязана к датам, я увижу их в определённый день. Остальные лежат кучкой и ждут своего часа. Время от времени удаляю лишнее.

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

Задачи бывают разной степени детализации. От «Позвонить Пушкину +79051234567» до «Сходить в горный поход». Первая хороша: нажал на номер телефона, и готово. Вторая — не задача вовсе, это проект.

Проекты

Храню их в том же Тиктике, вперемежку с задачами. Чтобы выполнить проект «Сходить в горный поход», делаю так:

  1. Переименовываю его в «Сходить в горный поход: разбить на задачи». Такая штука сделается за две минуты.
  2. Ставлю эту задачу на завтра. Никаких задач на сегодня.
  3. На следующий день придумываю подзадачи и сохраняю их в описании родительской задачи. Вместо того, чтобы закрыть, переименовываю задачу в «Сходить в горный поход: сделать что-нибудь по списку».
  4. Переношу её на завтра и ставлю ежедневное повторение.

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

Идеи

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

База знаний

Сохраняю информацию.

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

Основа системы

Многие идеи взял из этих книжек:

Научное и важное

Друзья часто радуют утверждениями вроде:

Нельзя есть мясо. У него плохая энергетика.
Энергия огня делает человека деятельным.
Скорпионы упрямые.

У меня автоматически появляются вопросы.

  • Вы подарили мне сакральное знание. Спасибо! Что мне с ним теперь делать?
  • Как оно привязано к реальности? Как в этом убедиться? Какой эксперимент мог бы его опровергнуть?
  • Если знание не применимо, то зачем оно вообще?

Казалось бы, всё ненаучное знание не имеет права на существование. Но некоторые вещи вроде субъективных переживаний экспериментами не проверяются. «Мне хорошо» — ненаучное утверждение, но для меня оно важно.

До субъективных переживаний наука ещё не добралась

Информация типа «Солнце — это астральная проекция Ктулху» бесполезна для астрофизики. Однако, любой псевдонаучный бред изменит реальность, если им руководствоваться. Во имя ненаучных идей строят храмы, убивают неверных и ловят покемонов.

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

Идеальный движок блога

Идеальный блог:

  • Многоязычный.
  • С минималистичным интерфейсом, как у Драфтина.
  • С загрузкой картинок из буфера обмена.
  • Кастомный. Я хочу добавить врезки, фактоиды и прочее.
  • Иррационально кайфный.

Рассматривал варианты:

  • вордпрес,
  • друпал,
  • тумблер,
  • ЖЖ,
  • блоггер.

Друпал

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

wordpress

В вордпресе слишком много интерфейса

Вордпрес

Думал, что это гениальное решение. Все на нём делают блоги.

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

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

Интерфейс прозы

Проза — редктор сайтов на джекиле. Набираю этот текст в нём

Джекил

В последнее год работаю с этим «блогом для хакеров»: веду на нём пару проектов. На статических сайтах нельзя собирать комментарии без сторонних сервисов вроде дискуса. Картинки будут загружены без превьюшек. Добавление каждого тега будет страданием.

Зато остальное — кайф! Редактирование в маркдауне. Минималистичнее не бывает. Сделать своё оформление — легко! САСС из коробки. Бесплатный и быстрый хостинг на гитхабе. Никакой базы данных. Глоток свежего воздуха после монструозных ЦМС.

Думал, что главная проблема джекила — загрузка картинок. Оказывается, prose.io умеет загружать их на гитхаб и сразу вставлять ссылку на картинку.

Платформы блогинга

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

Тумблер

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

В остальном прикольная платформа. Может быть даже можно написать свои классы, но не хочется разбираться.

ЖЖ

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

Блоггер

Страшная админка. Пустое комьюнити. В остальном всё хорошо.

Итог

Выбрал джекил. Пусть без фичь, зато сколько удовольствия.

Making customer specific site versions

UPD: bad approach, don’t use it 😶

Jekyll provides great tool to keep separate folders with customer specific data. You can select one of them withing a single line in a config:

exclude:
  - _cards/
  - _areas/

include:
  - .htaccess
  - client1 

note, that is mask, so it matches to all files and folders containing

client1,
/client1/,
/client11/,
/_cards/client1/,
client1.md

Masks act a bit weiredly: client* will match to client1/, but client*/ will not.

Unfortunately jekyll doesn’t process collections nested to folders like /client1/_cards, it would be the most elegant solution though.

Красивые адреса страниц на Jekyll

Адреса материалов можно настраивать тремя способами:

  • Меняя путь к исходному файлу материала. Например, файл /blog/hello.md будет сконвертирован в /_site/blog/hello.html
  • Меняя пермалинк во фронтматтере у файла страницы. Где бы исходник материала не находился, можно задать

Скролл без дырок

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

Один из способов решения: останавливать скролл короткого столбца. Он реализован вконтакте на странице поиска человека.

hello world

Только что запустил свой первый блог на Jekyll и Github pages.

Подпишитесь на РСС