В этой статье описан алгоритм консенсуса BCA (Byzantine Consensus Algorithm), используемый в Tendermint. Разработанный на основе протокола DLS, он не требует никакого "активного" майнинга, как в Proof-of-Work, и может обеспечить безопасную работу сети при наличии как минимум 2/3+ (строго больше чем две трети) "честных" участников сети. Ниже рассказно о том, как этот алгоритм реализован в Tendermint, приведена статистика его работы и смоделировано поведение алгоритма на небольшой сети из пяти участников.
Пользователь
Классификация объектов в режиме реального времени

Автор: Игорь Пантелеев, Software Developer, DataArt
Распознавание изображений очень широко используется в машинном обучении. В этой области существует множество различных решений, однако потребностям нашего проекта ни оно из них не удовлетворяло. Нам понадобилось полностью локальное решение, которое способно работать на крошечном компьютере и передавать результаты распознавания на облачный сервис. В этой статье описывается наш подход к созданию решения для распознавания изображений с помощью TensorFlow.
Git: советы новичкам – часть 2

Запускаем полноценный кластер на Kubernetes с нуля на Ubuntu 16.04
Данная статья призвана дать исчерпывающую информацию не только по установке k8s, но и объяснить каждый шаг: зачем и почему мы делаем именно так, как написано (это очень важно для успешного запуска).
Что нужно знать
Серверы:
Кластер подразумевает, что у Вас более одного физического сервера, между которыми и будут распределятся ресурсы. Серверы называются нодами (nodes).
Диски:
Обычные харды в k8s не поддерживаются. Работа с дисками происходит по средствам распределенных файловых хранилищ. Это необходимо для того, чтобы k8s мог «перемещать» контейнеры docker на другие ноды в случае необходимости, без потери данных (файлов).
Начинать создание кластера нужно именно с создания своего распределенного файлового хранилища. Если вы уверены, что диски вам никогда не понадобятся, то этот шаг можно пропустить.
Я выбрал Ceph. А еще рекомендую почитать эту замечательную статью.
Минимальное разумное количество серверов для Ceph — 3 (можно построить и на одном, но в этом мало смысла из-за высокой вероятности потерять данные).
Сеть:
Нам понадобится Flannel — он позволяет организовать программно определяемую сеть (Software Defined Network, SDN). Именно SDN позволяет всем нашим контейнерам общаться с друг другом внутри кластера (установка Flannel производится вместе с k8s и описана ниже).
Подготовка серверов
В нашем примере мы используем 3 физических сервера. Установите Ubuntu 16.04 на все сервера. Не создавайте swap партиции (требование k8s).
Предусмотрите в каждом сервере как минимум один диск (или партицию) для Ceph.
Не включайте поддержку SELinux (в Ubuntu 16.04 он выключен по-умолчанию).
Мы назвали сервера так: kub01 kub02 kub03. Партиция sda2 на каждом сервере создана для Ceph (форматировать не обязательно).
Считаем кур, пока их не заклевали
В амбаре кружком сидят 100 кур. Каждая из кур случайным образом клюёт свою ближайшую соседку слева или справа. Каково ожидаемое количество кур, которых никто не клюнул?Судя по статье Times, Робитейлу потребовалось на ответ меньше секунды.
На следующий день Джордан Элленберг твитнул такую задачу:

«100 кур сидят в круге. Каждая клюёт случайным образом R или L. Клюнутые куры никого не клюют. Итерации проводятся до тех пор, пока не останется двух соседних неклюнутых кур. Сколько кур осталось?»
Мне не нужно умещать эту историю в 140 символов, поэтому я дополню вопрос Элленберга подробностями так, как я его понял. Исходная задача относилась к одной итерации синхронизированного случайного клевания, а теперь у нас есть несколько итераций. Во время одной итерации каждая курица случайным образом поворачивается влево или вправо и клюёт одну из своих соседок. Однако если курицу уже клюнули, она больше никогда не клюёт, даже её продолжают клевать. Если две соседние курицы клюют друг друга в одной итерации, обе они вылетают из игры на все последующие раунды. Если неклюнутая курица оказывается между двумя клюнутыми, её уже никогда не клюнут и поэтому она может клевать бесконечно. Вопрос заключается в том, какая часть кур выживет и станет «неуязвимыми»?
Ниже представлены спойлеры, так что сейчас вы можете попробовать ответить на вопрос сами. Пока вы этим занимаетесь, я немного поговорю о курах и о риторике и семиотике математических «текстовых задач».
Пишем DNS proxy на Go

Давно хотел решить проблему с рекламой. Наиболее простым способом сделать это на всех устройствах оказалось поднятие своего DNS сервера с блокированием запросов на получений IP адресов рекламных доменов.
Сверточная нейронная сеть, часть 2: обучение алгоритмом обратного распространения ошибки
Обучение сверточной нейронной сети
На начальном этапе нейронная сеть является необученной (ненастроенной). В общем смысле под обучением понимают последовательное предъявление образа на вход нейросети, из обучающего набора, затем полученный ответ сравнивается с желаемым выходом, в нашем случае это 1 – образ представляет лицо, минус 1 – образ представляет фон (не лицо), полученная разница между ожидаемым ответом и полученным является результат функции ошибки (дельта ошибки). Затем эту дельту ошибки необходимо распространить на все связанные нейроны сети.
Безлимитное распознавание речи. Или как я перевожу в боте голосовые сообщения в текст

Объяснение SNARKs. От вычислений к многочленам, протокол Пиноккио и спаривание эллиптических кривых (перевод)
Источник: https://z.cash/blog/snark-explain5.html
Предыдущие статьи:
Часть 1: Объяснение SNARKs. Гомоморфное скрытие и слепое вычисление полиномов (перевод)
Часть 2: Объяснение SNARKs. Знание о принятом коэффициенте и достоверное слепое вычисление полиномов (перевод)
Вступление от переводчика
Начиная заключительную часть перевода, хочу сказать, что мы живем в воистину удивительное время. Время, когда высшая математика имеет возможность практически сразу быть задействованной в разработке программного обеспечения и мы можем наблюдать «в действии» результаты работы математиков технологических институтов в продвинутых вещах, основанных на блокчейнах и обменах данными.
Ну что же, не буду задерживать далее вашего внимания, давайте перейдем к самому интересному…
Не было печали, апдейтов накачали
У меня дома используется Debian Sid. Большей частью он весьма и весьма хорош, но местами он слишком Bleeding слишком Edge. Например, когда отгружает пакеты, ломающие работоспособность системы. Вчера приехал wpasupplicant, который сломал мне wifi. Я его откатил, но в процессе я подумал, что многие пользователи не умеют этого делать. Рассказ "как откатить плохой apt-get install/upgrade" — в этом посте.
Ситуация
Мы сделали apt-get install что-то, или apt-get upgrade, или даже apt-get dist-upgrade, и после перезагрузки (или даже сразу же) обнаружили, что так нельзя. Сервис не стартует, убрана важная нам фича, кто-то падает и т.д. Мы хотим откатиться. Но вот, незадача — куда именно мы не знаем, потому что какая была версия до обновления мы не знаем.
Дюжина приемов в Linux, которые действительно сэкономят уйму времени

Эта статья также есть на английском.
Однажды вечером, перечитывая Джеффри Фридла, я осознал, что даже несмотря на всем доступную документацию, существует множество приемов заточенных под себя. Все люди слишком разные. И приемы, которые очевидны для одних, могут быть неочевидны для других и выглядеть какой-то магией для третьих. Кстати, несколько подобных моментов я уже описывал здесь.
Командная строка для администратора или пользователя — это не только инструмент, которым можно сделать все, но и инструмент, который кастомизируется под себя любимого бесконечно долго. Недавно пробегал перевод на тему удобных приемов в CLI. Но у меня сложилось впечатление, что сам переводчик мало пользовался советами, из-за чего важные нюансы могли быть упущены.
Под катом — дюжина приемов в командной строке — из личного опыта.
Как я использую git
Intro
Основам git мне пришлось научиться на своем первом месте работы (около трех лет назад).
С тех пор я считал, что для полноценной работы нужно запомнить всего-лишь несколько команд:
git add <path>
git commit
git checkout <path/branch>
git checkout -b <new branch>
И дополнительно:
git push/pull
git merge <branch>
git rebase master
(а что, можно еще и на другие ветки ребейзить? О_о)
В принципе, я и сейчас во многом так считаю, но со временем волей-неволей начинаешь узнавать интересные трюки.
Яндекс открывает технологию машинного обучения CatBoost

CatBoost – это новый метод машинного обучения, основанный на градиентном бустинге. Он внедряется в Яндексе для решения задач ранжирования, предсказания и построения рекомендаций. Более того, он уже применяется в рамках сотрудничества с Европейской организацией по ядерным исследованиям (CERN) и промышленными клиентами Yandex Data Factory. Так чем же CatBoost отличается от других открытых аналогов? Почему бустинг, а не метод нейронных сетей? Как эта технология связана с уже известным Матрикснетом? И причем здесь котики? Сегодня мы ответим на все эти вопросы.
Понимание оракулов в блокчейне
Этот пост дискуссия о том, чем на самом деле являются оракулы, так же мы расскажем о некоторых распространенных заблуждениях по этому вопросу.
Оракул — это третья сторона, вы общаетесь с оракулом когда вам нужны данные, которые вы не хотите (или не можете) извлекать самостоятельно. Причин для этого может быть много.
С одной стороны, вы можете не доверять отдельному объекту при подписании multi-signature транзакции Bitcoin. Например, вы хотите чтобы некоторые средства были перемещены только при определенных условиях. Вместо того, чтобы делать это самостоятельно (что не дает никаких гарантий внешним сторонам) или делегировать это третьей стороне (которой вы не хотите доверять, поскольку она может вести себя некорректно), вы разделяете процесс подтверждения транзакции различным сторонам (оракулам) через multi-signature транзакцию.
Путь с использованием N-of-M multi-signature транзакций заключается в том, что каждый оракул имеет только один закрытый ключ, и может поставить только одну подпись в тот момент когда он сочтет это нужным, но сама транзакция будет действительна одна и N-of-M оракулы будут иметь консенсус относительно того, какая транзакция должна пройти. Это намного правильней, чем доверять одной из внешних сторон, поскольку выбранные оракулы могут конкурировать и вы получаете низкую вероятность мошенничества.
IoC, DI, IoC-контейнер — Просто о простом
На данный момент, на эту тему уже довольно сказано, написано, в том числе и на хабре, но как раз из-за обилия информации сложно найти действительно полезный контент. Кроме того, данные понятия часто смешивают и/или путают. Проанализировав множества материалов я решил изложить вам свое видение предмета.
Как мы суслика яблоками кормили или эффективный backend на Go для iOS
Как и обещал, рассказываю о том, как мы мигрировали свой бэкенд на Go и смогли уменьшить объем бизнес логики на клиенте более, чем на треть.
Для кого: небольшим компаниям, Go и мобильным разработчикам, а также всем, кто в тренде или просто интересуется данной тематикой.
О чем: причины перехода на Go, с какими сложностями столкнулись, а также инструкции и советы по улучшению архитектуры мобильного приложения и его бэкенда.
Уровень: junior и middle.
Особенности Jupyter Notebook, о которых вы (может быть) не слышали

Ниже мы расскажем о некоторых фишках, которые делают Jupyter очень крутым. О них можно прочитать и в других местах, но если специально не задаваться этим вопросом, то никогда и не прочитаешь.
Автоэнкодеры в Keras, Часть 5: GAN(Generative Adversarial Networks) и tensorflow
Содержание
- Часть 1: Введение
- Часть 2: Manifold learning и скрытые (latent) переменные
- Часть 3: Вариационные автоэнкодеры (VAE)
- Часть 4: Conditional VAE
- Часть 5: GAN (Generative Adversarial Networks) и tensorflow
- Часть 6: VAE + GAN
(Из-за вчерашнего бага с перезалитыми картинками на хабрасторейдж, случившегося не по моей вине, вчера был вынужден убрать эту статью сразу после публикации. Выкладываю заново.)
При всех преимуществах вариационных автоэнкодеров VAE, которыми мы занимались в предыдущих постах, они обладают одним существенным недостатком: из-за плохого способа сравнения оригинальных и восстановленных объектов, сгенерированные ими объекты хоть и похожи на объекты из обучающей выборки, но легко от них отличимы (например, размыты).
Этот недостаток в куда меньшей степени проявляется у другого подхода, а именно у генеративных состязающихся сетей — GAN’ов.
Формально GAN’ы, конечно, не относятся к автоэнкодерам, однако между ними и вариационными автоэнкодерами есть сходства, они также пригодятся для следующей части. Так что не будет лишним с ними тоже познакомиться.
Коротко о GAN
GAN’ы впервые были предложены в статье [1, Generative Adversarial Nets, Goodfellow et al, 2014] и сейчас очень активно исследуются. Наиболее state-of-the-art генеративные модели так или иначе используют adversarial.
Схема GAN:

CSS: введение в единицу длины 'fr'

Пока все активно делятся своими впечатлениями от CSS-гридов, я не слышал, чтобы кто-то столь же много говорил о новой единице длины в CSS — fr (см. спецификацию). И теперь, когда браузеры все лучше начинают поддерживать ее, я думаю, пора взглянуть на то, как ее можно использовать в сочетании с этой техникой вёрстки, поскольку это дает нам ряд преимуществ. Главные из них — это более понятный и удобный в сопровождении код.
Межпланетная файловая система — больше нет необходимости копировать в сеть
Всем хороша идея IPFS но вот только был один недостаток у неё. Данные загружаемые в сеть копировались в хранилище блоков удваивая занимаемое ими место. Более того файл резался на блоки которые мало пригодны для повторного использования.
Появилась экспериментальная опция --nocopy
, которая избавляет от этого недостатка. Для того чтобы пользоваться ей необходимо выполнить несколько условий.
Также появился новый тип идентификаторов. Его мы тоже разберём.
Напомню: InterPlanetary File System — это новая децентрализованная сеть обмена файлами (HTTP-сервер, Content Delivery Network). О ней я начал рассказ в статье "Межпланетная файловая система IPFS".
Information
- Rating
- Does not participate
- Location
- Волгоградская обл., Россия
- Date of birth
- Registered
- Activity