Ruby + JSON

April 15, 2017

Ой, а я и не заметил, что в руби 2.2+ нормально работает JSON:

$ docker run ruby:2.1.10 ruby -e 'a={"a":"b"};p a'
-e:1: syntax error, unexpected ':'

А уже в 2.2:

$ docker run ruby:2.2.0 ruby -e 'a={"a":"b"};p a'
{:a=>"b"}

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

0 Comments

Атака на клиентов R01

April 13, 2017

Друг недавно переслал письмо, которое выглядит точь в точь как от R01 с просьбой валидировать домен:

Красиво оформили чертяки, лайк! Я даже поверил в первую секунду. Но расширение .php выдало славного разведчика Исаева, а также адрес noreply@r01.tech.

0 Comments

Ноутбук, рюкзак, Ульяновск

April 12, 2017

Отправляюсь сегодня в славный город Ульяновск, на денек в наш офис и потом на стаченьку. И в честь этого рассказываю, что cron в Ubuntu 16.04 у меня почему-то заглючил при смене таймзоны. Не ожидал такого от утилиты, старше себя, но что есть, то есть. Из уважения к пенсионеру, обновили наш bootstrap рецепт, чтобы после установки таймзоны крон перегружался.

У стартапов есть такой этап от гаража до лофта, когда у них нет полноценных ставок для администраторов/девопсов. Особенно беда тем, кто вдруг распался на много продуктов, как мы. Тогда может оказаться, что в одном проекте работы на 0.2 человека, во втором на 0.05, а на следующией день появляется еще 3 продукта по 0.15 и один на 0.03. Серьезному человеку хостить 10 рейлс приложений будет скучновато, несерьезному - сложновато. И вообще серьезность начинается от трех человек, только тогда это команда и кворум.

На начальном этапе и среднем дико спасают PaaS'ы (привет Хероку), но может оказаться там тесновато, а для команды еще рановато. В принципе у меня есть решение, как можно с огоньком пережить это время. Я планирую в ближайший месяц-два-три его доосмыслить и опубликовать набор подходов, которые позволяет относительно маленькими усилиями на докерах в облаках управлять, скажем, сотней приложений, каждое из которых может обрабатывать сотни rps при необходимости. Оставайтесь на линии! :cocktail:

0 Comments

Интернет в метро

April 11, 2017

Я довольно долго не покупал интернет в метро, так как убеждал себя, что пользуюсь им мало и когда все таки мне он был нужен, то смотрел эти здоровенные зубы, какие-то мягонькие стелечки (кстати забавная реклама) и гладкие женские ноги. Потом я посмотрел, что тариф на год стоит 800 рублей, то есть есть 65 рублей в месяц, и заплатил.

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

0 Comments

Сравнить две директории из командной строки

April 10, 2017

Я использую блог как референс некоторых команд, которые нужны редко и я их забываю. Несколько лет назад у меня был пост как настраивать звук в убунту для двух моделей VAIO. Да, да, у нас дома было два ноутбука VAIO и звук там настраивался маленько по разному. И яркость. Блин, звук и яркость. Мои самые сильные ассоциации от убунту на ноуте.

Сегодня оставляю команду для сравнения двух директорий, которая мне нравится:

colordiff -Nur folder1 folder2

Это укороченный вариант более утонченной версии из этой SO дискуссии

diff -ENwbur repos1/ repos2/ # для эстетов, которым не сложно заполнить и
                             # 6 неочевидных опций команды `diff`.

ENwburdiff! Ктулху, выходи!

0 Comments

Docker run

April 7, 2017

В дефалтовой версии докер пробивает iptables при запуске через -p 3000:3000. Мы когда настраивали прометей в первый раз случайно таким образом вывели ендпойнты ноде экспортера наружу.

Чтобы этого избежать можно запускать контейнеры с явным указанием интерфейса, например: docker run -p 127.0.0.1:3000:3000 или docker run -p 168.192.10.1:3000:3000. Тогда докеры контейнеры не будут доступны из интернета.

0 Comments

На андроид стороне

April 6, 2017

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

Ну так, жить можно. Переход на удивление занял не много времени, уже через 2 часа поставил все приложения, которые мне нужны (а у меня их очень немного), поднастроил нотификации и дискомфорта не чувствую. Конечно шарма и минимализма у товарища Андроида поменьше, чем у благородного iOS, - кнопочки, плашечки какие-то левые, визуального мусора точно больше. Но почта, браузер, тудуист, все работает ожидаемо. Экран здоровенный, аппарат тяжелый, за 11к рублей нормально.

0 Comments

Дизайн и эволюция JavaScript

April 5, 2017

5 лет назад я стал ортодоксальным рубистом, сбежав из C++-кабалы. Руби - прост, но не убог, красив, но не уродлив, силен, но не слаб. Продолжать можно бесконечно. Сейчас, проматывая статьи про изменения в C++, я не понимаю и половины слов. Наверное, то, что очередные полиморные изоморфики попали в стандарт должно радовать, а отсутствие изоморных полиморфиков - печалить... Не знаю, я сбежал с этой вечеринки.

Но самое диво дивное это, конечно, JavaScript. Иногда кажется, что он даже не пытался побывать на уровне сложности C++ и сразу стал Хаскелем. Я уже старый и последний год программирую в основном на yml-файлах и баш скриптах, и, честно говоря, вообще не понимаю, как писать вот такое (Код взят из этой статьи - Вы знаете, что такое трансдьюсеры):

const firstTwoWins = compose(
  filter(({ my, others }) => my > others),
  map(({ gameID }) => gameID),
  take(2),
)

const result = transduce(firstTwoWins, append, [], scores)

Это даже не выглядит как javascript, если честно. Я помню там $("#element").hide() и поехали.

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

Ну и топчиковый коммент:

0 Comments

Искусство разложить файлы

April 4, 2017

Мне безумно нравится вот это выступление Игоря Сысоева на HighLoad++, которое хочется процитировать целиком:

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

Божественно, что когда система растет - как правильно разложить файлики, гораздо важнее rps и rpm. Логический хайлоад всегда наступает гораздо раньше и острее, чем фактический.

0 Comments