Спустя годы проекты обрастают тёмными местами, в которые никто не хочет соваться, поскольку их сложно понять и легко сломать. Сегодня мы посмотрим на кейс рефакторинга такого кода с переводом на ООП рельсы при помощи паттернов, причём со стилем (современным).
Пользователь
Obsidian. Путь от простой структуры к сложной и обратно. Часть 1
Я постоянно пишу заметки. В общей сложности занимаюсь этим уже 4+ года. Сперва был приверженцем бумажных заметок, так как мало информации "для изучения" туда попадало. Потом появилась потребность в навигации в своих записях, поэтому ушёл в цифру.
Сначала пробовал ноуш для личных записей + Confluence для записей по личным проектам + Saved Messages в тг для ссылок .
Оказалось сложно и не удобно. Год назад открыл для себя Obsidian.
Перенёс туда всю инфу со всех пространств и было ОК несколько месяцев. Но информация всё копилась и копилась.
И тут пришло время усложнений и планирования...
Zettelkasten: как один немецкий учёный стал невероятно продуктивным
Это перевод статьи Дэвида Клира о методе ведения заметок Zettelkasten, благодаря которому немецкий социолог Никлас Луман написал более 70 книг и 400 научных статей. Стоит читать, если вы хотите создать собственную базу знаний, систематизировать идеи и перестать забывать важные мысли.
Статья бережно перенесена из блога бегущего редактора. Кстати, следить за анонсами новых статей можно в моём телеграм-канале. Подписывайтесь, чтобы ничего не пропустить!
Блокировки в PostgreSQL: 1. Блокировки отношений
В этом цикле мы поговорим о блокировках (locks). Я буду придерживаться этого термина, но в литературе может встретиться и другой: замóк.
Цикл будет состоять из четырех частей:
- Блокировки отношений (эта статья);
- Блокировки строк;
- Блокировки других объектов и предикатные блокировки;
- Блокировки в оперативной памяти.
Материал всех статей основан на учебных курсах по администрированию, которые делаем мы с Павлом pluzanov, но не повторяет их дословно и предназначен для вдумчивого чтения и самостоятельного экспериментирования.
Читайте и другие серии.
Индексы:
- Механизм индексирования;
- Интерфейс метода доступа, классы и семейства операторов;
- Hash;
- B-tree;
- GiST;
- SP-GiST;
- GIN;
- RUM;
- BRIN;
- Bloom.
Изоляция и многоверсионность:
- Изоляция, как ее понимают стандарт и PostgreSQL;
- Слои, файлы, страницы — что творится на физическом уровне;
- Версии строк, виртуальные и вложенные транзакции;
- Снимки данных и видимость версий строк, горизонт событий;
- Внутристраничная очистка и HOT-обновления;
- Обычная очистка (vacuum);
- Автоматическая очистка (autovacuum);
- Переполнение счетчика транзакций и заморозка.
Журналирование:
- Буферный кеш;
- Журнал предзаписи — как устроен и как используется при восстановлении;
- Контрольная точка и фоновая запись — зачем нужны и как настраиваются;
- Настройка журнала — уровни и решаемые задачи, надежность и производительность.
Блокировки в PostgreSQL: 2. Блокировки строк
Блокировки строк
Устройство
Напомню несколько важных выводов из прошлой статьи.
- Блокировка должна существовать где-то в разделяемой памяти сервера.
- Чем выше гранулярность блокировок, тем меньше конкуренция (contention) среди одновременно работающих процессов.
- С другой стороны, чем выше гранулярность, тем больше места в памяти занимают блокировки.
Нам безусловно хочется, чтобы изменение одной строки не приводило к блокировке других строк той же таблицы. Но и заводить на каждую строку по собственной блокировке мы не можем себе позволить.
Есть разные пути решения этой проблемы. В некоторых СУБД происходит повышение уровня блокировки: если блокировок уровня строк становится слишком много, они заменяются одной более общей блокировкой (например, уровня страницы или всей таблицы).
Как мы увидим позже, в PostgreSQL такой механизм тоже применяется, но только для предикатных блокировок. С блокировками строк дело обстоит иначе.
Даты, время и часовые пояса: улучшения в .NET 6
Материал переведен. Ссылка на оригинал
В этой статье я расскажу о грядущих улучшениях в .NET 6, затрагивающих даты, время и часовые пояса. Все, о чем здесь говорится, вы можете опробовать сами — эти возможности будут доступны, начиная с версии .NET 6 Preview 4.
Мы рассмотрим следующие темы:
Собираем автономную игру на C# в 2 килобайтах
Моё детство пришлось на эпоху 1,44-мегабайтных дискет и 56-килобитных модемов, поэтому я всегда любил маленькие программы. Раньше можно было записать на дискету кучу мелких игр и таскать её с собой. Если программа не помещалась на дискету, я задумывался, почему — в ней много графики? Есть музыка? Возможно, она выполняет много сложных операций? Или она просто раздута?
В наши дни дисковое пространство стало настолько дешёвым, что люди отказались от оптимизации по размеру.
Размер важен только при передаче: если вы передаёте программу по проводам, мегабайты равны секундам. По быстрому соединению на 100 Мбит в лучшем случае можно передать 12 МБ в секунду. Если на другом конце провода находится человек, ожидающий завершения скачивания, то разница между пятью и одной секундой может существенно повлиять на его ощущения.
Человек может зависеть от времени передачи как напрямую (пользователь, скачивающий программу по сети), так и косвенно (serverless-сервис, отвечающий на веб-запрос).
Люди обычно воспринимают всё, что длится меньше 0,1 секунды, как мгновенное, 3 секунды — это примерно тот предел, после которого прерывается состояние потока пользователя; а уж 10 секунд удержать внимание пользователя очень сложно.
Хотя уменьшение сегодня уже необязательно, оно всё равно лучше.
Эта статья задумывалась как эксперимент, позволяющий выяснить, каким может быть минимальный размер полезного автономного исполняемого файла C#. Могут ли приложения на C# достичь размеров, при которых пользователи будут ощущать их скачивание как мгновенное? Позволит ли это использовать C# там, где он не используется сейчас?
Как оседлать бесконечный поток дел
Нередко руководители, особенно молодые, оказываются завалены делами, большими и маленькими. Один эпик, второй, третий, договориться с другой командой, поговорить с руководителем, зафиксировать последние соглашения, написать текст вакансии, согласовать ставки, согласовать бюджет на обучение, обсудить с Васей блокеры по задаче, что-то часто начала админка 403 отдавать, где-то просадка по метрикам… На это всё накладываются проблемы вне работы.
Вроде бы понятно, что́ нужно сделать — настроить процессы, разгрести дела, чтобы не было этих завалов. Но возникает проблема курицы и яйца: чтобы разобрать завалы, нужно время, а оно всё уходит на решение бесконечных текущих задач.
Что же делать? Как снять эту боль?
Как работать в кайф. How to от тестировщицы, которая вынесла уроки после выгорания
Думаю, многие помнят чувство первой влюбленности. Ты ни на шаг не можешь отойти от предмета своего обожания, постоянно хочется «больше» и кажется, что это навсегда. Оказывается, влюбиться можно не только в человека, но и в работу. Сначала ты будешь тонуть в его/её ̶г̶л̶а̶з̶а̶х̶ Jira-бордах, а закончится всё тем, что ты (вдруг) сгорел. Для полных ощущений мне захотелось пройти ещё и медные трубы, поэтому делюсь своей историей с вами.
Привет! Меня зовут Татьяна Дерягина, я Mobile QA в СберМаркете. Эта история про то, как мне понадобилось выгореть до углей, чтобы понять, что ворк-лайф бэланс необходим. Причём не только, чтобы не остаться совсем без лайф, но и чтобы делать свою любимую ворк хорошо и с удовольствием.
В процессе восстановления я перечитала кучу литературы о том, как выстроить здоровые отношения с работой и хочу поделиться этим знанием с теми, кто сейчас переживает фазу влюблённости и вот-вот собирается набрать нагрузки по самые уши. Расскажу, к каким мыслям пришла после прочтения книг и просмотра видео про выгорание в совокупности с личным опытом. В конце статьи прилагаю материалы по теме. Поехали!
Разбираемся с middleware в ASP.NET Core
Этой статья раскрывает концепции Middleware в ASP.NET Core. К концу этой статьи вы получите четкое представление о следующих моментах:
- Что такое Middleware?
- Почему порядок расположения Middleware имеет значение?
- Методы Run, Use и Map.
- Как создать собственное Middleware?
- Как реализовать просмотр каталогов с помощью Middleware?
Основы контейнеризации (обзор Docker и Podman)
Привет, Хабр!
К 2022 году о контейнеризации не слышал только ленивый. Большинство специалистов, так или иначе имеющих отношение к ИТ, хотя бы раз в жизни запускали программное обеспечение в контейнерах. Однако так ли эта технология проста и понятна? Давайте разбираться вместе!
Главная задача данной статьи – рассказать о контейнеризации, дать ключевые понятия для дальнейшего изучения и показать несколько простых практических приемов. По этой причине (а еще, безусловно, вследствие недостаточной квалификации автора) теоретический материал достаточно упрощен.
Таск-менеджмент для выживания в цейтноте
Я большой любитель тайм-менеджмента и всяких систем управления задачами. Но заметил, что иногда эти системы ломаются. Работаю-работаю, составляю долгосрочные цели, декомпозирую в планы на неделю и всё идёт хорошо, пока в какой-то момент не начинается цейтнот. Как правило, это случается на стыке кварталов, полугодий или годов. Нужно одновременно спешно доделать недоделанное, запланировать работу команды на следующий квартал (а для этого собрать требования с заказчиков и договориться со смежными командами, которые тоже в это время строят свои планы), подвести итоги прошедшего квартала, написать обоснование для запроса новых ставок, подготовиться к перформанс-ревью подчинённых и т.д. Казалось бы, это то, ради чего нужен тайм-менежмент. Но что-то идёт не так. Почему?
Основы Linux (обзор с практическим уклоном)
Привет, Хабр!
В последние несколько лет все больше и больше людей ищут возможность войти в ИТ или поглубже изучить Linux, повысив уровень своей квалификации. Вместе с тем полноценных обзоров с практическом уклоном по типу «все и сразу» написано не так уж и много (особенно на русском языке).
Главная задача данной статьи – указать начинающим специалистам направление развития, дать ключевые понятия для дальнейшего изучения и показать несколько простых практических приемов. По этой причине (а еще, безусловно, вследствие недостаточной квалификации автора) теоретический материал достаточно сильно упрощен.
Consumer-Driven Contracts как способ развития сервиса
— Секрет успеха поставщика заключается в том, чтобы обеспечить потребителей качественным товаром… ой, то есть сервисом. Ну и еще важно не пускаться во все тяжкие с нарушением обратной совместимости.
Уолтер Уайт
От переводчика
Что это
Это перевод статьи, описывающей шаблон Consumer-Driven Contracts (CDC).
Оригинал опубликован на сайте Мартина Фаулера за авторством Яна Робинсона.
Зачем это
В микросервисной архитектуре зависимости между сервисами являются источником проблем. Шаблон CDC помогает решать эти проблемы способом, устраивающим и разработчиков сервиса, и его потребителей. Фаулер ссылается на Consumer-Driven Contracts в своей ключевой статье по микросервисной архитектуре: Microservices.
Для кого это
Статья будет особенно полезна командам, разрабатывающим сервисы для нескольких потребителей в рамках одной организации, и командам-потребителям таких сервисов.
Ускоряемся в Entity Framework Core
Не будь жадиной!
При выборке данных выбирать нужно ровно столько сколько нужно за один раз. Никогда не извлекайте все данные из таблицы!
Неправильно:
using var ctx = new EFCoreTestContext(optionsBuilder.Options);
// Мы возвращаем колонку ID с сервера, но никогда не используем и это неправильно!
ctx.FederalDistricts.Select(x=> new { x.ID, x.Name, x.ShortName }).ToList();
Правильно:
using var ctx = new EFCoreTestContext(optionsBuilder.Options);
// Мы не возвращаем колонку ID с сервера и это правильно!
ctx.FederalDistricts.Select(x=> new { x.Name, x.ShortName }).ToList();
ctx.FederalDistricts.Select(x => new MyClass { Name = x.Name, ShortName = x.ShortName }).ToList();
youtube-dl, или как скачать видео с YouTube в качестве 1080p и выше
Качество картинки на YouTube варьируется от 144p (144 строчки в прогрессивной развёртке) до 8K 4320p. Последнее видео в четыре раза крупнее 4К 2160p, в шестнадцать — 1080p, в тридцать шесть — 720p, который также называют HD.
Мало какой компьютер может проиграть это видео в его полном разрешении, а доступных по цене 8K-мониторов в мире просто нет.
Технология MPEG-DASH разбивает контент на куски, а браузер запрашивает эти сегменты автоматически. Логично хранить и отдавать отдельно видео и звук. У DASH есть жирный плюс: адаптивность воспроизведения.
Несколько лет назад пользователи YouTube заметили введение DASH по тому, что буферизация видео больше не шла до конца ролика, а ограничивалась примерно минутой. Около того же времени другая проблема возникла у скачивающих видео с YouTube. Внезапно обнаружилось, что ролики с качеством 1080p доступны в виде файлов без звука. Сайты-сервисы, которые раньше выдавали ссылки на скачивание видео, отдавали лишь 720p, не выше. Около 1080p стояло «без звука» или «только видео».
Следует ли мне бросить видеоигры?
Игры могут быть более опасными, чем мы когда-либо думали.
Какие английские слова IT-лексикона мы неправильно произносим чаще всего
Дальше я приведу несколько наборов слов, сгруппированных по типовым ошибкам. К каждому слову будет приложена транскрипция, приблизительная транскрипция на русском и ссылка на более детальную информацию в словаре. Так как большинство IT компаний все-таки работает с Северной Америкой, то транскрипции будут из US English.
«Освоить F# не сложнее, чем Entity Framework или WPF»: интервью со Скоттом Влашиным
Кого расспрашивать про F#, как не человека, посвятившего этому языку подробный сайт? Скотт Влашин создал ресурс «F# for Fun and Profit», знакомый многим хабравчанам: на Хабре переводили оттуда и серию статей «Функциональное мышление», и статью «Железнодорожно-ориентированное программирование».
А в ноябре он выступит в Москве на нашей конференции DotNext с докладом «The power of composition». И в преддверии этого выступления мы расспросили его про F# и вообще функциональное программирование.
Оптимизация программ под Garbage Collector
Не так давно на Хабре появилась прекрасная статья Оптимизация сборки мусора в высоконагруженном .NET сервисе. Эта статья очень интересна тем, что авторы, вооружившись теорией сделали ранее невозможное: оптимизировали свое приложение, используя знания о работе GC. И если ранее мы не имели ни малейшего понятия, как этот самый GC работает, то теперь он нам представлен на блюдечке стараниями Конрада Кокоса в его книге Pro .NET Memory Management. Какие выводы почерпнул для себя я? Давайте составим список проблемных областей и подумаем, как их можно решить.
На недавно прошедшем семинаре CLRium #5: Garbage Collector мы проговорили про GC весь день. Однако, один доклад я решил опубликовать с текстовой расшифровкой. Это доклад про выводы относительно оптимизации приложений.