Ранее мы уже посмотрели, чем нам может помочь .NET в реализации задачи, обозначенной в теме статьи, в Windows. Сейчас рассмотрим её решение в macOS.
.NET *
Хаб со знаниями про NET Framework
Новости
Топ-10 ошибок, найденных PVS-Studio в проектах на ASP.NET Core
Миллионы людей используют веб-приложения, построенные на основе ASP.NET Core. Поэтому мы решили улучшить работу PVS-Studio при анализе таких проектов. Для демонстрации результата нашей работы мы проверим несколько open source проектов и представим топ срабатываний.
Кое-что о переменных MS Small Basic. И не только…
MS Small Basic в настоящее время является лучшим учебным текстовым языком программирования. Не самым популярным, а именно лучшим. А с появлением современной среды программирования SB-Prime, библиотеки LitDev и ряда других библиотек он получил великолепные возможности, позволяющие писать на нём сложные, полезные и интересные программы, которые можно использовать не только в учебных проектах, но и для решения вполне серьёзных повседневных задач, однако, ему присущ ряд недостатков, делающих его непригодным для создания действительно серьёзных, а главное - ответственных проектов, что довольно обидно.
Переменные в MS Small Basic не требуют объявления. Здорово? На первый взгляд — очень! Ничего не нужно заранее продумывать, даже следить, чтобы переменная получила значение до её использования — всё равно получит что-то типа нуля. При этом переменные как бы сами «решают», какого они типа — в зависимости от того, что в них записано. Это кажется очень удобным, особенно — для учебного языка программирования. Но если копнуть чуть глубже, мы увидим, что далеко не всё так здорово, как кажется на первый взгляд.
Как можно реализовать такие простые и умные переменные? Реализовать их можно либо созданием специального класса, который сам определяет тип передаваемых данных, хранит их в одной из подходящих внутренних переменных, выполняет проверки на корректность и преобразования данных в случае необходимости, либо… Либо так, как придумали в Microsoft.
Разработчики MS Small Basic решили проблему создания неких «универсальных» переменных, подходящих для хранения любых типов данных очень специфическим (зато простым и быстрым) способом. Начать с того, что переменные в MS Small Basic все(!) — действительно одного единственного типа: и числовые, и символьные, и текстовые, и даже массивы(!). Фантастика? Нет. Решение, найденное разработчиками, конечно в принципе имеет право на существование, но оно довольно примитивно и несёт с собой кучу неудобств при работе. Я бы даже сказал, разработчики поленились сильно напрягаться — они просто придумали хранить любые переменные как… (барабанная дробь!) …текстовые строки! Настоящие программисты, я думаю, в шоке, как от простоты идеи, так и от потенциального количества проблем, которые она за собой тащит. Ну и от ленивости разработчиков, я полагаю, тоже… :)
Утилизация «мусорщиком» сессий с истекшим сроком годности
Соглашаясь с мнением, что stateful-сервер ограничен в масштабируемости, всё же считаю, что инструмент должен соответствовать задаче. Для высоконагруженной системы с миллионами запросов в секунду важна распределённость, но за неё мы платим необязательностью предоставления актуальных данных в конкретный момент. Ни того ни другого нельзя сказать о системе, в которой при самых оптимистичных предположениях будет работать сотня операторов.
Так что предположим, что запрос на полноценные сессии всё же имеется. И эти сессии надо как-то утилизировать после окончания их срока жизни. Навскидку можно предложить следующие решения.
Запуск параллельной задачи при очередном запросе с клиента.
Запуск специального потока.
Использование таймера.
Всё же осмелюсь предложить ещё одну идею.
Обновление: благодарю @Politura - комментарий о MemoryCache
оказался очень полезным! Проверил и решил так и сделать.
О Thread и ThreadPool в .NET подробно (часть 2)
В предыдущей публикации мы рассмотрели некоторые базовые вопросы относительно потоков и пулов потоков и готовы двигаться дальше. Давайте проведём эксперимент и найдём правильный объём работы для пула потоков. Чтобы его издержки не давлели над объёмом полезной работы
⚠️ Материал средней сложности
С другой стороны, показанные примеры доказывают, что на производительность сильно влияет гранулярность элементов работы. Имеется ввиду, конечно же, длительность работы делегатов. Чтобы достичь хороших показателей, гранулярность работы не может быть абы какой: она должна быть правильной. И помимо планирования задач на ThreadPool, планировать их можно также как через TPL так и через какой-либо свой собственный пул потоков. Например, если взять обычный ThreadPool, то можно примерно измерить издержки алгоритмов ThreadPool в тактах Time Stamp Counter счётчика времени (можно, конечно и в чём-то более привычном типа микросекунд, но там на многих сценариях вполне могут быть нули)
О Thread и ThreadPool в .NET подробно (часть 1)
Эта текст покрывает ответы на некоторые совсем базовые вопросы и вместе с тем сразу погружает в проблематику получения ответа на вопрос: "как работать лучше? однопоточно, многопоточно или многопоточно, но на ThreadPool?". Ответ на этот вопрос может изначально показаться очень простым и понятным, однако реальность совершенно иная: всё как и везде сильно зависит от ситуации: от типа задачи, от её размера, от прочих условий, которые так просто в голову сами собой не придут.
А потому мы пройдёмся в первую очередь по IO-/CPU-bound операциям, стоимости создания потока, базовым основам работы пула потоков (но только основы), а далее -- углубимся в анализ чёрного ящика: от чего зависит производительность пула потоков? Каков объём работы приемлим для того чтобы в него планировать?
Закончим мы главу несколькими, возможно, пугающими выводами об объемах работы, приемлимой для того чтобы обеспечить производительную работу приложения на пуле потоков.
Также отмечу, что материал постепенно переходит от начального уровня сложности 🥤 через ⚠️ средний уровень к ☠️ высокому, о чём вы сможете узнать по пиктограммам.
Поговорим о фичах в предварительной версии C# 11
К старту курса по разработке на C# рассказываем о новых конструкциях в предварительной версии языка C# 11. Среди них шаблоны списка, проверка Parameter на null и возможность переноса строки при интерполяции строк. За подробностями приглашаем под кат.
Роботизация для macOS по-взрослому
Несмотря на то, что на рынке существуют различные RPA-решения, большинство из них не работают на macOS. Microsoft выпускает самую распространенную операционную систему для конечных пользователей, и большинство вендоров предоставляют решения, совместимые только с Windows. При этом по данным StatCounter, macOS занимает четвертое место по доле рынка (8,25%) среди всех операционных систем.
Сегодня технология RPA (Robotic Process Automation) позволяет экономить тысячи человеко-часов за счет передачи рутинных задач роботам. До недавнего времени область применения RPA ограничивалась исключительно компьютерами под управлением Windows (если не брать в расчет компьютерное зрение «по удаленке»). В одном из прошлых постов мы с вами говорили о роботах под Linux, и вот, в декабрьской preview-версии, компания UiPath представила возможность использовать роботов под macOS!
Что под капотом у этих роботов, как они выглядят для пользователей и что вам нужно сделать, чтобы создать своего первого робота под macOS — вы узнаете за пару минут в этой статье.
Статья написана при поддержке технического эксперта UiPath: Валентина Драздова.
Как не дать пользователю заснуть во время загрузки большого набора данных
Одно из двух, — прошелестел он, — или пациент жив, или он умер. Если он жив — он останется жив или он не останется жив. Если он мёртв — его можно оживить или нельзя оживить.
А.Н. Толстой. "Золотой ключик, или Приключения Буратино"
Пользователю лень фильтровать запрашиваемые данные, а их бывает довольно много. Заставлять пользователя что-то фильтровать - негуманно и попахивает произволом. В таком случае пользователь сидит грустит, ругает разработчиков, давит на техподдержку. Если сделать "в лоб", сервер по запросу клиента будет собирать для отправки коллекцию объектов, загружая их из базы или ещё как-то. Потом всю эту махину он пошлёт в ответном HTTP-пакете, предварительно серилизовав в JSON, там это всё будет в один присест десериализовано в клиентские объекты, которые, наконец-то предстанут пред взором потерявшего надежду пользователя.
Как мы придумали автоматизацию дампов .Net используя «sidecar»
Привет, Хабр!
Думаю, для вас не секрет, что в последние годы контейнеризация вышла в лидеры на DevOps благодаря своим возможностям, включая эффективное использование ресурсов и гибкость. Так что Microsoft и Docker потратили немало времени на создание удобной среды, в которой можно было бы провести запуск приложений .NET внутри контейнеров.
Наша команда в разработке использует Kubernetes кластеры, в которых разворачиваются контейнеры на базе Linux систем с различными .Net приложениями и сервисами. Так что в какой-то момент мы встали перед вопросом, как проводить мониторинг не только контейнеров, но и дампов.
За помощью мы обратились к всемогущему интернету, и после нескольких часов изучения данного вопроса, наш выбор пал на использование “sidecar” контейнеров.
Представляем .NET 7 Preview 1
Мы рады объявить об очередной вехе в истории .NET. Отмечая 20-летие технологии, .NET 7 Preview 1 знаменует собой первый шаг вперед к следующим 20 годам .NET.
ASP.NET Core Preview 1 и EF7 Preview 1 также были выпущены.
.NET 7 строится на базе, созданной .NET 6, которая включает в себя унифицированный набор базовых библиотек, среду выполнения и SDK, упрощенный процесс разработки и более высокую производительность. Основные направления работы .NET 7 включают улучшенную поддержку облачных сценариев, инструменты, облегчающие обновление устаревших проектов, а также упрощение работы разработчиков за счет упрощения работы с контейнерами.
Как мы создавали курс по C# и боролись за секунды
У сервиса онлайн-обучения программированию Хекслет есть собственный Open Source проект Code Basics, на котором выходят бесплатные курсы для начинающих на разных языках. Когда-то их было только два – PHP и JavaScript, сейчас уже более десятка. В компании Dodo Engeneering есть хорошая экспертиза по C#, поэтому мы вместе решили сделать курс с тренажером для тех, кто хочет начать изучение программирования именно с него. Во время написания курса оказалось, что из-за долгого холодного старта и ограничений учебной платформы все решения студентов падают.
В этой статье я, Женя Васильев, техлид в Dodo Engineering, расскажу, как мы решали проблему медленной сборки языка и как в этом помог Mono.
Это Gaidai какой-то. Сервис HTTP сценариев
Привет, Хабр, меня зовут Артем Кудряшов, некоторую кучу лет я работаю в ATI.SU — крупнейшей в России бирже грузоперевозок. В разное время я писал код, управлял командами и занимался другими весёлыми вещами. В статье, что вы видите, хочу рассказать об одном из наших сервисов с интересной функциональностью и крутым, по моему личному мнению, названием — Gaidai. Поехали.
У нас в системе есть уведомления для пользователей: мы сообщаем о новых грузах, новых сделках и разных других активностях. Получать уведомления можно на нашем сайте, в мобильных приложениях, пуш-уведомлениями на смартфоны и в браузеры, SMS сообщениями, письмами на почту. В общем и целом, если вы наш пользователь, и вам хочется что-то узнать — мы вас найдём.
Разных сообщений много: на момент написания статьи мы отправляем почти 350 типов сообщений. Вот так выглядит один из вариантов, который пользователь видит на сайте:
Как мы TLS Fingerprint обходили…
В один день одна из крупных досок объявлений начала возвращать фейковые характеристики объявлений, когда понимала, что мы - бот.
Видимо сайт добавил наш прокси в blacklist, но в нашем пуле около 100к проксей, все прокси попали в blacklist?
Попробовав запустить парсер на другом сервере, HTTP запросы возвращали корректные данные. Спустя неделю, ситуация повторилась.
Мы также попробовали отправить запрос на локальной машине с "забанненым" прокси, на удивление, данные пришли корректные, но отправив запрос с этим же прокси на сервере, получили фейковые. Отсюда вытекает вопрос: как сайт определяет, что запросы посылаются с одной машины, если используются прокси?
Прошарив весь гугл, мы узнали об интересной технологии под названием TLS Fingerprint и теперь хотим поделиться что это такое и как обойти.
Database Mail. SQL Server. Остановка «спама»
Недавно столкнулся с проблемой "спама" в MSSQL и чтобы не забыть как решать эту проблему, написал эту статью.
Интервью с Джереми Ликнессом о Entity Framework Core
Entity Framework (EF) Core — это опенсорсная кроссплатформенная расширяема технология доступа к базам данных (ORM) для .NET. Ее релиз состоялся в 2016 году вместе с первыми версиями .NET Core и ASP.NET Core — одним из самых важных шагов Microsoft в рамках вывода .NET в мир открытого исходного кода. С тех пор EF Core не прекращала развиваться вместе с .NET Core, достигнув своей нынешней формы: мощного и легковесного .NET ORM.
InfoQ взял интервью у Джереми Ликнесса, руководителя группы проектов .NET Data в Microsoft, целью которого было узнать больше об EF Core и о том, что нам следует ожидать в следующем релизе, который намечен на конец этого года.
Фрагментация блобов Azure Blob Storage в сценариях загрузки и скачивания данных
Обзор возможностей по управлению фрагментацией блобов в Azure Storage Account и ее влияние на скорости доступа к ним.
Как пользоваться Microsoft Dataverse Web API и не плеваться
Обычно для решения рабочих задач хватает примера кода из своего или соседнего проекта. Дополнительные сведения можно найти на страницах официальной документации, в профильных блогах или на StackOverflow. Но вот про реализацию работы Azure Functions c базой данных Dataverse, которая относится к облачной Power Apps (часть Power Platform), вы найдете крупицы информации.
Автор этой статьи – Борис Шимберев, .NET-разработчик в EPAM. Борис на практике разобрался со всеми мыслимыми и немыслимыми проблемами, с которыми можно столкнуться при работе с Microsoft Dataverse. В статье он рассказывает об особенностях использования этой СУБД и делится полезными находками.
Почему моё приложение при открытии SVG-файла отправляет сетевые запросы?
Вы решили сделать приложение, работающее с SVG. Набрали библиотек, запаслись энтузиазмом, и в итоге всё удалось. Но вот незадача! Внезапно вы обнаруживаете, что приложение отправляет странные сетевые запросы. Кроме того, с хост-машины утекают данные. Как же так?
Вторая жизнь монитора с сенсорным экраном
Привет, Хабр.
Хочу рассказать как заставил работать старый монитор от медицинского оборудования с не менее старым неттопом.
Вклад авторов
-
sidristij 3005.4 -
XaocCPS 1863.6 -
sahsAGU 1303.2 -
olegchir 1250.6 -
mezastel 1199.6 -
SergeyT 1140.6 -
phillennium 1020.6 -
foto_shooter 1004.0 -
marshinov 888.2 -
chernikov 822.0