Как стать автором
Обновить
0
0
Nikolay @w1z

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

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

Reciprocal throughput

Уровень сложности Простой
Время на прочтение 10 мин
Количество просмотров 9.3K

Современные процессоры очень круты. Они таят в себе великое множество секретов и невероятных возможностей. И просто восхитительно, что некоторые из способностей процессоров легко продемонстрировать даже из такого высокоуровневого языка, как C#, буквально за десять строчек кода!

Читать далее
Всего голосов 76: ↑75 и ↓1 +74
Комментарии 39

Мифология REST

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

Матчасть


Мало какая технология в истории IT вызывала столько ожесточённых споров, как REST. Самое удивительное при этом состоит в том, что спорящие стороны, как правило, совершенно не представляют себе предмет спора.


Начнём с самого начала. В 2000 году один из авторов спецификаций HTTP и URI Рой Филдинг защитил докторскую диссертацию на тему «Архитектурные стили и дизайн архитектуры сетевого программного обеспечения», пятая глава которой была озаглавлена как «Representational State Transfer (REST)». Диссертация доступна по ссылке.


Как нетрудно убедиться, прочитав эту главу, она представляет собой довольно абстрактный обзор распределённой сетевой архитектуры, вообще не привязанной ни к HTTP, ни к URL. Более того, она вовсе не посвящена правилам дизайна API; в этой главе Филдинг методично перечисляет ограничения, с которыми приходится сталкиваться разработчику распределённого сетевого программного обеспечения. Вот они:


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

Всё, на этом определение REST заканчивается. Дальше Филдинг конкретизирует некоторые аспекты имплементации систем в указанных ограничениях, но все они точно так же являются совершенно абстрактными. Буквально: «ключевая информационная абстракция в REST — ресурс; любая информация, которой можно дать наименование, может быть ресурсом».


Ключевой вывод, который следует из определения REST по Филдингу, вообще-то, таков: любое сетевое ПО в мире соответствует принципам REST, за очень-очень редкими исключениями.

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

Как работает память в Python

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

Ни одна компьютерная программа не может работать без данных. А данные, чтобы программа имела к ним доступ, должны располагаться в оперативной памяти вашего компьютера. Но что такое оперативная память на самом деле? Когда произносишь это словосочетание, многие сразу представляют «железную» плашку, вставленную в материнскую плату, на которой написано что-то типа 16Gb DDR4 2666MHz. И они, разумеется, правы — это действительно физический блок оперативной памяти, в котором, в итоге, все данные и оказываются. Но прежде, чем стать доступной внутри вашей программы, на память (как и на всё остальное аппаратное обеспечение) накладывается куча абстракций.

Читать далее
Всего голосов 65: ↑63 и ↓2 +61
Комментарии 10

Что нового в C# 9.0

Время на прочтение 9 мин
Количество просмотров 21K
В преддверии старта нового потока курса «C#-разработчик» представляем вашему вниманию обзор нововведений. Среди них — новый метод доступа к свойству — init, не позволяющий изменять свойства после инициализации, with-выражения для изменения свойств объекта прямо здесь и сейчас, записи и новые возможности сопоставления шаблонов. Подробности, конечно же, под катом.


Приятного чтения!
Всего голосов 42: ↑35 и ↓7 +28
Комментарии 167

Структуры данных для самых маленьких

Время на прочтение 22 мин
Количество просмотров 336K
James Kyle как-то раз взял и написал пост про структуры данных, добавив их реализацию на JavaScript. А я взял и перевёл.

Дисклеймер: в посте много ascii-графики. Не стоит его читать с мобильного устройства — вас разочарует форматирование текста.


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

Красно-черные деревья: коротко и ясно

Время на прочтение 3 мин
Количество просмотров 257K
История из жизни. Девушка предложила своему парню-программисту пройти психологический тест:
Девушка: Нарисуй дерево.
Программист: (рисует бинарное дерево)
Девушка: Нет, другое.
Программист: Я и красно-черное дерево могу нарисовать.

Итак, сегодня хочу немного рассказать о красно-черных деревьях. Рассказ будет кратким, без рассмотрения алгоритмов балансировки при вставке/удалении элементов в красно-черных деревьях.
Читать дальше →
Всего голосов 61: ↑43 и ↓18 +25
Комментарии 43

Сортировка декартовым деревом

Время на прочтение 5 мин
Количество просмотров 16K
Свежий взгляд на традиционные концепции. Сегодня будет такой «декарт» которого в школе не проходили.


Суть алгоритма в том, что на основании массива строится так называемое декартово дерево. А из построенного декартового дерева очень легко получить все элементы в порядке возрастания или убывания.
Траффик
Всего голосов 20: ↑17 и ↓3 +14
Комментарии 6

12 новинок Azure Media Services с искусственным интеллектом

Время на прочтение 7 мин
Количество просмотров 2K
Миссия Microsoft заключается в том, чтобы дать каждому человеку и организации на планете возможность достичь большего. Медиаиндустрия — отличный пример воплощения этой миссии в реальность. Мы живем в эпоху, когда создается и потребляется все больше контента, все большими способами и на большем количестве устройств. На IBC 2019 мы поделились последними инновациями, над которыми сейчас работаем, и рассказали о том, как они могут помочь преобразовать ваш медиапроцесс.

Подробности под катом!
Читать дальше →
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 1

F#5: Операторы

Время на прочтение 5 мин
Количество просмотров 3K
Я намеревался написать 1/2 достойного поста в блоге об операторах F #, но потом я подумал, и, честно говоря, я не мог видеть слишком много достоинств в простом повторении того, что уже свободно доступно на MSDN, где перечисляются ВСЕ операторы F#.
Читать дальше →
Всего голосов 14: ↑14 и ↓0 +14
Комментарии 7

Многопоточность в .NET: когда не хватает производительности

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


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

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

Под катом — видео и расшифровка моего доклада с конференции DotNext, где я разбираю несколько примеров, когда использование средств из стандартной библиотеки .NET (Task.Delay, SemaphoreSlim, ConcurrentDictionary) привело к просадкам производительности, и предлагаю решения, заточенные под конкретные задачи и лишённые этих недостатков.
Всего голосов 49: ↑48 и ↓1 +47
Комментарии 87

.NET Security — это просто

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

Представляем интервью с ведущими экспертами в области безопасности: Владимиром Кочетковым (руководителем отдела исследований анализа защищенности приложений в Positive Technologies) и Михаилом Щербаковым (независимым разработчиком и консультантом в области информационной безопасности).


О чем эта статья? Процитирую одну из реплик Михаила:


«Разработка защищенного приложения – это частный случай разработки приложения, не содержащего ошибок вообще. Кроме этого, ваше приложение использует сторонние библиотеки, защищенность которых тоже не гарантируется, далее оно выполняется на ОС и железе. Часто мы даже не можем сказать, на какой именно ОС и на каком железе. И все это со временем изменяется!»


Читать дальше →
Всего голосов 33: ↑30 и ↓3 +27
Комментарии 11

Часть 2: MVVM: полное понимание (+WPF)

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

В этой статье в качестве примера у нас будет программа чуть посложнее, а именно — торговый автомат, реализация которого часто встречается в качестве тестового задания до собеседования. Будут рассмотрены взаимодействие нескольких View с одним VM и наоборот, будет показан подход «View first» и будет показан не итоговый код, с рассказом какая часть для чего нужна (ссылка для скачивания кстати Vending Machine (программный код), а будет продемонстрирован весь процесс создания и, самое главное, последовательный ход мысли.

Но перед этим я постараюсь еще раз ответить на вопрос, который обычно не задают люди, имеющие опыт отладки неструктурированных проектов, а именно: «Так зачем все-таки нужен паттерн MVVM?»

Если формально и коротко, то паттерн MVVM используется в первую очередь для разделения ответственности, для повышения читабельности, управляемости, поддерживаемости и тестируемости кода. Программный продукт состоит из модели (доменной модели и бизнес-логики) и инфраструктурного кода в соотношении, допустим, 20% на 80%. Инфраструктурный код должен быть простым, понятным, чуть ли не автоматным — как Scaffolding. А вот модель…
Читать дальше →
Всего голосов 12: ↑10 и ↓2 +8
Комментарии 40

Погружение в F#. Пособие для C#-разработчиков

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

Этот пост будет не о том, как «перевести» код с C# на F#: различные парадигмы делают каждый из этих языков лучшим для своего круга задач. Однако вы сможете оценить все достоинства функционального программирования быстрее, если не будете думать о переводе кода из одной парадигмы в другую. Настало время любопытных, пытливых и готовых изучать совершенно новые вещи. Давайте начнем!



Все материалы из серии переводов русскоязычного сообщества F#-разработчиков вы сможете найти по тегу #fsharplangru.
Читать дальше →
Всего голосов 48: ↑47 и ↓1 +46
Комментарии 74

Как эффективнее читать данные с диска (при условии, что у вас .Net)

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


Привет, Хабр! Некоторое время назад меня заинтересовал вопрос: как эффективнее всего читать данные с диска (при условии, что у вас .Net)? Задача чтения кучи файлов встречается во множестве программ, которые при самом старте начинают вычитывать конфигурации, некоторые самостоятельно подгружают модули и т.д.

В интернете я не нашел подобных сравнений (если не считать тюнинга под определенные конфигурации).
Читать дальше →
Всего голосов 21: ↑19 и ↓2 +17
Комментарии 18

Вы — не Google

Время на прочтение 7 мин
Количество просмотров 103K
Мы, программисты, иногда почему-то сходим с ума. Причём по каким-то совершенно нелепым причинам. Нам нравится думать о себе, как о супер-рациональных людях, но когда дело доходит до выбора ключевой технологии нового продукта, мы погружаемся в какое-то безумие. Вдруг оказывается, что кто-то слышал что-то об одной классной вещи, а его коллега читал комментарий о другой на Хабре, а третий человек видел пост в блоге о ещё чём-то похожем… и вот мы уже пребываем в полнейшем ступоре, беспомощно барахтаясь в попытках выбора между совершенно противоположными по своей сути системами, уже и забыв, что мы вообще пытаемся выбрать и почему.

Рациональные люди не принимают решения таким образом. Но именно так программисты часто решают использовать что-то вроде MapReduce.

Вот как комментировал этот выбор Joe Hellerstein своим студентам (на 54-той минуте):

Дело в том, что в мире сейчас есть где-то 5 компаний, обрабатывающие данные подобных объёмов. Все остальные гоняют все эти данные туда-сюда, добиваясь отказоустойчивости, которая им на самом деле не нужна. Люди страдают гигантоманией и гугломанией где-то с середины 2000-ых годов: «мы сделаем всё так, как делает Google, ведь мы же строим один из крупнейших (в будущем) сервисов по обработке данных в мире!»

image

Сколько этажей в вашем датацентре? Google сейчас строит четырёхэтажные, как вот этот в Оклахоме.
Читать дальше →
Всего голосов 252: ↑249 и ↓3 +246
Комментарии 197

Интересные вопросы на знание C# и механизмов .NET

Время на прочтение 4 мин
Количество просмотров 34K
Предлагаю Вам ряд вопросов по C# и .NET в целом, которые могут пригодиться для проведения собеседования или просто помогут лучше понять, как работает платформа .NET. Здесь не будет обычных вопросов о том, чем отличаются ссылочные типы от значимых и тп. Я постарался выбрать самые интересные, над которыми стоит задуматься.
Читать дальше →
Всего голосов 20: ↑13 и ↓7 +6
Комментарии 50

Null, великий и ужасный

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

Ошибка дизайна


Именно так и никак иначе: null в C# — однозначно ошибочное решение, бездумно скопированное из более ранних языков.


  1. Самое страшное: в качестве значения любого ссылочного типа может использоваться универсальный предатель — null, на которого никак не среагирует компилятор. Зато во время исполнения легко получить нож в спину — NullReferenceException. Обрабатывать это исключение бесполезно: оно означает безусловную ошибку в коде.
  2. Перец на рану: сбой (NRE при попытке разыменования) может находится очень далеко от дефекта (использование null там, где ждут полноценный объект).
  3. Упитанный пушной зверек: null неизлечим — никакие будущие нововведения в платформе и языке не избавят нас от прокаженного унаследованного кода, который физически невозможно перестать использовать.

Этот ящик Пандоры был открыт еще при создании языка ALGOL W великим Хоаром, который позднее назвал собственную идею ошибкой на миллиард долларов.

На самом деле все не так плохо
Всего голосов 56: ↑45 и ↓11 +34
Комментарии 290

О сравнении объектов по значению — 4, или Inheritance & Equality operators

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

В предыдущей публикации мы получили вариант реализации сравнения объектов по значению для платформы .NET, на примере класса Person, включающий:


  • перекрытие методов Object.GetHashCode(), Object.Equals(Object);
  • реализацию интерфейса IEquatable (Of T);
  • реализацию Type-specific статических метода Equals(Person, Person) и операторов ==(Person, Person), !=(Person, Person).

Каждый из способов сравнения для любой одной и той же пары объектов возвращает один и тот же результат:


Пример кода
Person p1 = new Person("John", "Smith", new DateTime(1990, 1, 1));
Person p2 = new Person("John", "Smith", new DateTime(1990, 1, 1));
//Person p2 = new Person("Robert", "Smith", new DateTime(1991, 1, 1));

object o1 = p1;
object o2 = p2;

bool isSamePerson;

isSamePerson = o1.Equals(o2);
isSamePerson = p1.Equals(p2);
isSamePerson = object.Equals(o1, o2);
isSamePerson = Person.Equals(p1, p2);
isSamePerson = p1 == p2;
isSamePerson = !(p1 == p2);

При этом, каждый из способов сравнения является коммутативным:
x.Equals(y) возвращает тот же результат, что и y.Equals(x), и т.д.


Таким образом, клиентский код может сравнивать объекты любым способом — результат сравнения будет детерминирован.


Однако, требует раскрытия вопрос:


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

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

5 книг, которые помогут мыслить нестандартно и почему это важно именно сейчас

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


Потребляя гигабайты информации, мы начинаем мыслить шаблонно. Роботы автоматизируют все больше специальностей, и незаменимыми становятся лишь те работники, кто мыслит нестандартно. Многие считают, что креативность — это врожденный навык. Я тоже так думал, пока не прочел эти книги. Они доказали, что мыслить нестандартно может научиться каждый.
Читать дальше →
Всего голосов 49: ↑35 и ↓14 +21
Комментарии 35

Редкий SQL

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

Вводная


Когда часто сталкиваешься с какой-либо технологией, языком программирования, стандартом, формируется некая картина их возможностей, границы, в которых они используются. Так может продолжаться достаточно долго, пока на глаза не попадаются примеры, которые расширяют затвердевшие горизонты знания. Сегодня, я хотел бы рассказать о таких примерах и продемонстировать их для языка SQL. Интересные и редкие конструкции, забытые выражения, странные приемы ждут Вас в этой статье. Кого заинтересовал, добро пожаловать под кат.
Читать дальше →
Всего голосов 25: ↑19 и ↓6 +13
Комментарии 63

Информация

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