Pull to refresh
0
0
Николай @kolyan

User

Send message

Гетерогенная конкурентная обработка данных в реальном времени строго один раз

Reading time34 min
Views15K

Конкурентная сосиска


Аннотация


Обработка данных в реальном времени ровно один раз (exactly-once) — задача крайне нетривиальная и требующая серьезного и вдумчивого подхода на всей цепочке вычислений. Некоторые даже считают, что такая задача невыполнима. В реальности хочется иметь подход, обеспечивающий отказоустойчивую обработку вообще без каких-либо задержек и использование различных хранилищ данных, что выдвигает новые еще более жесткие требования, предъявляемые к системе: concurrent exactly-once и гетерогенность персистентного слоя. На сегодняшний день такое требование не поддерживает ни одна из существующих систем.


Предложенный подход последовательно раскроет секретные ингредиенты и необходимые понятия, позволяющие относительно просто реализовать гетерогенную обработку concurrent exactly-once буквально из двух компонент.


Введение


Разработчик распределенных систем проходит несколько стадий:


Стадия 1: Алгоритмы. Здесь происходит изучение основных алгоритмов, структур данных, подходов к программированию типа ООП и т.д. Код исключительно однопоточный. Начальная фаза вхождения в профессию. Тем не менее, достаточно непростая и может длиться годами.


Стадия 2: Многопоточность. Далее возникают вопросы извлечения максимальной эффективности из железа, возникает многопоточность, асинхронность, гонки, дебагинг, strace, бессонные ночи… Многие застревают на этом этапе и даже начинают с какого-то момента ловить ничем не объяснимый кайф. Но лишь единицы доходят до понимания архитектуры виртуальной памяти и моделей памяти, lock-free/wait-free алгоритмах, различных асинхронных моделях. И почти никто и никогда — верификации многопоточного кода.


Стадия 3: Распределенность. Тут такой треш творится, что ни в сказке сказать, ни пером описать.

Читать дальше →

Наша книжная полка С#-программиста. А что у вас?

Reading time6 min
Views56K
Привет!

Будущие студенты Veeam Academy часто спрашивают нас о книгах, которые были бы полезны при подготовке к поступлению на наш курс по программированию на С#. Обычно мы рекомендуем несколько источников, сопровождая их своими комментариями, почему именно они будут полезны.

Однако большинство книг по программированию – это 1К+ страниц, и для их прочтения «от корки до корки» понадобится не один месяц и, возможно, даже не один год! Поэтому все наши рекомендации для абитуриентов Академии Veeam служат лишь ориентиром, а не обязательным требованием.

Со временем мы обобщили свои комментарии по каждому из изданий и в итоге получили список, как нам кажется, хороших книг для профессионального роста C# программиста.
Представляем наш краткий обзор под катом.

image
Читать дальше →

Метапрограммирование в JavaScript

Reading time17 min
Views23K
Метапрограммирование — вид программирования, связанный с созданием программ, которые порождают другие программы как результат своей работы, либо программ, которые меняют себя во время выполнения. (Википедия)

Говоря более простым языком, метапрограммированием в рамках JavaScript можно считать механизмы, позволяющие анализировать и менять программу в режиме реального времени в зависимости от каких-либо действий. И, скорее всего, вы так или иначе используете их при написании скриптов каждый день.

Интеграция Spark Streaming и Kafka

Reading time6 min
Views16K
Здравствуйте, коллеги! Напоминаем, что не так давно у нас вышла книга о Spark, а прямо сейчас проходит последнюю корректуру книга о Kafka.


Надеемся, эти книги окажутся достаточно успешными для продолжения темы — например, для перевода и издания литературы по Spark Streaming. Перевод об интеграции этой технологии с Kafka мы и хотели вам сегодня предложить
Читать дальше →

Spark SQL. Немного об оптимизаторе запросов

Reading time10 min
Views18K

Всем привет. В качестве введения, хочется рассказать, как я дошел до жизни такой.


До того как встретиться с Big Data и Spark, в частности, мне довелось много и часто оптимизировать SQL запросы, сначала для MSSQL, потом для Oracle, и вот теперь я столкнулся со SparkSQL.


И если для СУБД уже существует множество хороших книг, описывающих методологию и «ручки», которые можно покрутить для получения оптимального плана запроса, то для Spark такого рода книг я не встречал. На глаза попадались больше статьи и наборы практик, причем больше относящиеся к работе через RDD/Dataset API, а не чистому SQL. Для меня одной из эталонных книг на тему оптимизации SQL является книга Дж. Льюис «Oracle. Основы стоимостной оптимизации». Что-то подобное по глубине проработки я и искал. Почему предметом исследования стал именно SparkSQL, а не API, лежащий в основе? Тут интерес был вызван особенностями проекта, над которым я работаю.



Читать дальше →

Настройка домашней среды для разработки (docker + gitlab + DNS)

Reading time5 min
Views36K

Intro


Не смог придумать подходящее название для поста, поэтому кратко опишу, о чем будет идти речь.


У большинства из нас есть какие-нибудь мелкие личные поделки, которые не выходят за рамки наших домов. Кто-то хостит их на рабочем компьютере, кто-то — на Heroku, кто-то — на VPS, а у кого-то есть домашний сервер. На реддите даже есть сообщество r/homelab, в котором люди обсуждают разные железки и софт для т.н. домашней лаборатории.


Я не настолько увлечен этим вопросом, но у меня дома стоит Intel NUC, который проигрывает музыку с NAS с помощью MPD. Помимо MPD на нем крутятся мои мелкие поделки, которые помогают мне с ним работать: ныне мертвый бот для телеграма, HTTP API на синатре и корявенький фронтенд для него.


В посте я без особых подробностей (многих из которых сам не понимаю) опишу процесс установки DNS-сервера для работы с доменными именами для сервисов, схему одновременной работы нескольких сервисов с помощью Docker и установку Gitlab с CI. Ничего нового вы не узнаете, но вдруг кому-нибудь пригодится этот "гайд". К тому же я бы хотел услышать предложения по поводу того, как можно было бы сделать это проще/элегантнее/правильнее.

Читать дальше →

Автоматическое разрешение конфликтов с помощью операциональных преобразований

Reading time9 min
Views10K
image

Автоматическое разрешение конфликтов в среде с более, чем одним ведущим узлом (в данной статье под ведущим узлом понимается узел, который принимает запросы на изменение данных) – очень интересная область исследований. Существует несколько различных подходов и алгоритмов, в зависимости от области применения, и в данной статье будет рассмотрена технология Операциональных Преобразований (Operational Transformations, OT) для разрешения конфликтов в приложениях совместного редактирования, таких как Google Docs и Etherpad.
Читать дальше →

Перевод книги «Managing Humans»

Reading time2 min
Views4.2K
image Всем привет! Мы начали переводить книгу «Managing Humans: Biting and Humorous Tales of a Software Engineering Manager». Сегодня переводчик прислал нередактированный текст, фрагмент из первой главы, и задал вопрос (как и автор книги): Можно ли использовать слово «мудак» в тексте? Но из песни слово не выкинешь, при всем богатстве выбора, другого синонима не придумали :-)

Глава 1 Не будь мудаком! Будь человеком


Вся прелесть написания текстов для всемирной паутины состоит в том, что у вас нет абсолютно никакого плана. Я действительно могу позволить себе подолгу мусолить в голове каждую тему. Годами мои тексты были посвящены менеджменту в сфере разработки программного обеспечения, и с публикацией каждой статьи я получал всё больше и больше электронных сообщений с вопросом: «Когда будет книга?» Да, я действительно всегда хотел издать книгу, но есть одна проблема. Какая? Писать о том, как стать хорошим руководителем? Скукота! Мне нужна была убедительная и правдивая история, которая элегантно свяжет воедино все мои воспоминания.
Читать дальше →

Нейробугу́рт. Как мы научили нейросеть придумывать мемы на год раньше Стэнфорда

Reading time9 min
Views12K
К написанию статьи меня подтолкнула вот эта новость (+исследование) про изобретение генератора мемов учеными из Стэнфордского университета. В своей статье я попытаюсь показать, что вам не нужно быть ученым из Стэнфорда, чтобы делать с нейросетями интересные вещи. В статье я описываю, как в 2017 году мы обучили нейронную сеть на корпусе из примерно 30 000 текстов и заставили ее генерировать новые интернет-мемы и мемы (коммуникационные знаки) в социологическом смысле слова. Описан использованный нами алгоритм машинного обучения, технические и административные трудности, с которыми мы столкнулись.
Читать дальше →

Алло, мы ищем фрилансеров: завтра открывается сезон поиска новой работы

Reading time2 min
Views9.1K
С первым днём лета, Хабр! Это не только сезон отпусков (кому повезло с начальством и не приходится отдыхать в феврале), но и лучшее время для поиска работы и новых заказчиков. К тому же, завтра суббота, поэтому, если вы:

  • в Москве,
  • профессионал в Java, C# (.NET), Cloud, C++, Ruby on Rails, Test Automation
  • или менеджер разработки, специализирующийся на SaaS, Java, QA, Ruby on Rails или C# (.NET)

— нет причин не заглянуть на огонёк в коворкинг Gravity на Бауманской.

image
Ужас, который можно будет забыть, перейдя на фриланс

Ровно в девять утра мы начинаем наш очередной турнир для сильнейших менеджеров и разработчиков. Турнир не имеет строгого ограничения по времени (кроме одного — мы о нем расскажем на самом мероприятии), но ориентировочно всех этапы занимают около 5-6 часов.

Оффлайновые турниры Crossover — это глобальные мероприятия, которые проходят в один день по всему миру. Если вы читаете «Хабр» из Киева, Варшавы, Будапешта, Бухареста, Буэнос-Айреса, Стамбула или Сан-Паулу — это значит, что завтра мы проводим турниры и в ваших городах.
Читать дальше →

Марвин Мински «The Emotion Machine»: Глава 5 «Симуляции и предсказывающие машины»

Reading time10 min
Views2.9K
Как привнести «человеческое» в технологии и как технологии помогают понять и улучшить и масштабировать «человеческое»?

В этом нам поможет суровый Марвин Мински, который своим беспощадным разумом анализирует чувства, эмоции, боль, влюбленность и сознание.

image

§5-8. Понятие «Симуляции»


«Реальность оставляет очень многое на откуп воображению»
– Джон Ленон
Все из нас могут узнать арку, составленную из прямоугольных блоков.

image

Но также мы все сможем вообразить себе арку, верхний прямоугольный блок которой будет заменён на блок с тремя сторонами.

image

Как может программа или разум «представлять» вещи, которых нет в области видимости? Мы могли бы сделать это, путём «воображения» изменений объекта на любом этапе восприятия!

Внесение изменений на низком уровне: В принципе, мы могли бы создавать новую картинку изменяя каждую точку на сетчатке – но на практике, такие изменения требовали бы огромных вычислений. Также, если вы захотите сместить свою точку видения, вам необходимо было бы «вычислять» всё изображение вновь. Что ещё хуже, до того как вы сможете сделать подобные вычисления, определённые части мозга должны точно знать, какую картинку следует описать. Но для того чтобы это сделать вам сперва необходимо представить эту картинку на каком-либо верхнем уровне, но если картинка описана – тогда зачем её следует вычислять?
Читать дальше →

Распознавание сцен на изображениях с помощью глубоких свёрточных нейронных сетей

Reading time10 min
Views18K
Многие продукты нашей компании работают с изображениями. Некоторое время назад мы решили добавить в такие сервисы «умный» поиск по фотографиям, их теггирование. Такая функциональность будет входить в Computer Vision API для дальнейшего использования в продуктах компании. Одним из важных способов теггирования изображений является теггирование по сценам, когда в результате мы получаем что-то такое:


Читать дальше →

Классические алгоритмы и структуры данных на JavaScript

Reading time2 min
Views95K
Привет Всем! Я недавно запустил на GitHub проект JavaScript Algorithms and Data Structures, который содержит примеры классических алгоритмов и структур данных написанных на JavaScript с объяснениями, примерами и ссылками для дальнейшего изучения (в частности на соответствующие YouTube видео).

Основная задача проекта — помочь программистам в изучении и применении алгоритмов и сделать это на JavaScript-е.
Читать дальше →

Пишем мессенджер с открытым исходным кодом

Reading time6 min
Views73K

Зачем пишем?


tinode logo

Давным-давно в одной далекой стране была компания America Online. И был у нее удивительный частный Интернет за заборчиком, где вместо URL-ов были "keywords": что-то среднее между адресом веб страницы и купленным ключевым словом в рекламе. Компании боролись за интересные ключевые слова, как сейчас борются за домены, а реклама выглядела так: "посетите нас во всемирной сети по адресу www.example.com, или наберите AOL Keyword: 'banking'".


История имеет свойство повторяться. Сейчас роль Америки Онлайн играют основные мессенджеры: все они за заборчиками, несовместимы друг с другом, все изобретают свои keywords, желают схватить пользователя и уже никогда не отпускать. Компании не заинтересованы в открытости: более крупные игроки не желают делиться пользователями с более мелкими и уж тем более становиться открытыми. В результате невозможно послать сообщение даже из WhatsApp в Facebook Messenger, несмотря на то, что оба принадлежат одной компании. Да и пользователи ценят надежность и удобство выше абстрактной открытости, хотя многих раздражает, что часть друзей, например, в Telegram, часть в WhatsApp, а родители в Skype.


А вот роль открытого интернета, к сожалению, сегодня не играет никто. Ситуацию хочется изменить. Если XMPP не справился, может быть кто-то другой сможет? И тут рассказ про Tinode.

Читать дальше →

Руководство по ассемблеру Go

Reading time12 min
Views27K


Прежде чем заняться реализацией runtime и изучением стандартной библиотеки, необходимо освоить абстрактный ассемблер Go. Надеюсь, это руководство поможет вам быстро овладеть нужными знаниями.
Читать дальше →

Небольшое расследование: как YouTube использует WebRTC для стриминга

Reading time6 min
Views8.4K

WebRTC — это JavaScript API в современных браузерах для видеозвонков. А еще для голосовых звонков, шаринга экрана, пробития NAT, раскрытия локального адреса и других интересных штук. В последние пару лет крупные игроки начинают переходить с пропиетарных API и расширений браузеров на WebRTC: с его помощью работает Skype for Web, частично — Hangouts, а теперь и возможности YouTube по броадкасту прямо из браузера. Пока только из хрома и с пятисекундной задержкой — но велика беда начало. Под катом мы предлагаем адаптированный для Хабра перевод детективной истории, где эксперты по WebRTC разбирают код клиентской части YouTube и рассказывают нам что и как сделали разработчики из Гугла.
Читать дальше →

UI-компоненты на пиксельных шейдерах: пишем ваш первый шейдер

Reading time10 min
Views14K
Кого можно назвать «пиксельных шейдеров начальник и пикселов командир»? Дениса Радина, работающего в Evolution Gaming над фотореалистичными веб-играми с использованием React и WebGL: он известен многим как раз под именем Pixels Commander.

В декабре на нашей конференции HolyJS он выступил с докладом о том, как использование GLSL может улучшить работу с UI-компонентами по сравнению с «обычным джаваскриптом». А теперь для Хабра мы подготовили текстовую версию этого доклада — добро пожаловать под кат! Заодно прикладываем видеозапись выступления:


Читать дальше →

ReactiveValidation: валидация данных в WPF

Reading time9 min
Views11K
Здравствуй, Хабр!

Мне хотелось бы рассказать об Open Source библиотеке для WPF — ReactiveValidation, в процессе написания которой я пытался ориентироваться на FluentValidation и Reactive UI. Её задача — это валидация формы каждый раз, когда пользователь изменил данные внутри неё.


Пример работы с библиотекой. Хорошая новость — шаблон можно использовать свой

Основные фичи библиотеки:

  • Правила создаются через fluent-интерфейс
  • Полный внутренний контроль над изменением свойств
  • Поддержка локализации (в том числе «на лету»)
  • Отображение сообщений в GUI
Читать дальше →

Сколько стоит компилятор?

Reading time7 min
Views31K
Компилирующий тулчейн является одним из самых больших и самых сложных компонентов любой системы, и, как правило, основан на опенсорсном коде, либо GCC, либо LLVM. На Linux-системе, только ядро операционной системы и браузер имеют больше строк кода. Для коммерческих систем, компилятор должен быть абсолютно надёжным, каким бы ни был исходный код, он должен генерировать надёжный, высокопроизводительный бинарный код.

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


Читать дальше →

Применение рекуррентных слоев для решения многоходовок

Reading time7 min
Views14K
image

История


Рекуррентные слои были изобретены еще в 80х Джоном Хопфилдом. Они легли в основу разработанных им искусственных ассоциативных нейронных сетей (сетей Хопфилда). Сегодня рекуррентные сети получили большое распространение в задачах обработки последовательностей: естественных языков, речи, музыки, видеоряда и тд.

Задача


В рамках задачи по Hierarchy reinforcement learning я решил прогнозировать не одно действие агента, а несколько, используя для этого уже пред обученную сеть способную предсказать последовательность действий. В данной статье я покажу как реализовать “sequence to sequence” алгоритм для обучения этой самой сети а в последующей, постараюсь рассказать, как использовать ее в Q-learning обучении.
Читать дальше →

Information

Rating
Does not participate
Location
Украина
Registered
Activity