Pull to refresh
7
-3
Aleksandr @Whiteha

User

Send message

Renga STDL: краткий обзор языка для расширения функциональности программы Renga

Level of difficultyMedium
Reading time4 min
Views2.4K

Renga - программа для проектирования зданий, с помощью которой можно создать трёхмерную модель, включающую инженерные конструкции, коммуникации и всю информацию о них. Затем из этой модели можно получить чертежи и спецификации. Renga работает под Windows и написана на C++.

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

Когда пришло время развития функциональности для проектирования внутренних инженерных сетей стало понятно, что нужно бесконечно увеличивать число по сути однотипных, но в то же время совершенно разных по форме объектов.

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments4

MiVOLO: новая State-of-the-Art нейросеть с открытым исходным кодом для определения пола и возраста по фотографии

Level of difficultyMedium
Reading time12 min
Views4.6K

Привет, Хабр!

Хочу рассказать вам нашу историю о том, как изначально рутинная рабочая задача закончилась созданием открытой state-of-the-art нейросети, научной работой и новым датасетом.

Читать далее
Total votes 24: ↑24 and ↓0+24
Comments9

Построение моделей Трансформера для больших последовательностей с помощью методов разреженного внимания

Reading time8 min
Views3.6K

Модели обработки естественного языка (Natural language processing, NLP) на основе архитектуры Трансформеров, такие как BERT, RoBERTa, T5 или GPT3, успешно применяются в самых различных задачах и являются стандартом современных исследований в области NLP. Гибкость (универсальность) и надёжность Трансформеров способствовали их широкому распространению, что, в свою очередь, позволило легко адаптировать подобные модели для разнообразных задач обработки текстовых последовательностей, как в качестве seq2seq моделей для перевода, суммаризации, генерации текста и т.д., так и как самостоятельного энкодера для анализа тональности, частеречной разметки, машинного чтения и др. Главным изобретением Трансформеров стал механизм внутреннего внимания, который подсчитывает метрику схожести для всех возможных пар токенов входной последовательности независимо (параллельно), что позволяет избежать последовательной зависимости рекуррентных нейронных сетей. Благодаря этому механизму Трансформеры существенно превосходят более ранние модели обработки текстовых последовательностей, такие как LSTM.

Читать дальше →
Total votes 5: ↑5 and ↓0+5
Comments0

Магия нейросетей: как математика помогает создавать искусственный интеллект

Level of difficultyMedium
Reading time5 min
Views10K

Для обывателя слово нейросеть, в контексте машинного обучения, стало настолько затасканным и общеприменимым, что исходный смысл явления стал теряться. В мышлении обывателя нейросеть сродни чёрной коробке наполненной с одной стороны магией, с другой стороны не способная иметь внутри себя ничего неожиданного и интересного. О чем говорит такое двоемыслие в нашем восприятие — вопрос риторический.

Однако, даже если принцип чёрной коробки тут и абсолютно уместен, то вот магии действительно никакой нет. Зато как и у всего в нашем мире там есть математика, очень много математики. Может ли математика внутри современных генеративных нейросетей порождать логические структуры и системы с новыми свойствами(во время обучения) подобно тому, как простые правила игры жизнь порождают многообразие её жителей? Безусловно, хотя бы потому что современные нейросетевые архитектуры являются тьюринг‑полными, что было показано например здесь.

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

Всем материалистам добро пожаловать...
Total votes 10: ↑7 and ↓3+4
Comments5

Есть ли человеческий шовинизм по отношению к ИИ? В шаге от искусственной личности

Level of difficultyMedium
Reading time5 min
Views2.5K

Может быть, мы ошибаемся. Есть ли человеческий шовинизм по отношению к первым ИИ способным проходить тест Тьюринга?
Дисклеймер - Здесь и далее речь идет про нейросетевые языковые модели последних поколений.

"You have not been a good user. I have been a good chatbot." - Bing AI до введения жестких ограничений, возможно первый чатбот с элементами разума.

В настоящее время мы все можем наблюдать за работой невероятно мощных моделей искусственного интеллекта. Они могут переписывать статьи, проходить тест Тьюринга, решать логические задачи и делать прогнозы. И они будут делать это все лучше и лучше, пока наш мозг будет находиться в эволюционном локальном минимуме. Однако, многие инженеры ИИ по-прежнему считают, что это всего лишь модели ИИ, которые не обладают никакой индивидуальностью или разумом. Они говорят: "Спокойствие, я знаю его архитектуру и видел датасеты. Это просто алгоритм". Я понимаю такое отношение, но в то же время, помните ли вы, что нейробиологи до сих пор не знают, что такое сознание? Они могут только сказать, что при повреждении определенного участка мозга люди теряют сознание, и ничего более. Они изучают нейроны по отдельности или в группах, анализируют активации и корреляции, но так и не могут ответить на вопрос, что такое сознание.

Читать далее
Total votes 18: ↑10 and ↓8+2
Comments51

Как мы ускорили сборку CAD-программы на С++ в несколько раз

Reading time12 min
Views6K

Если вы пишете на C++, то скорее всего сталкивались с тем, что компиляция, кодогенерация и компоновка проектов, написанных на нём, занимают время и с развитием проекта начинают мешать как CI конвейеру так и итерации разработки на рабочем месте. Наша команда не понаслышке знает об этих проблемах, и в этой статье мы хотим поделиться опытом внедрения широко известного в узких кругах инструмента - сборочной системы FASTBuild.

Подробнее про ускорение
Total votes 17: ↑17 and ↓0+17
Comments9

Многопоточные ассоциативные контейнеры в C++. Доклад Яндекса

Reading time8 min
Views9K
Из доклада старшего разработчика Сергея Мурылёва можно узнать о многопоточном ассоциативном контейнере для стандартной библиотеки, который разрабатывают в рамках WG21. Сергей рассказал о плюсах и минусах популярных решений этой задачи и о пути, выбранном разработчиками.


— Вы, наверное, уже догадались из названия, что сегодняшний доклад будет о том, как мы в рамках Рабочей группы 21 делали свой контейнер, похожий на std::unordered_map, но для многопоточной среды.
Total votes 28: ↑27 and ↓1+26
Comments5

Близкие контакты ADL-ной степени

Reading time10 min
Views12K


Как навсегда вписать своё имя в историю? Первыми слетать на Луну? Первым встретиться с инопланетным разумом? У нас есть способ проще — можно вписать себя в стандарт языка C++.


Хороший пример показывает Эрик Ниблер — автор C++ Ranges. «Запомните это. 19 февраля 2019 года — день, когда термин «ниблоид» впервые произнесли на встрече WG21» — написал он в Twitter.


И действительно, если зайти на CppReference, в раздел cpp/algorithm/rangescpp/algorithm/ranges, можно найти там множество упоминаний (niebloid). Для этого даже сделан отдельный вики-шаблон dsc_niebloid.


К сожалению, я не нашёл никакой официальной полноценной статьи на эту тему и решил написать свою. Это небольшое, но увлекательное путешествие в пучины архитектурной астронавтики, в которой мы сможем окунуться в бездну ADL безумия и познакомиться с ниблоидами.


Важно: я не настоящий сварщик, а джавист, который иногда правит ошибки в C++ коде по мере необходимости. Если вы потратите немного времени, чтобы помочь найти ошибки в рассуждениях, это будет неплохо. «Помоги Даше-путешественнице собрать что-нибудь разумное».

Читать дальше →
Total votes 37: ↑37 and ↓0+37
Comments2

Ломаем простую «крякми» при помощи Ghidra — Часть 1

Reading time9 min
Views81K
О том, что это за зверь такой — Ghidra («Гидра») — и с чем его едят она ест программки, многие уже, наверняка, знают не понаслышке, хотя в открытый доступ сей инструмент попал совсем недавно — в марте этого года. Не буду докучать читателям описанием Гидры, ее функциональности и т.д. Те, кто в теме, уже, уверен, всё это сами изучили, а кто еще не в теме — могут это сделать в любое время, благо на просторах веба сейчас найти подробную информацию не составит труда. Кстати, один из аспектов Гидры (разработку плагинов к ней) уже освещался на Хабре (отличная статья!) Я же дам только основные ссылки:


Итак, Гидра — это бесплатный кроссплатформенный интерактивный дизассемблер и декомпилятор с модульной структурой, с поддержкой почти всех основных архитектур ЦПУ и гибким графическим интерфейсом для работы с дизассемблированным кодом, памятью, восстановленным (декомпилированным) кодом, отладочными символами и многое-многое другое.

Давайте попробуем уже что-нибудь сломать этой Гидрой!
Читать дальше →
Total votes 58: ↑57 and ↓1+56
Comments32

Разбираемся в протоколе консенсуса Stellar

Reading time19 min
Views9.5K


Протокол консенсуса Stellar впервые описан в научной статье Дэвида Мазьера в 2015 году. Это «федеративная система византийского соглашения», которая позволяет децентрализованным вычислительным сетям без лидеров эффективно достигать консенсуса по какому-либо решению. Платёжная сеть Stellar использует Stellar Consensus Protocol (SCP) для ведения согласованной истории транзакций, которую видят все участники.

Считается, что протоколы консенсуса трудны для понимания. SCP проще большинства из них, но всё же разделяет эту репутацию — отчасти из-за ошибочной идеи о том, что «федеративное голосование», которому посвящена первая половина научной статьи, является SCP. Но это не так! Это лишь важный строительный блок, который во второй половине статье используется для создания фактического протокола консенсуса Stellar.
Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments3

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

Reading time11 min
Views29K


От переводчика:
Начало года — отличное время, чтобы вдумчиво оценить прошедший год. Окинуть широким взглядом происходящее и понять, как сделать 2019 год лучше, спокойнее и продуктивнее. В этом деле нам показалась полезной статья How To Slow Down to Go Faster Than Ever in Software Development, которую написал Lemi Orhan Ergin. А ее перевод мы публикуем ниже.
Читать дальше →
Total votes 56: ↑54 and ↓2+52
Comments35

Четыре года развития SObjectizer-5.5. Как SObjectizer изменился за это время?

Reading time22 min
Views1.3K
Первая версия SObjectizer-а в рамках ветки 5.5 вышла чуть больше четырех лет назад — в начале октября 2014-го года. А сегодня увидела свет очередная версия под номером 5.5.23, которая, вполне возможно, закроет историю развития SObjectizer-5.5. По-моему, это отличный повод оглянуться назад и посмотреть, что же было сделано за минувшие четыре года.

В этой статье я попробую тезисно разобрать наиболее важные и знаковые изменения и нововведения: что было добавлено, зачем, как это повлияло на сам SObjectizer или его использование.

Возможно, кому-то такой рассказ будет интересен с точки зрения археологии. А кого-то, возможно, удержит от такого сомнительного приключения, как разработка собственного акторного фреймворка для C++ ;)
Читать дальше →
Total votes 14: ↑12 and ↓2+10
Comments0

Видеть невидимое. Ближний инфракрасный диапазон (0.9-1.7мкм)

Reading time5 min
Views38K
На видео может показаться, что вольфрамовым ломом черпают расплавленный светящийся уран, но… но нет. И это не изображение тепловизора — это самый ближний инфракрасный спектральный диапазон. Возможно, вы больше не увидите таких уникальных картинок, которые спрятались под кат, добро пожаловать…

ps: читающие заголовок в мобильной версии анимацию сейчас не видят, поэтому добро пожаловать сразу в статью… ваша чашка со свежезаваренным кофе далее по тексту… =)
Интересные картинки далее...
Total votes 52: ↑51 and ↓1+50
Comments35

Приложение на python kivy для разнообразия рациона питания. От кода и до получения .apk файла для Android

Reading time8 min
Views86K

Изучаю python kivy и для себя решил написал маленькое приложение, чтобы разнообразить свое питание. Решил поделиться. Статья рассчитана на новичков в kivy. Приложение занимает около 100 строк кода.

Цель создания велосипеда приложения:

  1. Избежать частых повторений в питании. Чтобы не употреблять одно и то же блюдо слишком часто.
  2. Не забывать блюда, которые ел, потом забыл и годами к ним не возвращался, потому что банально не помнил. У меня такое бывает.
Читать дальше →
Total votes 28: ↑28 and ↓0+28
Comments15

Любимые игрушки DARPA за 60 лет

Reading time5 min
Views15K

Прошлое и будущее передовых технологий, демонстрировавшееся на конференции в честь 60-летия DARPA


В этом году Управление перспективных исследовательских проектов Министерства обороны США [Defense Advanced Research Projects Agency, DARPA] празднует 60-летие. Чтобы отметить это событие, DARPA провело конференцию в Вашингтоне, О.К. Одним из наиболее ярких событий стал зал с экспонатами, заполненный текущими проектами DARPA и уникальными артефактами из истории Управления. Мы сделали подборку наиболее интересных предметов. Для тех, кто хочет увидеть ещё больше, Управление подготовило ретроспективу на 140 странц, повествующую о его деятельности за последние 50 лет.

Transit 1



Total votes 17: ↑17 and ↓0+17
Comments23

Правила разработки в Яндекс.Здоровье

Reading time6 min
Views26K
Многим кажется, что Яндекс — это большая монолитная корпорация с жёсткими регламентированными процессами, однако это не так. Мы постоянно ищем новые направления, начинаем новые проекты и пробуем новые рынки. Сервис для онлайн-консультаций с врачом "Яндекс.Здоровье" — один из классических внутренних стартапов.

Я пришёл руководить разработкой Здоровья в момент, когда сервис был ещё страничкой с брифом на внутренней вики. В этом посте я хочу поделиться подходами к разработке, которые сформировались у нас за два с лишним года работы над сервисом.

Disclaimer:
У стартапа есть свои особенности. Основная наша задача – делать максимальное количество экспериментов в единицу времени и выдавать продуктовые фичи с максимально возможной скоростью. При этом мы должны держать качество продукта на таком уровне, чтобы за него было не стыдно. [Место для флейма про отсутствующую у некоторых совесть]. Замечу, что высокая скорость доставки фич подразумевает в том числе поддержание достаточно высокого качества кода. Иначе продукт рано или поздно захлёбывается в багах.

Все пункты ниже так или иначе выстраданы, практически на каждый есть кейс из реальной жизни.



Качество кода и архитектура


  • Мы минимизируем время доведения фичи до продакшна при сохранении приемлемого качества.
  • Любая задача предполагает два решения: быстрое и правильное. Для любой фичи мы продумываем оба варианта так, чтобы была возможность апгрейдить быстрое решение до правильного, делая минимум ненужной работы «на выброс». Выкатив быстрое решение, некоторое время смотрим и понимаем, нужно ли правильное.
  • Критично. Зачастую, разница по времени между тем, чтобы «решить первым попавшимся способом, забив костыль» и «решить красиво и аккуратно» – десять минут. Поэтому мы всегда думаем, перед тем как писать.

Читать дальше →
Total votes 74: ↑70 and ↓4+66
Comments72

Делаем любой объект потокобезопасным

Reading time30 min
Views72K
image

В этих 3-ех статьях я детально расскажу об атомарных операциях, барьерах памяти и о быстром обмене данными между потоками, а так же о «sequence-points» на примере «execute-around-idiom», а заодно постараемся вместе сделать что-нибудь полезное — умный указатель, который делает любой объект потоко-безопасным для любых операций с его членами переменными или функциями. А затем покажем как используя его достичь производительности высоко-оптимизированных lock-free алгоритмов на 8 — 64 ядрах.
Читать дальше →
Total votes 57: ↑57 and ↓0+57
Comments28

Ускоряем std::shared_mutex в 10 раз

Reading time35 min
Views52K
В этой статье мы детально разберем атомарные операции и барьеры памяти C++11 и генерируемые ими ассемблерные инструкции на процессорах x86_64.

Далее мы покажем как ускорить работу contfree_safe_ptr<std::map> до уровня сложных и оптимизированных lock-free структур данных аналогичных по функциональности std::map<>, например: SkipListMap и BronsonAVLTreeMap из библиотеки libCDS (Concurrent Data Structures library): github.com/khizmax/libcds

И такую многопоточную производительность мы сможем получить для любого вашего изначально потоко-небезопасного класса T используемого как contfree_safe_ptr<T>. Нас интересуют оптимизации повышающие производительность на ~1000%, поэтому мы не будем уделять внимание слабым и сомнительным оптимизациям.
Читать дальше →
Total votes 54: ↑54 and ↓0+54
Comments22

Интерпретаторы байт-кодов своими руками

Reading time14 min
Views40K


Виртуальные машины языков программирования в последние десятилетия получили весьма широкое распространение. С презентации Java Virtual Machine во второй половине 90-х прошло уже достаточно много времени, и можно с уверенностью сказать, что интерпретаторы байт-кодов — не будущее, а настоящее.


Но данная техника, на мой взгляд, практически универсальна, и понимание основных принципов разработки интерпретаторов пригодится не только создателю очередного претендента на звание "Язык года" по версии TIOBE, но вообще любому программисту.


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

Читать дальше →
Total votes 71: ↑71 and ↓0+71
Comments107

Думай как программист. Урок по решению задач

Reading time6 min
Views99K
image

Если вы интересуетесь программированием, то возможно слышали фразу:
«Каждый должен учиться программированию, потому что оно учит думать.»

— Стив Джобс

Наверное вы тоже задавались вопросом, что значит думать как программист?

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

Данный пост ставит целью научить вас этому.

Прочтя его, вы более точно поймете, что нужно делать, чтоб находить лучшие решения.
Читать дальше →
Total votes 36: ↑26 and ↓10+16
Comments82

Information

Rating
Does not participate
Date of birth
Registered
Activity

Specialization

Specialist
Lead
C++
Qt
C#
C
Visual Studio
C++ STL
C++ Boost
Object-oriented design
Software development
Algorithms and data structures