Еще одна неделя без картинок
Заболел . Поэтому на этой неделе блог будет без картинок, так как сканирую я их
(о ужас) на офисном принтере.
Блог, милый блог.
Заболел . Поэтому на этой неделе блог будет без картинок, так как сканирую я их
(о ужас) на офисном принтере.
Еще один забавный момент из мира баш-программирования. Экспериментировал я тут с эластиком и передавал полученный JSON на пост-обработку в функцию, примерно так:
function process {
echo $1 | jq "..."
}
out=`curl ...`
process out
Начиная с некоторого значения JSON стал приходить неполный и jq соответственно не мог его распарсить. Оказывается есть ограничение, нашел как обычно на stackoverflow:
$ getconf ARG_MAX # Get argument limit in bytes
# => 262144
Так что не нужно передавать агрументы длиннее 260 килобайт .
Этим летом как-то я приуныл, работа-дом-работа-дом и решил заняться личностным ростом, вот прямо так. Окинув жизненный опыт, а в 32 года уже обычно есть что окидывать, нашел одну закономерность. В тех делах был приятный результат, где я занимался чем-то регулярно. Из публичный вещей, это пожалуй комиты в рейлс. Я три месяца тратил на рейлс каждый день по 2-3 часа, включая выходные. В итоге попал в топ-50 контрибьютеров (за три года правда скатился в топ-100). В принципе с тех пор рейлс больше не учил, но тогда хорошо постарался, до сих пор помогает.
Поэтому я решил попробовать заменить спонтанную регулярность, на сознательную регулярность. Ну уже кстати есть первые результаты, не скажу, что жизнь стала как бутон розы, но точно приятней. За два месяца я сделал две вещи: пробежал программу 5K Runner от fitness22 и решил вести технический блог не меньше года, по истории каждый рабочий день.
По раннеру получился пробег 114 км, прямо как спорткар с нуля до сотни за два месяца . Просто оставлю здесь скриншоты первого
и последнего занятий:
Также опубликовал 42 поста с момента возрождения блога, то есть почти столько же, сколько за 3 года
до этого в сумме. Кстати очень помогает публичный контракт с вами, я заявил сроки, регулярность, теперь не отвертеться.
На самом деле зная себя, отвертеться можно и очень просто, но у меня еще есть серия трюков, которая, надеюсь поможет
не сойти с трассы. При случае расскажу. До встречи
Если база уперлась в диск по записи, то наверняка сайт ляжет. И помимо подкрутки собственно конфигурации важно узнать куда идет запись - уменьшить ее или вынести в другую базу. На постгресе есть простой способ выяснить какие таблицы дают наибольшую нагрузку.
Под вашим привычным трафиком сбрасываете счетчики статистики с помощью команды
select pg_stat_reset()
.
Потом смотрите какие таблицы лидеры по записи:
SELECT relname, n_tup_ins, n_tup_upd, n_tup_del, n_tup_ins + n_tup_upd + n_tup_del AS score
FROM pg_stat_user_tables ORDER BY score DESC LIMIT 7;
Скорее всего этой информации вам хватит для первой оптимизации.
TweetСовсем не про программирование, а про инвентаризацию привычек. Как и любой человек старой школы я
люблю раскладывать файлы по папкам. Я правда не очень организованный и в дропбоксе есть директории acrhive01
,
_old
, папка2
и подобные, но тем не менее с какой-то периодичностью садился и пытался навести
в файлах порядок.
Однако относительно недавно нашел очарование вкладки Recent
в гугл драйве и сортировки по дате
создания на диске. Оказывается в подавляющем большинстве случаев мне нужен документ или файл из первой
десятки просмотренных недавно! Теперь я просто швыряю новую папку или документ прямо в корень
(облако, оно же резиновое)
и не трачу силы на поиск правильного места и правильного названия. Только чуть-чуть мучает совесть, но
жить можно.
Так и в профессии, стараюсь время от времени пересматривать свои взгляды и привычки, вдруг они уже устарели.
TweetЯ люблю маленькие баш-скрипты. Это нативный, быстрой способ что-то автоматизировать, посчитать или сделать. Баш - полноценный язык программирования, хотя и с специфическим синтаксисом. Однако есть одна вещь, которая меня полностью убивает, не знаю зачем так сделано, даже гуглить не буду, может быть кто-нибудь в комментариях ответит.
Итак, интерпретатор баша исполняет скрипт строчка за строчкой и если поменять файл во время исполнения долгого скрипта, то эффект будет не предсказуемым. Это полностью ломает привычный шаблон разработчика, когда запустил программу и в этот момент меняешь код для следующего запуска. Я на этом попадался несколько раз и каждый раз был в шоке.
Самый простой пример, который смог сходу придумать:
# x.sh
echo sleep 1 >> x.sh
echo echo hello >> x.sh
Так вот, если запустить bash x.sh
, то он выведет hello
! WTF? Не знаю.
У нас есть негласное правило, что пул реквест должен хорошо выглядит в веб-интерфейсе гитхаба. Мне кажется это отличное соглашение, благодаря которому вводится несколько компромиссов, из-за которых иначе могут возникать споры.
Для начала ширина кода фиксируется на 140 символов, чтобы не было горизонтального скролла. Далее устанавливается очень разумное ограничение на количество одновременных изменений. Я не изучал точно как работает алгоритм гитхаба, но при попытке изменить слишком много файлов одновременно, он покажет только часть. Также не смотрим пул реквесты, которые не мержатся автоматически в мастер или у которых тесты красные (мы работаем по гитхаб-флоу и положительное ревью означает, что код может оказаться на продакшене через несколько минут, поэтому важно чтобы он был готов).
Более глубоким эффектом оказывается разделение рефакторинга и нового функционала. Если например меняется отступ в больших массивах кода, а это часто бывает при рефакторинге, то будет много красного и много зеленого. И уже не хочется в эти изменения что-то добавлять еще, так как пул реквест станет не читаемым. Поэтому все массивные изменения всегда идут отдельными пул реквестами, что сильно уменьшает влияние человеческого фактора.
Пожалуй самое забавное, что через некоторое время формируется ощущение, что полностью зеленые или полностью красные пул реквесты, более безопасные, чем полосатые. К полосатым - всегда повышенное внимание.
TweetВ гите есть забавная команда cherry-pick
, с помощью которой можно один или несколько комитов перенести из одной
ветки в другую. Вообще в гите много забавных команд, кто например знает про git rerere
? И сколько раз вы ее использовали
в повседневной практике? Я такую команду не знаю, ни разу не использовал, и даже желания нет. И вообще мне про
нее рассказал Тимур Минулин, думаю он ее тоже не использует, уж больно она экзотичная.
Так вот черри пик. А иногда возникает потребность перенести несколько записей из одной базы данных в другую, например для тестирования нужна маленькая часть большой таблицы. Это сделать очень просто с помощью одной шел команды:
psql db1 -c"COPY (SELECT * from table where id in (1,2)) TO STDOUT" | \
psql db2 -c"COPY table FROM stdin"
Таким образом можно переносить записи по произвольному запросу (конечно схемы таблиц должны совпадать), что в некоторых ситуациям помогает сэкономить много времени.
TweetНикогда бы не поверил, что самым лучшим инструментом проверки работоспособности сайта прямо сейчас является гугл аналитика,
а именно вкладка Real-Time
.
Более отзывчивого инструмента я не знаю, при любом подозрении в первую очередь смотрим именно туда. Начиная с некоторого
трафика любая значительная неровность на графике на 100% означает, что с сайтом проблемы.
Например так выглядит добавление колонки с дефалтовым значением в достаточно большую таблицу (мониторинг завопил, команда "под ружье", пока разобрались в чем проблема, начали чинить, колонка уже добавилась, но шрам остался).
В архивах также нашел такой график, не помню в чем была проблема, но чуть-чуть пользователей зацепило, помню что вовремя успели остановить деструктивное действие.
И вообще гугл аналитика шикарный инструмент. Там конечно много кнопочек и вкладочек, но умелые люди творят с ними просто чудеса.
TweetВ бизнесе в стиле фанк есть пример, когда ведущий журнал
по потребительству заявил, что все марки машин технически хороши, выбирайте себе по цвету, сервису, красоте и финансовым возможностям.
Мне кажется в веб-разработке тоже давно пора заявить, что все технологие хорошие, выбирайте те, у которых звездочек на гитхабе
больше . Это так и есть, современный веб можно написать в конечные сроки на любом популярном языке и фреймворке, конечно
с разной степенью комфорта.
Обратной стороной этого изобилия является невротизм выбора. Читал у одного психолога, что выбор из нескольких хороших вариантов - это большой стресс для человека. Именно поэтому всевозможным депрессиям и расстройствам подвержены больше жители развитых обществ. Удивительно, что выбор есть или не есть, менее травмирующий для психики, чем выбор чего бы такого поесть и чего бы этакого купить.
Вопрос моды в разработке сейчас играет большую роль и порождает много споров и стресса. У нас есть даже внутренняя шутка, что поздно учить
<имя технологии>, так как она уже у всех неделю в продакшене. Мне кажется, что выход тут такой же
как и в потребительском стрессе, признать,
что самые лучшие и модные ботинки, те, которые согревают ноги прямо сейчас, а самая правильная и прогрессивная технология - та, которая
решает ваши сегодняшние задачи (но по сторонам поглядывать ).