При использовании несколькими приложениями аллокатора из общего пула разделяемой памяти возникает несколько задач, которые можно по-разному решать. Пул отображается во все процессы по одному и тому же виртуальному адресу, поэтому указатель, полученный в одном процессе, остаётся валидным в другом, и данные между процессами можно передавать вообще без копирования. Обратная сторона такого удобства в том, что любой из процессов может в любой момент «умереть» — по exit(), SIGKILL или segfault — и оставить после себя либо недоделанную операцию с аллокатором, либо выделенные блоки, которые больше никому не нужны.
Есть классическая проблема: изолированные процессы — хорошо для надёжности, но хочется иногда позвать функцию из соседа, как будто она лежала в той же библиотеке. Стандартные IPC — это всегда протокол: описал интерфейс, сгенерировал стабы, поднял сервер, прописал адреса. simplerpc предлагает путь короче: ты пишешь обычную функцию на Си, линкуешь библиотеку — и она автоматически становится RPC-методом, доступным другим процессам на той же машине.
Конвертер синтаксиса, который заканчивает главный холивар
«Может, в следующий раз вы посмотрите дважды - и не станете судить
о книге по обложке» - Зекора
Спор «скобочки или отступы» старше, чем некоторые из его участников. У
этого спора нет судьи и нет призового фонда, но есть ветераны и есть потерянные
души, которые однажды написали end в Питоне и с тех пор не могут
остановиться. Выиграть этот спор невозможно: стороны спорят о вкусах, а не о
свойствах. Поэтому предлагаю - давайте закончим этот спор не победой, а разоружением.
Как бы ни казалась привлекательной идея любого проекта, очень важно прежде чем бросаться его воплощать во всех деталях, побыстрому как-либо проверить основные идеи. Это здорово помогает экономить время, отбросив явно невалидные предположения.
Вот ИИ, может очень быстро набросать скрипт строчек на 300 по абзацу описания и это очень на самом деле помогает.
Здесь я хотел показать результаты некоторых моих сессий вайб-кодинга в виде скриншотов и поделиться парочкой своих интерфейсных идей, которые возможно кто-то захочет использовать в своих приложениях.
Парсинг сайтов: как мы сделали rtfox-browser — форк undetected-chromedriver с поддержкой SOCKS5, HTTP, HTTPS
⚠️ Статья носит познавательный и развлекательный характер. Автор не призывает к нарушению правил сервисов.
Всем привет! Недавно мы столкнулись с темой парсинга. Начали искать инструменты — BeautifulSoup, Selenium, Playwright, Puppeteer. Сразу скажу: мы не конкуренты этим библиотекам, далее объясним почему.
Задание 5.7. Ввести значение X и, используя график функции, определить значение Y. Требуется заполнить блок-схему алгоритма.
График функции рисовать не требовалось, но мне захотелось это сделать. Далее рассказывается, как именно я решал эту задачу. Приведен полный исходный код трёх программ, написанных мной, а также их скриншоты. Разрешается включение кода в проекты под любой свободной лицензией без необходимости упоминания автора. Если кому-то эта статья или программы пригодились, мне было бы интересно об этом узнать.
Движок DPI на C: от захвата пакетов до классификации протоколов.
Мне было интересно узнать, какие байты бегают по моей домашней сети. Я не нашёл простого инструмента, который можно было бы собрать за вечер и понять от начала до конца — и пришлось написать свой, на C. Эта статья — рассказ о том, как работает Deep Packet Inspection.
Эпиграфы к разделам — цитаты из мультика «Шрек». (Не то чтобы я был фанат, но история уж очень подходящая. Если у вас есть идея что использовать в качестве источника цитат для следующей статьи — я открыт к предложениям!).
Написанное ниже — мои заметки по протоколу Reticulum. Я решил, что они могут оказаться кому-то полезными и публикую их по этой причине. Особенности работы протокола рассматриваются только с позиции клиента ввиду моих крайне скудных знаний по этой теме.
Reticulum — радиопротокол для mesh-сети, по словам автора — попытка создать альтернативный протокол базового уровня для сетей передачи данных.
Предположим, у нас есть библиотека на Си. А в этой библиотеке - какая-то структура, детали реализации которой мы хотим скрыть и поэтому удалили из публичных заголовочных файлов. Как правильно выделить память под экземпляр этой структуры? Данная статья пытается ответить на этот вопрос.
На форуме не очень много информации про систему сборки Nix. Nix прошел долгий путь, и внутри системы давно
идёт глубинная трансформация от центрального репозитория с обычными деривациями к графу из флейков.
Флейк заворачивает в себя уже известные нам деривации. Задача флейков – добавить гибкости и масштабируемости в экосистему, за счёт большей жёсткости и структурированности ее базовых элементов.
TLDR: Я создал Ant, небольшую (2 МБ) среду выполнения JavaScript. Полный исходный код, а также тесты и документацию можно найти на моем github.
Когда я начал этот проект в начале ноября, у меня была простая идея: а что, если я смогу создать движок JavaScript, достаточно маленький, чтобы его можно было встроить в программу на C, но достаточно полный, чтобы на нём можно было запускать реальный код? Что-то, что можно было бы распространять, не таская с собой сотни мегабайт V8 или Node. Я уже пробовал это раньше с минимальными копиями Deno, но этого было недостаточно.
Я не думал, что это займет месяц. Я не думал, что это будет возможно за месяц. Но вот в чём дело – когда создаёшь что-то без сроков, ты просто продолжаешь работать.
При эксплуатации конвекционных ротационных печей возникла проблема с ремонтом шкафов управления и панелей оператора. Во-первых стоят дорого, во-вторых, после ввода санкций, многие компоненты официально перестали поставляться и стали еще дороже… Поэтому возникла идея собрать свой шкаф управления с панелью оператора. Есть готовое решение от КИП-Сервис - BakeControl https://kipservis.ru/control_box/BakeControl.htm. Уверен, что их решение прекрасно работает. Но использованный контроллер явно не позволяет хранить большое количество данных с прорисовкой режимов работы в виде графиков и возможностью удаленного подключения для редактирования рецептов и режимов печи. А самое главное — нет возможности самим изменить программу для своих специфических задач. Поэтому решил сделать свою систему управления на доступных устройствах, что вдобавок к указанным преимуществам, снимает зависимость от производителя и уменьшает стоимость.
Хорошая новость – Neovim не стоит на месте и развивается. Многие вещи, которые раньше реализовывались громоздкими и тормозными плагинами, становятся встроенными.
После выхода первой статьи про svg-виджеты для tcl/tk прошло почти полгода. За это время пэт-проект возмужал и продолжает взрослеть. Напомним, что проект svgwidgets, примеры и интерпретаторы tcl/tk с необходимыми пакетами для разработки gui на базе svg-виджетов можно найти на github-е.
В проекте svgwidgets на github-е можно найти как версию интерпретатора tclexecomp как для Linux64 (папка tclexexcomp902), собранного из исходников tcl/tk-9.0.2, так и версию интерпретатора на базе tcl/tk-8.6 для платформы Linux64 (папка tclexecomp200).
К ранее созданному на github-е подкаталогу examples/CryptoArmPKCS_Test, в котором выложен исходный код криптографической утилиты для работы с электронной подписью cryptoarmpkcs, который предназначен для запуска на платформе Linux64 в среде tcl/tk-9, добавлена аналогичная папка для запуска утилиты cryptoarmpkcs в среде tcl/tk-8.6 на платформе Linux64 (папка examples/CryptoArmPKCS_Test_Tk86). Для запуска этой утилиты ничего дополнительного устанавливать на свой компьютер не требуется. Достаточно выбрать соответствующий интерпретатор из папки tclexecomp200 или tclexexcomp902 и выполнить файл mainguipkcs_svg.tcl из соответствующей папки ~/examples/CryptoArmPKCS_Test, например:
При подготовке этой статьи использовался графический интерпретатор tclexexcomp902, который поддерживает tcl/tk-9.
Напомним, что svg-виджеты могут создаваться каждый на отдельном холсте, а затем отображаться с помощью одного из диспетчеров компоновки (pack, grid, place), или могут создаваться все или группа виджетов на одном и том же холсте. При размещении нескольких svg-виджетов на одном холсте диспетчеры компоновки не используются, их размещение на холсте задается опциями –x и –y.
P. S.Пожалуйста, не судите мои цветовые предпочтения и дизайнерские способности слишком строго. Здесь демонстрируются возможности инструмента
Как известно, Android — это тоже Linux, основной особенностью которого является то, что он позволяет устанавливать приложения только на Java/Kotlin в формате apk, запускаемые через свою реализацию JVM — своего рода песочницу. Раз уж это Linux, то и запускать его можно через стандартные средства — LXC-контейнеры, как это делается в том же Waydroid. Главный плюс такого подхода в отличие от реального устройства — полный доступ к файловой системе, что эквивалентно рут-доступу. На реальном устройстве получить рут-права с помощью Magisk несложно, но это приводит к утрате данных вместе с ключом шифрования от sd-карты, хотя их можно и восстановить, если был бекап. Однако большей проблемой является то, что из-за этого перестают запускаться те же банковские приложения…
В прошлой статье я описал подключение ModBUS-устройств к Linux. Нынешняя статья – об использовании подключения для вывода данных и управления приборами с удобного пользовательского интерфейса.