• Памятка пользователям ssh

      abstract: В статье описаны продвинутые функций OpenSSH, которые позволяют сильно упростить жизнь системным администраторам и программистам, которые не боятся шелла. В отличие от большинства руководств, которые кроме ключей и -L/D/R опций ничего не описывают, я попытался собрать все интересные фичи и удобства, которые с собой несёт ssh.

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

      Оглавление:
      • управление ключами
      • копирование файлов через ssh
      • Проброс потоков ввода/вывода
      • Монтирование удалённой FS через ssh
      • Удалённое исполнение кода
      • Алиасы и опции для подключений в .ssh/config
      • Опции по-умолчанию
      • Проброс X-сервера
      • ssh в качестве socks-proxy
      • Проброс портов — прямой и обратный
      • Реверс-сокс-прокси
      • туннелирование L2/L3 трафика
      • Проброс агента авторизации
      • Туннелирование ssh через ssh сквозь недоверенный сервер (с большой вероятностью вы этого не знаете)
      Читать дальше →
    • Активация discard (TRIM) на Linux для SSD

      • Tutorial

      Современные накопители данных такие как SSD нуждаются в команде TRIM интерфейса ATA и для этого в ОС построенных на базе ядра Linux предусмотрено два метода управления на уровне файловых систем:


      • discard — устанавливается как опция монтировании файловой системы. Позволяет ядру Linux сразу отправлять команду TRIM на устройство, как только об этом сообщит файловая система.
      • fstrim — утилита которая запускается вручную или по расписанию как сервис ОС, отправляет список удаленных блоков с ФС для зачистки их на устройстве.

      Для включения fstrim достаточно активировать сервис fstrim.service в systemd, но лучше вместо сервиса, который будет висеть в памяти, использовать таймер fstrim.timer который будет запускать еженедельный TRIM.


      Пример включения сервиса:


      # Включение, старт и вывод статуса сервиса:
      systemctl enable fstrim.service && \
      systemctl start fstrim.service && \
      systemctl status fstrim.service

      Но этих мер недостаточно, если у вас файловые системы располагаются на томах LVM, а LVM в LUKS игла в яйце, яйцо в утке, утка в зайце:



      Читать дальше →
    • Забудьте про RGB и HEX

      • Tutorial
      В CSS существует несколько способов представления цветов. Один из них — система HSL. В этой статье я покажу вам, какие возможности она открывает для верстальщика.
      Читать дальше →
    • Создание Python-обвязки для библиотек, написанных на C/C++, с помощью SIP. Часть 2

      • Tutorial
      В первой части статьи мы рассмотрели основы работы с утилитой SIP, предназначенной для создания Python-обвязок (Python bindings) для библиотек, написанных на языках C и C++. Мы рассмотрели основные файлы, которые нужно создать для работы с SIP и начали рассматривать директивы и аннотации. До сих пор мы делали обвязку для простой библиотеки, написанной на языке C. В этой части мы разберемся, как делать обвязку для библиотеки на языке C++, которая содержит классы. На примере этой библиотеки мы посмотрим, какие приемы могут быть полезны при работе с объектно-ориентированной библиотекой, а заодно разберемся с новыми для нас директивами и аннотациями.
      Читать дальше →
    • Моя шпаргалка по pandas

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

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



      Нельзя сказать, что это — исчерпывающий список возможностей pandas, но сюда входят функции, которыми я пользуюсь чаще всего, примеры и мои пояснения по поводу ситуаций, в которых эти функции особенно полезны.
      Читать дальше →
      • +47
      • 31.7k
      • 8
    • Настраиваем простой VPN с WireGuard и Raspberry Pi в качестве сервера

      • Translation
      • Tutorial
      Поскольку WireGuard станет частью будущего ядра Linux 5.6, я решил посмотреть, как лучше всего интегрировать этот VPN с моим LTE-маршрутизатором/точкой доступа на Raspberry Pi.

      Оборудование


      • Raspberry Pi 3 с модулем LTE и публичным IP-адресом. Здесь будет VPN-сервер (далее в тексте он называется edgewalker)
      • Телефон на Android, который должен использовать VPN для всех коммуникаций
      • Ноутбук Linux, который должен использовать VPN только внутри сети

      Каждое устройство, которое подключается к VPN, должно иметь возможность подключаться ко всем другим устройствам. Например, телефон должен иметь возможность подключаться к веб-серверу на ноутбуке, если оба устройства являются частью сети VPN. Если настройка получится достаточно простой, то можно подумать о подключении к VPN и десктопа (по Ethernet).
      Читать дальше →
      • +19
      • 20.1k
      • 2
    • Полезные советы по Python, которых вы ещё не встречали

      • Translation
      Написано очень много статей, посвящённых интересным возможностям Python. В них идёт речь о распаковке списков и кортежей в переменные, о частичном применении функций, о работе с итерируемыми объектами. Но в Python есть гораздо больше всего интересного. Автор статьи, перевод которой мы сегодня публикуем, говорит, что хочет рассказать о некоторых возможностях Python, которыми он пользуется. При этом описания этих возможностей, подобного тому, которое приведено здесь, ему пока не встречалось. Возможно, что и вы о них тоже ещё нигде не читали.


      Читать дальше →
      • +60
      • 29.5k
      • 7
    • Создание архитектуры программы или как проектировать табуретку

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

      К моему удивлению оказалось, что на вроде бы актуальный вопрос: «Как построить хорошую/красивую архитектуру ПО?» — не так легко найти ответ. Не смотря на то, что есть много книг и статей, посвященных и шаблонам проектирования и принципам проектирования, например, принципам SOLID (кратко описаны тут, подробно и с примерами можно посмотреть тут, тут и тут) и тому, как правильно оформлять код, все равно оставалось чувство, что чего-то важного не хватает. Это было похоже на то, как если бы вам дали множество замечательных и полезных инструментов, но забыли главное — объяснить, а как же «проектировать табуретку».

      Хотелось разобраться, что вообще в себя включает процесс создания архитектуры программы, какие задачи при этом решаются, какие критерии используются (чтобы правила и принципы перестали быть всего лишь догмами, а стали бы понятны их логика и назначение). Тогда будет понятнее и какие инструменты лучше использовать в том или ином случае.

      Данная статья является попыткой ответить на эти вопросы хотя бы в первом приближении.
      Читать дальше →
    • Rollup: уже можно собирать приложения

        Rollup — это сборщик javascript приложений и библиотек нового поколения. Многим он давно знаком как перспективный сборщик, который хорошо подходит для сборки библиотек, но плохо подходит для сборки приложений. Однако время идет, продукт активно развивается.

        Я впервые попробовал его в начале 2017 года. Он сразу понравился мне за поддержку компиляции в ES2015, treeshaking, отсутствием модулей в сборке и конечно простым конфигом. Но тогда это был сырой продукт, с небольшим числом плагинов и очень ограниченной функциональностью, и я решил оставить его на потом и продолжил собирать через browserify. Вторая попытка была в 2018 году, тогда он уже значительно оброс комьюнити, плагинами и функционалом, но все еще не хватало качества в некоторых функциях, включая watcher. И вот наконец в начале 2019 года можно смело сказать — с помощью Rollup можно просто и удобно собирать современные приложения.
        Читать дальше →
      • Как общаются машины — протокол MQTT


          В предыдущей статье мы разбирали протокол Modbus, являющийся стандартом де-факто в промышленности для M2M-взаимодействия. Разработанный в далеком 1979 году, он имеет ряд существенных недостатков, которые решает MQTT.

          Протокол MQTT достаточно молод (стандартизирован только в 2016 году), но уже успел получить широкое распространение в промышленности и IoT. Он был специально разработан максимально компактным, для нестабильных интернет-каналов и маломощных устройств, и позволяет гарантированно доставлять сообщения в случае потери пакетов и обрывов связи.

          Главные особенности протокола MQTT:

          • Компактный и легковесный — минимальные накладные расходы на пересылку данных, для экономии трафика.
          • Устойчивость к потерям — гарантированная доставка в условиях нестабильных сетевых подключений.
          • Асинхронный — позволяет обслуживать большое количество устройств, и не зависит от сетевых задержек.
          • Поддержка QoS — возможность управлять приоритетом сообщений и гарантировать доставку сообщения адресату.
          • Динамическая конфигурация — не требует предварительно согласования полей и форматов данных, может конфигурироваться «на лету».
          • Работает за NAT — клиенты могут находиться за NAT, только сервер (брокер) должен иметь реальный IP. Позволяет обойтись без VPN и пробрасывания портов.
          • Удобная адресация — поля данных имеют текстовые названия, понятные для человека. Не нужно запоминать цифровые адреса и битовые смещения.
          Читать дальше →
        • Семь неожиданных переменных Bash

          • Translation
          • Tutorial
          Продолжая серию заметок о менее известных функциях bash, покажу вам семь переменных, о которых вы могли не знать.

          1) PROMPT_COMMAND


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

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

          Попробуйте запустить это в новом шелле, и увидите, что произойдёт с сессией:

          $ PROMPT_COMMAND='echo -n "writing the prompt at " && date'
          Читать дальше →
        • Как основать производственный кооператив. Руководство для  фрилансера в ИТ-сфере (перевод)

          Привет, Хабр! Представляю вашему вниманию перевод статьи "A Technology Freelancer's Guide to Starting a Worker Cooperative " от Tech Co-op Network (North American Technology Worker Cooperatives).



          Примечание переводчика


          Для многих «кооператив» это что-то про строительство, гаражи или сельское хозяйство. Тем не менее, по этой модели в мире организованы многие компании в разных областях
          https://ru.wikipedia.org/wiki/Кооператив

          В последнее время я интересуюсь вопросами кооперации в ИТ и считаю, что, при определенных условиях, данная модель имеет существенные преимущества.



          А что думаете вы?

          • насколько данная модель применима в условиях России?
          • Какие плюсы и минусы?
          • Есть ли среди нас те, у кого был успешный или не успешный опыт создания ИТ-кооператива

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

          Содержание


          Зачем создавать производственный кооператив группе фрилансеров?
          Что такое производственный кооператив?
          Как создать производственный кооператив в сфере IT?
          Истории от производственных кооперативов технической сферы

          Зачем создавать производственный кооператив группе фрилансеров?


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

          Многие из нас, имея опыт как работы по найму, так и в статусе фрилансера, затем, став частью производственного кооператива, открыли для себя, что такая модель объединяет всё лучшее из обоих форматов занятости. Ты всё также пользуешься всеми привилегиями фрилансерства, и остаешься боссом самому себе, но тебе нет необходимости тянуть всё одному. Вот некоторые преимущества, которые открывает фрилансеру членство в производственном кооперативе:

          Читать дальше →
        • Tornado vs Aiohttp: путешествие в дебри асинхронных фреймворков

            Привет! Я Дима, и я довольно давно и плотно сижу на Python. Сегодня хочу показать вам отличия двух асинхронных фреймворков — Tornado и Aiohttp. Расскажу историю выбора между фреймворками в нашем проекте, чем отличаются корутины в Tornado и в AsyncIO, покажу бенчмарки и дам немного полезных советов, как забраться в дебри фреймворков и успешно оттуда выбраться.


            Читать дальше →
          • OpenVPN, о котором вы так мало знали

            • Tutorial

            OpenVPN, как много в этом слове. Мультиплатформенный, гибко настраиваемый, бесплатный VPN сервер с открытым исходным кодом, являющийся фактически стандартом "defacto" для организации доступа к внутренним корпоративным сетям. Большинство администраторов используют его с настройками по умолчанию или с типовыми конфигурациями широко описанными в разных HOW-TO. Но так ли прост OpenVPN, как он кажется на первый взгляд? В данной статье мы рассмотрим скрытые от глаз внутренние механизмы OpenVPN, которые кардинально меняют представление о его возможностях.

            Читать дальше →
          • Практические советы, примеры и туннели SSH

            • Translation
            • Tutorial

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

            Знание нескольких трюков ssh полезно любому системному администратору, сетевому инженеру или специалисту по безопасности.
            Читать дальше →
          • Немного внутренностей словарей в CPython (и PyPy)

              Внутреннее устройство словарей в Python не ограничивается одними лишь бакетами и закрытым хешированием. Это удивительный мир разделяемых ключей, кеширования хешей, DKIX_DUMMY и быстрого сравнения, которое можно сделать ещё быстрее (ценой бага с примерной вероятностью в 2^-64).

              Если вы не знаете количество элементов в только что созданном словаре, сколько памяти расходуется на каждый элемент, почему теперь (CPython 3.6 и далее) словарь реализован двумя массивами и как это связано с сохранением порядка вставки, или просто не смотрели презентацию Raymond Hettinger «Modern Python Dictionaries A confluence of a dozen great ideas». Тогда добро пожаловать.


              Впрочем, люди знакомые с лекцией, тоже могут найти немного подробностей и свежей информации, и для совсем новичков, не знакомых с бакетами и закрытым хешированием, статья тоже будет интересна.
              Читать дальше →
              • +24
              • 10.8k
              • 7
            • Распознаём тексты на Android Things с ABBYY RTR SDK и django

              • Tutorial

              Привет! Меня зовут Азат Калмыков, я студент второго курса ОП “Прикладная математика и информатика” Факультета компьютерных наук НИУ ВШЭ и стажёр в отделе мобильной разработки компании ABBYY. В этом материале я расскажу про свой небольшой проект, выполненный в рамках летней стажировки.



              Представьте себе небольшой конвейер. По нему едут товары или какие-то детали, на которых важно распознавать текст (возможно, это некий уникальный идентификатор, а может, и что-то более интересное). Хорошим примером будут посылки. Работу конвейера дистанционно контролирует оператор, который отслеживает неполадки и в случае чего решает проблемы. Что может ему в этом помочь? Девайс на платформе Android Things может быть неплохим решением: он мобильный, легко настраивается и может работать через Wi-Fi. Мы решили попробовать использовать технологии ABBYY и узнать, насколько они подходят для таких ситуаций — распознавания текста в потоке на “нестандартных устройствах” из категории Internet of Things. Мы сознательно будем упрощать многие вещи, так как просто строим концепт. Если стало интересно, добро пожаловать под кат.

              Читать дальше →
              • +23
              • 3.8k
              • 4
            • Как отличить шампунь от шампиньонов, а шампуры от шампанского… Elasticsearch — поиск товаров в магазинных базах данных

              Задача


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


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

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


              Читать дальше →
              • +24
              • 7.6k
              • 6
            • HighLoad Cup #2. Чемпионат для backend-разработчиков снова в строю



                Вы готовы к новым нагрузкам? Приглашаем всех любителей и профессионалов на чемпионат по проектированию и администрированию высоконагруженных сервисов HighLoad Cup #2!

                Начало соревнованию было положено еще в прошлом году. Тогда мы знали, что HighLoad Cup — это именно тот чемпионат, которого не хватало в ряде проектов Mail.Ru Group. В первом пилотном соревновании участвовало 449 человек. Было много кода и много пота как у самих организаторов, так и участников (8789 различных решений). Были нюансы в технической реализации, но главное, что всем понравилось! Организаторы провели множество ночей в датацентре, несколько выходных — в офисе. Готовы к этому снова! В конце статьи вы найдете полезные материалы от нас и от участников, которые помогут вам разобраться в механике и найти какие-то best practice-решения.

                На этот раз постарались подготовить для вас дельце посложнее. Кроме того, мы расширили аудиторию, теперь в соревновании могут принять участие и англоязычные пользователи. Присоединяйтесь к русскоязычному сообществу в Telegram. Там вы получите множество инсайтов по соревнованию :)



                Итак, добро пожаловать на борт!
                Читать дальше →
              • Prettier, ESLint, Husky, Lint-Staged и EditorConfig: инструменты для написания аккуратного кода

                • Translation
                Вы стремитесь к тому, чтобы писать аккуратный код, но не знаете с чего начать… Вы вчитываетесь в руководства по стилю, вроде этого от Airbnb, стараетесь следовать практическим рекомендациям ведущих специалистов… Вам приходится удалять неиспользуемый код? Приходится искать ненужные переменные? Вы пытаетесь выявлять неудачные паттерны, применённые в ваших программах? Например — хотите понять, читая хитросплетения кода некоей функции, возвратит ли она что-нибудь или нет. Звучит знакомо? Проблема заключается в том, что программисту очень тяжело и многое успевать, и многому учиться.

                Может быть вы — тимлид, под началом которого трудится команда разработчиков разного уровня? В вашей команде есть новые люди? Беспокоит ли вас то, что код, который они напишут, не будет соответствовать вашим стандартам? Проходят ли ваши дни в проверках чужого кода, когда эти проверки, в основном, касаются соблюдения стандартов, а не программной логики?



                Автор этого материала говорит, что он сталкивался со всем тем, чему посвящены только что заданные вопросы. То, с чем он столкнулся, утомляет и изматывает. Здесь он хочет рассказать об инструментах, правильное применение которых позволяет решить вышеописанные проблемы.

                А именно, здесь пойдёт речь о таких средствах как Prettier, ESLint, Husky, Lint-Staged, EditorConfig, об автоматизации форматирования и линтинга кода. Этот материал ориентирован, в основном, на React-разработку, но рассмотренные здесь принципы можно применить в любом веб-проекте. Вот репозиторий, где, кроме прочего, собрано то, о чём тут пойдёт речь.
                Читать дальше →