Элегантные строки
Что-то такое:
string str = "...";
str.Replace(",", ", ");
Постойте, но мы же хотели расставлять пробелы, а не заменять запятые!..
SDK для устройства дополненной реальности, много аналитики и немного о WWDC 2015 в новостях недели для мобильного разработчика

SDK для Magic Leap. Уже скоро
Компания Magic Leap с ее волшебной технологией класса
Потрогать-посмотреть результат многолетней работы компании мало кому довелось, рассказы и картинки кажутся чудом, граничащим с обманом… но компания как минимум поддерживается корпорацией Google, так что чудо может быть где-то рядом. Кстати, часть финансовых вливаний в размере 542 млн. долларов было потрачено на производственные мощности. Ибо «мы вышли из фазы НИОКР и переходим к реализации продукта», как сказал CEO Rony Abovitz. И это хорошо.
Код живой и мёртвый. Часть первая. Объекты
Код — это мысль. Появляется задача, и разработчик думает, как её решить, как выразить требования в функциях и классах, как сдружить их, как добиться строгости и корректности и как подмастить бизнес. Практики, методики, принципы, шаблоны и подходы — всё нужно учесть и всё нужно помнить.
И вместе с этим мы видим повсеместную эпидемию менеджеров, хелперов, сервисов, контроллеров, селекторов, адаптеров, геттеров, сеттеров и другой нечисти: всё это мёртвый код. Он сковывает и загромождает.
Бороться предлагаю вот как: нужно представлять программы как текст на естественном языке и оценивать их соответственно. Как это и что получается — в статье.
Код живой и мёртвый. Часть вторая. Действия и свойства
В прошлый раз я писал о том, что имена объектов имеют большое значение, и что подбирать их нужно кропотливо и со вниманием к деталям. Плохое имя отпугивает и не даёт вникнуть в суть происходящего. Но что это за суть?
Сложно оценить героя, не поняв его "статы" и "абилки". Что он может и на что способен — вот следующий уровень сложности, на который нам придётся нырнуть. Мало с помощью точного имени отразить внутреннее святилище объекта, ещё следует убедиться, что это таки святилище, а не конюшни из геттеров.
Об этом — в статье.
Код живой и мёртвый. Часть третья. Код как текст
Для сопровождения программы код приходится читать, и тем это делать проще, чем больше он похож на естественный язык, — тогда быстрее вникаешь и сосредотачиваешься на главном.
В прошлых двух статьях я показал, что тщательно выбранные слова помогают лучше понимать суть написанного, но думать только о них недостаточно, ведь всякое слово существует в двух формах: как само по себе и как часть предложения. Повтор CurrentThread
ещё не повтор, пока мы не читаем его в контексте Thread.CurrentThread
.
Таким образом, ориентируясь в нотах и простых мелодиях, мы посмотрим теперь, что такое музыка.
Различия Fluent и gettext

Продолжая дискуссию о преимуществах Fluent перед привычным gettext, публикую официальную позицию создателей Fluent в переводе.
Gettext — это система локализации, глубоко укоренившаяся в проект GNU и сопутствующие ему архитектурные решения. Fluent Project рассматривает gettext как хороший пример полноценной низкоуровневой платформонезависимой экосистемы библиотек и инструментов для управления полным циклом выпуска продукта с файлами локализации в удобочитаемом формате. В то же время парадигма Fluent приводит нас к другим архитектурным решениям в важных локализационных аспектах, которые, в свою очередь, приводят к совершенно разным API и жизненным циклам.
Типизированные запросы OData в TypeScript
Традиционно запросы OData к данным выражаются в виде простых строк без проверки типов при компиляции или без поддержки IntelliSense, кроме того, разработчику приходится изучать синтаксис языка запросов. Данная статья описывает библиотеку TsToOdata, которая превращает запросы в удобную языковую конструкцию и применяется аналогично классам и методам. Вы создаете типизированные запросы с помощью ключевых слов языка TypeScript и знакомых операторов.
OData babel плагин
Статья описывает трансляцию кода TypeScript в OData запросы во время компиляции программы.
Плагин babel-plugin-ts2odata выполняет разбор JavaScript AST с помощью библиотеки TsToOdata описание которой в моей предыдущей статье Типизированные запросы OData в TypeScript.
Prometheus, не уходи: 6 альтернативных инструментов мониторинга для Kubernetes

Мониторинг помогает обеспечить бесперебойную работу приложений Kubernetes и далее устранить любые проблемы, которые могут возникнуть в процессе его работы.
Например, он позволяет в любой момент времени узнать, сколько сейчас в наличии памяти, дискового пространства и как активно используется CPU, узнать о распределении ресурсов между контейнерами и состоянии приложений, работающих в кластере. Очень часто для этих целей используется Prometheus, в этой статье мы рассмотрим шесть альтернативных инструментов мониторинга для Kubernetes.
Microsoft планирует крупное обновление пользовательского интерфейса Windows 10

Microsoft готовит крупное обновление ОС для Windows 10 в 2021 году, которое, по информации источников, принесет с собой значительное обновление дизайна пользовательского интерфейса Windows. Заку Боудэну (Zac Bowden) сообщили, что Microsoft планирует обновить многие пользовательские интерфейсы, такие как меню "Пуск", Центр уведомлений и даже Проводник с использованием современного дизайна, улучшенной анимации и новых функций.
Windows 10 Sun Valley: что мы знаем на сегодня

В настоящее время Microsoft работает над крупным обновлением для Windows 10, выпуск которого ожидается в конце этого года. Оно принесет с собой обновленный дизайн и новые функции, которые должны улучшить опыт взаимодействия пользователя с ОС. Sun Valley станет крупнейшим обновлением с тех пор, как Microsoft забуксовала с Windows 10 на месте. Компания хочет вдохнуть новую жизнь настольным компьютерам, а Sun Valley – точка отправки.
Положение дел у Windows: сколько разношёрстных уровней UI в Windows 10?

Все мы слышали байку: если в Windows 10 копнуть достаточно глубоко, можно найти элементы, относящиеся еще ко временам Windows 3.x. Но так ли это на самом деле? В этой статье мы узнаем, сколько уровней пользовательского интерфейса присутствует в Windows и когда они были впервые представлены.
В Windows 10 21H2 появится новый параметр в меню питания, изоляция сторонних драйверов и процесс taskbar.dll

В Windows 10 добавят новый параметр в меню питания для перезапуска приложений, изоляцию для сторонних драйверов, а панель задач получит отдельный процесс.
Microsoft представил инсайдерам сборку Windows 10 21343 с некоторыми значительными визуальными изменениями, представив новые иконки для проводника. Но, похоже, это было не единственное улучшение в выпуске, поскольку в меню питания также появился новый параметр, который позволяет выбирать, перезапускать ли приложения после перезагрузки.
Fluent Generics in C#

Дженерики - мощная фича доступная во многих статически типизированных языках программирования. С их помощью можно писать код, который постоянно работает со множеством разных типов, делая упор на их общие особенности, нежели на сами типы. Они позволяют создавать гибкие и переиспользуемые компоненты без нужды в дублировании кода и жертвы безопасности типов.
Несмотря на то, что дженерики давно в C#, мне всё же удаётся найти новые интересные способы их применения. Например, в одной из моих предыдущих статей я написал об уловке, позволяющей добиться return type inference, что может облегчить работу с контейнерными union types.
Недавно, мне также довелось работать над кодом, использующим дженерики. Тогда передо мной встала нетипичная задача: было необходимо определить сигнатуру, где все типовые параметры опциональны и могут использоваться друг с другом в произвольных комбинациях. Первая попытка подступиться к решению заключалась в манипуляциях с перегрузками типов, однако такой подход оказался довольно непрактичным и не увлекательным.
После нескольких экспериментов, я нашёл способ решить проблему элегантно, используя подход схожий с паттерном проектирования fluent interface, который был применён не к объектам, а к типам. Мой подход предлагает domain-specific language, который позволяет разработчику построить нужный тип за несколько логических шагов, последовательно его "конфигурируя".
В данной статье я расскажу, что из себя представляет этот подход и как его можно использовать для того, чтобы сложные обобщённые типы писать просто.