Pull to refresh
0
@abstract_lizardread⁠-⁠only

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

Send message

IValueTaskSource и почему нельзя пере`await`ить

Level of difficultyMedium
Reading time11 min
Views6K

Раньше IValueTaskSource был для меня загадкой, а правило не await'ить ValueTask несколько раз было для меня правилом, которому я слепо следовал.

Я взял себя в руки и решил обе эти вопроса одновременно. Если кого-то интересовали те же вопросы, то эта статья может дать ответы на них.

Напишем свою реализацию IValueTaskSource, уменьшим аллокации и посмотрим где это используется в стандартной библиотеке.

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments2

Как записать данные в Excel, используя C#

Level of difficultyEasy
Reading time4 min
Views13K

Excel - широко используемое электронное таблицы программное обеспечение, которое можно использовать для анализа данных, создания отчетов и многих других целей. Мы часто должны записывать данные в Excel для дальнейшей обработки и анализа. В программировании мы можем использовать различные способы записи данных в Excel, например, использование встроенных в Excel COM-компонентов, использование сторонних библиотек и т.д. Free Spire.XLS for .NET - это мощная сторонняя библиотека, которая может помочь нам легко записывать данные в Excel. В этой статье будет описано, как с помощью Free Spire.XLS for .NET записывать различные типы данных в Excel.

Читать далее
Total votes 8: ↑2 and ↓6-4
Comments17

Шардированный кэш на базе Memcached

Reading time11 min
Views8.5K

Привет! Меня зовут Андрей Барболин, я Senior Software Engineer в команде Order Management System. Сегодня я расскажу вам, как мы сделали шардированный кэш и под стресс-тестами добились 30 миллионов операций в секунду, а также про первую open source библиотеку от AliExpress Россия.

Читать далее
Total votes 19: ↑18 and ↓1+20
Comments27

In-App шардирование PostgresDB. Практическое велосипедостроение

Reading time14 min
Views18K

Привет, Хабр! Сегодня с вами команда AliExpress Order Management System, и мы поговорим про очередное решение по шардированию PostgreSQL, на этот раз in-app, то есть живущее непосредственно в приложении, которому нужна функциональность шардинга.

Читать далее
Total votes 12: ↑12 and ↓0+12
Comments35

Динамические методы в .NET

Level of difficultyMedium
Reading time9 min
Views15K

На сегодняшний день в.NET существует несколько видов кодогенерации: новомодные Source Generators, компилируемые Expression Trees, динамические сборки и динамические методы. Каждый способ имеет свои области применения, плюсы и минусы.

В этой статье я хочу рассказать про динамические методы. Мы разберёмся как создавать их, как работает стековая машина и рассмотрим некоторые базовые операции Common Intermediate Language: работу с константами, математические и битовые операции, а также работу с аргументами методов и локальными переменными.

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

Читать далее
Total votes 24: ↑24 and ↓0+24
Comments11

Как уже выучить этот Инглиш (часть 2)

Level of difficultyEasy
Reading time10 min
Views14K

Здравствуйте, коллеги! Мы продолжаем наш рассказ о том, как максимально быстро и эффективно выучить английский язык.

Первую часть статьи вы можете прочитать здесь.

Содержание статьи

1. Самый эффективный способ выучить английский

2. Какую методику для изучения английского выбрать?

3. Большая подборка учебных материалов

4. Что делать для «погружения в язык»?

5. Как учить лексику и запоминать новые слова

6. Что делать, если вы плохо воспринимаете слова на слух

7. Что делать, если не хватает разговорной практики

8. Как подтянуть грамматику?

9. Эффективны ли занятия онлайн по Zoom или Skype?

10. Что делать, если я не очень люблю учить языки, но надо?

11. Как избавиться от акцента?

12. Краткое резюме и подведение итогов.

Читать далее
Total votes 15: ↑7 and ↓80
Comments7

Пришло время пересмотреть структуру проектов на .NET

Level of difficultyEasy
Reading time11 min
Views17K

C релизом .net 6 у нас появился новый упрощенный подход для быстрого создания сервисов  Minimal APIs. Эта статья появилась потому, что с новым подходом появились новые вопросы, связанные с организацией кода внутри проекта.

Это — немного вольный перевод статьи "Maybe it's time to rethink our project structure with .NET 6" от Tim Deschryver про подход к созданию сервисов с помощью Minimal APIs, который может помочь нам сделать архитектуру приложения более чистой, простой и легкой в поддержке и развитии.

Читать далее
Total votes 14: ↑11 and ↓3+10
Comments24

System.String не то, чем кажется. Представление строк в памяти .NET

Level of difficultyEasy
Reading time6 min
Views13K

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

Читать далее
Total votes 24: ↑22 and ↓2+23
Comments5

Что не так с умными колонками и голосовыми ассистентами?

Reading time8 min
Views39K

Если вы когда-нибудь слышали фразу "дьявол в деталях", вы понимаете, что условная Лада Гранта от условного Мерседеса отличается не более, чем на несколько процентов. Фактически обе машины ездят и возят своих пассажиров - это и есть главная их функция. Но внимание к мелочам и продуманный пользовательский опыт (UX) это и есть те самые несколько процентов, которые так разительно влияют на наше восприятие продукта.

Попробуем применить этот угол зрения к умным колонкам и голосовым ассистентам. И попытаемся понять, почему же все они пока ещё Гранты. И чего именно им не хватает до Мерседесов.

Что же с ним не так и как это исправить?
Total votes 65: ↑51 and ↓14+49
Comments345

Inline и throw

Level of difficultyMedium
Reading time4 min
Views10K

Изучая производительность методов в различных коллекциях, я наткнулся на интересный факт: там, где нужно выбросить Exception, программисты дёргают метод в статическом классе, в котором и происходит throw. Поначалу я думал, что это просто удобно — иметь все ошибки в одном месте и там следить за их единообразием. Это да, это действительно удобно. Но есть нюанс...

Читать далее
Total votes 19: ↑17 and ↓2+20
Comments11

Курс молодого бойца PostgreSQL

Reading time13 min
Views535K


Хочу поделиться полезными приемами работы с PostgreSQL (другие СУБД имеют схожий функционал, но могут иметь иной синтаксис).

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

Данный материал будет полезен тем, кто полностью освоил базовые навыки SQL и желает учиться дальше. Советую выполнять и экспериментировать с примерами в pgAdmin'e, я сделал все SQL-запросы выполнимыми без разворачивания каких-либо дампов.

Поехали!
Читать дальше →
Total votes 79: ↑77 and ↓2+75
Comments59

Instagram* сможет работать без VPN?

Level of difficultyMedium
Reading time6 min
Views30K

Популярная социальная сеть была запрещена в России в 2022 году. Для многих поклонников приложения это стало настоящим ударом, а трафик Instagram* понес огромные потери: по данным Brand Analytics на октябрь 2022 года, количество авторов (блогеров) сократилось с 38 млн до 17 млн за год, а количество отправленных сообщений упало со 135 млн до 40 млн за тот же период. Теперь, вероятно, владельцы соцсети ищут новые способы вернуть свою аудиторию. Одним из них может стать работа Instagram* с уже встроенным модулем обхода блокировок в странах-цензорах.

Читать далее
Total votes 11: ↑10 and ↓1+13
Comments12

Как изменять строки в dotnet

Level of difficultyMedium
Reading time4 min
Views12K

Строки в dotnet являются предназначенной только для чтения последовательностью Char-ов. Об этом явно написано в документации Microsoft, посвященной строкам. Там же в секции "Неизменность строк" сказано следующее: "Может показаться, что все методы String и операторы C# изменяют строку, но в действительности они возвращают результаты в новый строковый объект". Согласно документации, изменить строки нельзя, но жизнь не всегда согласуется с документацией, поэтому предлагаю взглянуть на способы, позволяющие изменять строки в dotnet (к тому же это иногда спрашивают на собеседованиях!).

Читать далее
Total votes 22: ↑20 and ↓2+24
Comments21

Rust vs C#: два способа решить проблему ссылок в структурах

Level of difficultyMedium
Reading time3 min
Views9.9K

Возврат ссылки на структуру из метода, объявленную в этом самом методе, является одним из самых классических примеров "висячих ссылок". Но что если возвращается не ссылка, а структура, содержащая ссылку? И не явно, а через вызов другого метода? Как понять, где у нас явный "провис ссылки", а где нормальный код? Звучит как какая то "дичь", но подобный кейс - вполне реальная боль для автором языков программирования.

Давайте посмотрим на примере Rust и C# как авторы решают эту неоднозначную проблему.

Читать далее
Total votes 21: ↑18 and ↓3+21
Comments16

Стратегии прогнозирования временных рядов в ETNA

Reading time7 min
Views7.4K

Меня зовут Дима, я разработчик библиотеки ETNA в Тинькофф. Расскажу о том, как в задаче прогнозирования временных рядов появляются стратегии, какими они бывают и как воспользоваться стратегией в библиотеке ETNA.

Читать далее
Total votes 22: ↑22 and ↓0+22
Comments2

Использование игрового ПК с Windows в качестве (Linux) Docker-хоста

Reading time11 min
Views11K


Docker Desktop – это прекрасный обслуживаемый способ использования Docker в MacOS или Windows, но для нестандартных сценариев он оставляет желать лучшего.

И недавно я столкнулся с одним таким сценарием, который для вас может показаться относительно типичным. Я занимаюсь разработкой под MacOS, но поскольку у моего MacBook Pro всего 16ГБ оперативной памяти, мне захотелось использовать свой игровой ПК, у которого её 32ГБ, в качестве удалённого Docker-хоста. Сколько нас хакеров, нердов и гиков в течение дня трудится (обычно) на ноутбуках MacBook, а после работы садится за кастомные ПК с Windows, чтобы пострелять пришельцев?

Тут вы можете подумать, что всё это довольно знакомо, а значит и поставленную цель достичь будет несложно. Как бы не так. Оказалось, что заставить Docker работать в качестве хоста локальной сети в Windows весьма проблематично – для этого придётся прибегнуть к ряду специфических приёмов.
Читать дальше →
Total votes 24: ↑22 and ↓2+34
Comments12

Установка кастомных прошивок. Root-права и Magisk

Reading time7 min
Views54K

Доброго времени суток всем моим читателям! Сегодня, продолжая цикл статей о кастомизации своего устройства, расскажу о том что такое права "root", зачем они нужны, кому они абсолютно точно не нужны и, если вы все-таки решили, как их получить.

Читать далее
Total votes 4: ↑3 and ↓1+4
Comments22

Книга «Black Hat Go: Программирование для хакеров и пентестеров»

Reading time12 min
Views11K
image Привет, Хаброжители!

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

Вы начнете с базового обзора синтаксиса языка и стоящей за ним философии, после чего перейдете к изучению примеров, которые пригодятся для разработки инструментов. Вас ждет знакомство с протоколами HTTP, DNS и SMB, Далее вы перейдете к изучению различных тактик и задач, с которыми сталкиваются пентестеры, рассмотрите такие темы, как кража данных, сниффинг сетевых пакетов и разработка эксплойтов. Вы научитесь создавать динамические встраиваемые инструменты, после чего перейдете к изучению криптографии, атаке на Windows и стеганографии.

Готовы расширить арсенал инструментов безопасности? Тогда вперед!
Читать дальше →
Total votes 3: ↑2 and ↓1+3
Comments0

Вероятно вам не нужен MediatR

Reading time13 min
Views24K

MediatR - это очень популярная библиотека, которая используется для уменьшения зависимостей между объектами. Она популяризует архитектуру, основанную на крайне значимых принципах проектирования:

препятствование прямому общению между объектами для уменьшения связности;

нацеливание на Message-Oriented архитектуру;

поддержка асинхронного внутреннего обмена сообщениями;

ориентирование на переиспользование объектов.

Эти практики не пустое слово для меня. Кроме того, кажется, что такой способ создания программного обеспечения должен быть совершенно очевидным. Без сомнения, библиотека MediatR очень успешна и широко применяется разработчиками, которые разделяют эти ценности.

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

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

Также стоит отметить, что эта статья не покрывает положительные аспекты библиотеки, а фокусируется только на недостатках.

Читать далее
Total votes 16: ↑16 and ↓0+16
Comments16

Information

Rating
Does not participate
Registered
Activity