Знания нулевой ценности

February 9, 2017

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

На одном из серверов у нас почему-то поставился пермишен 777 на папку .gems и руби интерпретатор начинает выдавать Insecure world writable dir... что-то там, ошибка легко гуглится. Скриптец на руби, который выдает JSON, стал давать невалидный результат, так как первая строка стала ворнингом. Пермишен поправили - ошибка ушла. Я уверен, что это длинный хвост ошибок и мы с ней никогда больше не встретимся.

Или вот гайд по Hot Module Replacement - React. Там предлагается поставить:

npm install .. react-hot-loader@3.0.0-beta.6 webpack@2.1.0-beta.25 ...

Вот именно так, какие-то очень конкретные версии пакетов. И это не зря, если брать свежие версии пакетов, то HMR не работает. И мне лень разбираться почему, так как это все умрет. (Мой любимый пакет react-hot-loader@3.0.0-beta.6, вообще стабильная версия 1.1.3, есть пучок альф 2.* и вот шестая бета третьей версии. Все пользуются, хорошая :smile:)

Я когда-то знал отличия Visual Studio 6, от 2013-й (2013 наконец-то стала поддерживать почти полностью шаблоны, как в стандарте, а 6-я была шустрая и ламповая) - и вот зачем мне это сейчас? Поэтому, сегодня, стараюсь проскользнуть мимо отличий ансибла 2.0 и 2.2 (у нас часть рецептов собирается только одной версией, часть только другой, надо фиксить, но это другая история), я ни хочу вникать в чем разница es6 от es7, или где проходит граница руби и рейлс на каждой версии того и другого. В современном мире это все не очень важно.

PS: Почему-то пост не опубликовался утром, хотя хук сработал! Залил пост вручную только в 13:40. Спасибо Ивану за бдительность, :cat: :cat: :cat:!

0 Comments

3 течения ноды

February 8, 2017

В ноде я нашел 3 фундаментальных течения (а скорее всего их больше) при работе с асинхронностью:

  • Старая школа: колбеки и библиотека async соответственно.
  • Новая школа: промисы (и целый пучок стандартных и внешних реализаций).
  • Ультрановая школа: async/await и es7.

Не знаю, что и добавить, но вообще это немного наркомания :pill:

0 Comments

Дуров, верни панель

February 7, 2017

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

Дуров, верни обратно нормальную панель:

0 Comments

Опечатка в JavaScript

February 6, 2017

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

var a = 3
var b = 4
{a: a, b: b} //=> {a: 3, b: 4}
{a, b} //=> {a: 3, b: 4}

Если у вас название переменной совпадает с ключем, как часто бывает, то можно писать такие симпатичные конструкции, причем смешанный вариант {a, b: 4} тоже правильный.

0 Comments

Верю в будущих людей

February 3, 2017

33 года и уже суставы предсказывают перемену погоды (ок, еще не предсказывают, но готовь сани летом как говорится) и пора бы начать брюзжать, что раньше горы были выше, а реки глубже, но нет. 99% изменений в IT мне однозначно нравятся.

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

PGPASSWORD=secret psql -U user -h host -p 5432 db

супротив богомерзкой монго (хотя коннекшен стринг я увидел в первый раз именно там, а теперь большинство библиотек умеет коннектится так):

mongo mongodb://user:pass@host:2500/db

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

0 Comments

Как в ансибл добавить строчку в конфиг

February 2, 2017

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

- lineinfile: dest=/etc/hosts regexp='.*$' line="" state=present
  with_items: 
    - 10.0.0.5 awesome.host
    - 10.0.0.6 gorgeous.host

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

0 Comments

Крейсерский режим

February 1, 2017

На первой работе мы делали авиасимулятор Локон и много времени уделяли реалистичности на разных критических режимах: штопоры, резкое маневрирование низко над землей и прочий экстрим. В принципе, в игровом процессе, меня увлекало только заниматься разной дурью, типа пролетов под мостом на миг-31. Но это - игра, в реальных симуляторах, где тренируются летчики и пилоты, моделируют только штатные режимы поведения летательного аппарата, 30 градусов крена, или столько там - и все, задание не пройдено. В фильме "Чудо на Гудзоне" может быть обратили внимание, как самолет в симуляторе весело прыгает на текстуре, после неудачной посадки на землю.

Мне казалось, что это очень скучно - летать в штатных режимах (это как в 10 лет покупать чистую воду, без газа). Однако прошло время, и начал понимать. Сейчас я думаю, как режим дня влияет на мою произодительность, мне совершенно неинтересно, как сервер поведет себя на 95% CPU, что произойдет при запуске двух капистрано одновременно, не тянет включить экспериментальный флажок в ноде или воспользоваться новой фичей докера сразу после релиза. Крейсерский режим, с максимальной пользой при минимуме усилий и в зеленом режиме - мой выбор сейчас. Когда сложность и ответственность растет, то нештатные ситуации и так возникают постоянно, не очень благоразумно специально их провоцировать.

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

0 Comments

Получи свой сервер, друг

January 31, 2017

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

resource "digitalocean_droplet" "mylittleserver" {
  // ...
  provisioner "remote-exec" {
    inline = ["echo"]
  }
}

Если вы используете уже провизию (мы просто нет), то у вас магия уже есть.

0 Comments

Дебаты

January 30, 2017

Посмотрел тут дебаты Навального и Лебедева, про фактическую сторону уже написали многие, а что меня позабавило, это же были классический спор между менеджером и специалистом!

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

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

Мне ближе дорога специалиста, но надо понимать, что в глазах обывателей специалист всегда будет чудаком и людей, которые поймут его переживания и радости, будет очень мало. Уверен, что Игорь Сысоев, когда едет на работу на метро и читает книгу с телефона, как он рассказывал в интервью, врядли найдет поддержку у соседей по вагону (про него пишет Форбс, однако он едет на метро и даже наверняка не ведет инстаграмм со сказочного Бали - чудак, чего с него взять).

0 Comments

Миграция с 9.3 на 9.6

January 27, 2017

В прошлом году (люблю январь, "в прошлом году" звучит как давно-давно, на самом деле это было в 20-х числа декабря :smile:) мы переносили один проект на другую площадку и решили заодно обновить версию постгрес с 9.3 до 9.6.

В самой большой таблице, которая по правилу Паретто занимает 80% места, есть увесистая json-колонка data, по которой выборки реалтайм не происходят, но сохранять эту информацию нужно. И в постгрес за три минорных версии как-то так хорошо оптимизировали хранение JSON на диске, что база, которая занимала 30 гигабайт раньше, стала занимать 5 гигабайт.

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

0 Comments