Публикации

Небольшое исследование BitOperations и последовательностей де Брёйна

Статьи  /  dotNET  /  Производительность dotNET  /  Performance

Давно я сюда не писал, обходился Telegram и Twitter, но поля их слишком малы, чтобы вместить эту статью :)

Для небольшого исследования в области упаковки чисел мне понадобилось получить минимальное количество бит, требуемое для записи числа. Его, конечно, математически можно получить с помощью двоичного логарифма “округлённого к большему целому” (буду использовать обозначение lg n). Как вы, вероятно, знаете, в .NET Core 3.0 появились intrinsic’и[1], в частности, LZCNT. Она, конечно, возвращает leading zeroes, но вычесть-то из 31 (для индекса в каком-нибудь массиве) или из 32 (для количества бит на число) недолго. Однако, мне было интересно узнать и универсальное решение. В .NET Core 3.0, к счастью, добавили для этого класс BitOperations[2]. А мне, конечно же, захотелось посмотреть его исходники…

Атрибуты srcset и sizes у картинок

UX  /  Вёрстка  /  Производительность Design  /  UX+Usability  /  Performance  /  HTML

Если вы помните, давным давно я писал про srcset и sizes для картинок. Эти атрибуты позволяют подсказать браузеру, какие картинки лучше грузить (работают для тэгов img и picture).

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

UX для API

UX  /  Общее UX+Usability  /  API

Недавно прочитал замечательную статью User experience design for APIs. Крайне рекомендую прочитать. И не смотрите, что это блог Keras — советы применимы к любому коду.

Мои рассуждения на эту тему:

  • Большинство советов логичны и понятны. Скажу больше — многие очевидны. Однако почему, блин, мы так не делаем?
  • Ответ на вопрос из предыдущего пункта: чаще всего, проблема в нехватке времени.
  • Способ решения: когда несколько раз сталкиваешься с одной и той же проблемой UX в API — решить её.

Всё может JavaScript, и в браузере тоже

Общее  /  Языки JavaScript  /  Git

Я мог бы рассказать про релиз Node.js v10.12.0, но это не особо интересно.

Скорее всего, вы слышали про возможность поиграть в Doom в браузере, но сегодня не об этом :) Если интересно, проект js-dos использует em-dosbox для запуска DOS-овских программ в браузере.

Я вкратце расскажу о нескольких проектах, про которые я узнал сегодня, посмотрев на один из них.

Давным-давно в ленте твиттера…

Малоизвестные фичи MS SQL 2012

Базы данных Databases  /  Microsoft

Давно не смотрел на новые фичи MS SQL, а за последний месяц узнал несколько. Они далеко не ключевые, но их знание может пригодиться.

Если вы считаете, что:

  • для форматирования дат внутри SQL надо использовать CONVERT и DATEPART или подключать внешние функции;
  • можно воткнуть в таблицу множество столбцов [N]VARCHAR(MAX), всё равно они хранятся отдельно;
  • нельзя сделать в одной таблице два поля VARCHAR(5000) или можно, но нельзя в оба записать максимально длинные строки;

… читайте дальше.

Об исключениях в .NET

dotNET  /  CSharp dotNET

Рекомендую к прочтению статьи об исключениях в .NET. Точно стоит прочитать первую статью — Исключения: архитектура системы типов. В ней много полезного, особенно — для новичков. Остальные тоже можно, если эта тема интересует:

Плагины для отображения размера пакетов

IDE  /  Производительность Node.js  /  Performance  /  Tools

Недавно узнал, что есть плагин import-cost, показывающий размер импортируемого пакета непосредственно в редакторе. Есть вариант для Visual Studio Code, есть для IDE семейства InelliJ.

Авторы — разные люди. Но делают одно полезное дело. Может, кто-то задумается и не будет тянуть модуль из-за одной простецкой функции :)

Pipelines и Channel<T>

dotNET  /  Производительность dotNET  /  Performance

Недавно вышла статья System.IO.Pipelines: High performance IO in .NET. Она про то, как реализовать более наглядную и быструю работу со стримами в .NET Core 2.1.
От слишком краткого пересказа статья многое потеряет — читайте оригинал. Ладно, будем честными — я сегодня подустал, поэтому бегло её прочитал и не очень разбирался :)

Часть кода из статьи: