Как стать автором
Обновить
1
1.8
Василий @VasiliyLiGHT

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

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

Слабые события в C#

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

От переводчика


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

Читать дальше →
Всего голосов 92: ↑75 и ↓17+58
Комментарии18

OpenConnect: недетектируемый VPN, который вам понравится

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров222K

Я уже написал здесь много статей на тему прокси-протоколов и прокси-клиентов, которые очень сложно детектировать и заблокировать, и которые используют пользователи в Китае, Иране, Ираке, Туркменистане, и теперь вот в России (мы здесь в отличной компании, правда?). Но довольно часто мне в комментариях писали, мол, это все отлично, но мне нужен именно VPN для целей именно VPN - доступа в частные локальные сети, либо для соединения клиентов между собой, и желательно так, чтобы его не заблокировали обезьяны с гранатой. Поэтому сегодня мы поговорим именно о VPN.

Классические OpenVPN, Wireguard и IPSec отметаем сразу - их уже давно умеют блокировать и блокировали не раз. Модифицированный Wireguard от проекта Amnezia под названием AmneziaWG — отличная задумка, но есть одно но...

Читать далее
Всего голосов 325: ↑324 и ↓1+323
Комментарии342

3X-UI: Shadowsocks-2022 & XRay (XTLS) сервер с простой настройкой и приятным интерфейсом

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

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

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

Поэтому сегодня мы поговорим об установке и использовании графической панели 3X-UI для сервера X-Ray с поддержкой всего того, что умеет X-Ray: Shadowsocks-2022, VLESS с XTLS и т.д.

Читать далее
Всего голосов 38: ↑37 и ↓1+36
Комментарии198

Композиция и интерфейсы

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

В мире объектно-ориентированного программирования уже достаточно давно подвергается критике концепция наследования.


Аргументов достаточно много:


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

Альтернативой наследованию являются использование интерфейсов и композиция. (Интерфейсы давно используется в качестве альтернативы множественному наследованию, даже если в иерархии классов активно используется наследование.)

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

А как можно решить эту задачу (отсутствие дублирования кода) в случае композиции и интерфейсов?
Этой теме и посвящена настоящая статья.
Читать дальше →
Всего голосов 16: ↑14 и ↓2+12
Комментарии38

Где изучать Linux в 2024. Бесплатные курсы, книги и ресурсы

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

В настоящее время существует множество бесплатных ресурсов, которые предлагают уроки по Linux, от курсов до университетских программ, что делает эту ОС доступной для широкого круга людей. Знание Linux может открыть двери к различным IT‑профессиям, таким как системный администратор, разработчик, инженер по безопасности, этичный хакер, DevOps инженер и другие. Зарплаты таких специалистов высоки, спрос на кадров знающих Linux ожидается и в будущем.

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

Читать
Всего голосов 42: ↑38 и ↓4+34
Комментарии35

Шпаргалка для алгособеса — алгоритмическая сложность, структуры данных, методы сортировки и Дейкстра

Уровень сложностиСредний
Время на прочтение33 мин
Количество просмотров97K

Привет, Хабр!

Так уж повелось, что любой уважающий себя работодатель перенимает передовые^✻ методики FAANG — по этой причине практически во всех IT-собесах есть она: секция алгоритмов. Кто-то ей рад, кто-то не очень, но секция есть и уходить пока не планирует. Поэтому нужно закатать рукава и достойно встретить суровую реальность.

Читать далее
Всего голосов 216: ↑214 и ↓2+212
Комментарии77

Моя большая практическая шпаргалка SQL (SQLite) с готовыми запросами

Уровень сложностиСредний
Время на прочтение54 мин
Количество просмотров77K

Привет, Хабр)

Публикую шпаргалку по SQL, которая долгое время помогала мне, да и сейчас я периодически в неё заглядываю.

Все примеры изначально писались для СУБД SQLite, но почти всё из этого применимо также и к другим СУБД.

Здесь есть и примеры довольно сложных запросов с агрегирующими функциями, триггерами, длинными подзапросами, с оконными функциями. Помимо этого, часть примеров посвящена работе с SQL в Python, используя sqlite3, pandas, polars. Этот список запросов с комментариями можно использовать как наглядное пособие для изучения SQL.

Читать далее
Всего голосов 125: ↑122 и ↓3+119
Комментарии7

Как на самом деле Async/Await работают в C#. Часть 6. Анализ результатов компиляции асинхронных вызовов

Уровень сложностиСложный
Время на прочтение24 мин
Количество просмотров5.2K

В этой статье мы продолжим разбирать содержание работы Stephen Toub-а: «How Async/Await Really Works in C#». В этот раз, в след за автором исходного Поста мы рассмотрим код, который генерирует C# компилятор для реализации асинхронных вызовов и множество связанных с этим сущностей-понятий-приемов, таких как: контекст исполнения, боксинг, стейт машина, стек, потоки, … Эта 6-я часть, пожалуй, основная часть всей работы, которая непосредственно отвечает на вопрос: «Как на самом деле Async/Await работают (и компилируются) в C#»

Там, где мне придется цитировать содержание исходного текста в переводе (то есть более-менее дословно переводить), оно будет выделено подчеркнутым курсивом.

Возможно вам будет интересно сравнить эту мою работу с первоначальным переводом.

Читать далее
Всего голосов 7: ↑4 и ↓3+1
Комментарии17

Vicuna, Stable Diffusion и другие нейронки на винде без боли

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

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

KoboldAI - удобный граф. интерфейс для запуска вообще всех GPT-подобных текстовых нейронок, которые поддерживает библиотека transformers. Онлайн версия со всякими модельками.

Vicuna 1.1 - очень хороший чат-бот на базе слитой LLaMa от фейсбука на 7 миллиардов, специально квантованная в 4бита и сконвертированная в формат ggml для быстрой работы на ЦПУ с граф. интерфейсом koboldcpp. Умеет в русский. Требует от 4гб RAM и процессор с AVX (любой после 2009 года вроде). Koboldcpp тоже может запускать почти всё текстовое в ggml. Онлайн версию 1.0 можно попробовать здесь.

NLLB - переводчик от фейсбука между 200 языками. Запуск не совсем однокнопочный и в jupytere, на цпу. Жрёт 4 гига оперативы. Онлайн демка.

FreeVC - не очень хороший, зато открытый клонер голоса с одного аудио на другое. Запуск тоже немножко через консоль, зато с вебгуем и на цпу. Онлайн потыкать здесь.

Whisper - транскрибатор на 60 языках от openai, работает на ЛЮБОМ гпу, даже на встроенном в ноутах(на цпу тоже, но немного помендленнее), ест мало видеопамяти, но есть и большие прожорливые модельки. Очень хорошая онлайн демка.

Читать далее
Всего голосов 22: ↑22 и ↓0+22
Комментарии10

Лучшие видеокарты за свои деньги, которые можно купить для игр в 2024 году

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

Выбор видеокарты — дело личное. Кому-то нравятся бренды, кто-то хочет сэкономить. Некоторым нравится, чтобы видюха светилась. Мы сегодня расскажем, какие видеокарты есть в наличии в разных ценовых категориях. И если вы ищете себе GPU или хотите посоветовать что-то друзьям, под катом — разбор актуального ассортимента XCOM-SHOP.

Читать далее
Всего голосов 18: ↑14 и ↓4+10
Комментарии31

Как установить Windows 11

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

Да, статья о том, как установить Windows 11 правильно. Этот процесс нынче сопровождается таким количеством шаманских плясок, что ей-богу, проще Arch устанавливать. Решил вот поместить все познания по этому вопросу из головы в статью.

Читать далее
Всего голосов 143: ↑121 и ↓22+99
Комментарии238

Как запустить Mixtral на своём компьютере

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров9.1K

Всякий раз, когда выходит новая хорошая публичная ИИ модель, Хабр наполняется вопросами "Как нам её попробовать" и неправильными ответами, будто нужно платить за какие-то сервисы или иметь железа на сто лямов. Поэтому я вновь напишу инструкцию, как запустить новейший mixtral-8x7 на обычных средних компьютерах.

Читать далее
Всего голосов 8: ↑8 и ↓0+8
Комментарии7

Введение в теорию компиляторов: лексический анализ языка Pascal средствами C#

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

Введение


В последнее время большинство новичков в программировании начинают с высокоуровневых языков, таких, как Java, Python, C#, или любой другой язык, содержащий в себе “джентльменский набор” в виде сборщика мусора, готовых структур данных и так далее. Конечно, такой подход имеет свои плюсы, но, как правило, начинающий разработчик, использующий готовый функционал языка, упускает самое главное – его устройство и механизмы работы и имплементации.
Читать дальше →
Всего голосов 7: ↑5 и ↓2+3
Комментарии7

Создание статического анализатора для C# на основе Roslyn API

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

После прочтения этой статьи вы будете обладать знаниями для создания своего собственного статического анализатора для C# кода, благодаря ему вы сможете найти потенциальные ошибки и уязвимости в исходном коде своих и не только проектов. Заинтригованы? Что ж, давайте начнём.

Читать далее
Всего голосов 17: ↑16 и ↓1+15
Комментарии2

Как использовать нативный платежный сервис SberPay в кроссплатформенном приложении на Flutter

Уровень сложностиСредний
Время на прочтение23 мин
Количество просмотров4K

Всем привет! Это Мурат Насиров и Артем Баркалов, мы Flutter-разработчики в Friflex. Разрабатываем высоконагруженные мобильные приложения для бизнеса и специализируемся на Flutter. В этой статье мы собрали большую часть кейсов, с которыми вы можете столкнуться при интеграции кнопки оплаты SberPay в приложении на Flutter. Это поможет вам понять механику работы СберПэй и шаги, которые необходимо сделать для передачи событий из натива во Flutter.

Использование SberPay SDK в продакшене требует наличия установленного приложения «Сбербанк Онлайн» (СБОЛ), иначе в процессе оплаты произойдет ошибка. Тестирование можно проводить на симуляторе iOS и на реальном устройстве. На эмуляторе Android тестирование не выйдет — при попытке оплаты возникает ошибка. Разработчики SDK используют аппаратные возможности смартфонов: геолокацию, bluetooth, Wi-Fi для снижения вероятности совершения мошеннических операций (условный антифрод).

Первым делом разработчик узнает от Сбербанка (по договору о подключении SberPay SDK в приложение), логин/пароль (credentials) и ссылку, которые указываются в файле build.gradle проекта (приложения) в части Android для получения библиотеки. Либо отдельно запрашивается aar-бандл. Для подключения SDK на iOS выдадут отдельную ссылку на репозиторий, хотя он публичный

Вместе с данными для получения SDK выдают тестовые данные для регистрации заказа в шлюзе Сбера, а также специальные apiKey и merchantLogin, которые используются для инициализации SberPay SDK в вашем приложении. Тестовые данные не подходят для проверки списания реальных денежных средств с реальной карты, они исключительно для тестирования.

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии5

Как публиковать и воспроизводить видео на Android с помощью опенсорс-библиотеки и стриминговой платформы EdgeЦентр

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров1.4K

Сделать собственный сервис, где пользователи могли бы смотреть готовые видео на смартфонах в хорошем качестве, с адаптивным битрейтом кажется довольно сложной и дорогой задачей. Но на самом деле реализовать публикацию и проигрывание VOD (Video on Demand, видео по запросу) — не так уж и сложно, а в качестве составных частей можно использовать опенсорс.

Меня зовут Денис Филиппов, я руководитель отдела разработки стриминговой платформы EdgeЦентр. Сегодня расскажу вам, как с помощью нашей платформы и опенсорс-библиотеки tus-android-client сделать приложение, где пользователи смогут смотреть видео на Android.

Материал будет полезен всем, кто хочет реализовать качественное воспроизведение видео на Android-смартфонах с минимальными денежными расходами.

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

Как реализовать приостановку трансляции и фоновый стриминг на Android с помощью опенсорс-библиотеки

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров833

Если вы решили сделать собственное приложение для стриминга на Android, при разработке нужно учесть множество разных нюансов. Например, зрители могут свернуть вашу трансляцию в процессе просмотра, а через какое-то время вернуться обратно. Как должно при этом работать приложение? Должна ли трансляция приостановиться или идти фоном?

Какое именно поведение реализовать в подобной ситуации — решать вам. Но очень важно предусмотреть подобные моменты технически, чтобы при сворачивании всё работало так, как вы задумали.

Этот материал — продолжение моей предыдущей статьи про создание мобильного приложения для стриминга на Android. В ней я рассказывал о базовых моментах разработки. А сейчас поговорим о нюансах. Расскажу, как технически реализовать приостановку трансляции и фоновый стриминг на Android с помощью опенсорс-библиотеки rtmp-rtsp-stream-client-java.

Фоновый стриминг

Сначала разберём кейс, когда приложение переходит в фон и обратно на передний план. Если заглянуть чуть глубже в исходный код rtmp-rtsp-stream-client-java, станет понятно, что стриминг сам по себе проходит в отдельном потоке:

Читать далее
Всего голосов 2: ↑1 и ↓10
Комментарии0

Fooocus v2 — бесплатный Midjourney у вас на компьютере. Подробная инструкция по установке и использованию нейросети

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

Друзья, всем привет! Сегодня я хочу рассказать вам про самую простую и доступную для понимания нейросеть, которая создает изображения по вашему текстовому описанию. Она называется Fooocus и основана на знаменитой Stable Diffusion XL. Это идеальное решение в качестве вашей первой нейросети, и необходимый инструмент для любого дизайнера или контент мейкера.

Внутри много тяжелых изображений.

Читать далее
Всего голосов 120: ↑117 и ↓3+114
Комментарии216

Пиринговый видеохостинг PeerTube — свободная альтернатива YouTube, без цензуры и блокировок

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


Все понимают, что будущее Интернета — за децентрализованными системами. Теоретически. Но почему-то никак не получается в это будущее попасть. Современный веб мутировал в засилье централизованных хостингов от техногигантов — денежные машины Meta, Google, Apple, Microsoft полностью контролируют цифровой мир и манипулируют людьми для выжимания прибыли. Мы словно провалились в какую-то неудачную пародию на киберпанк, где сбылись все худшие прогнозы (см. «Что может пойти не так в 21 веке», Wired, 1997 год).

К счастью, это временное явление. Добро всегда побеждает зло — и живые ростки децентрализованного будущего уже пробиваются через проприетарный асфальт.
Читать дальше →
Всего голосов 50: ↑50 и ↓0+50
Комментарии53

Как избавиться от дублей в базе данных (на примере MS SQL)

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

Всем привет! Меня зовут Евгений, я занимаюсь разработкой и проектированием в Ozon. Больше всего работаю с MS SQL и C#, но попадаются и другие СУБД и языки программирования.

Ozon как продукт быстро растёт: во втором квартале этого года мы доставляли больше миллиона посылок в день. Для обработки такого объёма заказов мы используем разные языки и платформы: .NET (C#), Go, MS SQL Server и PostgreSQL.

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

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

Но сначала позвольте погрузить вас немного в предметную область — объясню, на примере чего будет демонстрироваться проблема дублирования данных, и освещу некоторые методы её решения.

Читать далее
Всего голосов 60: ↑59 и ↓1+58
Комментарии45
1
23 ...

Информация

В рейтинге
1 153-й
Откуда
Рязань, Рязанская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Software Developer, Backend Developer
Middle
C#
.NET
SQL
Entity Framework
REST
Git