Pull to refresh
-30
Ошнуров Андрей @andreoshread⁠-⁠only

Программист

Send message

Создаем slack-бот на Python в Yandex.Cloud

Reading time9 min
Views8.5K

Мы не любим отвлекаться от текущей работы, копаться в трекере задач и почте, чтобы найти нужный тикет или письмо от клиента. Нас беспокоят пропущенные напоминания и недоступные логи. Чат-боты и боты для поддержки процессов разработки популярны у разработчиков именно потому, что избавляют нас от нелюбимой рутины. Боты помогают нам в DevOps-трансформации.

Для разработки ботов удобно использовать serverless-технологии. Одно из преимуществ при работе с приложениями облачного бота, которые тоже размещены в облаке, — моментальный доступ к ним. В докладе на DevopsConf 2021 я подробно рассказал о концепции СhatOps и о том, какие из serverless-технологий стоит взять на вооружение уже сейчас. Кажется, что СhatOps и serverless созданы друг для друга.

Читать туториал далее

Дизайнерский Multiselect на протеинах

Reading time7 min
Views29K

Те из верстальщиков кто часто клепает формы регистрации или обратной связи обязательно столкнутся с задачей по выводу множественного выбора результатов - multiselect. К сожалению, не все элементы тега <select> все ещё можно из коробки стилизовать по желанию дизайнера. В этом маленьком уроке я хотел бы поделиться своим опытом решения данной проблемы на базе знания CSS и немного ванильного JS.

Про дизайнерский select

За рулем с D

Reading time7 min
Views9.1K

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

Вот мой почтенный автомобиль Holden VZ Ute. С завода он поставлялся с убогой четырехступенчатой автоматической коробкой передач. За 18 месяцев владения автомобилем я сломал четыре коробки передач. В то время я не мог позволить себе новый автомобиль, поэтому мне пришлось творчески подойти к делу. Я купил железобетонную, дуракоустойчивую шестиступенчатую автоматическую коробку передач от другого автомобиля. Но на этом я уперся в тупик. Чтобы заставить ее работать, мне пришлось собрать собственную печатную плату, систему управления и прошивку для управления соленоидами, гидравликой и сцеплениями внутри коробки передач, обработки команд водителя, принятия решений о переключении передач и взаимодействия с автомобилем, притворяясь четырехступенчатым автоматом.

Гони!

Как 20-летний паренёк фигачит по 12 часов каждый день уже больше года

Reading time10 min
Views70K
YouTube мне предложил посмотреть видос какого-то азиатского паренька и я согласился, потому что в названии фигурировало «как я фигачил по 12 часов в день в течение года».

Паренек рассказывал про книжки, которые он прочитал, про свои мечты, всплакнул даже. А потом я зашел на его канал и увидел это:

image

И так каждый день с марта 2020 года.

У паренька ЭЛТ-монитор, прикольный рыжий кот, парень стримит каждый день, как он учится на ИТишника (и своим усердием мотивирует других) по 10 часовых помодорок с 10-минутными перерывами между ними.

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

Какие изменения нужны языку Rust, чтобы писать асинхронный код стало проще

Reading time13 min
Views14K

Асинхронное программирование — мощный инструмент. Но экосистема Rust продолжает активно развиваться, и пока язык далёк от идеала. В частности, по этой причине многие считают, что асинхронное программирование в Rust — это боль. Однако некоторые не только критикуют, но и предлагают. Среди таких людей автор данной статьи. 

Здесь я расскажу о некоторых ранее предложенных идеях и свяжу их с новыми предложениями. Я проведу некий мысленный эксперимент и постараюсь ответить на вопрос «Что мы могли бы сделать с асинхронным программированием в Rust, если бы нам дали полный карт-бланш?». 

Непродуманное внесение изменений в Rust может разрушить его. Поэтому всё нужно делать аккуратно, учитывая плюсы и минусы. Допускаю, что некоторые предложения могут вызвать негативную реакцию. Я отношусь к этому с пониманием и прошу читателя подойти к изучению этого материала максимально непредвзято.

Потоки vs Асинхронность


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

Например, этот echo server написан с использованием потоков. Он работает быстрее своей асинхронной версии — для случая, когда количество одновременных подключений не превышает 100.
Читать дальше →

Превращаем старый телефон на Android в резервный сервер с помощью UrBackup/Linux Deploy. Часть 1

Reading time15 min
Views34K


Сегодня я покажу вам, как запустить полноценный резервный сервер на рутованном телефоне Android с помощью UrBackup и Linux Deploy. Пластиковый мусор уже заполонил все вокруг, а в добавок к нему очередной глобальной эко-проблемой становятся еще и электронные отходы. Так зачем выбрасывать прекрасный, пусть даже потрескавшийся и поношенный, телефон?
Читать дальше →

Мой опыт запуска краудфандинговой кампании

Reading time5 min
Views4.2K
Что такое краудфандинг, надеюсь, рассказывать нет необходимости, потому без лишних предисловий поведаю о своем опыте работы с одним из таких сервисов. Речь пойдет не о таком гиганте как Kickstarter, а о более специализированном на «железных» open source проектах сервисе CrowdSupply. Но обо всем по порядку. 

Значит пилил я, пилил свой девайс, себе в копилку очередных погодных информеров, раздвигателей штор, котопоилок (нужное подчеркнуть) и, внезапно… Допилил. Ну то есть, ребята которым показал, сказали, что такое нельзя прятать от общественности и предложили показать на суд публики. Штош, попробуем. Попробовал. Понравилось. Предложили запуститься на CrowdSupply.

Итак, что эта за платформа и в чем преимущество (и есть ли оно) перед Kickstarter. Во-первых, создатели сервиса делают упор на открытость и «железячность» проектов. И действительно, если полистать список, можно убедиться, что подавляющее большинство профинансированных проектов, это устройства реализованные в железе, хотя в числе первых были и довольно необычные. Например этот кусок э-ээм… говядины в шоколаде:


Читать дальше →

Создание пакета NuGet для библиотеки с платформозависимым API

Level of difficultyMedium
Reading time13 min
Views9.9K

Когда речь заходит о создании .NET библиотеки, части API которой являются платформозависимыми, приходится думать, как всё это оформить в NuGet пакет, да так, чтобы установленная из пакета библиотека работала в разных сценариях (.NET Framework, .NET Core, self-contained app и т.д.). К сожалению, в сети сложно найти инструкцию, которая бы шаг за шагом показывала, как выполнить эту задачу. Данная статья призвана быть такой инструкцией.

Читать далее

Базовая станция LTE своими руками: такое возможно?

Reading time4 min
Views23K

Плата sysmoQMOD для четырёх LTE-модемов

Девять лет назад легендарный программист Фабрис Беллар разработал LTEENB – LTE Base Station Software: это софтверный эмулятор базовой станции 4G LTE на обычном ПК, с использованием доступного радиооборудования. Благодаря ему базовую станцию LTE технически можно использовать как обычный хотспот WiFi.

К сожалению, то ли кто-то купил все права на разработки Беллара, то ли его прижали правоохранительные органы, но с сайта Фабриса исчезло описание инструментов LTE Tools и документация на генератор частот LTEMOD.
Читать дальше →

Полное руководство по созданию классических приложений на JavaScript

Reading time8 min
Views18K

Еще недавно разработка классических приложений считалась сложной задачей — для этого приходилось учить специальный язык программирования, например Java или C++. К счастью, сейчас веб-разработчики могут создавать прекрасные классические приложения, конвертируя код JavaScript в полноценные программы. Давайте разберемся, что для этого нужно.

Читать далее

Как управлять несколькими потоками в Node JS

Reading time6 min
Views22K

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

Читать далее

Идеальный инструмент для создания прогрессивных веб-приложений или Всё, что вы хотели знать о Workbox. Часть 1

Reading time30 min
Views13K

Что такое Workbox?


Workbox (далее — WB) — это библиотека (точнее, набор библиотек), основной целью которой является "предоставление лучших практик и избавление от шаблонного кода при работе с сервис-воркерами" (далее — СВ).


Если вы впервые слышите о СВ, то перед изучением данного руководства настоятельно рекомендуется ознакомиться со следующими материалами:



WB предоставляет следующие возможности:


  • предварительное кэширование
  • кэширование во время выполнения
  • стратегии (кэширования)
  • обработка (перехват сетевых) запросов
  • фоновая синхронизация
  • помощь в отладке

На что похож WB API?


Ниже приведены примеры основных подходов к разработке прогрессивных веб-приложений (приложений, в которых используются возможности, предоставляемые СВ).

Читать дальше →

Rust 1.53.0: IntoIterator для массивов, "|" в шаблонах, Unicode-идентификаторы, поддержка имени HEAD-ветки в Cargo

Reading time4 min
Views4.1K

Команда Rust рада сообщить о выпуске новой версии — 1.53.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.


Если вы установили предыдущую версию Rust средствами rustup, то для обновления до версии 1.53.0 вам достаточно выполнить следующую команду:


rustup update stable

Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.


Что было стабилизировано в 1.53.0


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

Читать дальше →

gRPC + Dart, Сервис + Клиент, напишем

Reading time6 min
Views15K

Привет! Меня зовут Андрей. Занимаюсь разработкой Flutter приложений.

Написание материала вызвано желанием показать пример создания сервиса c использованием технологии gRPC в экосистеме Dart и, соответственно, Flutter. Желание периодически возникает, когда приходится испытывать "боль", при переключении на проекты, в которых до сих пор применяется REST + JSON.

Это будет короткая серия из 3-4 статей.

Читать далее

Линейные двигатели внутреннего сгорания — в роли портативных источников энергии и не только

Reading time9 min
Views31K


Более 100 лет известен такой механизм, как двигатель внутреннего сгорания.

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

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

17 интересных (и забавных) API для вашего проекта

Reading time7 min
Views139K


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

Читать дальше →

sqlite-gui: еще один редактор SQLite для Windows

Reading time7 min
Views19K
Всё начиналось как простое средство для выполнения запросов к SQLite базе с сохраняемой историей запросов и кода в редакторе, написанное по старинке на WinAPI. Потихоньку оно обросло функционалом, и, если бы я с самого начала знал во что это выльется, то не взялся бы.
Читать дальше →

Пара мыслей о геттерах и сеттерах в C++

Reading time6 min
Views29K

Эта статья посвящена геттерам и сеттерам в C++. Приношу свои извинения, но речь пойдет не о корутинах. К слову, в ближайшее время появится вторая часть про пулы потоков.

TL;DR: геттеры и сеттеры не очень хорошо подходят для структуроподобных объектов.

Читать далее

Rust — сохраняем безразмерные типы в статической памяти

Reading time10 min
Views6.5K

Не так давно в качестве хобби решил погрузиться в изучение embedded разработки на Rust и через какое-то время мне захотелось сделать себе логгер, который бы просто писал логи через UART, но который бы при этом не знал какая конкретно реализация используется. И вот тут я быстро осознал, именно в этом конкретном случае я не могу полагаться на статический полиморфизм и мономорфизацию, ведь компилятор не знает сколько нужно памяти выделять под конкретную реализацию. Фактически это означает, что нам нужно как-то уметь сохранять типы, размер которых неизвестен на этапе компиляции, и такой способностью обладает тип Box и для решения этой проблемы как раз и возникла идея написать свой аналог типа Box, но который сохраняет обьект не в куче, а в предоставленном пользователем буфере.

Читать дальше

Information

Rating
Does not participate
Location
Уфа, Башкортостан(Башкирия), Россия
Date of birth
Registered
Activity