Как стать автором
Обновить
8
0
Антон Муравьев @tsb99x

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

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

Хорошо ли вы помните nullable value types? Заглядываем «под капот»

Время на прочтение11 мин
Количество просмотров14K
image1.png

В последнее время модной темой стали nullable reference types. Однако старые добрые nullable value types никуда не делись и всё так же активно используются. Хорошо ли вы помните нюансы работы с ними? Предлагаю освежить или проверить свои знания, ознакомившись с этой статьёй. Примеры кода на C# и IL, обращения к спецификации CLI и коду CoreCLR прилагаются. Начать предлагаю с интересной задачки.
Читать дальше →
Всего голосов 45: ↑45 и ↓0+45
Комментарии5

Зачем процессорам нужен кэш и чем отличаются уровни L1, L2, L3

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


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

Наверно, он важен, иначе зачем бы его устанавливать? Но что же делает кэш, и для чего ему разные уровни? И что означает «12-канальный ассоциативный кэш» (12-way set associative)?
Читать дальше →
Всего голосов 35: ↑33 и ↓2+37
Комментарии40

Реализация бизнес-логики на уровне хранимых функций PostgreSQL

Время на прочтение10 мин
Количество просмотров14K
Побудительным мотивом к написанию этюда послужила статья «В карантин нагрузка выросла в 5 раз, но мы были готовы». Как Lingualeo переехал на PostgreSQL с 23 млн юзеров. Так же показалось интересной статья опубликованная 4 года назад — Реализация бизнес-логики в MySQL.

Показалось интересным то, что одна и та же мысль-"реализовать бизнес-логику в БД".



пришла в голову не только мне одному.

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

Описанные методы не являются каким то открытием и исключительным know how, все по классике и было реализовано неоднократно (я например подобный подход применил 20 лет назад на Oracle).Просто решил собрал все в одном месте. Вдруг кому пригодится. Как показала практика — довольно часто одна и та же идея приходит независимо разным людям. Да и для себя оставить на память, полезно.
Конечно, же ничто в этом мире не совершенно, ошибки и опечатки к сожалению возможны. Критика и замечания всячески приветствуются и ожидаются.И еще одна маленькая деталь — конкретные детали реализации опущены. Все таки всё используется пока в реально работающем проекте. Так, что статья как этюд и описание общей концепции, не более того. Надеюсь для понятия общей картины, деталей достаточно.
Читать дальше →
Всего голосов 18: ↑9 и ↓9+5
Комментарии166

Перевозим волка, козу и капусту через реку с эффектами на Haskell

Время на прочтение4 мин
Количество просмотров11K
Однажды крестьянину понадобилось перевезти через реку волка, козу и капусту. У крестьянина есть лодка, в которой может поместиться, кроме самого крестьянина, только один объект — или волк, или коза, или капуста. Если крестьянин оставит без присмотра волка с козой, то волк съест козу; если крестьянин оставит без присмотра козу с капустой, коза съест капусту.


В этой статье мы попытаемся найти обобщенное решение для такого типа головоломок и для этого будем использовать алгебраические эффекты.
Читать дальше →
Всего голосов 35: ↑35 и ↓0+35
Комментарии4

Go: Как использовать nil-значения без использования ссылочных типов

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


Создано на базе изображений gopherize.me


Довольно часто из Go кода нам приходится работать с различными HTTP API или самим выполнять роль HTTP сервиса.


Один из частых случаев: получаем данные в виде структуры из базы данных, отправляем структуру внешнему API, в ответ получаем другую структуру, как-то её преобразуем и сохраняем в базу.


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


Для API нормальна ситуация, когда в структурах запроса и ответа есть поля, которые могут быть nil и могут принимать какие-то не-nil значения. Такие структуры выглядят обычно так

Читать дальше →
Всего голосов 12: ↑7 и ↓5+4
Комментарии6

Пишем свой dependency free WebSocket сервер на Node.js

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


Node.js — это популярный инструмент для построения клиент-серверных приложений. При правильном использовании, Node.js способен обрабатывать большое количество сетевых запросов, используя всего один поток. Несомненно, сетевой ввод — вывод является одной из сильнейших сторон этой платформы. Казалось бы, что используя Node.js для написания серверного кода приложения, активно использующего различные сетевые протоколы, разработчики должны знать, как эти протоколы работают, но зачастую это не так. Виной тому еще одна сильная сторона Node.js, это его пакетный менеджер NPM, в котором можно найти готовое решение практически под любую задачу. Используя готовые пакеты, мы упрощаем себе жизнь, переиспользуем код (и это правильно), но в то же время скрываем от себя, за ширмой библиотек, суть происходящих процессов. В этой статье мы постараемся разобраться в протоколе WebSocket, реализуя часть спецификации, не используя внешних зависимостей. Добро пожаловать под кат.

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

Как написать простую Социальную сеть

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


В моей социальной сети реализованы следующие возможности:

  • создание своих HTML анкет;
  • обмен сообщениями, фото, аудио и видео;
  • встроенный плеер облачного аудио;
  • чат комнаты для общения;
  • игра в симпатии.
Читать дальше →
Всего голосов 26: ↑9 и ↓17-5
Комментарии8

Порядок вычисления в PHP

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

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


В своём любимом сообществе lolphp на реддит я наткнулся на пост, где люди удивляются результату следующего кода:


<?php

$a = 1;
$c = $a + $a++;
var_dump($c); // int(3)

$a = 1;
$c = $a + $a + $a++;
var_dump($c); // int(3)

Как вы видите, выражения ($a + $a++) и ($a + $a + $a++) дают одинаковый результат, что довольно неожиданно. Что же здесь происходит?

Читать дальше →
Всего голосов 29: ↑29 и ↓0+29
Комментарии19

Как я автоматизировал разворачивание приложений на Linux на коленке с помощью Bash скриптов и Java

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

Когда вы написали серверное приложение, его нужно где-то развернуть. У нас в компании сейчас это реализовано с помощью VPS на Linux, bash скриптов, и небольшой Java программы. Это эволюционный процесс, и как по мне, получилось весьма неплохо.


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


КДПВ — архитектура системы, для части которой автоматизируем развертывание:


Читать дальше →
Всего голосов 18: ↑5 и ↓13-5
Комментарии25

Сам себе Роскомнадзор. Как я заблокировал соцсети

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


У меня отключена лента Фейсбука и Вконтакте, нет подписок в Инстаграме, Ютубе и Твиттере. При этом я ниоткуда не удалялся, в монастырь не уходил и продолжаю вести нормальную жизнь человека 2020 года. Надевайте шапочку из фольги и присаживайтесь поудобнее, я расскажу о своём крестовом походе против социальных медиа. Вы узнаете, как мне удалось сократить влияние умной ленты на свою жизнь, ничего существенного при этом не потеряв.

Эта статья была изначально опубликована в журнале «Развивейшн». Если вы хотите каждый месяц получать интересные и полезные статьи на электронную почту, то оформите подписку. Кстати, следить за анонсами новых статей можно в моём телеграм-канале.
Читать дальше →
Всего голосов 27: ↑16 и ↓11+11
Комментарии71

Макет, прототип, серийный образец и вот это всё — учим термины

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


Чем отличаются друг от друга макеты, прототипы корпусов для РЭА и для чего вообще нужны все эти опытные образцы? Версия Формлаба.

Макет


Макет (фр. maquette — масштабная модель, итал. macchietta, уменьшительное от macchia) — модель объекта в уменьшенном масштабе или в натуральную величину, лишённая, как правило, функциональности представляемого объекта. Предназначен для представления объекта. Используется в тех случаях, когда представление оригинального объекта неоправданно дорого, невозможно или просто нецелесообразно.
Wikipedia

Макет по геометрическим характеристикам только приближается к серийному изделию. Он изготавливается по несерийным, непроизводственным технологиям и практически из чего угодно (включая палки пластилин ), его задача — проверить дизайн и, может быть, вес реального устройства. Макет может не совпадать с конечным продуктом по реальным размерам, но по пропорциям — должен.
Всего голосов 9: ↑9 и ↓0+9
Комментарии6

Как кибербезопасность трансформирует рынок ИТ (часть 2)

Время на прочтение13 мин
Количество просмотров3.2K
Возможно, уже в ближайшем будущем многие привычные сейчас информационные процессы и технологии переживут существенную трансформацию, поменяв приоритеты и перераспределив игроков рынка. В конце июня вышла первая часть этого цикла статей, в которой я рассматривал технологическую трансформацию и её влияние не только на рынок кибербезопасности, но и на ИТ-рынок в целом. Одним из направлений наиболее ожидаемых изменений будут методы работы с персональными данными пользователей.

image

В позднем Советском Союзе большую популярность приобрела так называемая теория решения изобретательских задач (ТРИЗ), позволяющая в том числе находить методы усовершенствования технических систем. В ней Генрихом Альтшуллером было введено понятие «идеальной технической системы, затраты на получение полезного эффекта в которой равны нулю». Иначе говоря, решение тем лучше, чем оно проще, а идеальное решение — это такое, когда системы нет, а функции её выполняются. Этот старый забытый метод позволяет по-новому взглянуть на будущее развитие новых отраслей ИТ. Во многих направлениях ИТ мы будем встречаться с «идеализацией» систем и процессов. Эта «идеализация» связана с отмиранием избыточных процедур и неоправданных издержек в поддержании целевых функций информационных систем.
Читать дальше →
Всего голосов 4: ↑4 и ↓0+4
Комментарии6

Классификация критичности информационных систем

Время на прочтение6 мин
Количество просмотров51K
«Альфа-банк надежен, как танк,
А Гамма-банк надежен как банк!»

Виктор Пелевин, «Числа»

Когда в разговорах возникает фраза «банковская система», воображение рисует сверхнадёжную систему, построенную на самом дорогом оборудовании, кластеризованную на всех возможных уровнях и ограждённую от окружающего мира доступными и недоступными средствами защиты. Действительно, такие системы существуют. Но…



Если посмотреть вакансии разработчиков в банке, то вполне можно увидеть там среди требований знания Cassandra, MongoDB и других платформ, которые никак не внушают мыслей о 100% доступности. Да и такие СУБД как Oracle или Microsoft SQL Server где-то устанавливают на кластер из дорогих серверов, подключённых к самым надёжным и высокопроизводительным массивам, а где-то – на обычную виртуальную машину в ферме из самого что ни на есть commodity.

Причины очевидны – избыточные решения дороги. Но как найти компромисс между стоимостью платформы и её надёжностью?
Читать дальше →
Всего голосов 5: ↑5 и ↓0+5
Комментарии3

Исправляем графический баг Mass Effect, возникающий на современных процессорах AMD

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

Введение


Mass Effect — популярная франшиза научно-популярных RPG. Первая часть сначала была выпущена BioWare в конце 2007 года эксклюзивно для Xbox 360 в рамках соглашения с Microsoft. Спустя несколько месяцев, в середине 2008 года, игра получила порт на PC, разработанный Demiurge Studios. Порт был достойным и не имел заметных недостатков, пока в 2011 году AMD не выпустила свои новые процессоры на архитектуре Bulldozer. При запуске игры на PC с современными процессорами AMD в двух локациях игры (Новерия и Илос) возникают серьёзные графические артефакты:


Да, выглядит некрасиво.

Хоть это и не делает игру неиграбельной, такие артефакты раздражают. К счастью, решение существует, например, можно отключить освещение консольными командами или модифицировать карты игры, удалив поломанные источники освещения, но, похоже, никто никогда так и не понял полностью причины этой проблемы. В некоторых источниках утверждается, что эту проблему позволяет устранить и мод FPS Counter, но мне не удалось найти информацию о нём: исходный код мода, похоже, не выложен онлайн, а документация о том, как мод исправляет ошибку, отсутствует.

Почему эта проблема так интересна? Баги, возникающие только на оборудовании отдельных производителей, встречаются довольно часто, и в играх они встречаются уже много десятилетий. Однако, по моей информации, это единственный случай, когда проблема с графикой вызвана процессором, а не графической картой. В большинстве случаев проблемы возникают у продуктов определённого производителя GPU и никак не касаются CPU, однако в данном случае всё совсем наоборот. Поэтому эта ошибка уникальна, а значит, её стоит исследовать.
Читать дальше →
Всего голосов 96: ↑96 и ↓0+96
Комментарии29

Визуальное сравнение 13 CSS-фреймворков

Время на прочтение3 мин
Количество просмотров19K
Доброго времени суток, друзья!

Предлагаю Вашему вниманию результаты небольшого исследования — визуального сравнения 13 CSS-фреймворков.

Цель исследования — определить, какой из фреймворков лучше всего справляется со стилизацией по умолчанию, т.е. без добавления специальных (предусмотренных фреймворком) классов.

В исследовании представлены следующие фреймворки:


Использовались следующие версии стилей:


Всего голосов 18: ↑14 и ↓4+12
Комментарии16

15 базовых советов по Git для эффективной работы каждый день

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

Привет, меня зовут Сергеев Сергей aka gurugray. Сейчас я «Mentor FrontEnd Community» в компании ManyChat. Вы могли видеть мои лекции по релизному циклу и регламенту работ с системами контроля версий в Школе Разработки Интерфейсов Яндекса (ШРИ).


Меня часто спрашивают какие life-hacks или best-practices я использую при работе с Git'ом и репозиториями проекта.


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


Читать дальше →
Всего голосов 57: ↑53 и ↓4+64
Комментарии63

Слияние списков на python. Сравнение скорости

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

Сравнение различных методов слияния двух отсортированных списков


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



Способов реализации (особенно на python) достаточно много. Давайте разберем некоторые из них и сравним затрачиваемое время на разных входных данных.

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

Маркировка сигарет. Строение кода маркировки

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

В этой статье я постараюсь прояснить техническую часть и состав маркировки сигарет.
Простите меня Хабр читатели за укороченный обзор.

Читать дальше →
Всего голосов 59: ↑55 и ↓4+71
Комментарии151

SIGRed — новая критическая уязвимость в Windows Server. Как защититься?

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


Буквально на днях эксперты Check Point обнаружили новую уязвимость в DNS серверах на базе Windows. Т.е. в опасности практически каждая корпоративная сеть. Имя этой уязвимости — CVE-2020-1350 | Windows DNS Server Remote Code Execution Vulnerability. CVSS Score — 10.0. По утверждению Microsoft уязвимости подвержены абсолютно все версии Windows Server.
Уязвимость нацелена на переполнение буфера и практически не требует участия юзера. Под катом вы найдете видео с реализацией этой атаки, ее подробное описание, а самое главное, как обезопасить себя прямо сейчас.
Всего голосов 13: ↑12 и ↓1+13
Комментарии3

Информация

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