🇷🇺 Последнее время много пишу сервисов, которые используют top-level statements. Метод
🇬🇧 Lately, I've been writing a lot of services that use top-level statements. The code with this kind of syntax sugar simplifies the
Main с таким синтаксическим сахаром упрощается и улучшается читаемость кода. Однако писать интеграционные тесты для таких сервисов становится сложнее — метод Main просто невозможно вызвать без лишних телодвижений. Недавно придумал относительно простое решение через рефлексию. 🇬🇧 Lately, I've been writing a lot of services that use top-level statements. The code with this kind of syntax sugar simplifies the
Main method and improves readability. However, on the other hand, it makes it more difficult to create integration tests for the services. There isn't simply way to call the Main method and pass the necessary arguments. Recently, I found a relatively simply solution using reflection.❤1✍1
Прошёл месяц как я начал всерьёз учить сербский. Не могу сказать, что я начал полностью с нуля, т.к. живём тут с ноября 2022 г. Какие-то базовые фразы и слова уже знал. Учу следующим образом:
1. Два занятия в неделю по 1 часу с учителем на italki.
2. Домашка после занятий с учителем.
3. Каждый день новые слова по алгоритму карточек Anki. Начал со списка слов Габриела Вайнера + слова после уроков с учителем.
В целом, сербский не так сложно учить, т.к. похож на русский. Но в этом же и заключается его сложность. Некоторые слова тяжело запомнить, т.к. похожи на русские слова в другом значении.
Примеры:
Предајем — учу, преподаю.
Налазим — нахожу.
Однесем — забираю.
Престанем — останавливаюсь.
Направим — делаю.
Честитам — поздравляю.
Славим — праздную.
Частим — угощаю.
1. Два занятия в неделю по 1 часу с учителем на italki.
2. Домашка после занятий с учителем.
3. Каждый день новые слова по алгоритму карточек Anki. Начал со списка слов Габриела Вайнера + слова после уроков с учителем.
В целом, сербский не так сложно учить, т.к. похож на русский. Но в этом же и заключается его сложность. Некоторые слова тяжело запомнить, т.к. похожи на русские слова в другом значении.
Примеры:
Предајем — учу, преподаю.
Налазим — нахожу.
Однесем — забираю.
Престанем — останавливаюсь.
Направим — делаю.
Честитам — поздравляю.
Славим — праздную.
Частим — угощаю.
👍2👏1
Как я снимался с воинского учёта
Если вдруг кто не знает, в своё время я успел отслужить в армии. После переезда в Сербию осенью прошлого года начал задумываться о снятии с учёта. Новые штрафы в 15к рублей за нарушение обязанностей по воинскому учёту только усилили это желание.
В интернете советуют заранее узнать нужные документы для военкомата (ВК). Я это не стал делал. Решил, что следующих документов будет достаточно:
- наклейка ВНЖ Сербии в загранпаспорте;
- трудовой договор;
- договор аренды жилья.
ВНЖ просто отксерил на цветном принтере. Уверење о бораваку НЕ делал. Копию ВНЖ и копию договора аренды перевёл на русский у судебного переводчика. Трудовой был на двух языках.
В августе отправил сканы с переводом в ВК через Госуслуги. Чуть позже пришёл отказ. Пришлось готовить документы к отправке в РФ и сниматься через родителей. Доверенность делал находясь в Сербии:
1. Взял шаблон с сайта посольства.
2. Скомпилировал текст доверенности из инфы в интернете.
3. Попросил отревьюить юристов и доработал после ревью.
4. Получился вот такой шаблон.
5. Перевёл на сербский у судебного переводчика.
6. Сходил к нотариусу для заверения.
7. С заверенной доверенностью сходил в «Први основни суд» чтобы поставить апостиль.
8. Перевёл апостиль на русский у судебного переводчика.
У нотаруса я общался на английском. Деньги на устный перевод с сербского на русский не тратил.
Заявление о снятии с учёта скачал с сайта Консультант и заполнил в нескольких экземплярах (на всякий).
❗ Важно. Если вы в Сербии, то не совершайте ошибку как я – не пользуйтесь СДЕКом. Документы были отправлены 18 августа «экспресс» доставкой по самому дорогому тарифу. До получателя они дошли 27 сентября (фото 2). Обычной Поштой документы доходили за 10 дней. Как в остальных странах работает СДЕК – не знаю. Судя по отзывам, так же плохо.
6 октября родители сходили в ВК. Там все документы приняли без вопросов, и 13 октября выдали справку взамен военного билета.
Если вдруг кто не знает, в своё время я успел отслужить в армии. После переезда в Сербию осенью прошлого года начал задумываться о снятии с учёта. Новые штрафы в 15к рублей за нарушение обязанностей по воинскому учёту только усилили это желание.
В интернете советуют заранее узнать нужные документы для военкомата (ВК). Я это не стал делал. Решил, что следующих документов будет достаточно:
- наклейка ВНЖ Сербии в загранпаспорте;
- трудовой договор;
- договор аренды жилья.
ВНЖ просто отксерил на цветном принтере. Уверење о бораваку НЕ делал. Копию ВНЖ и копию договора аренды перевёл на русский у судебного переводчика. Трудовой был на двух языках.
В августе отправил сканы с переводом в ВК через Госуслуги. Чуть позже пришёл отказ. Пришлось готовить документы к отправке в РФ и сниматься через родителей. Доверенность делал находясь в Сербии:
1. Взял шаблон с сайта посольства.
2. Скомпилировал текст доверенности из инфы в интернете.
3. Попросил отревьюить юристов и доработал после ревью.
4. Получился вот такой шаблон.
5. Перевёл на сербский у судебного переводчика.
6. Сходил к нотариусу для заверения.
7. С заверенной доверенностью сходил в «Први основни суд» чтобы поставить апостиль.
8. Перевёл апостиль на русский у судебного переводчика.
У нотаруса я общался на английском. Деньги на устный перевод с сербского на русский не тратил.
Заявление о снятии с учёта скачал с сайта Консультант и заполнил в нескольких экземплярах (на всякий).
❗ Важно. Если вы в Сербии, то не совершайте ошибку как я – не пользуйтесь СДЕКом. Документы были отправлены 18 августа «экспресс» доставкой по самому дорогому тарифу. До получателя они дошли 27 сентября (фото 2). Обычной Поштой документы доходили за 10 дней. Как в остальных странах работает СДЕК – не знаю. Судя по отзывам, так же плохо.
6 октября родители сходили в ВК. Там все документы приняли без вопросов, и 13 октября выдали справку взамен военного билета.
👏3
🇬🇧 Performance issues when using a method as a parameter in C#. Are they real?
There is an article on Habr about performance issues when passing a method as a parameter in C#. The author showed that passing an instance method as a parameter inside for loops may degrade performance and increase memory consumption due to unnecessary object allocations in the heap. In this short article, I want to repeat the original benchmark and compare how things have changed since the .NET 7 release.
🇷🇺 Проблемы с производительностью в C# при передаче метода как параметр. Существуют ли они?
На Хабре есть статья, рассказывающая о проблемах с производительностью при передаче метода в качестве параметра. Автор показал, что передача метода экземпляра класса в качестве параметра внутри for может снизить производительность и увеличить потребление памяти из-за ненужного выделения объектов в куче. В этой короткой статье я хочу повторить исходный тест и узнать что изменилось с момента релиза .NET 7.
There is an article on Habr about performance issues when passing a method as a parameter in C#. The author showed that passing an instance method as a parameter inside for loops may degrade performance and increase memory consumption due to unnecessary object allocations in the heap. In this short article, I want to repeat the original benchmark and compare how things have changed since the .NET 7 release.
🇷🇺 Проблемы с производительностью в C# при передаче метода как параметр. Существуют ли они?
На Хабре есть статья, рассказывающая о проблемах с производительностью при передаче метода в качестве параметра. Автор показал, что передача метода экземпляра класса в качестве параметра внутри for может снизить производительность и увеличить потребление памяти из-за ненужного выделения объектов в куче. В этой короткой статье я хочу повторить исходный тест и узнать что изменилось с момента релиза .NET 7.
👍4
🇷🇺 Сегодня снова о микробенчмаркинге и о производительности в C#. На этот раз сосредоточимся на строках и наиболее эффективном способе извлечения подстроки.
🇬🇧 Today again about microbenchmarking and performance in C#. This time we'll focus on strings and the most efficient way to extract a substring.
🇬🇧 Today again about microbenchmarking and performance in C#. This time we'll focus on strings and the most efficient way to extract a substring.
👍4
Пару слов о банковской системе в Сербии
В течение первого года пребывания иностранец может открыть только нерезидентский банковский аккаунт. По крайней мере, таковы правила в Raiffeisen Bank, куда мне перечисляют зарплату.
С таким аккаунтом можно делать 2 вещи:
- расплачиваться картой, в том числе онлайн и через Google Pay;
- снимать наличные динары и евро.
Всё остальное недоступно. Например, переводы денег физлицам или SWIFT-переводы.
Поскольку я проживаю здесь уже более года, мой работодатель попросил обновить мой банковский аккаунт до резидентского. Это связано с комиссией, которую компания платит из-за переводов на нерезидентские счета. Вот как я пытался проапгрейдить аккаунт последние две недели:
1️⃣ Первый поход не увенчался успехом, из-за того, что на карте были необработанные транзакции. Такое встречается и в российских банках. Например, если зайти в приложение Тинькофф сразу после покупки, то можно обнаружить, что транзакция ещё обрабатывается. Видимо, изменение типа счёта аккаунта Raiffeisen при наличии таких транзакций может привести к неконсистентности их базы данных. 🤷♂️
2️⃣ Второй поход также не увенчался успехом. Мой первый Бели Картон (документ о регистрации иностранца без ВНЖ) остался прошлой осенью где-то в отеле, а на руках был только от 1 декабря 2022 года, который мне сделал владелец квартиры.
3️⃣ Третий поход - почти успех. Необработанных транзакций нет. Подходящий Бели Картон есть. Оформил все необходимые документы для запуска процедуры изменения счёта. Процедура занимает несколько часов. Сказали, можно приходить в конце рабочего дня.
4️⃣ Четвёртый поход - успех. Счёт стал резидентским. Подписал оставшиеся бумаги. Теперь можно пользоваться полноценным банковским аккаунтом.
По ощущениям, цифровизация в Сербии отстаёт лет на 10-15 от российского уровня.
В течение первого года пребывания иностранец может открыть только нерезидентский банковский аккаунт. По крайней мере, таковы правила в Raiffeisen Bank, куда мне перечисляют зарплату.
С таким аккаунтом можно делать 2 вещи:
- расплачиваться картой, в том числе онлайн и через Google Pay;
- снимать наличные динары и евро.
Всё остальное недоступно. Например, переводы денег физлицам или SWIFT-переводы.
Поскольку я проживаю здесь уже более года, мой работодатель попросил обновить мой банковский аккаунт до резидентского. Это связано с комиссией, которую компания платит из-за переводов на нерезидентские счета. Вот как я пытался проапгрейдить аккаунт последние две недели:
1️⃣ Первый поход не увенчался успехом, из-за того, что на карте были необработанные транзакции. Такое встречается и в российских банках. Например, если зайти в приложение Тинькофф сразу после покупки, то можно обнаружить, что транзакция ещё обрабатывается. Видимо, изменение типа счёта аккаунта Raiffeisen при наличии таких транзакций может привести к неконсистентности их базы данных. 🤷♂️
2️⃣ Второй поход также не увенчался успехом. Мой первый Бели Картон (документ о регистрации иностранца без ВНЖ) остался прошлой осенью где-то в отеле, а на руках был только от 1 декабря 2022 года, который мне сделал владелец квартиры.
3️⃣ Третий поход - почти успех. Необработанных транзакций нет. Подходящий Бели Картон есть. Оформил все необходимые документы для запуска процедуры изменения счёта. Процедура занимает несколько часов. Сказали, можно приходить в конце рабочего дня.
4️⃣ Четвёртый поход - успех. Счёт стал резидентским. Подписал оставшиеся бумаги. Теперь можно пользоваться полноценным банковским аккаунтом.
По ощущениям, цифровизация в Сербии отстаёт лет на 10-15 от российского уровня.
👨💻3😁1
🇷🇺 Я уже писал статью о наиболее эффективном способе извлечения подстроки в C#. Мне захотелось ещё больше изучить Span структуры. К тому же недавно Microsoft выпустила платформу .NET 8, в которой есть несколько новых методов расширения для ReadOnlySpan<T>. В новой статье я сравню производительность методов MemoryExtensions с аналогами в классе string.
🇬🇧 I already wrote an article about the fastest way of extracting substrings in C#. Now I want to investigate Span structures more. Recently, Microsoft released the .NET 8 platform which has several new extension methods for
🇬🇧 I already wrote an article about the fastest way of extracting substrings in C#. Now I want to investigate Span structures more. Recently, Microsoft released the .NET 8 platform which has several new extension methods for
ReadOnlySpan<T>. In the new article I compare the performance of MemoryExtensions methods with counterparts in string class.👍2
Как я не стал предпринимателем в Сербии
На днях гуглил кое-какую техническую информацию по работе и наткнулся на сайт code-maze. Просмотрев статью, мой глаз зацепился за оранжевую кнопку с надписью «We are hiring!». Нажав на неё обнаружил, что можно наняться автором и писать технические статьи на темы, связанные с .NET. А поскольку я люблю писать тексты и у меня даже есть свой блог, то первая моя мысль была «Easy money!».
Я откликнулся. После нескольких дней переписки с владельцами ресурса для меня запустили процедуру онбординга. Первым этапом была регистрация на их ресурсах. При регистрации нужно было прочитать «Terms Of Agreement» в котором было то самое слово «tax». После чего меня осенило, что в другой стране ведь надо платить налоги c дохода! Работая по трудовому договору легко об этом забыть.
Чтобы получать доход легально нужно открыть предпринимательство. Предпринимательство в Сербии есть 2-х видов: «доходы минус расходы» и «фикс». В случае, если использовать «доходы минус расходы», то нужно вести бухгалтерию, либо отдавать на её аутсорс за несколько сотен евро. Если использовать «фикс», то каждый месяц независимо от дохода нужно будет платить около 50 000 динар (426 € на 20.12.2023). С учётом того, что за одну написанную статью можно будет заработать 80 € – 130 €, то выгоды от этого нет совсем никакой. К сожалению, аналога самозанятости в Сербии нет. Взвесив потенциальные сложности с оформлением ИП, посещением сербских государственных инстанций (это вообще отдельная тема) и уплатой налогов, то решил, что игра не стоит свеч. Статьи писать я могу и у себя в блоге, пусть и забесплатно.
Вот так я не стал предпринимателем в Сербии.
На днях гуглил кое-какую техническую информацию по работе и наткнулся на сайт code-maze. Просмотрев статью, мой глаз зацепился за оранжевую кнопку с надписью «We are hiring!». Нажав на неё обнаружил, что можно наняться автором и писать технические статьи на темы, связанные с .NET. А поскольку я люблю писать тексты и у меня даже есть свой блог, то первая моя мысль была «Easy money!».
Я откликнулся. После нескольких дней переписки с владельцами ресурса для меня запустили процедуру онбординга. Первым этапом была регистрация на их ресурсах. При регистрации нужно было прочитать «Terms Of Agreement» в котором было то самое слово «tax». После чего меня осенило, что в другой стране ведь надо платить налоги c дохода! Работая по трудовому договору легко об этом забыть.
Чтобы получать доход легально нужно открыть предпринимательство. Предпринимательство в Сербии есть 2-х видов: «доходы минус расходы» и «фикс». В случае, если использовать «доходы минус расходы», то нужно вести бухгалтерию, либо отдавать на её аутсорс за несколько сотен евро. Если использовать «фикс», то каждый месяц независимо от дохода нужно будет платить около 50 000 динар (426 € на 20.12.2023). С учётом того, что за одну написанную статью можно будет заработать 80 € – 130 €, то выгоды от этого нет совсем никакой. К сожалению, аналога самозанятости в Сербии нет. Взвесив потенциальные сложности с оформлением ИП, посещением сербских государственных инстанций (это вообще отдельная тема) и уплатой налогов, то решил, что игра не стоит свеч. Статьи писать я могу и у себя в блоге, пусть и забесплатно.
Вот так я не стал предпринимателем в Сербии.
🏆3👌1
🇬🇧 In .NET, there is a so-called Options pattern that simplifies the way we handle application configuration. To use it, developers just need to follow three steps. First, add the necessary configuration provider. Second, set up Service Provider using Configure extension method. Third, inject either
.NET provides default configuration providers, like the JSON configuration provider with the
🇷🇺 В .NET есть так называемый паттерн Options, который упрощает работу с конфигурацией приложения. Для его использования достаточно выполнить три шага. Во-первых, добавить необходимый провайдер конфигураций (configuration provider). Во-вторых, настроить ServiceProvider на использование выбранного провайдера через метод расширения
В .NET уже есть стандартные провайдеры конфигураций, как, например, для чтения из JSON. Однако нет провайдеров для чтения конфигураций из баз данных. В этой статье мы рассмотрим несколько подходов к тому, как это сделать.
IOptions<T>, or IOptionsMonitor<T>, or IOptionsSnapshot<T> into the target class through constructor injecting. .NET provides default configuration providers, like the JSON configuration provider with the
AddJsonFile extension method. However, there are no providers for obtaining the configuration from database. In this article, we will consider several approaches to how to do it.🇷🇺 В .NET есть так называемый паттерн Options, который упрощает работу с конфигурацией приложения. Для его использования достаточно выполнить три шага. Во-первых, добавить необходимый провайдер конфигураций (configuration provider). Во-вторых, настроить ServiceProvider на использование выбранного провайдера через метод расширения
Configure. В-третьих, внедрить один из интерфейсов IOptions<T>, IOptionsMonitor<T> или IOptionsSnapshot<T> в нужный класс.В .NET уже есть стандартные провайдеры конфигураций, как, например, для чтения из JSON. Однако нет провайдеров для чтения конфигураций из баз данных. В этой статье мы рассмотрим несколько подходов к тому, как это сделать.
❤4👨💻1
The 16-Byte Rule: Unraveling the Performance Mystery of C# Structures
🇬🇧 Many C# developers are familiar with the following statements. By default, when passing to or returning from a method, an instance of a value type is copied, while an instance of a reference type is passed by reference. This has led to a belief that utilizing structures may degrade the overall app performance, especially if the structure has a size greater than 16 bytes. The discussion about this is still ongoing. In this article, we will try to find the truth.
🇷🇺 Многие C# разработчики знакомы со следующим утверждением: по умолчанию, при вызове метода или возврате из него, экземпляр типа значения копируется, а экземпляр ссылочного типа передается по ссылке. В связи с этим распространено убеждение, что использование структур может снизить общую производительность приложения, особенно если размер структуры превышает 16 байт. Дискуссии на этот счёт до сих пор ведутся. В этой статье мы попытаемся докопаться до истины.
🇬🇧 Many C# developers are familiar with the following statements. By default, when passing to or returning from a method, an instance of a value type is copied, while an instance of a reference type is passed by reference. This has led to a belief that utilizing structures may degrade the overall app performance, especially if the structure has a size greater than 16 bytes. The discussion about this is still ongoing. In this article, we will try to find the truth.
🇷🇺 Многие C# разработчики знакомы со следующим утверждением: по умолчанию, при вызове метода или возврате из него, экземпляр типа значения копируется, а экземпляр ссылочного типа передается по ссылке. В связи с этим распространено убеждение, что использование структур может снизить общую производительность приложения, особенно если размер структуры превышает 16 байт. Дискуссии на этот счёт до сих пор ведутся. В этой статье мы попытаемся докопаться до истины.
✍2
🇬🇧 Just finished reading the "Pro .NET Memory Management" book. It was huge material - more than 1000 pages in nearly 2 months. It is worth to go back and read some chapters again because there's so much to learn.
The book covers basics of memory internals, gives practical recommendations on using performance counters on different operating systems, and digs into the important details of how memory is managed and garbage collected in the CLR. And damn, how complex is GC in the .NET platform. Chapters 7 - 11 are directly devoted to the process of garbage collection, i.e. almost 250 pages! It's interesting to me now to compare the GC with memory management in other languages, like Rust for example.
🇷🇺 На днях дочитал книгу "Pro .NET Memory Management". Вдумчивое чтение такого объёмного материала (более 1000 страниц) заняло почти 2 месяца. Эту книгу и её отдельные главы определённо стоит перечитывать, т.к. вряд ли можно запомнить такой объём информации с первого раза.
В книге даются основы устройства памяти, практические рекомендации по применению счётчиков производительности в различных ОС и, самое главное, внутреннее устройство CLR в части работы с памятью и сборки мусора. И, чёрт, как же всё-таки сложно устроен сборщик мусора .NET внутри. Непосредственно процессу сборки мусора посвящены главы 7 - 11, т.е. практически 250 страниц! Интересно теперь сравнить устройство GC с тем, как управление памятью реализовано в других языках, например, в таких как Rust.
The book covers basics of memory internals, gives practical recommendations on using performance counters on different operating systems, and digs into the important details of how memory is managed and garbage collected in the CLR. And damn, how complex is GC in the .NET platform. Chapters 7 - 11 are directly devoted to the process of garbage collection, i.e. almost 250 pages! It's interesting to me now to compare the GC with memory management in other languages, like Rust for example.
🇷🇺 На днях дочитал книгу "Pro .NET Memory Management". Вдумчивое чтение такого объёмного материала (более 1000 страниц) заняло почти 2 месяца. Эту книгу и её отдельные главы определённо стоит перечитывать, т.к. вряд ли можно запомнить такой объём информации с первого раза.
В книге даются основы устройства памяти, практические рекомендации по применению счётчиков производительности в различных ОС и, самое главное, внутреннее устройство CLR в части работы с памятью и сборки мусора. И, чёрт, как же всё-таки сложно устроен сборщик мусора .NET внутри. Непосредственно процессу сборки мусора посвящены главы 7 - 11, т.е. практически 250 страниц! Интересно теперь сравнить устройство GC с тем, как управление памятью реализовано в других языках, например, в таких как Rust.
🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Почему важно писать и запускать smoke-тесты. Показываю на примере Atomic Heart.
Игра выпущена 21 февраля 2023 года. С 6 февраля 2024 года в Steam игроки начинают массово жаловаться на проблемы с открытым миром. В некоторых местах главный герой проваливается в out of bounds. На ролике пример того, как я сам наткнулся на этот баг.
Вы спросите, как так вышло, что спустя почти год в игре есть такие критические баги? Всё очень просто. 6 февраля вышло DLC, которое сломало основную игру. Не силен в геймдеве, но мне кажется, что такой базовый функционал должен проверяться smoke-тестами. Иначе продукт превращается в неюзабельное говно.
Иронично, что чуть дальше по сюжету от диалога в ролике можно встретить отсылку на разработчиков игры в виде говорящего трупа с подписью «Мёртвый игродел». Видимо, при создании DLC разработчики сильно кранчили, что и привело к таким печальным последствиям.
Игра выпущена 21 февраля 2023 года. С 6 февраля 2024 года в Steam игроки начинают массово жаловаться на проблемы с открытым миром. В некоторых местах главный герой проваливается в out of bounds. На ролике пример того, как я сам наткнулся на этот баг.
Вы спросите, как так вышло, что спустя почти год в игре есть такие критические баги? Всё очень просто. 6 февраля вышло DLC, которое сломало основную игру. Не силен в геймдеве, но мне кажется, что такой базовый функционал должен проверяться smoke-тестами. Иначе продукт превращается в неюзабельное говно.
Иронично, что чуть дальше по сюжету от диалога в ролике можно встретить отсылку на разработчиков игры в виде говорящего трупа с подписью «Мёртвый игродел». Видимо, при создании DLC разработчики сильно кранчили, что и привело к таким печальным последствиям.
👨💻4👍2
Simplify Integration Testing with Testcontainers
🇷🇺 Интеграционные тесты играют важную роль в разработке программного обеспечения. С их помощью можно проверить, как система интегрируется с внепроцессными зависимостями, например, с такими, как базы данных. Чтобы интеграционный тест, использующий базу данных, заработал, нужно где-то эту базу создать. Можно развернуть базу данных на виртуальной машине или вовсе на локальном хосте. Но лучше воспользоваться фреймворком Testcontainers.
🇬🇧 Integration tests play an important role in software development. They help us see how the system works with volatile dependencies, such as databases. To run the integration test with the database, we need somewhere to create this database. It can be deployed on a virtual machine or even on a local host. However, it's best to use Testcontainers framework,
🇷🇺 Интеграционные тесты играют важную роль в разработке программного обеспечения. С их помощью можно проверить, как система интегрируется с внепроцессными зависимостями, например, с такими, как базы данных. Чтобы интеграционный тест, использующий базу данных, заработал, нужно где-то эту базу создать. Можно развернуть базу данных на виртуальной машине или вовсе на локальном хосте. Но лучше воспользоваться фреймворком Testcontainers.
🇬🇧 Integration tests play an important role in software development. They help us see how the system works with volatile dependencies, such as databases. To run the integration test with the database, we need somewhere to create this database. It can be deployed on a virtual machine or even on a local host. However, it's best to use Testcontainers framework,
👍2
Возвращаемся в офис! Часть 1.
Читая Reddit на выходных наткнулся на интересную историю одного из работников IT компании в США. Его работодатель, как и многие другие в последнее время, решил силой вернуть своих работников в офисы. Что из этого вышло, предлагаю почитать в переводе ниже. Сразу отмечу, что перевод художественный. Я немного изменил порядок предложений для лучшей читаемости и намеренно не перевёл некоторые твиты автора, т.к. посчитал, что они не играют большой роли.
2 месяца назад мой работодатель, на которого я работал удалённо последние 3 года, начал кампанию по возвращению работников в офисы. При трудоустройстве я нанимался на полную удалёнку. Вся моя команда работала удалённо. Ближайший офис от меня был в полутора часах езды. Работа в офисе для меня не имела никакого смысла.
Компания определила работников, которым нужно вернуться в офис, на основе круга, которым они очертили область вокруг каждого из 10 офисов. И теперь я потерял возможность работать удалённо, т.к. недавно мы временно переехали в другую квартиру, до тех пор, пока не купим наш первый дом. И эта квартира была как раз на краю одного из таких кругов. Это означало, что теперь я обязан вернуться в офис. Сбитый с толку, я написал письмо HR:
Вся моя команда расположена в сотнях миль от офиса, а половина из них в Индии. В возвращении в офис нет никакого смысла. На самом деле, теперь мы работать будем меньше, т.к. коммуникация с остальной командой будет только тогда, когда пересекаются наши рабочие часы.
Как думаете, каков был ответ? Если вкратце, то «вали, если не нравится»:
Конечно, ответ был сдобрен типичной корпоративной чушью:
Хочу отметить, что я люблю свою работу. Я работал со своей небольшой командой и мне нравилось её лидить в различных ситуациях, с которыми мы сталкивались. Мы недооплаченные, недофинансированные специалисты, но мы делаем нашу работу и наши клиенты всем довольны.
Это внезапное изменение выглядело, как хотфикс проблем компании. Плохие решения, бестолковое руководство и регулярные траты привели к тому, что мы ежеквартально отчитывались об убытках. В результате, цена акций компании резко упала.
Конечно, всё это вина работников. Они недостаточно усердно работали. Они должны приносить больше прибыли... Вот только как? Видимо, присутствие в офисе - это решение.
Ок. Я не собираюсь ездить полтора часа в одну сторону, стоять в пробках, дополнительно загрязнять окружающую среду и нести больше расходов. Поэтому, как самый умный, я ответил кратким сообщением:
Это не то, что они хотели услышать. В течение часа сообщение по цепочке дошло до самого верха. Руководство было не в восторге. Кстати, HR мне так и не ответила, а об их реакции на мой ответ я узнал только через слухи. Как вскоре стало известно, я был далеко не единственным, кто отказался вернуться в офис.
Важно отметить, что такие требования выдвигались только работникам, проживающим внутри тех самых кругов. Если ты живёшь вне круга, то можешь работать удалённо. Правда ты не можешь переехать без одобрения компании...
Но только, если ты не живёшь в Индии. Сотрудники команд от туда обязаны релоцировать в один из двух крупных городов, где есть офисы компании, иначе будут уволены. Ах да, никаких пересмотров зарплат в связи с переездом не будет. Наслаждайтесь.
Из-за этих новых правил все работники должны будут сидеть за рабочим столом в шумном опен спейсе с 9 до 17. А клиенты будут жаловаться на то, что не слышат нас, т.к. кто-то за соседним столом узнаёт расценки на новые товары. Это конечно же лучше, чем ситуация сейчас, когда мы можем работать из дома.
Продолжение тут.
Читая Reddit на выходных наткнулся на интересную историю одного из работников IT компании в США. Его работодатель, как и многие другие в последнее время, решил силой вернуть своих работников в офисы. Что из этого вышло, предлагаю почитать в переводе ниже. Сразу отмечу, что перевод художественный. Я немного изменил порядок предложений для лучшей читаемости и намеренно не перевёл некоторые твиты автора, т.к. посчитал, что они не играют большой роли.
2 месяца назад мой работодатель, на которого я работал удалённо последние 3 года, начал кампанию по возвращению работников в офисы. При трудоустройстве я нанимался на полную удалёнку. Вся моя команда работала удалённо. Ближайший офис от меня был в полутора часах езды. Работа в офисе для меня не имела никакого смысла.
Компания определила работников, которым нужно вернуться в офис, на основе круга, которым они очертили область вокруг каждого из 10 офисов. И теперь я потерял возможность работать удалённо, т.к. недавно мы временно переехали в другую квартиру, до тех пор, пока не купим наш первый дом. И эта квартира была как раз на краю одного из таких кругов. Это означало, что теперь я обязан вернуться в офис. Сбитый с толку, я написал письмо HR:
Вся моя команда расположена в сотнях миль от офиса, а половина из них в Индии. В возвращении в офис нет никакого смысла. На самом деле, теперь мы работать будем меньше, т.к. коммуникация с остальной командой будет только тогда, когда пересекаются наши рабочие часы.
Как думаете, каков был ответ? Если вкратце, то «вали, если не нравится»:
Это новое правило. Никаких исключений.
Конечно, ответ был сдобрен типичной корпоративной чушью:
В офисе мы можем взаимодействовать и работать продуктивнее.
Хочу отметить, что я люблю свою работу. Я работал со своей небольшой командой и мне нравилось её лидить в различных ситуациях, с которыми мы сталкивались. Мы недооплаченные, недофинансированные специалисты, но мы делаем нашу работу и наши клиенты всем довольны.
Это внезапное изменение выглядело, как хотфикс проблем компании. Плохие решения, бестолковое руководство и регулярные траты привели к тому, что мы ежеквартально отчитывались об убытках. В результате, цена акций компании резко упала.
Конечно, всё это вина работников. Они недостаточно усердно работали. Они должны приносить больше прибыли... Вот только как? Видимо, присутствие в офисе - это решение.
Это новое правило, продиктованное CEO. Отказ от соблюдения приведёт к увольнению.
Ок. Я не собираюсь ездить полтора часа в одну сторону, стоять в пробках, дополнительно загрязнять окружающую среду и нести больше расходов. Поэтому, как самый умный, я ответил кратким сообщением:
Пожалуйста, дайте знать когда будет мой последний рабочий день, чтобы я смог проинформировать мою команду.
Это не то, что они хотели услышать. В течение часа сообщение по цепочке дошло до самого верха. Руководство было не в восторге. Кстати, HR мне так и не ответила, а об их реакции на мой ответ я узнал только через слухи. Как вскоре стало известно, я был далеко не единственным, кто отказался вернуться в офис.
Важно отметить, что такие требования выдвигались только работникам, проживающим внутри тех самых кругов. Если ты живёшь вне круга, то можешь работать удалённо. Правда ты не можешь переехать без одобрения компании...
Но только, если ты не живёшь в Индии. Сотрудники команд от туда обязаны релоцировать в один из двух крупных городов, где есть офисы компании, иначе будут уволены. Ах да, никаких пересмотров зарплат в связи с переездом не будет. Наслаждайтесь.
Из-за этих новых правил все работники должны будут сидеть за рабочим столом в шумном опен спейсе с 9 до 17. А клиенты будут жаловаться на то, что не слышат нас, т.к. кто-то за соседним столом узнаёт расценки на новые товары. Это конечно же лучше, чем ситуация сейчас, когда мы можем работать из дома.
Продолжение тут.
⚡3
Возвращаемся в офис! Часть 2.
Начало тут.
И если бы мне пришлось тратить 3 часа в день на дорогу до работы, то мне пришлось бы бросить все свои хобби. Мне было бы просто некогда. Дорога домой, готовка ужина, тренировка, сон и всё. Никаких больше YouTube, подработок, ничего. Твоя жизнь теперь только для работы на компанию, которая сократит твою должность, как только начнёшь зарабатывать слишком много денег.
Наху й это. У меня только одна жизнь и я не хочу её прожить так.
В моей истории есть счастливая концовка, но не для всех. Миллионы работников были вынуждены вернуться в офисы из-за ряда причин. Но ни одна из этих причин не в интересах работников, несмотря на то, что корпорации пытаются вас убедить в обратном. Твой работодатель скорее всего, заинтересован в этом, т.к. продолжает использовать офисы, на которые были потрачены миллионы $.
Моё «гневное письмо» HR прошло по цепочке вверх. Другие тоже последовали моему примеру независимо от меня. Целые офисы отказались возвращаться к работе. Работники, проживающие в ЕС и работавшие из дома согласно их трудовым договорам, угрожали судом за нарушение условий договора.
Уже 8 недель прошло с тех пор, как было введено обязательное правило о возвращении всех в офис. Никто не был уволен. Компания тихо вернулась к предыдущей политике, касающейся работы в офисе, и продолжила работать как ни в чём не бывало.
В этой истории нет морали. Я просто хотел поделиться свежим опытом и высказать слова поддержки всем удалённым работникам, которые сейчас в похожей ситуации. Не у всех есть финансовая подушка безопасности, которая была у меня, чтобы идти против новых правил компании. Но тем, кто может идти против, я советую делать это. Работодатели всегда пользовались работниками, но удалённая работа - это отличный уравнитель. Удовлетворённость работников растёт, компании тратят меньше, клиенты более счастливы.
И последняя ремарка. Очевидно, удалённая работа не подходит для всех. Не каждая работа может быть удалённой, или хотя бы гибридной. Я понимаю это. Я говорю только о работах, которые действительно могут осуществляться удалённо: техподдержка, QA, аналитики, разработчики, HR, бухгалтерия, финансы и их соответствующие менеджеры.
Кроме того, если мы уберём всех этих людей с дорог, то для тех, кто не может работать удалённо, дороги станут безопаснее и комфортнее. Деньги будут идти в малые города, в которых иначе никто не хочет жить. И много других плюсов.
Начало тут.
И если бы мне пришлось тратить 3 часа в день на дорогу до работы, то мне пришлось бы бросить все свои хобби. Мне было бы просто некогда. Дорога домой, готовка ужина, тренировка, сон и всё. Никаких больше YouTube, подработок, ничего. Твоя жизнь теперь только для работы на компанию, которая сократит твою должность, как только начнёшь зарабатывать слишком много денег.
Н
В моей истории есть счастливая концовка, но не для всех. Миллионы работников были вынуждены вернуться в офисы из-за ряда причин. Но ни одна из этих причин не в интересах работников, несмотря на то, что корпорации пытаются вас убедить в обратном. Твой работодатель скорее всего, заинтересован в этом, т.к. продолжает использовать офисы, на которые были потрачены миллионы $.
Моё «гневное письмо» HR прошло по цепочке вверх. Другие тоже последовали моему примеру независимо от меня. Целые офисы отказались возвращаться к работе. Работники, проживающие в ЕС и работавшие из дома согласно их трудовым договорам, угрожали судом за нарушение условий договора.
Уже 8 недель прошло с тех пор, как было введено обязательное правило о возвращении всех в офис. Никто не был уволен. Компания тихо вернулась к предыдущей политике, касающейся работы в офисе, и продолжила работать как ни в чём не бывало.
В этой истории нет морали. Я просто хотел поделиться свежим опытом и высказать слова поддержки всем удалённым работникам, которые сейчас в похожей ситуации. Не у всех есть финансовая подушка безопасности, которая была у меня, чтобы идти против новых правил компании. Но тем, кто может идти против, я советую делать это. Работодатели всегда пользовались работниками, но удалённая работа - это отличный уравнитель. Удовлетворённость работников растёт, компании тратят меньше, клиенты более счастливы.
И последняя ремарка. Очевидно, удалённая работа не подходит для всех. Не каждая работа может быть удалённой, или хотя бы гибридной. Я понимаю это. Я говорю только о работах, которые действительно могут осуществляться удалённо: техподдержка, QA, аналитики, разработчики, HR, бухгалтерия, финансы и их соответствующие менеджеры.
Кроме того, если мы уберём всех этих людей с дорог, то для тех, кто не может работать удалённо, дороги станут безопаснее и комфортнее. Деньги будут идти в малые города, в которых иначе никто не хочет жить. И много других плюсов.
❤3👍2
Публикации на Хабр
Буду краток. У меня есть статьи, которые, по моему же мнению, достойны публикации на Хабре.
Сегодня опубликовал перевод статьи про оптимальный размер структур.
Приглашаю к чтению: https://habr.com/ru/articles/797777/
Буду краток. У меня есть статьи, которые, по моему же мнению, достойны публикации на Хабре.
Сегодня опубликовал перевод статьи про оптимальный размер структур.
Приглашаю к чтению: https://habr.com/ru/articles/797777/
Хабр
Правило 16 байт: развенчиваем миф о производительности структур в C#
По умолчанию, при передаче в метод или при возврате из метода, экземпляры значимых типов копируются, когда как экземпляры ссылочных типов передаются по ссылке. В 2008 году была выпущена книга...
👍3
Мысли о LeetCode
Уже 2 месяца я решаю задачи на LeetCode. Начал с набора задач LeetCode 75. На данный момент решено 66% проблем из набора. Пару недель назад начал дополнительно решать задачи из SQL 50. Решаю примерно по 1 задаче в день из каждого набора, кроме выходных.
В LeetCode мне нравится большое коммьюнити с большим количеством задач, решениями и пояснениями. Отличный сайт для самообучения. Но не обходится и без ложки дёгтя – бенчмарки сделаны плохо. Результат выполнения одного и того же кода может варьироваться в неком диапазоне. И это нормально, т.к. на результат влияет много шума. Но сейчас имеем ситуацию, когда алгоритм сперва показывает результат на 50% – 60% лучше остальных решений, а чуть позже становится лучше 99% других решений или наоборот. Если провести достаточное количество замеров, то можно высчитать среднее или медиану. Разработчики сервиса этого не делают из-за экономии времени. Если бы замеры кода осуществлялись правильно, т.е. множество раз, то проверка занимала бы минуты, а не несколько секунд, как сейчас.
Зачем я это делаю? Во-первых, из спортивного интереса. Писать алгоритмы, которые решают задачу быстрее других – это весело. Во-вторых, где-то пол года назад у меня появился интерес к теме написания производительного кода, бенчмарков и всего, что с этим связано. Из-за этого я прочитал книгу Pro .NET Memory Management, а сейчас читаю Pro .NET Benchmarking, изучаю алгоритмы, структуры данных и практикуюсь в решении проблем. Все эти знания, я надеюсь, пригодятся в карьере.
Уже 2 месяца я решаю задачи на LeetCode. Начал с набора задач LeetCode 75. На данный момент решено 66% проблем из набора. Пару недель назад начал дополнительно решать задачи из SQL 50. Решаю примерно по 1 задаче в день из каждого набора, кроме выходных.
В LeetCode мне нравится большое коммьюнити с большим количеством задач, решениями и пояснениями. Отличный сайт для самообучения. Но не обходится и без ложки дёгтя – бенчмарки сделаны плохо. Результат выполнения одного и того же кода может варьироваться в неком диапазоне. И это нормально, т.к. на результат влияет много шума. Но сейчас имеем ситуацию, когда алгоритм сперва показывает результат на 50% – 60% лучше остальных решений, а чуть позже становится лучше 99% других решений или наоборот. Если провести достаточное количество замеров, то можно высчитать среднее или медиану. Разработчики сервиса этого не делают из-за экономии времени. Если бы замеры кода осуществлялись правильно, т.е. множество раз, то проверка занимала бы минуты, а не несколько секунд, как сейчас.
Зачем я это делаю? Во-первых, из спортивного интереса. Писать алгоритмы, которые решают задачу быстрее других – это весело. Во-вторых, где-то пол года назад у меня появился интерес к теме написания производительного кода, бенчмарков и всего, что с этим связано. Из-за этого я прочитал книгу Pro .NET Memory Management, а сейчас читаю Pro .NET Benchmarking, изучаю алгоритмы, структуры данных и практикуюсь в решении проблем. Все эти знания, я надеюсь, пригодятся в карьере.
🔥6
Продолжаю публиковать статьи на Хабр
На этот раз доработанная статья про извлечение подстроки.
Приглашаю к чтению: https://habr.com/ru/articles/801187/
На этот раз доработанная статья про извлечение подстроки.
Приглашаю к чтению: https://habr.com/ru/articles/801187/
Хабр
Как в C# быстро извлечь подстроку
Извлечение подстроки. Казалось бы, что тут может быть сложного? В любом современном языке программирования это можно сделать через функцию substring или через slicing. За время работы C# разработчиком...
👍5👀1
Программисты: goto превращает код в спагетти код.
В то же время код платформы .NET, которую разрабатывает Microsoft:
Да, я знаю, что это ради производительности.
На следующей неделе будет статья, про то, как можно ускорить Dictionary в C#. И нет, не при помощи goto. :)
В то же время код платформы .NET, которую разрабатывает Microsoft:
На следующей неделе будет статья, про то, как можно ускорить Dictionary в C#. И нет, не при помощи goto. :)
👍3
Если вы C# разработчик, то наверняка вам знаком класс Dictionary. В качестве значений вы, скорее всего, использовали классы. Но что если я скажу, что в Dictionary можно использовать структуры? Не стоит бояться того, что структуры копируются при передаче в метод или возврате из него. Есть способ этого избежать, и это работает быстро.
Узнать способ можно в статье на Habr.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4