# Понедельник 31 твит
Доброе утро! На этой неделе с вами из <s>солнечного</s>заснеженного Сочи Дмитрий Бобров (@dvbobrov).
12:55Я работаю в компании Machine Learning Works, где занимаюсь чем попало, от собственно разработки до CI и системного администрирования.
12:55Мы поговорим о Java, Spring Boot, AWS, Docker и полезных инструментах для разработки.
12:56@backendsecret а Machine Learning готовишь?
Несмотря на название компании, в Machine Learning я понимаю примерно ничего, а занимаюсь в основном инфраструктурой… twitter.com/i/web/status/8…
13:00Итак, мы те сумасшедшие, кто в 2016 занимается веб-поиском в составе приложения для подростков под девизом "Hack math and chill".
13:51У нас есть пара десятков (микро)сервисов – часть на Java, часть на Python.
13:51Изменений очень много, и чтобы быстро и единообразно всю эту радость обновлять, мы выбрали Docker.
13:51@backendsecret что используете для деплоя? Я так понимаю у нас множество хостов. docker-compose для этого не подходит.
Почти все деплоим в Amazon ECS, который распределяет контейнеры по хостам, на которых достаточно ресурсов twitter.com/0xGreg/status/…
13:58У него есть несколько сущностей: ECS Cluster – набор машин, которые запустили агента и могут запускать таски.
14:04Task Definition – набор контейнеров с требуемыми ресурсами. Service – правила запуска: на каком кластере и сколько tasks поддерживать.
14:05@backendsecret есть ли какие-то особенности версионирования сервисов?
Мы собираем образы в TeamCity и заливаем в собственный Docker Registry, используя номер билда как тег twitter.com/mkuleshov/stat…
14:07В репозитории лежат task definitions в виде yaml. Нехитрый bash-скрипт через AWS CLI выкатывает новую версию в одно из окружений
14:10После этого переключает Service на новую версию, и ECS постепенно заменяет старые таски новыми
14:11Отлично, кучу контейнеров запустили, теперь нужно, чтобы они нашли друг друга. Для этого используем Consul consul.io
14:23Три штуки запущены в режиме сервера, на каждом хосте еще по агенту, с которыми и общаются сервисы
14:26Тут важно не забыть открыть порты не только на серверах, но и между всеми остальными хостами.
14:36Иначе начинают отваливаться health checks, и с точки зрения Consul доступность серверов будет "мигать"
14:36@backendsecret вы их подчищаете потом как-то? А то же их мильон будет
Когда будет очень много, придется сделать. Простого скрипта, который удалит недостижимые слои после удаления тегов,… twitter.com/i/web/status/8…
15:08@backendsecret а не пробовали Docker Cloud для оркестрации вместо ECS?
Мы начинали раньше, чем он релизнулся. А в чем профит? twitter.com/mkuleshov/stat…
15:33Немного о проблемах. ECS не позволяет запустить один и тот же контейнер на всех хостах, а нужен был registrator github.com/gliderlabs/reg…
15:37Пришлось собрать свой AMI, в котором нужные контейнеры запускаются сервисом systemd.
15:39В какой-то момент диски начали забиваться из-за того, что ECS-агент не подчищает старые образы. Добавили еще один скрипт, следящий за этим
15:42@backendsecret там definition поприятней. Остальное там как раз проблема, что получается часть в AWS все равно, а часть в DC.
Мы пишем довольно простой и компактный definition в YAML, который преобразуется в JSON для ECS, это не проблема twitter.com/mkuleshov/stat…
15:45Вообще, стараемся не использовать облачных решений, от которых тяжело будет избавиться, если придется переносить что-то из AWS.
15:59Ладно, пора бы что-нибудь полезное и по работе сделать, вернусь через пару часов. Вот вам пока пальмы со снегом :) pic.twitter.com/zni1nbL8DG
16:07@backendsecret а есть проблемы с кросс зависимостями внутри микросервисов? или они у вас каждый сам по себе
Общие зависимости есть, проблем не было. Если будут, то либо тестами поймаем, либо в крайнем случае сломаем staging… twitter.com/i/web/status/8…
18:25@backendsecret А на Beanstalk не смотрели? Взамен ECS.
Смотрели, но он, как я понимаю, поддерживает только 1 таску на EC2-инстанс, ECS запускает там, где есть свободные р… twitter.com/i/web/status/8…
18:40@backendsecret а если скажем либы лежат в гите и нужно сделать деплой под develop и production, то есть тянуть разные ревизии либ
Ну да, у нас всё в одном репозитории. Если надо сделать хотфикс на production, отведем от ревизии ветку и соберем и… twitter.com/i/web/status/8…
19:23Как у вас организован код в репозиториях? Почему?
20:12@backendsecret да, это ок, у нас везде разные репы и билдить под разные релизы - супер боль20:14
@backendsecret послушались вот таких статей vinaysahni.com/best-practices…
Там и написано, чтобы зависимости не шарились между проектами. А такое бывает редко twitter.com/raxpost/status…
20:58# Вторник 29 твитов
Cнова доброе утро! Еще немного про AWS. Правильный способ отдавать контент наружу – Elastic Load Balancer (не полагаться на статические IP)
12:13Ну мы радостно настроили ELB на HTTPS и заметили, что отдача ответов по частям (SSE) не работает.
12:15Оказывается, он не умеет в отключение буферизации ответов. Зато умеет работать в режиме TCP с PROXY-протоколом, который поддерживает nginx.
12:17В режиме TCP, конечно, никакой буферизации нет, и SSE прекрасно работает.
12:27Если наружу торчит 1-2 хоста, то все это не нужно, конечно – AWS дает несколько статических IP, которые можно привязать к инстансу.
12:31@backendsecret Что насчет динамеческих лоад балансеров?
Вы имеете в виду новые Application Load Balancers? twitter.com/DevArtem/statu…
14:14Выполнять одни и те же действия даже с одной машиной по SSH быстро надоедает. Для автоматизации пользуемся Ansible
14:52Есть прекрасный inventory, позволяющий выполнять действия с протегированными EC2-хостами github.com/ansible/ansibl…
14:54Плейбуки для него писать поприятнее, чем шаблоны CloudFormation
14:55@backendsecret а про базы данных будет? Что юзаете для большой даты
Из баз данных используем Cassandra и Elasticsearch. Всякую аналитику сохраняем в Redshift twitter.com/raxpost/status…
16:14@backendsecret касандра и еластик понятно, а редшифт почему?
Самый простой способ работать с AWS Mobile Analytics. Ну а потом решили и с серверов некоторые вещи писать туда же twitter.com/raxpost/status…
16:38Полезная штука для тестирования кода, работающего с Cassandra из Java: github.com/jsevellec/cass…
17:22Запускается, правда, довольно долго, нужно угадать с таймаутами, чтобы тесты не начали мигать
17:24Давайте переключимся на Java. Мы используем Spring Boot во всех Java-приложениях.
18:27Тут можно посмеяться, что в Spring Framework всё настолько переусложнили, что нужен отдельный фреймворк для его конфигурации.
18:27Но в Spring Boot есть свои полезные фичи. Например, Actuator – набор инструментов для мониторинга и диагностики github.com/spring-project…
18:29С автоконфигурациями удобно начинать, но потом можно выстрелить себе в ногу, подключив библиотеку и обнаружив пару (десятков) лишних бинов
18:37@backendsecret советую ещё глянуть holistics
Спасибо, посмотрим. Мы смотрим Apache Zeppelin, у него есть параметризованные запросы, что нам бы пригодилось twitter.com/timrael/status…
21:07@raxpost @backendsecret хм, а на чём ещё аналитику делать? стандартный же dwh инструмент. Ну ещё greenplum может21:27
@borovikov @raxpost @backendsecret ныне в моде clickhouse.yandex21:52
@borovikov @backendsecret я не особо в интерпрайзе, расскажите чем вся эта моднота лучше обычной RDB
Redshift хранит данные поколоночно, соответственно возможно более эффективное сжатие и select части колонок twitter.com/raxpost/status…
22:03Кстати об аналитике. Разбирались с коллегой, почему числа в разных сервисах мобильной аналитике отличаются.
22:13Выяснили, что AWS хранит их в UTC, а другой — в своей таймзоне (хорошо хоть в одной и той же)
22:13В связи с этим у меня давно есть пунктик, что дату-время всегда нужно сохранять как unix timestamp в миллисекундах по UTC
22:18(У вас может быть по-другому, главное, чтобы везде одинаково)
22:19Вот хорошее видео про ад с таймзонами youtu.be/-5wpm-gesOY
22:23@backendsecret Я честно говоря не знаю, кто придумал хранить в локальной таймзоне и без самой таймзоны?!? Такие грабли знакомы...22:24
@backendsecret это ты ещё не натыкался на прекрасные имплементации unix timestamp с примотанными изолентой таймзонами...
И очень хорошо! twitter.com/komzpa/status/…
22:24# Среда 2 твита
Например этот Actuator создаёт очень неудобные метрики для #prometheus, на которые я сразу плюнул twitter.com/backendsecret/…10:52
@backendsecret redshift денег же стоит? Почему не, например, паркет+zeppelin+spark sql? Ускорили такой связкой часть аналитики на порядки
Все денег стоит, в том числе сервера под Spark. Но в эту сторону тоже смотрим и хотим поэкспериментировать twitter.com/qwwdfsad/statu…
11:07# Четверг 45 твитов
Продолжим про Spring. Много полезных вещей есть в проекте Spring Cloud, оформленном как набор starters для Spring Boot.
13:54Пароли не очень правильно хранить в репозитории, лучше их доставать откуда-то при запуске приложения. Для этого есть Spring Cloud Config
13:54Идея в том, чтобы завести Bootstrap Application Context, в котором с HTTP-сервера докачать конфиг и запустить основной ApplicationContext
13:58Туда же можно засунуть настройки, отличающиеся для разных окружений
13:58Конечно, есть обертки для Service Discovery, с которыми из коробки работают другие компоненты вроде RestTemplate.
14:06В профайле для разработки Consul выключен, чтобы не заставлять всех запускать еще и его. Чем меньше нужно для запуска приложения, тем лучше
14:22Как я уже говорил, выстрелить себе в ногу с автоконфигурацией – раз плюнуть. Подключаете Consul и получаете заблокированный scheduler thread
14:26По умолчанию он один, и @scheduleD начнет вести себя совсем не так, как вы ожидали github.com/spring-cloud/s…
14:28"Чем меньше нужно для запуска, тем лучше" – касается и production. Грустно, когда из-за недоступности чего-то приложение уходит в crash loop
14:37Также не стоит сразу отдавать пользователю ошибку, если при создании ответа один из нескольких сервисов оказался недоступен.
14:53Если можно собрать без отсутствующего ответа что-нибудь адекватное, покажите то, что есть
14:55Разобраться, что в такой системе происходит, очень тяжело, если нет способа сгруппировать логи в разных сервисах по запросам пользователей
15:10Для этого каждому пользовательскому запросу на входе присваивается случайный ID, кроме того, каждый запрос между сервисами имеет еще один ID
15:14Такая схема реализована в Spring Cloud Sleuth, он же позволяет отправлять данные в Zipkin (zipkin.io)
15:21Подробнее о таких вещах можно посмотреть в докладе @m0nstermind. Полезно даже если ваша система гораздо меньше ОК youtube.com/watch?v=TXqbAL…
15:51Чтобы понимать, что что-то пошло не так, нужен мониторинг. Чтобы понимать, что пора вмешаться, нужны еще и алерты. Кто чем пользуется?
16:46Причем правильно сделать алерты – штука непростая. Если алерты приходят там, где действовать не нужно, на них перестанут реагировать
16:48Одиночный crash, например, стоит залогировать, перезапустить приложение, и никого не трогать. А вот если их много, то пора послать SMS
16:53Мы кучу различных метрик пишем в Riemann. Простая, но гибкая штука благодаря конфигу на Clojure.
16:57Некритичные события оттуда просто попадают в отдельный канал Slack, критичные – еще и в SMS нескольким людям
16:58Что мониторим: на каждом хосте CPU, память, диски. Какие контейнеры запущены. Каждое приложение шлет внутренние метрики.
17:16Для Java это потребление heap/non-heap памяти, количество тредов, также шлем время ответов на запросы и некоторые возникающие exceptions.
17:20У Riemann есть очень простой dashboard, который придется еще долго допиливать до состояния, когда им можно пользоваться как основным
17:22Тем не менее, быстро посмотреть, какие эвенты сейчас приходят, можно github.com/riemann/rieman…
17:23Riemann хранит эвенты только короткое время в памяти, для длительного хранения они отправляются в InfluxDB, графики рисуются Grafana.
17:27@backendsecret да, именно о них.
Не пробовали. Судя по описанию, есть несколько вкусных фич вроде поддержки dynamic port mapping, но нам уже не нужно twitter.com/DevArtem/statu…
17:47I think that the JEP-261 designers for a large part ignored the theme of testing. None of the 4 options look good b… twitter.com/i/web/status/8…
Тем временем, разработчики систем сборки уже активно пробуют Jigsaw и пытаются его адекватно поддержать. У них с Ja… twitter.com/i/web/status/8…
13:31Два забавных факта: 1) jar – это тот же zip, в его начало можно дописать что угодно 2) в bash-скрипт после exit можно дописать что угодно.
14:34Если совместить эти два факта, можно сделать jar, который запускается как любой другой бинарник, без java -jar.
14:34У плагина Spring Boot для Gradle есть такая опция: springBoot { executable = true }
14:36@backendsecret @JUGru о, недавно дочитал и, пожалуй, в этом году это самая интересная книга. Могу сказать спасибо @m0nstermind за наводку14:37
@backendsecret а можешь пример кинуть, как такое ручками создавать?
cat launchscript.sh app.jar > executable.jar
Только следите, чтобы в конце launchscript.sh был exit и перевод строки twitter.com/Bubyakin/statu…
В скрипте делается что-то вроде java -jar "$0", по желанию можно навешивать флаги JVM, аргументы командной строки, env variables и т. п.
16:23@backendsecret а с bat'ником такое не прокатит?
Если винда выполняет bat так же, как bash – строчка за строчкой, не валидируя весь файл, то прокатит. Винды под рук… twitter.com/i/web/status/8…
16:27@backendsecret чё то стремно как то, не7
А что именно стремно? Как раз может быть удобно, если надо какие-нибудь флаги приложению выставить перед запуском twitter.com/ruxeg/status/8…
16:32@ruxeg @backendsecret Такое использую в линуксовых инсталляторах, когда один sh на несколько мегабайт и ок. :) Не знаю что уж там внутри...
Да примерно то же самое – распаковка архива, лежащего после скрипта и запуск бинаря оттуда twitter.com/Dronmdf/status…
16:44Расскажу еще историю из серии "хотели как лучше, а получилось как всегда". Заводите вы маленький инстанс в AWS, t2.micro с 64-битным Linux
16:58Через некоторое время обнаруживаете 100% загрузку CPU, причем отжирает их некий kswapd. Памяти свободной много.
16:58Потом оказывается, что добрый амазон после запуска делает hotplug еще 128M памяти, которые попадают в зону Normal.
16:59Но у нас был всего 1G, который помещается в DMA и DMA32, то есть в Normal ничего не было.
17:00Приходит kswapd и видит, что в этой зоне мало свободных страниц, пытается что-то освободить, а освободить нечего. Так и крутится бесконечно.
17:00@backendsecret и хотплаг этот было никак не вырубить еще. Вроде кто-то другой рассказывал уже эту историю в этом же аккаунте или я путаю)
Решение было как раз выключить hotplug, а за расследование этой истории спасибо @feelthefrog twitter.com/strizhechenko/…
17:03@backendsecret вот та же проблема была с виртуалкой в параллелсе. Похоже знаю куда копать теперь17:07
@Dronmdf @ruxeg @backendsecret это называется shar, раньше инсталлеры Java 4 Linux были такие.17:37
@backendsecret Исходники для интересующихся: hg.netbeans.org/main/file/tip/…21:15
# Пятница 18 твитов
Тихо и незаметно пришла пятница. Давайте о будущем. Java-разработчики, девятку уже пробуете? Планируете переход на Jigsaw?
13:04@backendsecret вот в восьмой прям жирненькая мотивация была, а ща так себе. Это же важно библиотекам и фреймворкам, не?
Больше всего им, конечно. В первую очередь самому JDK. У фреймворков еще и в первую очередь начнет все ломаться twitter.com/ruxeg/status/8…
13:25@backendsecret ну да, это же не плохо) не то что выдуманная необходимость, просто фича не для всех14:39
@backendsecret для северных приложений не важен размер рантайма, а пакетная система всегда была. Обидно что для десктопа лучше не станет
Почему? Для каких-нибудь self-contained packages может и станет. twitter.com/visualwatermar…
14:48А еще, кроме размера рантайма, говорят, модули открывают возможности для некоторых оптимизаций в JIT @visualwatermark
15:14Отвлечемся немного от Java. AWS тут недавно запустили FPGA-инстансы. aws.amazon.com/ru/blogs/aws/d…
16:14То есть спрос на них есть и в ближайшие годы будет только расти. Пока, правда, применений не очень много
16:22Возможно, какие-то специализированные числодробилки. Есть несколько публикаций про использование для нейросетей
16:29@backendsecret жду не дождусь когда в паблик запустят16:53
@backendsecret @POS_troi а по какой сигнатуре определяется начало зипа?
У него индекс в конце, начало определять не нужно en.m.wikipedia.org/wiki/Zip_(file… twitter.com/wolandtel/stat…
9:18Замечаю, что подобном коде что в Java, что в Groovy вывод типов часто где-то не работает, пока их явно не укажешь issues.apache.org/jira/browse/GR…
13:38Для Java я имею в виду цепочки вызовов со стримами, конечно. Кто-нибудь, кто понимает в компиляторах, может рассказать, почему так?
13:38Groovy, кстати, стоит проникнуться хотя бы ради тестов на Spock spockframework.org
17:31Я пока не проникся настолько, чтобы точно понять, на какой черной магии оно работает, но штука очень удобная
17:33@backendsecret а индекс смещениями от конца адресуется, что ли?
Именно twitter.com/wolandtel/stat…
21:28# Суббота 35 твитов
@backendsecret ява разработчики уже пробуют семёрку, хипстеры трогают восьмёрку, девятка до прода доберётся лет через 10, там и попробуем
Да ладно, не все так плохо. Много уже и восьмерки в проде twitter.com/beizero/status…
12:47@backendsecret зачем нам jigsaw?
Так выбора нет. Разве что не обновляться вообще никогда. Ну более точный контроль за видимостью классов может быть… twitter.com/i/web/status/8…
12:51@backendsecret @BeiZero На прошлом проекте были 7 и 8, на следующем будет 6.13:02
@backendsecret это конечно не особо честно, но все явщики пилящие под андроид до сих пор сидят на шесьмой яве и года 2-3 будут ещё сидеть13:12
@muttnikus @backendsecret @BeiZero а у нас софт для банков на 7ке, но с Groovy :3 внутренние проекты на 8ке и Kotlin
Кстати, на этой неделе вышел Kotlin 1.1-M04. Из значительных изменений в 1.1 обещают async/await и генераторы twitter.com/itiswasted/sta…
20:06Интересно, что эти вещи не прибиты гвоздями в компиляторе, а по большей части сделаны как библиотека.
20:08То есть async/await работает на CompletableFuture, но никто не мешает пойти и написать свою реализацию с ListenableFuture, например
20:09Также в следующем году, видимо, стоит ждать, что окончательно допилят Gradle Script Kotlin, с которым мы получим отличную поддержку в IDE
20:15В принципе, и с Groovy сейчас неплохо, только ради Gradle его и выучил. Но порог входа может уменьшиться.
20:19Единственное, что расстраивает – _очень_ медленное обновление проекта в IDEA. Добавил либу в зависимости, и можно идти пить кофе.
20:21Может быть, из-за того, что много проектов или мои билдскрипты что-то странное делают. Когда-нибудь у меня дойдут руки это раскопать.
20:25@backendsecret а ты уже пробовал? Я чёт опосаюсь что там нифига не поднимиться, что то слышал что в многомодульных проектах не работает
Еще нет. Конечно, сейчас много чего не поднимется, оно же еще совсем не готово и может сто раз поменяться до релиза twitter.com/ruxeg/status/8…
20:32Java-проекты мы собираем Gradle. Он делает всё, начиная от компиляции до заливки Docker-образа.
20:51В идеале, билдскрипты должны быть такими, чтобы можно было скачать репозиторий, запустить одну команду, и проект можно было бы запустить.
20:53С Gradle легко этого добиться, подключив несколько плагинов, а то, чего не хватает, дописать самому.
21:05Да, в build.gradle легко сделать спагетти из тысяч строк, но потом несложно написать плагинов и получить понятный декларативный билдскрипт
21:05Для сборки Docker есть такая штука github.com/bmuschko/gradl…
Его я обернул в свой плагин, который конфигурирует его таски так, как нужно нам.
Еще полезный плагин для работы с git: github.com/ajoberstar/grg… Позволяет вытащить инфу о бранче, тегах и т. п.
21:15Используя его для формирования версии, мы всегда знаем, из какого бранча был собран образ, который сейчас задеплоен.
21:16Есть готовые плагины для версионирования, использующие git. Может быть удобно использовать что-то такое github.com/nebula-plugins…
21:22(ну а я со всеми проектами в одном репозитории опять пишу свой велосипед)
21:24Gradle – это прекрасно, но у нас же еще и Python есть. В Python с системами сборки все гораздо хуже.
21:28Тем не менее, нашли и научились готовить buildout. Немного плясок с бубном вокруг него и bash, и Python тоже собирается одной командой
21:32Docker-образы для Python-проектов все равно собираю через Gradle, конечно
21:34@backendsecret я тоже недавно к этому пришёл. У меня там "интеграция" с энсиблом для деплоя и некоторые тулы для проверки билда21:38
Как-то, создавая новый сервис, я подумал, а какого черта я делаю для этого столько одинаковых действий. Пошел разбираться с lazybones
21:41Сделал шаблоны для Java и Python, которые генерят кучу нужных вещей после пары вопросов. Спасибо @jbaruch за статью habrahabr.ru/post/218205/
21:42@backendsecret а как вы боритесь с подсветкой синтаксиса и автокомплитом в иде? Идея сносно понимает груви, но с грейдл не складывается
Да никак. Приходится почаще ходить в документацию. Еще плагины пишу, там автокомплит вполне работает. twitter.com/seregasheypak/…
21:45Хотя нет, вру, иногда все-таки боремся. С помощью публичного багтрекера JetBrains :)
21:50@backendsecret нашли способы прибить гвоздями зависимости второго (и т.д.) уровней? Чтобы билдаут не качал обновления и не падал на CI.
Как-то не задавались этим вопросом. На CI он по этой причине у нас не падал. twitter.com/__pewpew__/sta…
22:19А build server не teamcity? twitter.com/backendsecret/…
TeamCity, но там-то все хорошо twitter.com/f1yegor/status…
23:59@backendsecret AST transformations. Я про это доклад делал несколько лет назад, можно нагуглить видосиков, если интересно.1:47
@backendsecret интересно, в чём цель такого дизайна?
На вики пишут, что так проще добавлять файлы. Действительно, если бы индекс был в начале, нужно было бы сдвигать вс… twitter.com/i/web/status/8…
10:40@backendsecret Spock + geb = лучший фреймворк для автотестинга.10:41
Пришло время заканчивать, спасибо, что читали меня. Всем успехов в наступающем Новом году! На этой и прошлой неделе с вами был @dvbobrov.
13:34# Воскресенье 18 твитов
@backendsecret ну понятно, что кого-то придется, но вот прям так чтобы бежать с энтузиазмом и попробовать — увольте.0:34
Если это java c mvn - то может помочь переключиться с mvncentral на bintray - индекс в разы меньше twitter.com/backendsecret/…
Gradle, но и правда помогло – refresh гораздо быстрее, спасибо. Еще лучше галочка "Offline work" помогает twitter.com/f1yegor/status…
1:47Моя неделя подходит к концу, покидаю пока интересных ссылок. Буду рад ответить на любые вопросы в ближайшие несколько часов.
20:04Блог @aatarasoff, в котором особенно хочется отметить последние посты про заблуждения о DevOps developerblog.info/#open
20:13Wiki, в которой на русском хорошо пишут про алгоритмы и структуры данных, с псевдокодом и доказательствами neerc.ifmo.ru/wiki/index.php…
20:15Рядом еще один хороший раздел с вычислительной геометрией neerc.ifmo.ru/wiki/index.php…
20:17Фреймворк для тестирования распределенных систем от aphyr, разрабатывающего еще и Riemann github.com/jepsen-io/jeps…
20:25Он же этот инструмент натравливает на разные базы данных и пишет об этом в блог aphyr.com/tags/Jepsen
20:32Вышедшая в этом году книга от SRE команды Google. Сборник лучших практик про деплой, incident management и т. п. shop.oreilly.com/product/063692…
20:37@backendsecret Если хочешь - зажигай дальше. До 31.12.
Окей, тогда еще побуду здесь на следующей неделе. twitter.com/dcromster/stat…
21:22What Every Programmer Should Know About Memory – статья, подробно описывающая, как работает память github.com/tpn/pdfs/blob/…
21:53И вдогонку немного хардкора про floating point arithmetics docs.oracle.com/cd/E19957-01/8…
21:55Еще на этой неделе вышел Python 3.6. Добавили string interpolation, новые type annotations, работают над async/await docs.python.org/3.6/whatsnew/3…
22:05@backendsecret забыл самое главное что дикт теперь на 20-25% меньше памяти занимают (:
Да, реализовали чуть более эффективно, как в pypy morepypy.blogspot.ru/2015/01/faster… twitter.com/vanadium23/sta…
22:20@vanadium23 @backendsecret и порядок!
Не надо на это полагаться. "The order-preserving aspect of this new implementation is considered an implementation… twitter.com/i/web/status/8…
22:22@backendsecret а как же cookiecutter? Не звезда в мире Java? :)
Не слышал раньше twitter.com/sysradium/stat…
22:27@backendsecret я сталкиваюсь с тем, что сахар груви и специфика плагина приводит к тому, что пользователь обязан стать сорс код плагина
Ну да, приходится читать иногда. И не только с Gradle, а вообще везде, куда можно дотянуться. В код спринга я лез г… twitter.com/i/web/status/8…
22:44# Ссылки
github.com
- https://github.com/gliderlabs/registrator
- https://github.com/ansible/ansible/blob/devel/contrib/inventory/ec2.py
- https://github.com/jsevellec/cassandra-unit
- https://github.com/spring-projects/spring-boot/tree/master/spring-boot-actuator
- https://github.com/spring-cloud/spring-cloud-consul/issues/146
- https://github.com/riemann/riemann-dash
- https://github.com/bmuschko/gradle-docker-plugin
- https://github.com/ajoberstar/grgit
- https://github.com/nebula-plugins/nebula-release-plugin
- https://github.com/jepsen-io/jepsen
- https://github.com/tpn/pdfs/blob/master/What%20Every%20Programmer%20Should%20Know%20About%20Memory%20-%20Ulrich%20Drepper%20(2007).pdf
other
- https://www.consul.io/
- https://redash.io/
- http://clickhouse.yandex/
- https://youtu.be/-5wpm-gesOY
- http://zipkin.io/
- https://www.youtube.com/watch?v=TXqbALlEI88
- https://aws.amazon.com/ru/blogs/aws/developer-preview-ec2-instances-f1-with-programmable-hardware/
- https://habrahabr.ru/post/218205/
- http://jug.ru/
- http://developerblog.info/#open
- http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85
- http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B3%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%8F
- https://aphyr.com/tags/Jepsen
- http://shop.oreilly.com/product/0636920041528.do
- https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
- https://docs.python.org/3.6/whatsnew/3.6.html
- https://morepypy.blogspot.ru/2015/01/faster-more-memory-efficient-and-more.html
- http://hg.netbeans.org/main/file/tip/nbi/engine/native/launcher
- https://en.m.wikipedia.org/wiki/Zip_(file_format)#/media/File%3AZIP-64_Internal_Layout.svg
- https://issues.apache.org/jira/browse/GROOVY-8029
- http://spockframework.org/