Pull to refresh
25
0
Пётр @artp

User

Send message

Продвинутое использование Гита или как выйти на пенсию на полгода раньше?

Reading time11 min
Views28K


Не знаю, на каком языке программирования вы пишете, но уверен, что используете Гит при разработке. Инструментов для сопровождения разработки становится всё больше, но даже самый маленький тестовый проект, я неизменно начинаю с команды git init. А в течение рабочего дня набираю в среднем ещё 80 команд, обращаясь к этой системе контроля версий.


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


На Хабр написано много статей о Гите, но они не уходят дальше официальной документации, а упрощать работу авторы предлагают самописными костылями. Я уверен, что изучать Гит нужно на конкретных примерах задач, а повышать эффективность работы с ним – стандартизированными средствами.


Кому будет полезна эта статья?


Вы уже освоили джентльменский набор Гита и готовы двигаться дальше? Существует 2 пути:


  1. Освоить сокращённые команды – алиасы. Они почти всегда составлены мнемонически и легко запоминаются. Забыть оригиналы команд проблематично, я легко их набираю, когда это требуется. Плюс не сбиваюсь с мысли, проверяя что-то в Гите в процессе написания кода.
  2. Узнать о дополнительных флагах к командам, а также их объединении между собой. Я понимаю, что кто-то ненавидит сокращения. Для вас тоже есть интересный материал в статье – как повысить полезность и удобство вывода команд, а также как решать не самые тривиальные, но часто встречающиеся на практике задачи.

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


Добро пожаловать под кат!

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

Платформа ARM и брокер MQTT, как современная основа решений для Интернета вещей

Reading time11 min
Views40K
Протокол MQTT, на текущее время, завоевал свою популярность и стал стандартом де факто в проектах, направленных на создание решений для Интернета вещей (IoT). Конечно, Интернет вещей – это определенная абстракция или, правильнее, концепция построения распределенных сетей устройств или машин. При этом, частные задачи взаимодействия машин Machine-to-Machine (M2M), уже сегодня эффективно решаются, включая и уровень подключения этих систем к Интернет, как для создания промышленных систем автоматики, так, например, и для построения систем «умного дома». Очевидно, что для критически важных систем требуется наличие локального арбитра или брокера и устройств, позволяющих отработать решение ситуации не зависимо от качества Интернет-подключения, а также в случае полного разрыва связи.

При этом, в качестве аппаратной платформы для запуска такого брокера MQTT, отлично себя зарекомендовали энергоэффективные, но от этого не менее производительные, микропроцессоры на базе архитектуры ARM. Такая взаимосвязь аппаратной платформы, протоколов обмена сообщениями и их программной реализации стала отправной точкой в стремительном прогрессе развития современных систем автоматизации. Далее рассмотрим подробнее аппаратные решения и программные компоненты для реализации одного из наиболее успешных протоколов обмена сообщениями в технических системах.


ClusterHAT review: Raspberry Pi cluster computer kit. Photo: MagPi magazine

Выходим в интернет за пределами РФ: (MikroTik<->Ubuntu) * GRE / IPsec

Reading time8 min
Views75K
Позволю себе опубликовать свой опыт применения сетевых технологий в меру моей испорченности для выхода в интернет из-за пределов РФ. Не будем рассуждать о том, зачем это нужно. Надеюсь, что все всем и так понятно.

Итак, у нас есть статический публичный IP адрес, который приходит Ethernet шнуром в MikroTik RouterBOARD 750G r3 (hEX). Пробуем собрать вот такую конструкцию.


Настройку L2tp линка в рамках этой статьи я не описываю, а на схеме он нарисован только потому, что в ней упоминается.
Читать дальше →

Linux in RAM: debirf way 2018

Reading time5 min
Views14K

Linux in RAM: debirf way


Do you want to have absolute disk speed nowadays, don’t you? Let's revise how it could be done with versioning and automation in 2018.


От модератора: нам в Песочницу пришла статья на английском языке. Мы её прочитали и и в качестве пятничного эксперимента решили опубликовать. Не судите строго, всем peace and happy Friday! Let's come together! Короче, фром зе боттом оф ауа хартс.
Читать дальше →

Создание тонкого клиента на базе дешевых одноплатных ПК

Reading time19 min
Views48K
Иногда требуется сделать хитрый тонкий клиент — с необычной авторизацией и минимумом затрат.

Проще всего для этого использовать Linux.

Для одноплатных пк на базе ARM широко распространен дистрибутив Armbian, который основан на Debian ветке.

Для экспериментов у меня в наличии была плата OrangePi One
image
и MicroSD карта на 2G — я решил сделать из этого тонкий клиент RDP с окном блокировки и без лишнего программного обеспечения.
Читать дальше →

Пишем модуль ядра Linux: GPIO с поддержкой IRQ

Reading time15 min
Views20K
Хабр, привет!

Данная статья посвящена разработке GPIO (General-Purpose Input/Output) модуля ядра Linux. Как и в предыдущей статье мы реализуем базовую структуру GPIO драйвера с поддержкой прерываний (IRQ: Interrupt Request).


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

Построение орбит небесных тел средствами Python

Reading time9 min
Views29K


Системы отсчёта для определения орбиты


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

Используя данное предположение, рассмотрим движение одной и той же точки в двух различных системах отсчета $K$ и $K^{'}$, из которых вторая движется относительно первой с произвольной скоростью $\vec{V(t)}=\dot{\vec{R(t)}}$, где $\vec{R(t)}$ радиус-вектор, описывающий положение точки начала системы координат $K^{'}$ относительно системы отсчета $K$).

Будем описывать движение точки в системе $K^{'}$ радиус-вектором $\vec{r^{'}}(t)$, направленным из начала координат системы $K^{'}$ в текущее положение точки. Тогда движение рассматриваемой точки относительно системы отсчета $K$ описывается радиус-вектором $\vec{r(t)}$:

$\vec{r}(t)=\vec{r^{'}}(t)+\vec{R}(t)$, (1)

а относительная скорость $\vec{v(t)}$

$\vec{v}(t)=\dot{\vec{r^{'}}}(t)+\dot{\vec{R}}(t)$,(2)
Читать дальше →

«Ручной» манипулятор

Reading time14 min
Views41K
Как-то раз, во время обучения на втором курсе университета, передо мной была поставлена задача: стряпать что-нибудь «этакое», дабы подтвердить высокое звание «будущего инженера-робототехника». На этой пафосной ноте я отправился в глубины сознания для поиска идей. После непродолжительного путешествия появилась мысль об устройстве, теорией создания которого хочу поделиться с общественностью.

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


Пакетная обработка фотографий в Blender

Reading time3 min
Views18K


Всем привет!

Свободно-распространяемый 3D-редактор Blender обладает потрясающими возможностями по созданию трехмерной графики, но это далеко не все, что он умеет делать. В данном туториале я хочу показать как с помощью этой замечательной программы делать быструю и качественную пакетную обработку фотографий для последующего использования их в создании анимации вращения (облет объекта, демонстрация со всех сторон, фото-360).

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

Получаем данные со счетчиков Меркурий 203.2Т по RS-485

Reading time3 min
Views34K


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

Учим wordpress (и не только) отрисовывать быстро Youtube плееры

Reading time4 min
Views6.5K
youtube-speedload

Я вспомнил сайт одного старого приятеля-программиста, у которого в ленте сайта один хип-хоп, лет 6 назад он плевался на скорость загрузки страниц: «да-да-да, надо переделать, да ничего сложного там нет...» а вот зашел сейчас — все по-старому :-) Не смотря на простые технические решения, допускаю, что не только у меня есть такой приятель. Поэтому эта маленькая техническая заметка.

Чтобы понимать, о какой проблеме мы говорим:
image

400kb скрипта base.js?

Остальное даже не смотрю.
После оптимизации даже без сжатия выигрышь будет в десяки раз и составит:
Читать дальше →

Работа с API КОМПАС-3D → Урок 11 → Простые текстовые надписи

Reading time6 min
Views4.4K
На предыдущих уроках цикла мы научились выводить текст в основную надпись. Сегодня поговорим о том, как выводить текст в сам документ. Мы рассмотрим простейшие примеры, а более сложные приемы покажем на следующих уроках.



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

Всё, что нужно знать о сборщике мусора в Python

Reading time7 min
Views132K
Как правило, вам не нужно беспокоиться о сборщике мусора и работе с памятью когда вы пишете код на Python. Как только объекты больше не нужны, Python автоматически освобождает память из под них. Несмотря на это, понимание как работает GC поможет писать более качественный код.

Менеджер памяти


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

Как только один из маленьких объект удаляется — память из под него не переходит операционной системе, Python оставляет её для новых объектов с таким же размером. Если в одном из выделенных блоков памяти не осталось объектов, то Python может высвободить его операционной системе. Как правило, высвобождение блоков случается когда скрипт создает множество временных объектов.
Читать дальше →

Лайфхаки изготовления двухслойных плат (ЛУТ)

Reading time8 min
Views66K

Потребность делать железо периодически возникает у многих технарей. Иногда задача позволяет нафигачить всё проводами на макетке, а иногда, к сожалению, нужно нечто посерьёзнее. Вот и меня однажды настигла потребность делать печатные платы… Лазерно-утюжная технология кустарного изготовления плат по началу сильно отталкивает своей рандомностью (на чём печатать, как греть, с какой силой давить, как отдирать, и т.д.), но друзья поделились опытом, и оказалось, что это действительно не так уж сложно. ЛУТ бесспорно дешевле любого другого варианта, и (внезапно) вполне подходит для двухслойных плат.


Кому интересно посложнее, подороже и поточнее, можно делать фоторезистом, но наша методика (основным элементом которой является особая бумага) позволяет стабильно прорабатывать шины 0.3/0.3 мм, так что в нашем сообществе бытует мнение что тян фоторезисты не нужны.


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


Под катом я поделюсь детерминированной методикой изготовления двухслойных печатных плат по технологии ЛУТ с различными резервными схемами на случай косяков. От идеи до включения. Будем работать с KiCad, Inkscape, наждачкой, утюгом, персульфатом аммония и гравёром.


Основы 3D-моделирования для 3D-печати

Reading time6 min
Views70K
3D-модель, которая в дальнейшем  будет распечатана на 3D-принтере отличается от 3D-модели, разработанной для литья или фрезерования. Связано это с техническими особенностями 3D-принтера, из которых нужно либо выжать максимум пользы, либо подстроиться под недостатки печати.

Из оговорок, отмечу, что данные рекомендации относятся в основном к методу 3D-печати FDM(FFF), при котором пластиковый пруток топится подвижным экструдером, формирующим деталь слой за слоем.

Разработка 3D-модели начинается с создания эскиза. Это может быть рисунок на бумаге, материальный прототип, мысленный образ и пр. На что важно обратить внимание при создании такого эскиза и самой модели разберем подробно.
Читать дальше →

Уроки 3D печати. Печать деталей с разной толщиной слоя от 3Dtool

Reading time2 min
Views7K
Здравствуйте, с вами компания 3Dtool! Сегодня мы решили проверить на практике возможность Slic3r, печатать отдельные объекты с разной высотой слоев и разными свойствами за один сеанс 3D-печати.


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

Как сжать загрузчик для STM8 до размера 18 байт в памяти FLASH

Reading time13 min
Views8K
В процессе поиска загрузчика для микроконтроллера STM8S103F3 было обнаружено, что имеющиеся загрузчики в основном написаны на ”C”, «крадут» значительный объем у FLASH памяти, переносят таблицу векторов прерываний.

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

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

— загрузчик должен был называться STM8uLoader;
— код должен быть написан на ассемблере (благо ассемблер законодательно пока не запрещен);
— загрузчик должен занимать минимально возможный объем во FLASH памяти, объем занимаемый в компьютере будем считать не ограниченным;
— загрузчик не должен перемещать таблицу векторов прерываний;
— загрузчик должен иметь минимальный функционал, весь основной функционал должен взять на себя компьютер;
— загрузчик должен передавать управление прикладной программе за разумное время после сброса/включения при отсутствии соединения с компьютером.

Первое условие было моментально выполнено, а вот над последующими требованиями пришлось потрудиться.
Читать дальше →

Печать матрицы, литьё

Reading time2 min
Views13K
Всем привет. Меня зовут Сергей.

Довольно часто использую 3D принтер в своей деятельности и часто пробую что-то новое. На глаза попалась технология печати матриц и литья в них. Меня это заинтересовало и я решил попробовать этот способ мелкосерийного производства.
Читать дальше →

Локальный веб-сервер под Linux, с автоматическим поднятием хостов и переключением версий PHP

Reading time4 min
Views49K
Скорее всего какие-то части этой статьи уже знакомы многим хаброжителям, но в связи с покупкой нового рабочего ноутбука я решил собрать все крупинки воедино и организовать удобное средство для разработки. Мне часто приходится работать со множеством маленьких проектов, с разными версиями PHP, часто переводить старые проекты на новые версии. В далёком прошлом, когда я был пользователем Windows то использовал OpenServer. Но с переходом на Linux мне нехватало той простоты создания хостов и переключений версий которые были в нём. Поэтому пришлось сделать еще более удобное решение на Linux =)

Цели


  1. Использовать текущий на момент написания статьи софт
  2. Чтоб разграничить локальные домены, будем использовать специальный домен .loc
  3. Переключения версий PHP реализуем через поддомен c помощью fast-cgi
  4. Автоматическое создание хоста с помощью vhost_alias и dnsmasq

Что имеем в итоге. При переходе на
56.test.loc
Apache запустит c версией PHP 5.6.36
/var/www/test.loc/public_html/index.php
Поменяв поддомен на
72.test.loc
будет запущен тот же файл но уже с версией PHP 7.2.7

Другие версии доставляются аналогичным описанным ниже способом.

Для создания еще одного сайта просто создаем в /var/www/ папку имеющую окончание .loc, внутри которой должна быть папка public_html являющаяся корнем сайта

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

Как построить IIoT архитектуру своими руками. Часть 2: «Вещи»

Reading time6 min
Views16K

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



Сейчас же начнем с самого первого уровня, непосредственно “вещей”, букве T из аббревиатуры IoT. С самого устройства, организации канала связи и использования протокола MQTT. Тренду IoT уже несколько лет, но по большей части представление о нем, как о лампочке и розетке, включающейся с телефона. Но на производстве, добыче, и в различных других индустриях десятками лет используются самые разнообразные сенсоры, значения с которых собираются в производственные SCADA. Всего-то подключить поток данных к интернету, и мы получаем тот самый IoT, точнее IIoT — индустриальный интернет вещей.

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

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity