Построение процесса разработки скриптов на Powershell с линтингом, тестами и Quality Gate. Выбор IDE, фреймворка тестирования и прочих инструментов с примерами.
Пользователь
Асинхронный Rust в трех частях. Часть первая: Futures
В введении мы посмотрели на пример асинхронного Rust без какого‑либо объяснения, как он работает. Это дало нам несколько вопросов для размышления: Что такое асинхронные функции и возвращаемые ими «future»? Что делает join_all? Чем отличается tokio::time::sleep от std::thread::sleep?
Чтобы ответить на эти вопросы нам потребуется преобразовать каждую из частей в обычный не асинхронный код Rust. Вскоре мы обнаружим, что воспроизвести foo
и join_all
достаточно просто, а вот со sleep
ситуация чуть сложнее. Начнем же.
Асинхронный Rust в трех частях. Введение
Async/await, или «асинхронный ввод‑вывод», — это относительно новая функция языка, которая позволяет программам выполнять несколько задач одновременно. Это своего рода альтернатива многопоточности, хотя программы на Rust часто используют и то и другое. Асинхронный ввод‑вывод особенно популярен в веб‑сервисах и сетевых приложениях, работающих с большим числом подключений одновременно.
Эта серия статей представляет собой введение в "futures", задачи и асинхронный ввод‑вывод в Rust. Наша цель — понять основные механизмы, чтобы асинхронный код не казался магией. Мы начнем с преобразования (так называемой «рассахаризации») асинхронных примеров в обычный Rust и постепенно создадим собственную асинхронную «среду выполнения». На данном этапе под «средой выполнения» мы понимаем библиотеку или фреймворк, которые используются для написания асинхронных программ.
Создание собственных фьючерсов, задач и механизма ввода‑вывода позволит понять, что именно делает для нас среда выполнения. Предполагается, что вы уже немного писали на Rust и читали The Rust Programming Language \или аналогичный источник.
Давайте начнем с выполнения нескольких задач одновременно с использованием потоков. Сначала все пойдет хорошо, но затем, с увеличением количества потоков, начнутся проблемы. Затем мы добьемся того же, используя async/await
. В этой части мы разберем примеры, а в следующей мы начнем углубляться в них.
Учимся читать QR-коды без компьютера
Задавались ли вы когда-нибудь вопросом, как работают QR-коды? Если да, то эта статья для вас. Здесь вас ждёт интерактивное объяснение*, которое мы составили для семинара, проводившегося в рамках Всемирного конгресса хакеров 37C3, но вы также можете использовать его самостоятельно.
Прочитав статью, вы узнаете:
- Из чего состоят QR-коды.
- Как декодировать QR-коды вручную (используя нашу шпаргалку).
DOS Navigator: заходим в файловый менеджер, которому исполнилось 33 года
Всем привет! Это Антон Комаров, автор команды спецпроектов в МТС Диджитал. Есть мнение, что у каждого человека наступает такой этап, когда начинает казаться, что раньше трава была зеленее, пломбир вкуснее, а компьютерные игры круче. Я до последнего в это не верил, а потом внезапно поймал себя на мысли, что скучаю по тем временам, когда, включив компьютер, оказывался перед пустым черным экраном со светящимся «приглашением» MS-DOS.
Дальше все зависело от того, какой файловый менеджер или графическая оболочка была установлена на конкретной машине. Большинство пользовалось двухпанельным Norton Commander (NC) или же его «братом-близнецом» Volkov Commander (VC), который был написан на чистом ассемблере и за счет этого имел такие же функции при крошечном размере в 64 Кб. А еще мне запомнился двухпанельный DOS Navigator (DN) с оригинальным серым интерфейсом.
В этом посте я решил вспомнить молодость и освежить в памяти, как работал этот маленький, простой, но очень удобный файловый менеджер. Подробности — под катом.
Самые быстрые мьютексы
Cosmopolitan Libc хорошо известна своим «полиглотным жирным бинарным» хаком, который позволяем исполняемым файлам запускаться на шести операционных системах для AMD64/ARM64. Вас может удивить, что при этом она может быть лучше С‑библиотекой для вашего продакшена. Чтобы продемонстрировать это, давайте сравним библиотеку мьютексов Cosmo с другими платформами.
Мы напишем простой тест, который создает 30 потоков, увеличивающих одно и то же число 100 000 раз. Это поможет проверить, насколько хорошо реализация мьютексов справляется с задачей при интенсивном использовании.
Тредпульное заклятие Dotnet-демонов на Linux
Все слышали о том, что иногда dotnet на Linux потребляет больше ресурсов, чем на Windows. Порой эта разница практически незаметна. Но случается и такое, что одно и то же приложение потребляет на Linux в 2–3 раза больше CPU, чем на Windows.
await vs yield на примере Effection 3.0 и React
18 декабря 2023 года вышел релиз Effection 3.0 - типизированная альтернативна async/await на генераторах (Structured Concurrency and Effects for JavaScript).
В статье сравним подходы на генераторах и async/await и расскажу как использовать Effection в React для решения типичных проблем с асинхронным кодом:
- Race condition
- AbortController
- Clean up
- Debounce
Написал книгу по C#
6 лет писал томными вечерами книгу по программированию. Рассказываю как собрал на неё деньги, с какими сложностями столкнулся и почему каждому разработчику стоит это сделать.
Практическое руководство по Rust. 4/4
Hello world!
Представляю вашему вниманию четвертую и последнюю часть практического руководства по Rust.
Другой формат, который может показаться вам более удобным.
Руководство основано на Comprehensive Rust — руководстве по Rust
от команды Android
в Google
и рассчитано на людей, которые уверенно владеют любым современным языком программирования. Еще раз: это руководство не рассчитано на тех, кто только начинает кодить ?
История о том, как Google подсматривал за нашим сайтом и галлюцинировал
В 2023-ем году мы узнали, что нейросети могут галлюцинировать. На первый взгляд, это довольно забавное и пока что безобидное явление. Но в этой короткой статье я расскажу, как я столкнулся с галлюцинациями самого Google, и как это чуть не угробило стартап, в котором я работаю.
PowerShell и его возможности в уходящем году
Все привет! В уходящем году хочу оставить небольшой след про такой сильный язык программирования, как PowerShell. Вероятно, уже в следующем году, ввиду тенденции отказа от Windows систем в нашей стране, моя практика в этой области закончится, а за пару лет активности, так и не собрался с силами опубликовать что-то подобное. Кода тут не будет, для этого у меня есть отдельная работа с заметками, цель статьи, еще раз подчеркнуть реальные возможности данного языка, где я буду ссылаться на работы, которые я старался делать универсальными, а так же сделаю акцент на полезных модулях.
Буквально два года назад, имея базовые знания навигации в консоли Linux, написание несложных batch-файлов и небольшой опыт VBScript открыл для себя PowerShell, и после этого я уже в прямом смысле этого слова, не мог остановиться реализовывать свои идеи, правда, такое дело очень затягивает. В один момент решился завести канал на GitHub и там же по сей день виду работу с заметками, где за это время накопилось более 6 тысяч строк из описания работы cmdlet (PowerShell-команд) и утилит для Системного Администратора (AD, Exchange, VMWare, MSSQL и т.д.) с примерами, ведь далеко не все получалось найти в интернете, порой, только изучая на практике свойства и методы объектов, можно получить желаемый результат. Так же набралась небольшая коллекция модулей и тестовый стенд WinForms с примерами работы различных методов, на котором я в дальнейшем базировался для написания приложений с графическим интерфейсом. Все работы писал по большей части для себя с целью автоматизировать и разгрузить текущий рабочий процесс, иногда помочь коллегам, именно по этому мне хочется поделиться своими наработками, возможно кому-то это еще сможет пригодиться.
Ужасы PowerShell
Мне часто приходится пользоваться PowerShell. Конечно, его создатели не имели никакого представления о прекрасном и эстетике. Уродливость PowerShell особенна видна при его сравнении, например, с Python. С другой стороны, как говорится, c лица не воду пить - работает и хорошо? Но нет, мне кажется в PowerShell есть по крайней мере пара моментов, которые фатально влияют на его практическое применение.
Игровая легенда из 90-х: Как работала 3dfx Voodoo «под капотом»? Пишем 3D-приложение с нуля на Glide
Полагаю, многие мои читатели так или иначе знакомы с такими видеокартами, как 3dfx Voodoo. Эти легендарные графические ускорители из середины\конца 90-х годов был чуть ли не в каждой второй сборке для игр, а о их производительности слагали легенды. До сих пор есть относительно небольшое сообщество фанатов ретро-игр, которые ценят, любят и собирают с цветмета те немногие видеокарты от 3dfx, что остались в СНГ. Однако обзоров на 3dfx Voodoo много, тестов игр — тоже, а вот материала «простыми словами» о его внутренней архитектуре и более того, практической части с написанием 3D-игры практически нет! Недавно я прикупил себе Voodoo 3, и начал зубрить Programmer's Manual с желанием запилить что-нибудь эдакое… Статью я долго и упорно готовил дабы успеть к новому году и сегодня у нас с вами: краткая история компании 3dfx, подробный разбор архитектуры видеочипов 3dfx «под капотом», что должен был уметь программист 3D-графики в 90х и написание 3D-приложения на Glide полностью с нуля. Интересно? Тогда жду вас в статье!
Как я чуть не стал миллионером, продавая воздух, или почему Россия – не Америка
Все знают, что Россия — энергетическая сверхдержава, она же – «разорванная в клочья Обамой бензоколонка». Но не все знают, как это может отражаться в области развития математического моделирования. Расскажу одну жизненную историю.
Начну с далекого 2007 года. Довелось мне в те времена поработать на крупном заводе, который «эффективные менеджеры» как раз делили на несколько отдельных предприятий, каждое из которых крутилось, как могло. В том цеху, который и стал одним из таких предприятий, на токарных станках могла крутиться (и крутилась!) металлическая болванка размером с автобус. А в печку для нагрева металла можно было затолкать паровоз. Целиком. Когда я в первый раз увидел токарный станок, на котором крутится и обтачивается деталь размером с автобус, моему восторгу не было предела. Гордость за страну переполняла до состояния «в зобу дыханье сперло». А потом старожилы показали ту часть цеха, где стояли фундаменты таких же станков и пояснили:
- А вот тут были станки для точной обработки. Их продали китайцам по цене металлолома.
- А почему вот другие не продали?
- Потому, что у них точность обработки такая, что их только в металлолом можно сдать. Поэтому они здесь работают и крутятся как могут, и обтачивают валы турбин Siemiens.
Схема бизнеса был гениальна: Siemiens привозил на завод многотонные болванки, их неделями и месяцами обтачивали до состояния заготовок и увозили для чистовой обработки в Германию. Где уже выполняли чистовую доводку на точных и дорогих станках. Главные затраты при черновой обработке – это износ станков и инструмента, зарплата токаря и электроэнергия, необходимая для вращения тонн металла. Поскольку электроэнергия в РФ дешевле немецкой, недели обработки болванок с лихвой окупают транспортировку, а низкая точность обработки не требует дорогого обслуживания и мало чувствительна к износу еще советского оборудования. В итоге весь бизнес заключался в «перепродаже» дешевой электроэнергии из РФ в Германию, но в виде металлических обточенных болванок.
RESTinio-0.7.0: первый существенный релиз за три года
В последний раз статья, целиком посвященная открытому проекту RESTinio, вышла на Хабре в декабре 2020-го года, без малого три года назад. Это был рассказ о релизе версии 0.6.13. По сути, это был последний релиз, в котором в RESTinio появилось что-то новое и важное. Потом были только небольшие корректирующие релизы, исправляющие ошибки или адаптирующие RESTinio к свежим версиям зависимостей.
И вот спустя три года нам удалось выпустить новое существенное обновление. А посему есть повод поговорить о том, что было удалено/добавлено/изменено в этой версии. Ну и о причинах паузы в развитии и перспективах проекта вообще.
Кому интересно, милости прошу под кат.
Для тех же, кто про данную разработку слышит в первый раз: это наша попытка сделать встраиваемый в C++ приложения HTTP(S)/WebSocket сервер, который бы обладал и большой гибкостью, и нормальной производительностью, освобождал бы пользователя от рутины, но не прятал бы абсолютно все детали "под капот", и удовлетворял бы нашим представлениям о том, как подобные вещи должны выглядеть...
Вроде бы получилось. Мне кажется, что раз уж RESTinio сумел набрать тысячу звезд на GitHub, результат понравился и пригодился не только нам. Впрочем, это уже совсем другая история. Давайте вернемся к рассказу об изменениях в версии 0.7.0 и к тому, почему этих изменений пришлось ждать так долго...
10 лет Docker: от революционной идеи до современной практики
Привет, Хабр! На момент написания статьи, я занимаюсь надежностью (SRE) в компании Workday, еще помогаю студентам в Практикуме осваивать курс по DevOps-практикам.
В этой статье я поделюсь кратким обзором истории Docker, его ключевыми концепциями и мисконцепциями. Надеюсь, это будет полезно для новичков и студентов, изучающих DevOps-практики и виртуализацию.
С++23 — feature freeze близко
В этот раз в черновик нового стандарта C++23 добавили весьма полезные и вкусные новинки:
operator[](int, int, int)
- монадические интерфейсы для
std::optional
std::move_only_function
std::basic_string::resize_and_overwrite
- больше гетерогенных перегрузок для ассоциативных контейнеров
std::views::zip
иzip_transform
,adjacent
,adjacent_transform
Подробности об этих и других (даже более интересных!) вещах, а также о том, что за диаграмма стоит в шапке, ждут вас под катом.
Недостатки корутин в C++
Эта статья написана с целью подчеркнуть некоторые риски, связанные с переносом базы кода на использование корутин. Я считаю, что продолжающееся неграмотное использование этой функциональности может привести к уменьшению безопасности и замедлению программ.
Даже при отсутствии многопоточности корутины следует рассматривать с той же подозрительностью, что и в случае написания многопоточного кода, так как они всё равно работают асинхронно.
Как ID Software удалось выжать невозможное из EGA-карт
Я прочитал превосходную книгу Doom Guy Джона Ромеро, которую крайне рекомендую. В девятой главе Джон рассказывает о том, как его поразила увиденная им технология Adaptive Tile Refresh (ATR). Благодаря этому я понял, что пока не анализировал очень важную методику, лежавшую в основе серии игр Commander Keen (CK).
В процессе исследований я выяснил, что ATR использовалась только в первой трилогии CK. Во второй разработчики начали использовать нечто гораздо лучшее.
Информация
- В рейтинге
- 4 200-й
- Зарегистрирован
- Активность