Как стать автором
Обновить
3
0
Bastedru @Bastedru

Пользователь

Отправить сообщение

Обучающий канал по математике и датасайнсу dudvstud

Время на прочтение3 мин
Количество просмотров7.2K

Подписывайтесь, там интересно! ;)

Как же так получилось?


Пройдя нелегкий путь от выпускника факультета радиофизики, через сотрудника государственного научного учреждения, преподавателя авторского спецкурса в любимой alma mater, я наконец стал уважаемым сотрудником R&D отдела очень крутого стартапа в области дополненной реальности Banuba.

Крутая компания, крутые задачи, напряженный график, шикарные условия и оплата труда… но после работы в НИИ, где ты
Всего голосов 12: ↑9 и ↓3+6
Комментарии29

Архитектура программного обеспечения переоценена, простой и понятный дизайн — недооценен

Время на прочтение10 мин
Количество просмотров46K
image

Вашему вниманию предлагается перевод поста Гергелия Ороса, занимающего должность Engineering Manager в Uber. В нем он делится своим взглядом на проектирование крупномасштабных систем, основанном на собственном практическом опыте работы в Uber и Microsoft. В сочетании с комментариями на Hacker News, которые добавляют весомые контр-аргументы и дополняют точку зрения автора, его статья стала одним из самых интересных постов недели. В статье используется термин «дизайн кода» для сравнения с традиционной «архитектурой» — о нем подробнее можно прочитать здесь.

На мою долю выпало достаточно опыта в проектировании и создании крупномасштабных систем. Я принимал участие в переписывании распределенной системы платежей в Uber, проектировании и релизе Skype на Xbox One и выпуске в открытый доступ RIBs — мобильного архитектурного фреймворка, созданного в Uber. Все эти системы имели тщательно продуманный дизайн, прошли через несколько итераций, с ними связано множество совещаний, проведенных у маркерной доски, и других обсуждений. Затем придуманный дизайн сводился к дизайн-документу, который распространялся среди других разработчиков для сбора дополнительной обратной связи, который продолжался до тех пор, пока мы не переходили к разработке.

Все эти системы отличали большие масштабы: их создавали сотни разработчиков — или они использовали их в своих разработках — и сегодня они бьются в сердцах систем, которыми ежедневно пользуются миллионы людей. Причем, эти проекты создавались не с нуля. Система платежей должна была заменить две другие существующие платежные системы, используемые десятками других систем и дюжинами команд, и все это — без какого-либо ущерба для бизнеса. Переписывание приложения Uber было проектом, над которым одновременно работало несколько сотен инженеров — он включал в себя портирование всей существующей функциональности на новую архитектуру.
Читать дальше →
Всего голосов 73: ↑66 и ↓7+59
Комментарии66

Лямбды: от C++11 до C++20. Часть 1

Время на прочтение11 мин
Количество просмотров68K
Добрый день, друзья. Сегодня мы подготовили для вас перевод первой части статьи «Лямбды: от C++11 до C++20». Публикация данного материала приурочена к запуску курса «Разработчик C++», который стартует уже завтра.

Лямбда-выражения являются одним из наиболее мощных дополнений в C++11 и продолжают развиваться с каждым новым стандартом языка. В этой статье мы пройдемся по их истории и посмотрим на эволюцию этой важной части современного C++.



Вторая часть доступна по ссылке:
Lambdas: From C++11 to C++20, Part 2
Читать дальше →
Всего голосов 28: ↑26 и ↓2+24
Комментарии8

Немного размышлений и советов по оптимизации кода на С++

Время на прочтение13 мин
Количество просмотров64K


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

Как правило, язык C++ используют там, где требуется высокая скорость работы. Но на C++ без особых усилий можно получить код, работающий медленнее какого-нибудь Python/Ruby. Именно подобным кодом оперируют многочисленные сравнения Any-Lang vs C++.

Вообще, оптимизация бывает трех типов:

  1. Оптимизация уже готового, проверенного и работающего кода.
  2. Изначально написание оптимального кода.
  3. Просто использование оптимальных конструкций.

Специально заниматься оптимизацией готового кода следует только после того, как проект закончен и используется. Как правило, оптимизация потребуется только в небольшой части проекта. Поэтому сначала нужно найти места в коде, которые съедают большую часть процессорного времени. Ведь какой смысл ускорять код, пусть даже на 500%, если он отнимает только 1% машинного времени? И следует помнить, что, как правило, гораздо больший выигрыш в скорости дает оптимизация самих алгоритмов, а не кода. Именно про данный ее вид говорят: «преждевременная оптимизация — зло» (с).

Второй тип оптимизации — это изначальное проектирование кода с учетом требований к производительности. Такое проектирование не является ранней оптимизацией.

Третий тип даже не совсем оптимизация. Скорее это избегание неоптимальных языковых конструкций. Язык C++ довольно сложный, при его использовании частенько нужно знать, как реализован используемый код. Он достаточно низкоуровневый, чтобы программисту пришлось учитывать особенности работы процессоров и операционных систем.
Читать дальше →
Всего голосов 81: ↑68 и ↓13+55
Комментарии89

Чистая архитектура. Часть I — Введение

Время на прочтение4 мин
Количество просмотров30K
Это вольный и очень краткий пересказ новой книги Роберта Мартина (Дяди Боба) «Чистая Архитектура», выпущенной в 2018 году.
Читать дальше →
Всего голосов 28: ↑24 и ↓4+20
Комментарии30

Умножение матриц: эффективная реализация шаг за шагом

Время на прочтение14 мин
Количество просмотров102K


Введение


Умножение матриц — это один из базовых алгоритмов, который широко применяется в различных численных методах, и в частности в алгоритмах машинного обучения. Многие реализации прямого и обратного распространения сигнала в сверточных слоях неронной сети базируются на этой операции. Так порой до 90-95% всего времени, затрачиваемого на машинное обучение, приходится именно на эту операцию. Почему так происходит? Ответ кроется в очень эффективной реализации этого алгоритма для процессоров, графических ускорителей (а в последнее время и специальных ускорителей матричного умножения). Матричное умножение — один из немногих алгоритмов, которые позволяет эффективно задействовать все вычислительные ресурсы современных процессоров и графических ускорителей. Поэтому не удивительно, что многие алгоритмы стараются свести к матричному умножению — дополнительная расходы, связанные с подготовкой данных, как правило с лихвой окупаются общим ускорением алгоритмов.

Так как реализован алгоритм матричного умножения? Хотя сейчас существуют множество реализаций данного алгоритма, в том числе и в открытых исходных кодах. Но к сожалению, код данных реализаций (большей частью на ассемблере) весьма сложен. Существует хорошая англоязычная статья, подробно описывающая эти алгоритмы. К моему удивлению, я не обнаружил аналогов на Хабре. Как по мне, этого повода вполне достаточно, чтобы написать собственную статью. С целью ограничить объем изложения, я ограничился описанием однопоточного алгоритма для обычных процессоров. Тема многопоточности и алгоритмов для графических ускорителей явно заслуживает отдельной статьи.

Процесс изложения будет вестись ввиде шагов с примерами по последовательному ускорению алгоритма. Я старался писать максимально упрощая задачу, но не более того. Надеюсь у меня получилось…
Читать дальше →
Всего голосов 90: ↑90 и ↓0+90
Комментарии49

Нетехнологические компании начинают масштабно использовать искусственный интеллект

Время на прочтение7 мин
Количество просмотров8.6K
По словам Александры Суйч Басс, искусственный интеллект распространяется за пределы технологического сектора, что повлечет серьезные последствия для компаний, работников и потребителей.

Детекторы лжи не очень широко используются в бизнесе, но китайская страховая компания Ping An считает, что сможет выявить обман. Компания позволяет клиентам подавать заявки на кредиты через свое приложение. Потенциальные заемщики отвечают на вопросы о своих доходах и планах погашения с помощью видеотрансляции, которая отслеживает около 50 крошечных выражений лица, с целью определить искренность их решений. Программа, работает на базе искусственного интеллекта (AI) и помогает точно определить клиентов, с которыми следует продолжить работу.

AI заменит большинство обязательных проверок состояний банковских счетов заемщиков. Johnson & Johnson, фирма по производству потребительских товаров, и Accenture, консалтинговая компания, используют AI для сортировки резюме и выбора лучших кандидатов. AI помогает Caesars, группе компании из сферы казино и отелей, угадывать вероятные расходы клиентов и предлагать персонализированные рекламные акции для их привлечения. Bloomberg, медиахолдинг и финансово-информационная компаний, использует AI для сканирования отчетов о доходах компаний и автоматического создания новостных статей. Vodafone, оператор мобильной связи, может предсказать проблемы со связью и устройствами пользователей до того момента, как они возникнут. Компании из каждой экономической отрасли используют AI для мониторинга угроз кибербезопасности и других рисков, таких как эмоциональное выгорание сотрудников.
Читать дальше →
Всего голосов 14: ↑13 и ↓1+12
Комментарии17

Не VPN-ом единым. Шпаргалка о том, как обезопасить себя и свои данные

Время на прочтение8 мин
Количество просмотров52K
Привет, Хабр.

Это мы, VPN-сервис HideMy.name. Сейчас временно работаем на зеркале HideMyna.me. Почему? 20 июля 2018 года Роскомнадзор добавил нас в список запрещенных ресурсов из-за решения Медведевского районного суда в Йошкар-Оле. Суд постановил, что посетители нашего сайта имеют неограниченный доступ к экстремистским материалам #безрегистрацииисмс, а ещё каким-то образом нашёл на нём книгу «Майн Кампф» Адольфа Гитлера. Видимо, для надёжности.

Такое решение нас очень удивило, но мы продолжаем работать на hidemyna.me, hidemyname.org, .one, .biz и др. Затяжное пререкание с Роскомнадзором не привело ни к какому результату. Пока мы с юристами оспариваем блокировку и волшебное решение суда, делимся с вами базовыми советами по сохранению конфиденциальности в интернете и новостями на эту тему.


Эдвард Сноуден любит Агентство национальной безопасности (наверное)
Читать дальше →
Всего голосов 49: ↑47 и ↓2+45
Комментарии73

Пример простой нейросети на С/C++

Время на прочтение8 мин
Количество просмотров113K
Всем привет.

Решил поделиться простым и ёмким на мой взгляд решением нейронной сети на С++.

Почему эта информация должна быть интересна?

Ответ: я старался в минимальном наборе запрограммировать работу многослойного перцептрона, да так, чтобы его можно было настраивать как душе угодно всего в нескольких строчках кода, а реализация основных алгоритмов работы на «С» позволит с лёгкостью переносить на «С» ориентированные языки(в прочем и на любые другие) без использования сторонних библиотек!

Прошу взглянуть на то, что из этого вышло


Про предназначение нейронных сетей я вам рассказывать не буду, надеюсь вас не забанили в google и вы сможете найти интересующую вас информацию(назначение, возможности, области применения и так далее).

Исходный код вы найдёте в конце статьи, а пока по порядку.

Начнём разбор


1) Архитектура и технические подробности


многослойный перцептрон с возможностью конфигурации любого количества слоев с заданной шириной. Ниже представлен

пример конфигурации
myNeuero.cpp

    inputNeurons = 100; 	//ширина входного слоя
    outputNeurons =2;    	//ширина выходного слоя
    nlCount = 4;			//количество слоёв ( по факту их 3, указываемое число намеренно увеличено на 1
    list = (nnLay*) malloc((nlCount)*sizeof(nnLay));

    inputs = (float*) malloc((inputNeurons)*sizeof(float));
    targets = (float*) malloc((outputNeurons)*sizeof(float));

    list[0].setIO(100,20);  //установка ширины INPUTS/OUTPUTS для каждого слоя
    list[1].setIO(20,6);	//  -//-
    list[2].setIO(6,3);     //  -//-
    list[3].setIO(3,2);     //  -//- выходной слой


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

Таким образом, вы имеете возможность настраивать любую конфигурацию вручную или по заданному правилу перед компиляцией или после компиляции считывать данные из source файлов.
Читать дальше →
Всего голосов 39: ↑23 и ↓16+7
Комментарии27

Про Гауди — разработчика из девятнадцатого века, добившегося всего, чего может добиться разработчик

Время на прочтение8 мин
Количество просмотров100K
Вот что строил испанский архитектор Антонио Гауди:



Его здания описывают как «бионические дома», некоторые говорят о «летящей пластичной материи». За морем восторгов художников и дизайнеров, как мне показалось, упущена некоторая невероятная рационализация и прагматичность. Гауди был в первую очередь отличным разработчиком, математиком и геометром. Но чтобы объяснить это, сначала я покажу другую картинку:


Это два крепления. Первое производится серийно — оно просто в проектировании, просто в изготовлении, дёшево и невероятно уродливо. Второе красивое, и требует на 25% меньше материала для того, чтобы выдержать тот же вес (то есть — куда прочнее). Только его трудно рассчитать, оно будет дороже в серии — и придётся подумать.

Примерно то же самое делал Гауди. Ему пришлось обойтись без математического аппарата и современных материалов. И ещё действовать в рамках строго ограниченного бюджета. Он, фактически, заложил новые принципы всего от фасада до последней дверной ручки, создал шедевры оптимизации — в общем смёл все стереотипы как сухие листья, создал с нуля теорию и воплотил её. В девятнадцатом веке всё то, что он делал, было просто диким. Некоторые даже считали его сумасшедшим.
Читать дальше →
Всего голосов 228: ↑225 и ↓3+222
Комментарии136

Как онлайн-бизнесу организовать прием платежей в валюте для иностранных клиентов

Время на прочтение6 мин
Количество просмотров24K
imageПрием платежей в валюте актуален для любого онлайн-бизнеса, работающего на международном рынке. Но как именно глобальной ecommerce-компании предоставить своим покупателям возможность приобретать товары и услуги в валюте разных стран мира, при этом не нарушая законов и не теряя доверия клиентов? Команда нашего платежного провайдера Fondy постоянно решает подобные задачи мерчантов и в этом материале мы делимся своим опытом.

В дальнейшем описании речь пойдет только о юридических лицах и физических лицах — предпринимателях (ИП в России и ФЛП в Украине). Для начала стоит определиться, какую проблему хочет решить интернет-предприниматель:

  1. Предоставить иностранной целевой аудитории возможность платить в удобной валюте
  2. Получать средства на свой банковский счет в «твердой» иностранной валюте
  3. И то и другое одновременно: принимать от плательщиков разные валюты и получать средства в «твердой» иностранной валюте

Также вариант поиска решения зависит от того, какое юридическое или физическое лицо будет использовано: резидента своей страны или иностранное, например США или Европы. Забегая вперед, можно констатировать, что с приемом платежей на российскую компанию все немного сложнее, чем на иностранную, а для украинской компании так и вообще почти невозможно. Давайте разберемся, почему все так плохо, и как можно решить данные проблемы хотя бы частично.
Читать дальше →
Всего голосов 19: ↑18 и ↓1+17
Комментарии14

Как вернуться в кодеры, когда за сорок

Время на прочтение3 мин
Количество просмотров44K

Сколько раз рассказывал коллегам и на собеседованиях. Видимо есть спрос и на Хабре. Кто-то встал перед выбором. Другой сомневается в правильности намеченного пути. Когда выгораешь, такое случается. Кому-то интересно, с чем предстоит столкнуться впереди, или сопоставить своё подобное. Поверьте, это короткая версия объёмной тоскливой истории.

Читать дальше →
Всего голосов 87: ↑64 и ↓23+41
Комментарии174

Чистая архитектура в Python: пошаговая демонстрация. Часть 1

Время на прочтение8 мин
Количество просмотров88K

Примечание переводчика
Данная статья является переводом. Дословный перевод занял 35 страниц А4 в ворде. Планирую разбить её на 5-6 частей. Думаю, данная тема должна быть полезна многим программистам, желающим писать свои web-приложения лучше и чище. Так же статья полезна тем, кто хочет научиться писать web-приложения с методологией TDD с применением именно модульных тестов, а не интеграционных, как это обычно делалось в тех статьях, что попадались мне на глаза. Если где-то использованы неверные термины или перевод кажется слишком машинным — напишите мне в личку, вряд ли это гугл-транслятор, скорее всего дело в моей косноязычности и посредственном знанием английского языка.

Содержание

Год назад мой друг Roberto Ciatti познакомил меня с концепцией, которую Роберт Мартин называет чистой архитектурой. Дядя Боб много говорит об этой концепции на конференциях и пишет о ней очень интересные статьи. «Чистая архитектура» представляет собой способ структурирования системы программного обеспечения, набор соглашений о различных слоях и ролях их участников, нечто большее, чем строгие правила.


Как он уже говорил в своей статье «Чистая архитектура» (перевод на хабре), идея самого подхода не нова, она строится на множестве концепций, которые продвигались многими разработчиками программного обеспечения в течение последних 3-х десяти лет.

Читать дальше →
Всего голосов 18: ↑16 и ↓2+14
Комментарии4

Как конструировать слова (от автора, который ненавидит читать)

Время на прочтение4 мин
Количество просмотров25K
Честно говоря, я писатель. Мне платят за то, чтобы я писал слова. Но есть вещь, которую большинство обо мне не знают: я ненавижу читать.

Теперь не поймите меня неправильно — я все еще немного читаю. Я одолел книги и блоги, новые каналы и журналы. Но когда авторы становятся многословными, у меня замыливается взгляд. Мне скучно.

image

Все что я вижу — простыня слов.

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

Дело в том, что, в основном, я пишу тексты для приложений и сайтов. Здесь краткость лучше восхитительного стиля, на счету каждый знак. А писать текст для интерфейса во многом напоминает дизайн — дизайн слов для людей, которые ненавидят читать.
Всего голосов 67: ↑61 и ↓6+55
Комментарии23

Обертываем алгоритмы в итераторы

Время на прочтение6 мин
Количество просмотров17K
Здравствуйте, дорогие читатели. Сегодня пятница, а у нас на борту продолжается напряженный отсмотр и анализ новинок по C++, желательно с учетом C++ 17. В ходе этого увлекательного занятия мы набрели на блог Яцека Галовица (Jacek Galowicz). Из сравнительно свежих материалов нам особенно понравилась статья, размещенная под катом.
Читать дальше →
Всего голосов 29: ↑28 и ↓1+27
Комментарии43

Самая нужная программа на свете

Время на прочтение20 мин
Количество просмотров166K
image
Какими программами постоянно пользуются люди? Если подумать над этим вопросом, то окажется, что список этот не такой уж большой. К постоянно используемым программам можно отнести: саму операционную систему, файловый менеджер, текстовый редактор, браузер, мессенджер. Это именно тот базовый набор, которым пользуется на компьютере практически каждый человек. Требования к таким программам должны быть высокими: безотказная работа, быстрое выполнение всех функций, понятный и удобный интерфейс.

Можно сказать, что вышеперечисленный набор программ — это самые нужные программы, которыми пользуется человек в цифровую эпоху. Этот список покрывает все базовые потребности человека-пользователя. Или не все? Есть ли еще одна базовая потребность, которая не учтена в вышеприведенном списке самых необходимых программ? Является ли эта потребность самой важной из тех, что должен автоматизировать компьютер? Для меня такая потребность есть, но в списке самых используемых программ ей места не нашлось. Что же это за потребность?
Ранее компьютер считался устройством для проведения вычислений...
Всего голосов 115: ↑111 и ↓4+107
Комментарии303

Domain-Driven Design: стратегическое проектирование. Часть 1

Время на прочтение14 мин
Количество просмотров106K


Здравствуйте, хабрапользователи! В этой статье речь пойдет о предметно-ориентированном проектировании программного обеспечения с использованием, в первую очередь, стратегических шаблонов. Вторую часть – про тактическое проектирование – читайте здесь.

Данный подход использовал Вон Вернон в своей книге «Реализация методов предметно-ориентированного проектирования». Цель написания этой книги: дать возможность разработчикам совершить полет на самолете DDD (в детстве автор зачастую путешествовал со своей семьей на небольших самолетах). Вид с высоты дает более широкое представление о проблемах моделирования, не давая застрять в различных технических деталях. Наблюдая ландшафт DDD таким способом, можно осознать преимущества как стратегического, так и технического проектирования. Подробнее – под катом!
Читать дальше →
Всего голосов 25: ↑24 и ↓1+23
Комментарии64

Типы CQRS

Время на прочтение5 мин
Количество просмотров28K
CQRS — довольно хорошо изученный паттерн. Часто можно слышать, что вы либо следуете CQRS, либо нет, имея ввиду что это что-то вроде бинарного выбора. В этой статье я бы хотел показать, что существует спектр вариаций этого понятия, а также как разные типы CQRS могут выглядеть на практике.
Читать дальше →
Всего голосов 19: ↑16 и ↓3+13
Комментарии21

Как мы попробовали DDD, CQRS и Event Sourcing и какие выводы сделали

Время на прочтение9 мин
Количество просмотров75K
Вот уже около трех лет я использую в работе принципы Spec By Example, Domain Driven Design и CQRS. За это время накопился опыт практического применения этих практик на платформе .NET. В статье я хочу поделиться нашим опытом и выводами, которые могут быть полезными командам, желающим использовать эти подходы в разработке.

Факты, цифры, код
Всего голосов 39: ↑39 и ↓0+39
Комментарии45

Парадигмы программирования. Data Driven vs Domain Driven

Время на прочтение7 мин
Количество просмотров62K
Информационные технологии развиваются семимильными шагами, появляются новые устройства, платформы, операционные системы, и вместе с этим растет спектр задач, который приходится решать разработчикам. Но, не все так плохо — на помощь программистам спешат новые средства разработки, ide’шки, новые языки программирования, методологии и т.д. Один только список парадигм программирования впечатляет, а с учетом современных мультипарадигменных ЯП (например, C#) резонно встает вопрос: «Как с этим всем быть? Что выбрать?».

Попробуем немного разобраться.
Читать дальше →
Всего голосов 51: ↑37 и ↓14+23
Комментарии97
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность