Pull to refresh
62
0

Программист

Send message

TypeScript: Раскладываем tsconfig по полочкам. Часть 1

Reading time10 min
Views103K

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

Читать далее

Венец эволюции CSS-in-JS уже здесь: полностью типизированные стили без рантайма в vanilla-extract

Reading time7 min
Views12K

После взлёта тайпскрипта (извини, flow) нетипизированные области фронтенда стали мозолить глаза гораздо сильнее. Логика уже давно на TS, вёрстка, при необходимости, на TSX, а вот у CSS ситуация посложнее.

Можешь использовать CSS файлы (с диалектами и модулями по вкусу) и указывать классы в вёрстке руками - но типизация здесь на уровне "препроцессор может сгенерировать тайпинги со списком классов прямо в рабочем дереве", да и в общем интеграция с рантаймом никакая. При этом гибкость диалекта достигается с помощью плагинов - которые, в общем случае, друг с другом (и, тем более, с IDE) могут и не дружить.

Либо бери любое из CSS-in-JS решений, предоставляющих полную типизацию и интеграцию с остальным кодом, но готовься платить ощутимое пенальти в рантайме - всё же парсинг объектов/строк со стилями занимает ощутимое время. Гибкость при этом, разумеется, максимальная.

Где-то в промежутке между ними находятся проекты вроде linaria или astroturf, которые предполагают парсинг CSS-in-JS на этапе компиляции (примерно как с graphql-tag). Типизация на уровне, производительность в рантайме - тоже, однако это всё ещё препроцессоры строк, пусть и более умные, так что расширяемость оставляет желать лучшего.

Вот тут-то в дело и вступает vanilla-extract. Пару месяцев назад Mark Dalgleish (один из создателей CSS модулей, кстати) решил узнать что получится, если использовать для препроцессинга стилей... сам тайпскрипт!

Спойлер: получилось очень хорошо. Впрочем, обо всём по порядку.

Ну-ка, ну-ка, чего там?

Управляем контактами GPIO из C# .NET 5 в Linux на одноплатном компьютере Banana Pi M64 (ARM64) и Cubietruck (ARM32)

Reading time27 min
Views20K
dotnet libgpiod

Когда заходит речь про программирование на C# .NET для одноплатных компьютеров, то разговоры крутятся только в основном вокруг Raspberry Pi на Windows IoT. А как же Banana/Orange/Rock/Nano Pi, Odroid, Pine64 и другие китайские одноплатные компьютеры работающие на Linux? Так давайте это исправим, установим .NET 5 на Banana Pi BPI-M64 (ARM64) и Cubietruck (ARM32), и будем управлять контактами GPIO из C# в Linux. В первой части серии постов, подключим светодиод и кнопку для отработки прерываний и рассмотрим библиотеку Libgpiod (спойлер, библиотеку так же можно использовать в C++, Python) для доступа к контактам GPIO.

Включение гибридной графики в Ubuntu на ноутбуках Nvidia + Intel (OpenGL, Vulkan)

Reading time3 min
Views57K

Это простая инструкция как включить гибридную графику intel-nvidia на ноутбуке. Чтобы определенные приложения запускались на дискретном чипе, а другие на встроенном. На свое удивление в интернете не нашел простую инструкцию того, как запускать определенные приложения, используя дискретную графику. Так что напишу так просто, на сколько считаю нужным

Читать далее

Почему мы перешли с Webpack на Vite

Reading time2 min
Views47K
image


Миссия Replit — сделать программирование более доступным. Мы предоставляем людям бесплатные вычисления в облаке, чтобы они могли создавать приложения на любом устройстве. Одним из самых популярных способов создания приложений в Интернете на сегодняшний день является React. Однако исторически инструменты React были медленными на Replit. В то время как экосистема JavaScript создала отличные инструменты для профессиональных разработчиков, многие из самых популярных из них, такие как Create React App и Webpack, становятся все более сложными и неэффективными.

К счастью, мы заметили, как сообщество JavaScript осознало эту проблему и перешло к созданию более быстрых и эффективных инструментов, что означает, что мы, наконец, можем предоставить опыт, который наши пользователи ожидают от нас.

Этот новый опыт основан на Vite, инструменте сборки JavaScript, который обеспечивает быструю и экономичную разработку. Vite поставляется с рядом функций, включая HMR или Hot Module Replacement, команду сборки, которая объединяет ваши инструменты с Rollup, и встроенную поддержку TypeScript и JSX.

Вышел Bootstrap 5: оцениваем 7 главных нововведений

Reading time4 min
Views47K

Пройдя через несколько альфа- и бета-версий, наконец-то появился Bootstrap 5, на что у разработчиков ушло несколько месяцев. Новая версия претерпела серьезные изменения, включая отказ от поддержки Internet Explorer (IE) и зависимости jQuery. От IE было решено отказаться, потому что браузер занимает всего 3% рынка и его доля продолжает снижаться.

Что такое Bootstrap? Это самый популярный в мире CSS-фреймворк с открытым исходным кодом, который разработан командой Twitter. В v5 внесено сразу несколько критически важных изменений, давайте посмотрим, что там и как.

Fastify.js — не только самый быстрый веб-фреймворк для node.js

Reading time8 min
Views42K
Последние 10 лет среди веб-фреймворков для node.js самой большой популярностью пользуется Express.js. Всем, кто с ним работал, известно, что сложные приложения на Express.js бывает сложно структурировать. Но, как говорится, привычка — вторая натура. От Express.js бывает сложно отказаться. Как, например, сложно бросить курить. Кажется, что нам непременно нужна эта бесконечная цепь middleware, и если у нас забрать возможность создавать их по любому поводу и без повода — проект остановится.

Отрадно, что сейчас, наконец, появился достойный претендент на место главного веб-фреймворка всех и вся — я имею в виду не Fastify.js, а, конечно же, Nest.js. Хотя по количественным показателям популярности, до Express.js ему очень и очень далеко.

Таблица. Показатели популярности пакетов по данным npmjs.org, github.com
Пакет Количество загрузок Количество «звезд»
1 connect 4 373 963 9 100
2 express 16 492 569 52 900
3 koa 844 877 31 100
4 nestjs 624 603 36 700
5 hapi 389 530 13 200
6 fastify 216 240 18 600
7 restify 93 665 10 100
8 polka 71 394 4 700
9 loopback 28 501 13 300
10 Adonis.js 3 825 10 100


Express.js по-прежнему работает в более чем в 2/3 веб-приложений для node.js. Более того, 2/3 наиболее популярных веб-фреймворков для node.js используют подходы Express.js. (Точнее было бы сказать, подходы библиотеки Connect.js, на которой до версии 4 базировался Express.js).

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

Делаем гибкую печатную плату

Reading time7 min
Views19K

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

Читать далее

Слабо поднять такой крошечный контейнер? Создаем контейнеризованный HTTP-сервер на 6kB

Reading time4 min
Views14K
TL;DR  я решил создать самый маленький образ контейнера, при помощи которого все-таки можно сделать что-нибудь полезное. Опираясь на преимущества многоступенчатых сборок, базового образа scratch и крошечного http-сервера на основе этой сборки, я смог ужать результат до 6.32kB!





Если предпочитаете видео, вот ролик по статье, выложенный на YouTube!

Раздутые контейнеры


Контейнеры часто превозносятся как панацея, позволяющая справиться с любыми вызовами, связанными с эксплуатацией ПО. Притом, как мне нравятся контейнеры, на практике мне часто попадаются контейнерные образы, отягощенные разнообразными проблемами. Распространенная беда – размер контейнера; у некоторых образов он достигает многих гигабайт!  

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

Задача


Правила довольно просты:

Создание вашего первого модуля Ansible

Reading time8 min
Views12K

В этом блоге я расскажу, как создать свой первый модуль Ansible.



Конечно, есть документация, доступная и на Ansible.com, но разобраться в ней достаточно трудно. Запуск своего первого модуля на основе этого введения дался мне с большим трудом. Вот почему я создал это пошаговое руководство. Новые пользователи заслуживают лучшей отправной точки.

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

Разгоняем оптрон до сотни

Reading time2 min
Views41K

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

Читать далее

Плавность хода, шум и момент шагового двигателя при управлении микроконтроллером

Reading time11 min
Views43K

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

Далее опишу алгоритм управления ШД с помощью микроконтроллера.

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

Рассмотрим необходимый минимум основ управления ШД , необходимый для понимания принципа управления, описанного ниже. А именно:

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

Изменение полярности обмотки с помощью Н-моста.

Принципиальная электрическая схема, включающая в себя 4 драйвера полумоста и 2 Н-моста.

Способ модуляции синусоидального сигнала с помощью широтно-импульсной модуляции (далее просто ШИМ).

Способы подключения обмоток.

Читать далее

Как регулировать мощность переменного тока

Reading time8 min
Views32K

Решил как-то отец собрать для дачи некое устройство, в котором, по его заверению, можно будет варить сыр. Устройство сие вид имело могучий и представляло из себя железный короб, подозрительно напоминающий старую стиральную машинку. Внутрь короба (все также добротно!) были вмонтированы три тэна по 1700 Ватт каждый. В общем сыра должно было хватить на небольшой посёлок.

Изделие (внешне выглядящее как что-то из безумного макса), должно быть весьма технологичным и поддерживать заданную температуру в максимально узких пределах. Для этого рядом появилась ещё одна коробка с симисторами, к которым подключались ТЭНы, схема, выдающая высокий уровень при переходе синусоиды через ноль, а у меня появилось задание каким-то образом сделать так, что-бы все это выполняло изначальную задачу.

Итак нам нужно выходить на заданную величину и поддерживать её, с этим должен справляться алгоритм ПИД регулятора, глубоко вдаваться в его работу не буду, скажу лишь что он получает на вход текущую ошибку, а на выходе выдает какое-то число в заданных пределах. У меня таким числом будет необходимая мощность выдаваемая на ТЭН. Для начала разберемся с мощностью.

Читать далее

Крутые трюки с переменными CSS

Reading time4 min
Views16K


Переменные в CSS (или custom properties, кому как удобнее) изначально задумывались для хранения повторяющихся свойств вроде цветовой палитры или шрифтов в одном месте. В препроцессорах работа с переменными куда более гибкая, но магия SASS/SCSS применима не всегда и не везде, и в реальном мире часто обходятся без них, что нередко ведёт к раздуванию и размазыванию кодовой базы по разным файлам и форматам. В этой статье мы рассмотрим несколько интересных хаков, которые позволяют построить на механизме custom properties вещи, кажущиеся невозможными без препроцессоров или вмешательства JS.

ZVS генератор, сборка и принцип работы

Reading time2 min
Views43K

Сегодня мы с вами соберем так любимый рентгеностроителями и высоковольтниками ZVS генератор, подключим строчник и попускаем красивые горячие дуги.

Читать далее

FrontEnd разработка в Docker

Reading time5 min
Views31K

Когда приходит новый разработчик, то перед ним встает задача запустить окружение для разработки. И до недавнего времени - это часто становилось похожим на танцы с бубном. Поставь 10 разных пакетов определенных версий, а еще окажется что твой собственный pet-проект требует другие версии или это даже может быть другой проект в рамках той же работы. Каждый раз из этой ситуации специалист выходил по своему, но основной проблемой помимо временных затрат на эту конфигурацию - оставалось, то что работоспособность от разработчика к разработчику или runner не гарантировалась.

К счастью - эта проблема решена в современном мире разработки, если не полностью, то в большей мере. Нам на выручку пришел Docker.

Read more

Опыт разработки виджетов для сторонних сайтов

Reading time6 min
Views9.6K

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

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

Читать далее

100+ советов с HackerNews: самый дешевый и простой способ разместить статический сайт

Reading time5 min
Views11K
image

«Есть множество способов сделать это (to host a static site), с кучей настроек и прыжков через обруч. Но можно ли сделать это при помощи одной команды? Проще чем Heroku?»

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

Надеемся, что и читатели Хабра тоже поделятся своим опытом.

image

1. NearlyFreeSpeech


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

+ не бесплатно, но очень дешево
+ отлично подходит для небольших сайтов с поддержкой MySQL
+ простая настройка домена
+ прозрачное и предсказуемое ценообразование
+ отличная документация и поддержка
+ не требует специального инструментария, загрузка при помощи rsync
+ простой переход к новому провайдеру
+ хороший контроль над сайтом
+ использовал для размещения нескольких сайтов более 10 лет. Простой, безопасный и с быстрой службой поддержки
политизирован, некоторые пользователи уходят по этой причине
Читать дальше →

О завершении работы Node.js-процессов

Reading time9 min
Views24K
Node.js-процессы завершают работу по разным причинам. При этом в некоторых случаях «смерть» процесса можно предотвратить. Например — в ситуации, когда причиной остановки процесса может стать необработанная ошибка. А вот иногда с остановкой процесса ничего поделать нельзя. Например — если её причина кроется в нехватке памяти. В Node.js существует глобальный объект process, являющийся экземпляром класса EventEmitter. Этот объект, при нормальном завершении процесса, генерирует событие exit. Код приложения может прослушивать это событие и, при его возникновении, выполнять, в синхронном режиме, некие операции по освобождению ресурсов.

Существует несколько способов намеренного завершения работы процесса. Среди них — следующие:

Операция Пример
Ручной выход из процесса
process.exit(1)
Неперехваченная ошибка
throw new Error()
Необработанное отклонение промиса
Promise.reject()
Проигнорированное событие error
EventEmitter#emit('error')
Необработанный сигнал
$ kill <PROCESS_ID>

Многие из этих операций часто выполняются случайно, например — это касается неперехваченных ошибок и необработанных исключений. Но одна из них, с которой мы начнём разбор причин завершения Node.js-процессов, была создана с целью дать разработчику возможность вручную завершать процессы.
Читать дальше →

Новый полимер трансформируется в кнопки/вибро/динамики

Reading time1 min
Views97K


Не очень известная компания Strategic Polymers представила свои наработки, новый полимер и устройства на его основе, которые могут стать одним из наиболее заметных достижений этого года. Дело в том, что вещество, созданное компанией, может при необходимости формировать объемную клавиатуру с обратным откликом, вибро для телефона или даже динамик. Причем все это может формироваться из единого слоя полимера, нанесенного на определенную область какого-либо устройства.

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

Information

Rating
4,581-st
Date of birth
Registered
Activity