Pull to refresh
8
0
Антон Муравьев @tsb99x

User

Send message

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

Reading time11 min
Views14K
image1.png

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

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

Reading time10 min
Views128K


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

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

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

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

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



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

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

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

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

Reading time4 min
Views11K
Однажды крестьянину понадобилось перевезти через реку волка, козу и капусту. У крестьянина есть лодка, в которой может поместиться, кроме самого крестьянина, только один объект — или волк, или коза, или капуста. Если крестьянин оставит без присмотра волка с козой, то волк съест козу; если крестьянин оставит без присмотра козу с капустой, коза съест капусту.


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

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

Reading time5 min
Views7.5K


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


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


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


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


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

Читать дальше →
Total votes 12: ↑7 and ↓5+4
Comments6

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

Reading time11 min
Views12K


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

Читать дальше →
Total votes 29: ↑29 and ↓0+29
Comments4

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

Reading time9 min
Views14K


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

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

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

Reading time5 min
Views12K

Примечание переводчика. Никита Попов внёс и продолжает вносить огромный вклад в развитие языка 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++) дают одинаковый результат, что довольно неожиданно. Что же здесь происходит?

Читать дальше →
Total votes 29: ↑29 and ↓0+29
Comments19

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

Reading time6 min
Views5.4K

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


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


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


Читать дальше →
Total votes 18: ↑5 and ↓13-5
Comments25

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

Reading time9 min
Views18K


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

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

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

Reading time4 min
Views34K


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

Макет


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

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

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

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

image

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

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

Reading time6 min
Views54K
«Альфа-банк надежен, как танк,
А Гамма-банк надежен как банк!»

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

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



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

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

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

Reading time12 min
Views41K
image

Введение


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


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

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

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

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

Reading time3 min
Views19K
Доброго времени суток, друзья!

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

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

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


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


Total votes 18: ↑14 and ↓4+12
Comments16

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

Reading time5 min
Views60K

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


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


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


Читать дальше →
Total votes 57: ↑53 and ↓4+64
Comments63

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

Reading time5 min
Views30K

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


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



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

Читать дальше →
Total votes 8: ↑6 and ↓2+8
Comments4

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

Reading time9 min
Views69K

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

Читать дальше →
Total votes 59: ↑55 and ↓4+71
Comments151

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

Reading time1 min
Views11K


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

Information

Rating
Does not participate
Location
Россия
Registered
Activity