Search
Write a publication
Pull to refresh
81
0
Alexander Komarov @izard

software optimization: CPU, GPU

Send message

Восставший из гаража

Reading time6 min
Views45K
Весной 1984 года в лаборатории — «Программное обеспечение персональных ЭВМ» ВЦ АН СССР прошел апгрейд (конечно, это слово тогда в русском языке отсутствовало) закупленных еще в конце 1981 года компьютеров IBM PC. Да, да, IBM PC появились в СССР одновременно с их появлением на Западе. Начальник лаборатории, Виктор Михайлович Брябрин, осчастливил меня двумя 5-дюймовыми флоппи дисководами на 160 кБайт каждый и платой контроллера флоппи дисков на шину ISA-8.
Сразу появилась мечта – собрать свой клон IBM PC. Мечта в то время оказалась недостижимой. В основном, конечно, из-за недоступности элементной базы, хотя информация об архитектуре, схемотехнике и BIOS уже была известна.


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

Восьмибитные анекдоты

Reading time4 min
Views60K
«Анекдот — небольшой забавный, смешной рассказ» (Из толкового словаря).
Наверное, надо бы предупредить читателей, что мол «Детям до 40 лет читать не рекомендуется». Но я, пожалуй, этого делать не буду. Все чинно и благородно.


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

ТОП 5 достоинств квадрокоптеров DJI Phantom последних поколений (с точки зрения гика)

Reading time5 min
Views13K
Сижу и читаю гиктаймс по интересующей меня тематике и нахожу вот такую статью, мол какой DJI плохой и ужасный.

В комментариях было много мнений и фактов.
Да, соглашусь, дорогой аппарат. Да, на любимом APM и Pixhawk можно собрать великолепный коптер (конвертоплан, самолёт, ровер, лодку). Многие фичи, которые заявлены в новых фантомах тем или иным образом уже реализованы сообществом.
Но фантик — это коммерческий продукт, который успешно продается в больших тиражах. Его ближайшие конкурент 3DR значительно отстает. В этой статье можно посмотреть, что DJI делает в разы больше продаж чем 3DR. Хоть и видно, что Parrot продает больше, но у них устройства другого класса. Количество самосборок сложно посчитать, но в реальной жизни вижу я их очень редко.

Прокаченный DJI

Так давайте посмотрим на фантик под другим углом и найдем достоинства с точки зрения гика.

Подробности

Ubuntu интегрировали в Windows 10

Reading time2 min
Views402K
Сегодня на конференции Build компания Microsoft расскажет о последних нововведениях, которые сделаны в новом билде Windows 10 Redstone. Незадолго до презентации стало известно, что на конференцию приглашены сотрудники Canonical, и этому есть веская причина.



Дело в том, что Microsoft совместно с Canonical сумели интегрировать операционную систему Ubuntu внутрь Windows 10 (что-то вроде эмулятора).
Читать дальше →

C++17, который мы потеряли

Reading time6 min
Views63K

5-го марта 2016-го года в городе Джэксонвилл закончился очередной съезд комитета ISO C++. Люди собирались предварительно-окончательно решать, что же войдёт, а что не войдёт в стандарт С++17. Конечно, ещё не 2017-ый год и кое-что ещё, возможно, переиграется. Тем не менее, есть мнение, что именно данное мероприятие очертило С++17 в его будущем виде.

Я не буду тут тянуть кота за хвост и искать толерантные выражения: нас ждёт катастрофа. Стандарты С++11/14 были очень значительным скачком вперёд, но на этом всё закончилось. С++17, обещанный когда-то «мажорным» релизом, по факту не несёт в себе ничего существенного. Немного синтаксического сахара, пару мелочей в стандартную библиотеку — и на этом всё. Отголоски данной трагедии уже звучали некоторым эхо на Хабре, но я всё-таки решил обобщить информацию и понять, куда мы катимся.
Читать дальше →

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

Reading time6 min
Views18K
image

Новостные каналы полны негатива по отношению к национальным валютам. В то же время валюты, основанные не технологии блокчейна, продолжают расти. Курс некоторых из них увеличился более чем на 1200% за прошедший год. Чтобы было проще представить себе масштаб изменений — представьте, что серебро достигло бы 180$ за унцию. Существуют сотни блокчейн-валют со странными названиями и, в принципе, каждый может создать свою собственную копию Биткойна за полдня. Как же распознать по-настоящему уникальные и перспективные проекты из множества бесполезных и жульнических? Эта статья расскажет о перспективных криптовалютах, чем-то выделяющихся на фоне Биткойна и его копий.

Каждый из пяти перечисленных ниже проектов имеет что-то уникальное, чего нет у широко известного Биткойна, который мог бы рассмотреть внедрение некоторых из их свойств, выделяющих 2-е и 3-е поколения криптовалют на фоне множества крипто-монет, заявленных на сайте www.coinmarketcap.com
Проекты описаны в порядке убывания их рыночной капитализации.
Читать дальше →

Из ESP8266 сделали аналоговый телевизионный передатчик

Reading time2 min
Views58K


Признаться, когда я читал статью об этом проекте на Hackaday, не раз посмотрел на календарь — уж не первое апреля ли?

Автор проекта, Чарльз Лор, выступающий под ником CNLohr на Github, взял обычный трёхдолларовый модуль ESP8266, который многие из нас используют для «Умного дома» и прочих IoT поделок, и разогнал его. Он заметил, что при этом I2C на модуле остаётся работоспособным и прекрасно работает на частоте 80 мегагерц. Автор вспомнил, что эта частота близка к частотам аналогового телевидения и, вспомнив Найквиста (Котельникова) смог заставить ESP8266 выдать сигнал на частоте около 60 мегагерц — частоте третьего канала аналогового ТВ.

Ему осталось только припаять к «ноге» модуля длинный провод, который послужил передающей антенной и вспомнить устройство видеостандарта NTSC. Впрочем, видео — лучше тысячи слов:

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

Сеть обменной сортировки со слиянием Бэтчера

Reading time9 min
Views24K
Сортировка является одной из базовых операций при обработке данных, которая используется в самом широком спектре задач. В данной статье будет рассмотрена сеть обменной сортировки со слиянием Бэтчера для параллельной сортировки массива произвольного размера.

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

Google's beacon platform. Часть 2 — Nearby meassages API

Reading time12 min
Views8.8K

Google's beacon platform — это решение для работы с Bluetooth маячками. Платформа работает с разными маячками от разных производителей, предоставляя разработчикам единый, простой и гибкий инструмент.



Перед прочтением этой статьи я рекомендую ознакомиться с концепцией Physical Web о которой я рассказывал в своей прошлой статье: Концепция Physical web. Bluetooth маячки. Сравнение стандартов iBeacon, AltBeacon и Eddystone.


Google's beacon platform. Часть 1 — Proximity beacon API
Google's beacon platform. Часть 2 — Nearby meassages API


Основным средством, в рамках Google's beacon platform, для работы на клиентской стороне с bluetooth маячками, является Nearby Messages API. В этой статье я расскажу как настроить проекты на а платформах Android и iOS, и добавить в приложение возможность получать и разбирать сообщения от ble-маячков.

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

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

Reading time13 min
Views69K


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

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

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

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

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

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

Третий тип даже не совсем оптимизация. Скорее это избегание неоптимальных языковых конструкций. Язык C++ довольно сложный, при его использовании частенько нужно знать, как реализован используемый код. Он достаточно низкоуровневый, чтобы программисту пришлось учитывать особенности работы процессоров и операционных систем.
Читать дальше →

На GitHub опубликован исходный код компактного гипервизора

Reading time2 min
Views33K
Известный гуру внутреннего устройства Windows и архитектуры ARM Алекс Ионеску опубликовал на ресурсе GitHub исходный текст базовой части гипервизора (инструмент виртуализации). Гипервизор содержит в себе множество замечательных свойств, включая, компактный размер, поддержку современных архитектур микропроцессоров, минимальное использование ассемблера в исходных текстах, а также комментарии по его использованию. При его разработке упор делался на максимальную компактность.



Опубликованный проект является настоящей находкой для системных программистов, а также исследователей по безопасности, которые интересуются низкоуровневыми функциями ОС. Гипервизор получил название SimpleVisor, поддерживает только современные 64-битные системы и был успешно протестирован на совместимость с такими системами как Windows 8.1 на микропроцессоре архитектуры Intel Haswell, а также Windows 10 на архитектуре Intel Sandy Bridge.

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

Байесовская нейронная сеть — потому что а почему бы и нет, черт возьми (часть 1)

Reading time16 min
Views94K
То, о чем я попытаюсь сейчас рассказать, выглядит как настоящая магия.

Если вы что-то знали о нейронных сетях до этого — забудьте это и не вспоминайте, как страшный сон.
Если вы не знали ничего — вам же легче, полпути уже пройдено.
Если вы на «ты» с байесовской статистикой, читали вот эту и вот эту статьи из Deepmind — не обращайте внимания на предыдущие две строчки и разрешите потом записаться к вам на консультацию по одному богословскому вопросу.

Итак, магия:


Слева — обычная и всем знакомая нейронная сеть, у которой каждая связь между парой нейронов задана каким-то числом (весом). Справа — нейронная сеть, веса которой представлены не числами, а демоническими облаками вероятности, колеблющимися всякий раз, когда дьявол играет в кости со вселенной. Именно ее мы в итоге и хотим получить. И если вы, как и я, озадаченно трясете головой и спрашиваете «а нафига все это нужно» — добро пожаловать под кат.

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

Подходы к проектированию RESTful API

Reading time17 min
Views154K

Автор: Вячеслав Михайлов, Solutions Architect.

В этой статье я поделюсь опытом проектирования RESTful API — на конкретных примерах покажу, как делать хотя бы простые сервисы красиво. Также мы поговорим, что такое API и зачем он нужен, поговорим об основах REST — обсудим, на чем его можно реализовывать; коснемся основных веб-практик, которые зависят и не зависят от этой технологии. Также узнаем, как составлять хорошую документацию, затрачивая на это минимум усилий, и посмотрим, какие существуют способы нумерации версий для RESTful API.

Часть 1. Теория


Итак, как мы все знаем, API — application programming interface (интерфейс программирования приложений), набор правил и механизмов, с помощью которых одно приложение или компонент взаимодействует с другими

Почему хороший API — это важно?

  • Простота использования и поддержки. Хороший API просто использовать и поддерживать.
  • Хорошая конверсия в среде разработчиков. Если всем нравится ваш API, к вам приходят новые клиенты и пользователи.
  • Выше популярность вашего сервиса. Чем больше пользователей API, тем выше популярность вашего сервиса.
  • Лучше изоляция компонентов. Чем лучше структура API, тем лучше изоляция компонентов.
  • Хорошее впечатление о продукте. API — это как бы UI разработчиков; это то, на что разработчики обращают внимание в первую очередь при встрече с продуктом. Если API кривой, вы как технический эксперт не будете рекомендовать компаниям использовать такой продукт, приобретая что-то стороннее.


Теперь посмотрим, какие бывают виды API.

Виды API по способу реализации:
  • Web service APIs
    • XML-RPC and JSON-RPC
    • SOAP
    • REST

  • WebSockets APIs
  • Library-based APIs
    • Java Script

  • Class-based APIs
    • C# API
    • Java



Виды API по категориям применения:

  • OS function and routines
    • Access to file system
    • Access to user interface

  • Object remoting APIs
    • CORBA
    • .Net remoting

  • Hardware APIs
    • Video acceleration (OpenCL…)
    • Hard disk drives
    • PCI bus



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

[ В закладки ] Алгоритмы и структуры данных в ядре Linux, Chromium и не только

Reading time9 min
Views86K
Многие студенты, впервые сталкиваясь с описанием какой-нибудь хитроумной штуки, вроде алгоритма Кнута – Морриса – Пратта или красно-чёрных деревьев, тут же задаются вопросами: «К чему такие сложности? И это, кроме авторов учебников, кому-нибудь нужно?». Лучший способ доказать пользу алгоритмов – это примеры из жизни. Причём, в идеале – конкретные примеры применения широко известных алгоритмов в современных, повсеместно используемых, программных продуктах.



Посмотрим, что можно обнаружить в коде ядра Linux, браузера Chromium и ещё в некоторых проектах.
Читать дальше →

Грабли Java

Reading time3 min
Views40K
Недавно в нашей компании среди разработчиков прошел конкурс на знание подводных камней языка Java. Победители получили почет и призы, все получили много позитива, а также поводов для раздумий и дискуссий. По горячим следам спешим поделиться с хабраобщественостью самыми интересными вопросами, прозвучавшими на викторине. Если вы новичок в Java или профессионал, но хотите освежить в памяти темные стороны языка, добро пожаловать под кат. Там вас ждут 4 каверзных вопроса с ответами, обоснованиями и выводами.
Читать дальше →

Нейрореволюция в головах и сёлах

Reading time8 min
Views94K
В последнее время всё чаще и чаще слышишь мнение, что сейчас происходит технологическая революция. Бытует мнение, что мир стремительно меняется.



На мой взгляд такое и правда происходит. И одна из главных движущих сил — новые алгоритмы обучения, позволяющие обрабатывать большие объёмы информации. Современные разработки в области компьютерного зрения и алгоритмов машинного обучения могут быстро принимать решения с точностью не хуже профессионалов.

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

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

Кто лишится в ближайшие лет десять работы, а у кого будут новые перспективные вакансии.
Читать дальше →

CAT — Управление размером кэша процессора

Reading time4 min
Views9.8K
Архитекторы процессоров архитектуры x86 исторически были против предоставления программистам возможности непосредственного управления кэшем. Один как-то сказал мне в 2009 году — «никогда мы этого не сделаем, кэш всегда должен быть прозрачным для программиста». Некоторые RISC процессоры представляют архитектурную возможность управления данными/кодом, который окажется в кэше. И вот, наконец-то, нечто подобное появилось и в архитектуре x86 (начиная с Broadwell*).
Читать дальше →

Когнитивные вычисления – работа быстрее мысли

Reading time6 min
Views26K


Когнитивные вычисления (cognitive computing) — тренд последних нескольких лет. Это технологии, которые силами многих специалистов развиваются очень быстрыми темпами и помогают человеку справляться с огромным потоком информации. Причем поток этот очень глубокий и широкий, образно говоря, это весь поток информации, генерируемый человечеством. Мозг человека — мощнейшая система, способная анализировать неструктурированные массивы данных, обрабатывать их и «раскладывать по полочкам». Но даже этот инструмент не справляется с информационными потоками современности, поэтому на службу себе человек поставил компьютеры, как обычные персональные, так и сверхпроизводительные системы. Но тут возникла проблема уже иного характера, а именно — необходимость структурирования данных, которые обрабатываются. Каждый день человечество генерирует около 2,5 квинтиллионов байтов данных, и 80% из них являются неструктурированными. А это означает, что эти 80% невидимы для современных компьютерных систем, созданных по обычной технологии.

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

Векторное управление электродвигателем «на пальцах»

Reading time17 min
Views354K
— Что такое векторное управление?
— Держать ток под 90 градусов.


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

Советы о том, как писать на С в 2016 году

Reading time20 min
Views92K

Если бы язык С был оружием

От автора: Наброски для этой статьи появились еще в начале 2015 года, правда, до публикации материалов дело так и не дошло. Наконец, решив, что в ящике моего письменного стола от вышеупомянутого «черновика» не будет никакой пользы, представляю его вашему вниманию в исходном виде. Единственное, что изменилось в тексте – год, с 2015 на 2016.

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

Итак, статья ...


Первое правило программирования на С – не используйте его, если можно обойтись другими инструментами.

Когда найти альтернативный метод не удается, самое время вспомнить о современных заповедях программиста.
Читать дальше →

Information

Rating
2,387-th
Location
München, Bayern, Германия
Registered
Activity

Specialization

Performance engineer
Lead
Performance Tuning