Как стать автором
Обновить
-1
0.1

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

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

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

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

В предыдущей статье я начал свой рассказ динамические методы.

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

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

Кроме этого поговорим про динамические методы, привязанные к объектам, и рассмотрим возможность вызова одних динамических методов из других.

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

Худшие практики разработки и архитектуры

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

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

Понятно, что плохие практики не отвечают на вопрос: «А как делать-то?» — но они помогают быстро разобраться в том, как не делать.

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

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

Это если команда одна. А если разработчики на пятом проекте новые, то начинается самое весёлое — этот сталактит надо ещё прочитать.

Очень часто я вижу лава-код в проектах аутсорсинговых компаний, потому что они используют свою кодовую базу по разным заказчикам как такой своеобразный иннерсорс. А «междисциплинарный» код как раз хорошо обрастает отключаемыми участками и переопределяемыми функциями.
Читать дальше →
Всего голосов 43: ↑43 и ↓0+43
Комментарии28

Скриптинг в C# или динамическое выполнение в runtime

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

умаю, не многие знают, что в C# есть штука на подобии eval из других языков. Благодаря Rosyln API, можно во время выполнения скомпилировать и выполнить C# код. Пример использования можете посмотреть в моей реализации REPL-а для C#.

Впервые с такой штукой, как REPL, я познакомился когда теребил питона. В мире .NET есть похожая вещь под названием C# Interactive (CSI). Довольно удобная штука, но у нее есть один большой минус — она входит в состав инструментов Visual Studio, так что без установки VS, не получится ее использовать, а чтобы запускать ее без запуска VS, вообще надо лезть в ее недра (а точнее, через консоль запустить C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat), что так себе.

Есть еще такие проекты, как dotnet-script и cs-script (они работают через Microsoft.CodeAnalysis.CSharp.Scripting), но у них есть фатальный недостаток — они написаны не мной. Вот и появилась мысль, написать свой корявый велосипед, но со своими фичами! (которые тоже коряво работают). После недолгих поисков, мой взор упал на сие чудо: Microsoft.CodeAnalysis.CSharp.Scripting. Из плюсов — удобный API, возможность выполнять код без классов и namespace-ов.

Для начала...

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

Как задеплоить своего телеграм-бота (почти) бесплатно — Quickguide в облачный Serverless

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

Всем привет! Меня зовут Антон Брехов. Я инженер в Yandex Cloud. Сегодня хочу рассказать о том, как дешевле всего задеплоить своего телеграм-бота. Возможно, этот опыт пригодится и для других решений.

Готовых фреймворков для телеграм-ботов уже достаточно много на любых языках. Однако после написания кода встает вопрос: а как теперь заставить бота работать постоянно, сделать доступным 24/7?

Новички оставляют персональный компьютер работающим и опрашивают сервер телеграма с некоторой частотой. У опытных, скорее всего, есть свой VPS-сервер с reverse proxy для деплоя приложений. Первое решение не является высокодоступным, а отдельный сервер, даже в облаке, — это слишком дорого для деплоя одного бота. В статье расскажу об альтернативном решении.

Читать дальше
Всего голосов 20: ↑17 и ↓3+18
Комментарии19

BLE под микроскопом (ATTы GATTы...) Продолжение

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

BLE под микроскопом (ATTы GATTы...)

Продолжение

Начал писать статью про использование китайского BLE чипа CH582. Но оказалось, что без теории, сложно объяснить некоторые моменты его работы. Поэтому решил сначала объяснить структуру таблицы атрибутов, а потом уже вернутся к китайскому чипу. Тем более ранее я уже пытался осветить эту тему.

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

MacOS Monterey на Linux — быстро и просто?

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров45K
Что делать, если у вас возникло желание или необходимость заняться разработкой под MacOS или iOS, но под рукой нет макбука, а покупать его только чтобы открыть Xcode кажется делом сомнительным? Недавно я столкнулся с такой проблемой в одном из своих пет-проектов и решил ее достаточно просто и быстро. После выполнения нескольких достаточно примитивных шагов, мне удалось запустить MacOS Monterey как на скриншоте ниже.

image

Никакого Virtualbox, никакого Virtual Machine Manager. Из требований — только 100 Гб свободного места на диске и хотя бы 16 Гб оперативной памяти. В рунете я встречал описание похожих путей установки, вроде Docker-OSX или Sosumi. Но я бы хотел поделиться способом, который позволяет использовать актуальную версию MacOS (Sosumi — сразу минус) и не потратить уйму свободного времени на возню с конфигами и терминалом. Поехали.
Читать дальше →
Всего голосов 68: ↑64 и ↓4+75
Комментарии67

Тестовые сервера Telegram

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

Я не смог найти хоть какой-то нормальной информации про тестовые сервера Telegram кроме одной статьи про то как зайти с андроида на тестовый сервер и получить там премиум и канал с галочкой. И маленького раздела на официальном сайте Telegram где упоминается эта тема, который не очень просто найти.

Поэтому решил написать для пытливого читателя и пользователя Telegram гайд и некоторые нюансы про эту тему.

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

Метод генерации столбцов для решения задач математической оптимизации большой размерности

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

Теперь к истокам задачи: часто, чтобы математическая модель была применима в реальном секторе, необходимо использовать очень много ограничений и большое количество переменных. Задачи, возникающие в бизнесе в реальных условиях, требуют использования моделей с большим количеством ограничений и большим количеством переменных.  Временами задача в лоб может и не решиться, поэтому были придуманы различные трюки. Один из них - метод « генерации столбцов» (Column generation).

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

Красивый двоичный поиск без ветвления

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

Недавно я прочитал пост Алекса Мускара Beautiful Binary Search in D. В нём описывается алгоритм двоичного поиска под названием «алгоритм Шора». Я никогда не слышал о нём и его невозможно загуглить, но увидев алгоритм, я думал только об одном: «он без ветвления». Кто знал, что может существовать двоичный поиск без ветвления? Поэтому я занялся его трансляцией в алгоритм для итераторов C++, не требующий индексации на основе единицы или массивов фиксированного размера.

В GCC он более чем в два раза быстрее, чем std::lower_bound, который сам по себе — очень высококачественный двоичный поиск. Цикл поиска прост, а генерируемый ассемблерный код красив. Меня потрясло, что он существует, но им, похоже, никто не пользуется.
Читать дальше →
Всего голосов 35: ↑34 и ↓1+42
Комментарии8

Алгоритмы балансировки нагрузок

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

Рано или поздно веб-приложения перерастают среду одного сервера. Компаниям требуется увеличить или их доступность, или масштабируемость, или и то, и другое. Чтобы сделать это, они развёртывают своё приложение на нескольких серверах и ставят перед ним балансировщик нагрузок для распределения входящих запросов. Чтобы справляться с нагрузками, большим компаниям могут потребоваться тысячи серверов, на которых запущено веб-приложение.

В этом посте мы рассмотрим способы, которыми один балансировщик нагрузок может распределять HTTP-запросы на множество серверов. Мы начнём снизу и проделаем весь путь вверх до современных алгоритмов балансировки нагрузок.
Читать дальше →
Всего голосов 88: ↑87 и ↓1+105
Комментарии16

FET: (F)дружелюбный (E)эффективный (T)транзистор

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

Работая со схемой, управляющей приличной силой тока, вы зачастую сталкиваетесь с полевыми транзисторами (FET, Field-Effect Transistor). Независимо от того, хотите ли вы управлять парой мощных светодиодов, двигателем или включать/отключать USB-устройство, в схеме обычно присутствует полевой транзистор, выполняющий часть ответственной работы. Вы можете не знать, как именно он функционирует, как его использовать и какие нюансы при этом учитывать — поэтому начнём с основ.
Читать дальше →
Всего голосов 38: ↑35 и ↓3+46
Комментарии18

Интересные трюки HTML, CSS и JS

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

Здесь вы найдёте небольшую подборку нестандартных вариантов использования HTML/CSS/JS. Если информация окажется полезной, будем собирать эти хаки на постоянной основе и публиковать по мере накопления.

Примечание. Некоторые трюки основаны на открытых уязвимостях браузеров и поисковой системы Google и др. Поэтому могут перестать работать в ближайшее время (или продолжат, если разработчики не признают баги и не захотят их исправлять). Другие функции работают только начиная с конкретных версий Chrome, Firefox и т. д.
Читать дальше →
Всего голосов 47: ↑44 и ↓3+55
Комментарии17

Integrated Architecture Framework для описания архитектуры предприятия

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

Со времени публикации первых фреймворков для проектирования архитектуры предприятия (например, TOGAF, FOAF, Archimate, Zachman Framework, MODAF, DoDAF, FEA, Gartner Enterprise Architecture Framework), а также попыток переноса архитектурных подходов управления жизненным циклом создания программного продукта на функционирование предприятия в целом (например, EUP) возникло устойчивое ощущение, что они не предлагают никакого конкретного решения, подходящего для любых предприятий, а следовательно не имеют особой ценности.

В действительности, конечно же, не существует двух одинаковых бизнесов и практически невозможно предложить универсальный подход к созданию успешной архитектуры процессов предприятия (тем более если оно интегрирует процессы разработки и сопровождения собственного программного обеспечения), но все же можно предложить достаточно удобную модель для рассмотрения всех значимых аспектов проектирования архитектуры предприятия с учетом их взаимосвязи и взаимного влияния. В этой статье мы рассмотрим основные подходы к реализацию целостного описания архитектуры предприятия на примере фреймворка IAF (Integrated Architecture Framework).

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

Как на самом деле работает Async/Await в C# (Часть 4)

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

Несколько недель назад в блоге «.NET Blog» появилась статья «Что такое .NET, и почему вы должны выбрать его?». В нем был представлен высокоуровневый обзор платформы, кратко описаны различные компоненты и архитектурные решения, а также обещаны более подробные посты по затронутым темам. Этот пост является первым таким продолжением, в котором подробно рассматривается история создания, архитектурные решения и детали реализации async/await в C# и .NET.

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

Разработка .NET Web приложения на Yandex Cloud Functions

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

Яндекс Облако предоставляет возможность публикации .NET приложений разными способами, типичным из которых является docker контейнер, развернутый на созданных вычислительных ресурсах, что подразумевают оплату за выделенные процессоры и оперативную память. Более экономный вариант предоставляют serverless сервисы Cloud Functions и Serverless Containers, где оплата идет по фактически потребленным ресурсам, масштабирование осуществляется самим облаком. Контейнеры хороший вариант разработки, но более простым и легковесным является Cloud Functions.

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

Dolly 2 — открытый аналог ChatGPT со свободной лицензией

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

В конце марта 2023г., компания Databricks выпустила Dolly, большую языковую модель, подобную ChatGPT, дообученную на платформе Databricks Machine Learning Platform. Результат оценки работы модели Dolly показывает, что модель с открытым исходным кодом двухлетней давности (GPT-J) при дообучении на публичном датасете, собранном в Стэнфорде (Stanford Alpaca), на небольшом наборе данных из 50 000 диалогов (вопросов и ответов), может демонстрировать удивительно высокое качество обучения, не характерное для родительской модели (GPT-J), на которой она основана.

Но с первой версией модели Dolly существует одна проблема - датасет от Stanford Alpaca был собран с помощью автоматизированных скриптов от ChatGPT, что нарушает лицензию и правила использования моделей OpenAI.

Чтобы исправить эту проблему, в апреле 2023г. Databricks выпустила
Dolly 2 - большую языковую модель с открытым исходным кодом и открытой лицензией для научных и коммерческих целей.

Dolly 2 - это языковая модель с 12 млрд. параметров, основанная на семействе моделей EleutherAI pythia и дообученная исключительно на новом датасете высокого качества, созданном сотрудниками Databricks с использованием RL from Human Feedback (RLHF).

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

Читать далее
Всего голосов 27: ↑25 и ↓2+30
Комментарии9

Локальные нейросети (генерация картинок, локальный chatGPT). Запуск Stable Diffusion на AMD видеокартах

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

Многие слышали про Midjourney, но про то, что есть локальная Stable Diffusion, которая может даже больше, знает уже куда меньше людей, или они не знают, что она локальная. И если они пробовали её онлайн, то быстро приходили к выводу, что она сильно хуже чем Midjourney и не стоит обращать на неё более внимания. И да, SD появился раньше Midjourney. Для запуска хватит и cpu или 4гб видеопамяти.

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

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

Разворачиваем Apache Kafka

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

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

Для запуска Kafka можно использовать решения для управления кластером, такие как ZooKeeper или KRaft. В статье мы рассмотрим работу с ZooKeeper. Zookeper это распределенное приложение для управления кластером, состоящим из большого количества узлов.

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

11 полезных AI сервисов + Plasma AI Telegram бот с 160 ролевыми моделями, эксклюзивом от chatGPT 4 и MidJourney 5

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

После моей предыдущей статьи про 30+ задач, которые может выполнять chatGPT, мы решили запустить своего чат бота в Телеграм, которые за 3 месяца вырос до более 1 миллиона активных пользователей. Сегодня мы запустили большое обновление и функционал "Ролевых" моделей chatGPT 4, который превращает чат бота в продвинутого AI ассистента. Я хочу поделиться с вами новыми фичами и полезными возможностями бота, которые помогут каждому оценить потенциал AI технологий.

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

NudeCrawler: Голый ползун по женщинам на телеграфе

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

Nudecrawler - паук для поиска голых женщин.

Читать далее
Всего голосов 144: ↑134 и ↓10+167
Комментарии135

Информация

В рейтинге
2 731-й
Зарегистрирован
Активность

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

Backend Developer, Fullstack Developer
Lead
C#
.NET
Microsoft SQL Server
.NET Core
PostgreSQL
Database
High-loaded systems
Designing application architecture
Database design