Как стать автором
Поиск
Написать публикацию
Обновить
0
0
Василий @Phantovas

Пользователь

Отправить сообщение

Как я включил свое ПО в реестр Минкомсвязи

Время на прочтение5 мин
Количество просмотров14K

Подробное описание всего процесса включения ПО в реестр программного обеспечения минкомсвязи от частного лица на личном опыте.

Читать далее

Да будет Хаос

Время на прочтение3 мин
Количество просмотров8.4K

В управленческой жизни часто слышишь: «наведите порядок», «ну и бардак», «мне нужны чёткие процессы!», «главное – прозрачность» и т.д. Принято считать, что хаос в управлении – это плохо, а порядок – хорошо.

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

Проблема не в наличии хаоса, а в отношении к нему. Раз считается, что хорошо – это порядок, то хаос автоматом получает оценку «плохо». Каждый руководитель носит в душе чувство вины (от лёгкой формы до тяжкого угнетённого состояния) за то, что в его периметре присутствует хаос.

Читать далее

Как принять участие в работе Open Source проектов на GitHub. Краткое руководство для начинающих

Время на прочтение5 мин
Количество просмотров16K

На GitHub размещены миллионы Open Source проектов, но для начинающих разработчиков бывает достаточно сложно поначалу разобраться в принципах их работы, а также в интерфейсе сайта. Это краткое руководство поможет участвовать в проектах с открытым кодом, которые размещаются на GitHub.

Адаптированный перевод статьи The beginner's guide to contributing to a GitHub project. Здесь приведены только общие рекомендации по работе с Open Source из визуального интерфейса GitHub. Обязательно ознакомьтесь с README выбранного вами проекта для уточнения деталей.

Читать далее

Вычитываем прошивку STM32

Время на прочтение7 мин
Количество просмотров53K

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

Flash Readout Protection (RDP) ключевой компонент в защите, включенный во все линейки микроконтроллеров. Он защищает системную прошивку, сохраненную во внутренней флэш памяти от вычитывания. В зависимости от линейки, могут быть включены дополнительные механизмы, такие как Memory Protection Unit (MPU) и привилегированные / непривилегированные режимы исполнения. Вместе, эти системы призваны повысить защищенность.

Авторы статьи пришли к выводу, что серия мк STM32F0 содержит ряд уязвимостей позволяющих в лаборатории с базовым оборудованием создать установку для вычитывания прошивки. Методы могут комбинироваться для достижения наилучшего результата или позволить работать в RDP level 2.

Узнать подробнее

15 супер полезных примеров команды find в Linux

Время на прочтение9 мин
Количество просмотров123K

Практические примеры, которые приведены в этой статье, помогут вам освоить очень эффективную и крайне полезную команду find.
Читать дальше →

Очередной универсальный интернет каталог средствами реляционной СУБД

Время на прочтение10 мин
Количество просмотров5.4K

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

Существует множество подходов к реализации таких требований. Это и nosql решения и механизмы работы с json в реляционных СУБД. До nosql эпохи, решать такие задачи приходилось средствами реляционных БД.

Основная причина по которой реляционные СУБД плохо подходят для решения таких задач это разнообразие характеристик товаров. Набор характеристик к примеру для одежды и смартфонов будет совершенно разный. В самом деле не создавать же для каждой категории товаров отдельную таблицу с со своим набором реквизитов.

По этой причине в большинстве случаев в реляционных БД используется EAV (Entity Attribute Value) модель данных в тех или иных вариациях.

Недостатков у такой модели множество. Чаще всего EAV модель критикуют чрезмерную сложность, так же за то, что по сути схема данных храниться в самих данных.

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

Рискуя навлечь на себя гнев сообщества хочу представить свой вариант реализации каталога. Это не совсем EAV, скорее его по мотивам.

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

Всё описанное далее предполагает использование СУБД Postgresql.

Читать далее

Модернизация настольной лампы лупы радиолюбителя-электронщика

Время на прочтение3 мин
Количество просмотров8.4K

Сегодня я расскажу про то, как я переделал свою старую настольную лампу-лупу в современный аксессуар радиолюбителя электронщика.
Могу предположить, что большинство из читающих эту статью, имеют похожий светильник и я по своему опыту могу сказать, что без него как без рук, тем более если зрение не 100%.
Читать дальше →

Делаем из смартфона websocket-пульт управления радиоуправляемой машинкой

Время на прочтение8 мин
Количество просмотров19K

Одной из самых увлекательных сторон работы с микроконтроллерами, лично для меня, является то, что вы можете создать свой собственный аппарат, управляемый по радиоканалу. Есть большое количество разных возможностей для удалённого управления устройствами. В этой же статье мы поговорим о том, как организовать такое управление с помощью микроконтроллера esp32.
Читать дальше →

OpenVPN от Ubiquiti до Mikrotik

Время на прочтение5 мин
Количество просмотров14K

Рано или поздно в любой системе начинают появляться какие-то новые компоненты, с которыми раньше не приходилось сталкиваться. Так и в моем случае в парке удаленных маршрутизаторов Mikrotik под моим управлением появилось некоторое количество устройств Ubiquity, которые тоже требовали удаленного управления. Для устройств Mikrotik давно был развернут VPN сервер L2TP/IPSEc и OpenVPN для особо сложных случаев, когда IPSEc отказывался работать от объекта заказчиков. Документация на Ubiquity показывала, что клиентом L2TP/IPSEc он быть не может, но вроде поддерживает OpenVPN. Данная статья – шпаргалка для решения подобных задач

Читать далее

Проектирование простой системы учёта товаров на небольшом складе

Время на прочтение8 мин
Количество просмотров6K

Задача соответствующего учёта складских остатков является достаточно актуальной и рассмотрена во множестве работ. Для этой цели использовано большое количество различных подходов. Однако тот подход, который мы собираемся рассмотреть в этой статье, является достаточно интересным, так как для этого используется разработка под нашу любимую Arduino IDE.
Читать дальше →

Просто о сложном — move в языке C++

Время на прочтение6 мин
Количество просмотров78K

Здравствуйте уважаемые читатели. Данная публикация адресована начинающим разработчикам С++ которые только становятся на путь высокой производительности и "отстрелянных конечностей". Опытные разработчики найдут здесь скорее повторение тех вещей, которые сами мучительно осваивали в те далекие времена, когда в языке С++ появилась возможность удобного перемещения объектов.

Многие из вас уже слышали и надеюсь использовали функцию move() в своих проектах. Если нет, то пришло время с ней познакомиться.

Вопрос: Опять этот move, сколько уже можно? Есть же множество опубликованного материала по этой теме?

Ответ: Да, есть много статей. В свое время учился по ним, в том числе и тут, на Хабре [1, 2]. Но мне все равно было не понятно, значит, учитывая статистику, непонятно также и некоторому количеству читателей.

Как обычно начинаются туториалы по move? Рассмотрим lvalue объект, ему соответствует rvalue объект, между ними есть оператор присваивания (=). Тут появляются ссылки, да не просто, а ссылки на lvalue, на rvalue и пошло-поехало. Мозг перегружается, статья пролистывается до конца. Поэтому попробую рассказать о move c другой стороны - в стиле "от практики к теории" - так, как хотел бы чтобы мне рассказали.

Читать далее

Реализация Smart Pointers в Delphi, и еще немного

Время на прочтение6 мин
Количество просмотров6.6K

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

Для начала приведу пример двух процедур: первая классическая, вторая использует новые типы. Дальше рассмотрим как это реализовано.

Читать далее

Как работает React: подробное руководство

Время на прочтение22 мин
Количество просмотров48K


Привет, друзья!


В этой статье я покажу вам, с чего начинается React.


Что это означает? Это означает, что мы разработаем мини-версию React, которая сможет выполнять следующий код:


import '../style.scss'
import MyReact from './my-react'

const buttonStyles = {
 border: 'none',
 outline: 'none',
 padding: '0.3rem 0.5rem',
 marginLeft: '0.5rem',
 backgroundImage: 'linear-gradient(yellow, orange)',
 borderRadius: '2px',
 boxShadow: '0 1px 2px rgba(0, 0, 0, 0.2)',
 cursor: 'pointer'
}

/** @jsx MyReact.createElement */
function Counter() {
 const [value, setValue] = MyReact.useState(1)
 const [count, setCount] = MyReact.useState(1)

 return (
   <section>
     <h1 className='title'>Hello from MyReact!</h1>
     <div className='box'>
       <input
         style='width: 80px; padding: 0.15rem 0.5rem;'
         type='number'
         value={value}
         onInput={(e) => {
           setValue(Number(e.target.value))
         }}
       />
       <button
         style={buttonStyles}
         onClick={() => {
           setCount((count) => count + value)
         }}
       >
         Increment
       </button>
     </div>
     <h2 className='subtitle'>
       Count: <span className='count-value'>{count}</span>
     </h2>
     <ul className='list'>
       {['React', 'from', 'scratch'].map((item) => (
         <li>{item}</li>
       ))}
     </ul>
   </section>
 )
}

MyReact.render(<Counter />, document.getElementById('app'))

Как вы могли догадаться, наша версия будет называться MyReact.


Исходный код проекта.


Скриншот:





Песочница:

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

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

Подключение энкодера к Ардуино и полнофункциональный код обработки для него

Время на прочтение5 мин
Количество просмотров61K

Энкодер - это устройство преобразования механического перемещения или угловых изменений положения в цифровой сигнал. В статье рассматривается самый популярный в DIY сообществе инкрементальный энкодер EC11 с кнопкой. При его вращении на выходах A и B формируются TTL сигналы в виде импульсов сдвинутые между собой по фазе на 90 градусов. Таким образом с его помощью, можно определить направление и скорость вращения, а так же рассчитать угол поворота. В отличие от потенциометров, KY-040 он надежный и долговечный.

Читать далее

Начинаем работать в STM32CubeMX. Часть 1

Время на прочтение4 мин
Количество просмотров218K
Часть 2
Часть 3

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



Я планировал написать несколько постов, рассмотрев несколько периферийных устройств микроконтроллера и их конфигурирование в STM32CubeMX. Но эти посты не заменяют фирменной документации и не претендуют на полноту. В них будут рассмотрены только некоторые, наиболее, на мой взгляд, типичные, примеры использования периферии STM32.
Надеюсь, кому-то этот материал будет полезен.
Итак, начнём

Адаптация Qt-приложений под мониторы высокой чёткости. Часть 1

Время на прочтение15 мин
Количество просмотров21K

В связи с техническим прогрессом рынок мониторов постоянно обновляется моделями с повышенным разрешением, плотностью пикселей и/или размером экрана. Году в 2010 стандартным монитором можно было считать экземпляр 19’’ c разрешением WXGA++ (1600*900) и фактической плотностью пикселей 97 DPI (dots per inch). Сейчас (2021 год) стандартным монитором, думаю, можно признать экземпляр 24’’ c разрешением Full HD (1920*1080) и плотностью пикселей 92 DPI. Под «стандартным» я понимаю тот монитор, который стоит на рабочем месте у большинства работающего люда: инженеры, бухгалтеры, переводчики и т.д. (при этом, конечно, «стандартность» — это субъективная и приблизительная оценка). Относительно новые и отчасти нишевые модели (для фотографов, видеографов, геймеров) имеют характеристики: 4K UHD (3840*2160) и 28’’ (157 DPI) или UWQHD (3440x1440) и 34" (109 DPI) или QHD (2560x1440) и 27" (109 DPI) или UWHD (2560x1080) и 29" (96 DPI). Таким образом, наблюдается рост в связанных группах признаков: разрешение+размер экрана, или разрешение+плотность пикселей, или даже разрешение+плотность пикселей+размер экрана. На рынке ноутбуков в плане экранов похожая ситуация – растет разрешение+плотность пикселей.

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

Что касается высокой чёткости (большой плотности пикселей), то в ОС Windows давно есть такие настройки, как масштабирование шрифта и изображений (масштаб экрана), которые применяются для увеличения слишком малых элементов GUI на мониторах с высокой чёткостью (High DPI). Также есть поддержка в платформе Qt (с нюансами, об этом далее). Однако способно ли Ваше, конкретное ПО их адекватно учитывать, применять?

Читать далее

Создание веб-компонентов с помощью Vue 3.2

Время на прочтение8 мин
Количество просмотров14K

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

Как разработчик Vue, в идеале мы хотели бы просто использовать наш фреймворк для создания сложных пользовательских интерфейсов. Но иногда мы оказываемся в описанной выше ситуации, работая с другим фреймворком JavaScript, таким как React или Angular, или используя внутреннюю систему рендеринга, такую как Rails или Laravel. Как мы можем создать многоразовый пользовательский интерфейс для различных вариантов внешнего интерфейса?

В Vue 3.2 у нас теперь есть решение этой проблемы: веб-компоненты на базе Vue!

Читать далее

Поиск с помощью регулярных выражений может быть простым и быстрым

Время на прочтение21 мин
Количество просмотров49K
В этой статье мы рассмотрим два способа поиска с помощью регулярных выражений. Один широко распространён и используется в стандартных интерпретаторах многих языков. Второй мало где применяется, в основном в реализациях awk и grep. Оба подхода сильно различаются по своей производительности:



В первом случае поиск занимает A?nAn времени, во втором — An.

Степени обозначают повторяемость строк, то есть A?3A3 — это то же самое, что и A?A?A?AAA. Графики отражают время, требуемое для поиска через регулярные выражения.

Обратите внимание, что в Perl для поиска строки из 29 символов требуется более 60 секунд. А при втором методе — 20 микросекунд. Это не ошибка. При поиске 29-символьной строки Thompson NFA работает примерно в миллион раз быстрее. Если нужно найти 100-символьную строку, то Thompson NFA справится менее чем за 200 микросекунд, а Perl понадобится более 1015 лет. Причём он взят лишь для примера, во многих других языках наблюдается та же картина — в Python, PHP, Ruby и т. д. Ниже мы рассмотрим этот вопрос более детально.

Наверняка вам трудно поверить приведённым данным. Если вы работали с Perl, то вряд ли подмечали за ним низкую производительность при работе с регулярными выражениями. Дело в том, что в большинстве случаев Perl обращается с ними достаточно быстро. Однако, как следует из графика, можно столкнуться с так называемыми патологическими регулярными выражениями, на которых Perl начинает буксовать. В то же время у Thompson NFA такой проблемы нет.

Возникает логичный вопрос: а почему бы в Perl не использовать метод Thompson NFA? Это возможно и следует делать, и об этом пойдёт далее речь.
Читать дальше →

Создание компонента Toggle

Время на прочтение12 мин
Количество просмотров22K

В рамках серии материалов GUI Challange, в данной статье Адам Аргайл демонстрирует один из способов создания очень маленького, но трудоёмкого компонента переключателя toggle с учётом цветовой схемы и предпочтений пользователя.

Читать далее

SQLite-песочница в браузере

Время на прочтение4 мин
Количество просмотров31K

Чего мне всегда не хватало, так это аналога JSFiddle для SQLite. Онлайн-песочницы, в которой можно быстро проверить SQL-запрос и поделиться с другими.

Вот чего хотелось:

— Возможность загрузить готовую базу, а не писать SQL для создания таблиц.
— Подключать как локальные базы, так и удаленные (по url).
— Сохранять базу и запросы в облаке.
— Бесплатно и без регистрации.
— Свежайшая версия SQLite.
— Минимализм.

В итоге сделал сам

Информация

В рейтинге
Не участвует
Откуда
Ставропольский край, Россия
Дата рождения
Зарегистрирован
Активность