Архив за 08 марта 2018 - 2

Намедни работая над одной ошибкой в одном опенсорсном проекте, увидел как коллега (тоже работающий параллельно над той же проблемой) залил такой вот коммит [31a078bec7]:

   	/*
-	 * Select the list item based on the index. Negative operand means
-	 * end-based indexing (-2, ...), and -1 means out of range.
+	 * Decode end-offset index values.
   	 */
-	if (opnd < -1) {
-	    index = opnd+1 + objc;
-	} else {
-	    index = opnd;
-	}
+	index = opnd + (opnd <= TCL_INDEX_END)*(objc - 1 - TCL_INDEX_END);
   	pcAdjustment = 5;

Изменение само по себе правильное (теперь TCL_INDEX_END есть константное определение (-2)).
И грубо говоря в уме это разворачивается в следующее (все переменные int):

index = opnd + cmp(opnd, (-2))==>(0 | 1) * (objc - 1 - (-2));

Т. е. он как бы тем самым хотел сэкономить здесь один условный переход.
И всё как бы ничего, однако меня всё же насторожила такая казалось бы пустячная «оптимизация» с уклоном в арифметику.

Во первых, это изменение касается самой «главной» функции в этом проекте (TEBCresume), ибо она ответственна за исполнение байт-кода (JIT скомпилированных инструкций языка TCL). По этой причине эта функция еще и самая большая (порядка 6 тысяч строк + примитивы и макросы) и одна из самых сложных в кодовой базе проекта, с множественными `goto`, головоломными макросами для работы со «стеком» исполнения, свёртка/развертка NRE (nonrecursive evaluation) и т.д. и т.п.
Т.е. изменения этой функции нередко рассматриваются под лупой, а то и под микроскопом (т.к. бывало что даже незначительные модификации могут перевернуть весь код этой функции с ног на голову)…

Во вторых, по роду деятельности мне часто приходится оптимизировать сишный код, разглядывая его ассемблерное отражение, выжимая доли микро- а то и нано-секунд, и я часто вижу, что там очень всё совсем не однозначно бывает. Как минимум иногда разворачивая такие вот «экономящие» условный jump конструкции обратно в if или даже if/else, я видел улучшение как и в результирующем ассемблерном коде, так и явно при конечном сравнении производительности результатов исполнения.

Собственно к чему я все это писал — хотелось на примере показать как оно бывает, ну и раз уж коснулись этой темы, собрать немного статистики. Посему пара опросов в конце статьи…
Читать полностью »

В первых числах декабря 2017 года, пользователи блокчейн-проекта Ethereum столкнулись с неприятным открытием — любые их транзакции просто перестали подтверждаться. Фактически, вся сеть перестала функционировать из-за неожиданно разросшегося в размерах мемпула.

Совсем скоро стало понятно в чем же дело — во всем виноват оказался проект CryptoKitties. Это забавная игрушка, работающая на блокчейне Ethereum и позволяющая пользователям разводить «котят», скрещивать их и продавать как обычные критовалютные токены. В какой-то момент 15% всех транзакций в Ethereum приходились на криптокотят! А к моменту написания этой статьи, игроки потратили на котят уже 23 миллиона долларов!

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

cryptocat
Читать полностью »

M.O.B.A - 1

Посвящается всем любителям и фанатам онлайн игр жанра MOBA (Multiplayer Online Battle Arena, буквально «многопользовательская онлайновая боевая арена») — жанр компьютерных игр, сочетающий в себе элементы стратегий в реальном времени и компьютерных ролевых игр и выделяющийся схожестью с DotA.

Каждый может быть Героем, нужно лишь найти свой мир.
Читать полностью »

В Осаке открылся музей компании Panasonic. Церемония прошла вчера, 7 марта. Ровно сто лет назад, 7 марта 1918 года была основана компания Matsushita Electric Housewares Manufacturing Works, которую сейчас во всем мире знают как Panasonic.

Компания Matsushita Electric Housewares Manufacturing Works была основана 7 марта 1918 года

Значительное место в экспозиции музея отведено Коносукэ МацуситаЧитать полностью »

Как мы сегодня уже сообщали, в линейку смартфонов Meizu 15 будет входить три модели. Средняя так и будет называться — Meizu 15.

Мы знаем, что она получит дисплей диагональю 5,5 дюйма, 4 ГБ ОЗУ и 64 либо 128 ГБ флэш-памяти. Теперь же стало известно, что сердцем этого аппарата послужит SoC Snapdragon 660. Это уже не новая платформа, но она до сих пор достаточно редко встречается в смартфонах.

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

В Google Duo теперь можно отправлять видеосообщения

Читать полностью »

Java — язык программирования общего назначения. Общего назначения — значит можно писать почти любые программы. Вот я и попытался написать программу, которую обычно пишут на С или C++. Под катом я попытаюсь рассказать, как я декодировал спутниковые снимки с Метеор-М №2.

DSP in Java

Читать полностью »

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

Голосовой помощник Alexa может засмеяться без видимой причины

Компания Amazon, которой принадлежит сервис Alexa, подтвердила, что такие случаи возможны. Разработчики уже работают над исправлением.

Читать полностью »

Появление сервисов онлайнового видеовещания, таких как Netflix и Amazon Prime Video, всего за несколько лет изменило рынок распространения видеоконтента и привело к его росту. По мнению аналитиков Strategy Analytics, в ближайшие годы рост не просто продолжится, но и ускорится.

Доходы от распространения видео, включая распространение по онлайновым каналам и на физических носителях, и рекламу, в прошлом году составили 70,2 млрд долларов. Это на 29,4 млрд долларов больше, чем в 2013 году. Аналитики прогнозируют, что в ближайшие четыре года рынок вырастет на 36,3 млрд долларов и в 2021 году составит 106,5 млрд долларов.

Умная колонка Алекса смеётся в случайные моменты времени, в том числе посреди ночи - 1Многочисленные владельцы умной колонки Amazon Echo с цифровым помощником по имени Алекса сообщают о странном поведении гаджета. Внезапно без всякого предупреждения Алекса начинает хохотать. Иногда это случается посреди ночи, из-за чего хозяева просыпаются в испуге.

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

Компания Amazon сообщила изданию The Verge, что осведомлена о баге в системе распознавания речи и работает над патчем.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js