Пишем софтецкий
Как создать торгового робота с помощью генетического программирования
![](https://habrastorage.org/files/130/85a/7f7/13085a7f7cd5429483521b6a0765ee3e.jpg)
Доброго времени суток. В этой статье расскажу о создании системы в которой генетические алгоритмы пишут роботов. В теории эти роботы могли бы торговать на бирже.
Я фанат трех вещей — искусственного интеллекта, высокопроизводительных машин и практического применения любых знаний. Имея некоторое свободное время, я спроектировал небольшую задачку, приобрел железо и сел творить.
Проект возник из желания попробовать на практике генетическое программирование. Первым вариантом было создавать бота к какой-нибудь игре, но я остановился на торговых роботах, где биржа тоже своего рода игра.
Собственная платформа. Часть 0.1 Теория. Немного о процессорах
Здравствуй, мир! Сегодня у нас серия статьей для людей со средними знаниями о работе процессора в которой мы будем разбираться с процессорными архитектурами (у меня спелл чекер ругается на слово Архитектурами/Архитектур, надеюсь я пишу слово правильно), создавать собственную архитектуру процессора и многое другое.
Принимаются любые замечания!
Блокчейн, его перспективы и долевая экономика
![](https://habrastorage.org/files/2ca/9c5/91a/2ca9c591a4834f2e88781ddec369a152.png)
Технология блокчейн, несмотря на всю ее перспективность для экономики, находится лишь в самом начале своего технологического цикла. Bitcoin — первый и самый известный случай применения этой технологии. Сейчас блокчейн существует отдельно от Bitcoin, разные компании и частные разработчики создают все новые и новые технологии на основе блокчейн. Корпорация IBM ее поддерживает и старается развивать эту технологию всеми доступными методами.
Благодаря блокчейну вся экономическая деятельность человека может быть перестроена. Многим людям сложно думать об этой технологии без привязки к Bitcoin, но по мере появления иных сфер применения блокчейна ситуация изменяется. Интересно, что сфера финансовых услуг лишь один из нишевых сценариев применения блокчейна, на самом деле, возможности этой технологии гораздо шире. В качестве примера можно привести несколько случаев работы с блокчейном современных компаний без привязки к финансам и Bitcoin.
Головоломки TCP
![](https://habrastorage.org/files/1c0/ac2/6fe/1c0ac26feba04897addf31831cc60ea4.jpg)
Говорят, что нельзя полностью понять систему, пока не поймёшь её сбои. Ещё будучи студентом я ради забавы написал реализацию TCP, а потом несколько лет проработал в IT, но до сих пор продолжаю глубже и глубже изучать работу TCP — и его ошибки. Самое удивительное, что некоторые из этих ошибок проявляются в базовых вещах. И они неочевидны. В этой статье я преподнесу их как головоломки, в стиле Car Talk или старых головоломок Java. Как и любые другие хорошие головоломки, их очень просто воспроизвести, но решения обычно удивляют. И вместо того, чтобы фокусировать наше внимание на загадочных подробностях, эти головоломки помогают изучить некоторые глубинные принципы работы TCP.
Использование технологий от Intel для передачи сетевого трафика из физического адаптера в виртуальный
Intel SR-IOV
Не совсем технология от Intel, но пощупать удалось только их реализацию. Вкратце, физический адаптер (PF) делится на несколько виртуальных (VF). Трафик внутри одного vlan по умолчанию не выходит за границы PF, и обеспечивает наиболее минимальные задержки по сравнению с виртуальными адаптерами на софтовых бриджах.
С помощью использования Intel FlowDirector в принципе можно изменить поведение и указать правила по которым трафик должен ходить между VF или наружу из PF. Также можно сделать ручное распределение трафика по RX очередям или хардварный дроп трафика сразу при входе на карту. Поддержка конфигурации flow есть в драйверах, но отдельного api конкретно для Flow Director я не нашел. Кто хочет поиграться — можно покопаться в исходниках ethtool, либо использовать Intel DPDK, в нем API реализован, но карта отцепляется от kernel драйвера со всеми вытекающими.
С моей точки зрения, эти технологии в основном для админов, которым просто надо снизить задержки при передаче трафика между виртуальными машинами.
Плюсы: работа как в VMWare, так и KVM. Везде быстрее софтовых бриджей как по задержкам, так и пропусной способности. И CPU не жрет.
Минусы: виртуальный свитч в данном кейсе — нужно превращать в реальный на отдельном железе, куда втыкаются PF от сервера с виртуальными машинами.
И 64 VF на один PF сейчас достаточно мало.
Подборка полезных слайдов про Linux
![](https://habrastorage.org/files/9d3/aa9/f40/9d3aa9f4051b4f6588fae783f23ef5dc.png)
Обучаемся самостоятельно: подборка видеокурсов по Computer Science
![image](https://habrastorage.org/getpro/habr/post_images/941/729/900/941729900fdac1862e3cb6b27d29617d.png)
Содержание
- Введение в Computer Science
- Структуры данных и Алгоритмы
- Системное программирование
- Распределенные системы
- Базы данных
- Объектно-ориентированный дизайн и разработка софта
- Искусственный интеллект
- Машинное обучение
- Веб-разработка и интернет-технологии
- Concurrency
- Компьютерные сети
- Разработка мобильных приложений
- Математика для программистов
- Теория информатики и языки программирования
- Архитектура компьютера
- Безопасность
- Компьютерная графика
- Работа с изображениями и компьютерное зрение
- Интерфейс Человек-Компьютер
- Вычислительная биология
- Прочее
Современная операционная система: что надо знать разработчику
Александр Крижановский (NatSys Lab.)
![Александр Крижановский](https://habrastorage.org/getpro/habr/post_images/a01/e2d/4c3/a01e2d4c3412329353830e0e325a4228.jpg)
Нас сегодня будет интересовать операционная система – ее внутренности, что там происходит… Хочется поделиться идеями, над которыми мы сейчас работаем, и отсюда небольшое вступление – я расскажу о том, из чего состоит современный Linux, как его можно потюнить?
По моему мнению, современная ОС – это плохая штука.
![](https://habrastorage.org/getpro/habr/post_images/19e/c0e/a72/19ec0ea724d3593758ab57b44dbf39ca.png)
Дело в том, что на картинке изображены графики сайта Netmap (это штуковина, которая позволяет вам очень быстро захватывать и отправлять пакеты сетевого адаптера), т.е. эта картинка показывает, что на одном ядре с разной тактовой частотой до 3 ГГц Netmap позволяет 10 Гбит – 14 млн. пакетов в сек. отрабатывать уже на 500 МГц. Синенькая линия – это pktgen – самое быстрое, что, вообще, есть в ядре Linux’а. Это такая штуковина – генератор трафика, который берет один пакет и отправляет его в адаптер много раз, т.е. никаких копирований, никакого создания новых пакетов, т.е., вообще, ничего – только отправка одного и того же пакета в адаптер. И вот оно настолько сильно проседает по сравнению с Netmap (то, что делается в user-space показано розовой линией), и оно вообще где-то там внизу находится. Соответственно, люди, которые работают с очень быстрыми сетевыми приложениями, переезжают на Netmap, Pdpdk, PF_RING – таких технологий море сейчас.
Разделяемые указатели и многопоточность. И снова о них, в который раз
Глава из книги "Современное программирование на C++" называется "В сто первый раз об интеллектуальных указателях". Все бы ничего, но книга была издана в 2001 году, так стоит ли в очередной раз возвращаться к этой теме? Мне кажется что как раз сейчас и стоит. За эти пятнадцать лет поменялась сама точка зрения, тот угол под которым мы смотрим на проблему. В те далекие времена только-только вышла первая де-факто стандартная реализация — boost::shared_ptr<>, до этого каждый писал себе реализацию по потребности и как минимум представлял себе детали, сильные и слабые стороны своего кода. Все книги по C++ в то время обязательно описывали одну из вариаций умных указателей в мельчайших деталях.
Сейчас нам дан стандарт, и это хорошо. Но с другой стороны, уже не требуется понимать что там внутри, вместо этого достаточно три раза повторить мантру "используйте умные указатели везде где вы бы использовали обычные указатели", и это уже не так хорошо. Я подозреваю что далеко не все отдают себе отчет что данный стандарт — лишь один из возможных вариантов интерфейса, не говоря уже о разнице между реализациями различных вендоров. При выборе стандарта был сделан выбор между различными возможностями учитывающий разные факторы, но, оптимальный или нет, этот выбор очевидно не единственен.
А еще на stackoverflow например снова и снова задается вопрос — "потокобезопасны ли умные указатели из стандартной библиотеки?". Ответы даются обычно категоричные, но какие-то мало информативные. Если бы я например не знал о чем идет речь, то наверное бы не понял. И кстати, все сравнительно новые книги описывающие новый стандарт C++ этому вопросу тоже уделяют мало внимания.
Так давайте же попробуем сорвать покровы и разберемся с деталями.
Мониторинг и настройка сетевого стека Linux: получение данных
![](https://habrastorage.org/files/87c/247/7b4/87c2477b48ca450ebaf422832db71333.jpg)
В этой статье мы рассмотрим, как осуществляется приём пакетов на компьютерах под управлением ядра Linux, а также разберём вопросы мониторинга и настройки каждого компонента сетевого стека по мере движения пакетов из сети в приложения пользовательского пространства. Здесь вы найдёте много исходного кода, потому что без глубокого понимания процессов вы не сможете настроить и отслеживать сетевой стек Linux.
Также рекомендуем ознакомиться с иллюстрированным руководством на ту же тему, там есть поясняющие схемы и дополнительная информация.
HV или О том, как неплохо отрисовывать бинарные деревья
Я хотел бы сказать большое спасибо А. Дайняк за прочитанный курс и добавить, что это лишь изложение кусочка курса, и на большее я не претендую.
Расширения языков C и C++. Часть 1
Языковые расширения — это дополнительные возможности и фичи языка, не входящие в стандарт, но тем ни менее поддерживаемые компиляторами. Исследовать эти расширения очень интересно — в первую очередь потому, что они возникли не на пустом месте; каждое расширение — результат насущной необходимости, возникавшей у большого числа программистов. А мне интересно вдвойне — поскольку мне нравятся языки программирования и я разрабатываю свой, часто оказывается что многие мои идеи реализованы именно в расширениях языка. Стандарты языков C и C++ развиваются крайне медленно, и порой, читая описание расширений, так и хочется воскликнуть «ну это же очевидно! почему этого до сих пор нет в стандарте?».
Языковые расширения — это такая «серая», теневая область, про которую обычно мало пишут и мало знают. Но именно этим она и и интересна!
Предварительно могу сказать, что будут рассмотрены компиляторы общего назначения gcc, msvs, clang, intel, embarcadero, компиляторы для микроконтроллеров iar и keil, и по возможности многие другие компиляторы. Больше всего расширений в GCC, что не удивительно — свободная разработка способствует воплощению разных языковых фич. К тому же, информация по расширениям GCC вся собрана в одном месте, а информацию по остальным компиляторам придется собирать по крупицам. Поэтому начнем с GCC.
Алгоритм Форчуна на C++ для построения диаграммы Вороного на плоскости
Приветствую, уважаемые читатели данной статьи! В статье я дам описание имплементации алгоритма Форчуна (англ. Fortune's algorithm) для построения диаграммы Вороного (англ. Voronoi diagram) с использованием нативных сбалансированных двоичных деревьев поиска (для уникальных элементов) (англ. BST, binary search tree), предусмотренных стандартом C++, — ассоциативных упорядоченных контейнеров std::map
и std::set
.
Лепим микросервис
Подкинули задачу сделать микросервис, который получает данные от RabbitMQ, обрабатывает, и отправляет данные дальше по этапу в RabbitMQ. После отправки задания, я посмотрел на то что поучилось. Оказалось, что этот набор компонентов можно использовать для быстрого прототипирования pipeline архитектуры
Используемые компоненты:
Для примера буду делать микросервис для выдачи рейтинга игроков. От ядра системы в микросервис приходят следующие сообщения:
- player_registered(id,name);
- player_renamed(id,name);
- player_won(id, points).
Сервис раз в минуту должен отсылать сообщение с содержимым рейтинга.Рейтинг сортируется по набранным очкам за календарную неделю.
Практические кейсы применения блокчейна в резервном копировании, процессинге и идентификации
В этом материале мы — команда платежного блокчейн-сервиса Wirex — расскажем подробнее об инициативах и кейсах внедрения блокчейна Acronis, QIWI и WebMoney.
Acronis
Компания Acronis, специализирующаяся на разработке систем резервного копирования, еще этой весной объявила о своем сотрудничестве с Ethereum.
В начале октября Acronis представила рынку блокчейн-решение для автопрома. Компания разработала технологию, выполняющую функцию «черного ящика» для беспилотных автомобилей.
Построение диаграммы Вороного методом 'разделяй и властвуй'. Релаксация Ллойда
![image](https://habrastorage.org/getpro/habr/post_images/316/a63/52f/316a6352f962702a0e28a8fd5168068c.jpg)
Недавно, на хабрахабре была опубликована статья, целиком и полностью посвященная диаграммам Вороного. В статье автор подробно описывает алгоритм Форчуна, применяемый для построения Диаграммы Вороного за O(n*log(n)). Стоит отметить, что описание этого алгоритма не раз появлялось в рунете, в то время как о других алгоритмах (с той же асимптотикой) рассказано ровным счетом ничего. Данная статья исправляет это недоразумение, а также является отличным дополнением к уже опубликованному ранее материалу.
Ниже я расскажу о алгоритме 'разделяй и властвуй' построения диаграммы Вороного за O(n*log(n)), а также, основываясь на своем практическом опыте, о по-настоящему крутых штуках, в которых это применимо. Вообще, алгоритмы типа 'разделяй и властвуй' являются своего рода классикой программирования (думаю, про сортировку данным методом слышал каждый программист), хорошо параллелятся и легко читаются (если, конечно, знать основную идею алгоритма).
Сравнение библиотек логирования
![](https://habrastorage.org/files/1ea/0fa/f6c/1ea0faf6c174496fa75d81c0f11a00ae.png)
В сети огромное количество площадок формата Q&A где задаются вопросы из разряда:
- Предложите С++ логер? (C++ logging framework suggestions)
- Какой наиболее эффективный потоко-безопасный С++ логер? (What is the most efficient thread-safe C++ logger)
- Библиотека логирования для игр (Logging library for c games)
- Асинхронный потоко-безопасный С++ логер? (Asynchronous thread-safe logging in C++)
Люди делятся своим опытом и знаниями, но формат таких площадок позволяет лишь показать личные предпочтения отвечающего. К примеру, одним из самых производительных логеров чаще всего называют Pantheios, который даже по тестам производителя тратит больше 100 секунд на запись 1M строк лога, на современном железе это около 30 секунд, быстро ли это?
В этой статье я сравню наиболее известные и заслуженные логеры последних лет и несколько относительно молодых логеров по более чем 25 критериям.
О производительности именованных каналов в многопроцессных приложениях
![](https://habrastorage.org/files/6f7/2e4/eb1/6f72e4eb12af48d0822d9bf3b9c6b63e.jpg)
Нет, не замедлит. И вот почему.
Реализация Undo/Redo модели для сложного документа
Привет Хабр! В данной статье я хочу показать, как можно организовать модель редактирование документа со сложной структурой с возможностью отмены/возврата действий.
Предыстория и проблематика
Все началось с того, что я писал узкоспециализированный outline-софт, где основная идея заключается в оперировании кучей виртуальных бумажных карточек на разных сценах в разных редакторах.
Получилось похоже на MS Visio с определенной степенью кастомизации и плагинизации. Никаких технических сложностей здесь нету, однако есть ряд особенностей.
Во-первых, сцен несколько. А значит и оконных редакторов нужно несколько, каждый из которых работает по своим правилам.
Во-вторых, т.к. набор карточек один, а одна и та же карточка может быть использована в разных местах, то это рождает определенные зависимости между разными частями документа. И, если карточка удаляется, то это влечет за собой устранение этой карточки из всех мест, где она задействована.
В-третьих, когда я сделал все, что хотел, и показал результаты другу (который даже не программист), то он потыкал и сказал, что неплохо бы сделать Ctrl+Z. Я загорелся идеей, но вот реализовать это оказалось не такой тривиальной задачей. В этой статье я опишу, к чему пришел в итоге.
Информация
- В рейтинге
- Не участвует
- Дата рождения
- Зарегистрирован
- Активность