• 6 мощных возможностей CSS, которые позволяют обойтись без JavaScript

    • Translation
    В последнее время часто сравнивают CSS и JavaScript, споря о применении этих технологий для решения определённых задач. Споры становятся жарче по мере появления новых замечательных возможностей CSS, которые позволяют упростить решение множества задач и отказаться при этом от JS.


    Читать дальше →
  • Рецепты uWSGI: преобразование документов с использованием LibreOffice

    • Tutorial
    Для приготовления преобразования документов нам понадобится LibreOffice, uwsgi-python, pylokit и webob. Можно также воспользоваться готовым образом. Но это только для запуска uWSGI-сервера, а для подключения к uWSGI-серверу будем использовать nginx.
    Читать дальше →
  • 8 продвинутых возможностей модуля logging в Python, которые вы не должны пропустить

    • Translation

    Понимайте свою программу без ущерба для производительности


    image


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


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

    Читать дальше →
    • +13
    • 5.6k
    • 4
  • CSS Grid понятно для всех

    • Tutorial

    Что такое Grid?


    Grid представляет собой пересекающийся набор горизонтальных и вертикальных линий — один набор определяет столбцы, а другой строки. Элементы могут быть помещены в сетку, соответственно строкам и столбцам.

    Поддержка браузерами


    В 2020 году поддержка браузерами достигает 94 %



    Grid контейнер


    Мы создаем grid контейнер, объявляя display: grid или display: inline-grid на элементе. Как только мы это сделаем, все прямые дети этого элемента станут элементами сетки.

    <body>
     <div class="row">
      <div class="row__item header">
       <h1>Header</h1>
      </div>
      <div class="row__item nav">
       <h1>Navbar</h1>
      </div>
      <div class="row__item article">
       <h1>Article</h1>
      </div>
      <div class="row__item ads">
       <h1>Ads</h1>
      </div>
     </div>
    </body>

    .row {
     display: grid;
     margin: auto;
     grid-template-rows: 60px 1fr ;
     grid-template-columns: 20% 1fr 15%;
     grid-gap: 10px;
     width: 1000px;
     height: 1000px;
     justify-items: center;
     justify-content: space-between;
     grid-template-areas:
     "header header header"
     "nav article ads"; 
    }

    grid-template-rows — это CSS свойство, которое определяет названия линий и путь размера функции grid rows.

    CSS свойство grid-row определяет с какой строки в макете сетки будет начинаться элемент, сколько строк будет занимать элемент, или на какой строке завершится элемент в макете сетки. Является сокращенным свойством для свойств grid-row-start и grid-row-end.

    Свойство CSS grid-gap является сокращенным свойством для grid-row-gap и grid-column-gap, определяющего желоба между строками и столбцами сетки.

    Свойство grid-template-areas определяет шаблон сетки ссылаясь на имена областей, которые заданы с помощью свойства grid-area.

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

    С помощью свойства grid-area мы можем назначить каждой из этих областей свое собственное имя. Именование областей еще не создает никакого макета, однако теперь у нас есть именованные области, которые мы можем в нем использовать.
    Читать дальше →
    • +7
    • 5.9k
    • 6
  • Использование таймеров systemd вместо заданий cron

    • Translation
    Сейчас я занимаюсь заменой моих cron-заданий на таймеры systemd. Я пользовался таймерами несколько лет, но обычно в тонкости их применения особо не углублялся, разбираясь лишь с тем, что нужно было для выполнения интересующей меня задачи. Недавно я работал над серией материалов про systemd и узнал о том, что systemd-таймеры обладают некоторыми очень интересными возможностями.



    Эти таймеры, как и задания cron, могут, в заданное время, вызывать выполнение различных действий в системе. Например — запуск скриптов командной оболочки или программ. Таймеры могут срабатывать, например, раз в день, причём — только по понедельникам. Ещё один пример — срабатывание таймера каждые 15 минут в рабочее время (с 8 утра до 6 вечера). Но таймеры systemd могут кое-что такое, что недоступно заданиям cron. Например, таймер может вызвать скрипт или программу через заданное время после некоего события. Таким событием может быть загрузка системы или запуск systemd, завершение предыдущей задачи или даже завершение работы сервиса, вызванного ранее по таймеру.
    Читать дальше →
  • Eще один бэкап — больше, чем скрипт, проще, чем система

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



      Добрый день, Habr!
      Меня зовут Наталья. Я тимлид группы администраторов приложений в НПО «Криста». Мы Ops для группы проектов нашей компании. У нас довольно своеобразная ситуация: мы устанавливаем и сопровождаем наше ПО как на серверах нашей компании, так и на серверах, расположенных у клиентов. При этом бэкапить сервер целиком нет необходимости. Важны лишь «существенные данные»: СУБД и отдельные каталоги файловой системы. Конечно, клиенты имеют (или не имеют) свои регламенты резервного копирования и часто предоставляют некое внешнее хранилище для складывания туда резервных копий. В этом случае после создания бэкапа мы обеспечиваем отправку во внешнее хранилище.

      Какое-то время для целей бэкапа мы обходились bash-скриптом, но по мере разрастания вариантов настроек пропорционально росла и запутанность этого скрипта, и в один прекрасный момент мы пришли к необходимости его «разрушить до основанья, а затем....».
      а как же готовые решения?
    • Динамическое определение класса в Python

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

        Метакласс type


        Класс type часто используется для получения типа объекта. Например так:

        h = "hello"
        type(h)
        <class 'str'>

        Но у него есть другое применение. Он может инициализировать новые типы.
        Читать дальше →
      • Современные решения старых CSS-задач (1 часть): Удержание футера внизу страницы

        • Translation

        Приветствую. Представляю вашему вниманию перевод статьи «Keep the Footer at the Bottom: Flexbox vs. Grid», опубликованной 8 апреля 2020 года автором Stephanie Eckles



        Это первая статья из серии, посвящённой ознакомлению с современными способами решения CSS-проблем, с которыми я сталкивалась на протяжении более 13 лет в роли фронтенд-разработчика.


        В течение многих лет я регулярно возвращалась к этой статье Matthew James Taylor за способом удержания футера страницы в нижней её части, даже если высота основного содержимого меньше высоты окна. Данный метод основывался на явном задании высоты футера, что являлось не масштабируемым, но очень хорошим решением (до появления Flexbox).

        Читать дальше →
      • Чего я не знал о CSS

        • Translation
        Рисовать сайты я учился по старинке: глядя на исходный код и пытаясь воспроизвести увиденное. Плюс взял странную книгу для невидимых вещей (типа PHP/MySQL) — и вперёд.

        Это ещё в 1999 году, когда мы писали <font size="4" color="#000000"> и т. д., а DHTML был модным.

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

        Вот некоторые вещи, которых я не знал, но хотел бы узнать раньше.
        Читать дальше →
      • Используем nftables в Red Hat Enterprise Linux 8

        • Translation

        Статья подготовлена в преддверии старта курса «Администратор Linux»





        В Red Hat Enterprise Linux 8 приоритетным низкоуровневым решением является nftables. В этой статье мы поговорим о том, как начать использовать nftables. Наиболее актуальной она будет для системных администраторов и DevOps-специалистов. Там, где это имеет смысл, мы поговорим о различиях между nftables и его предшественником — iptables.


        Для начала необходимо отметить, что nftables – это userland-утилита, nft и подсистема ядра. Внутри ядра она строится на базе подсистемы netfilter. В этой статье мы будем говорить о взаимодействии пользователя с утилитой nft.


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

        Читать дальше →
      • 5 лучших сервисов временной почты: личный опыт

        Сделать сервис временной почты по-настоящему комфортным для себя — задача не из легких. Казалось бы, что сложного: загуглил запрос “временная почта”, получил кучу сайтов в выдаче, выбрал ящик и пошел дальше в Интернет по своим делам. Но когда есть необходимость пользоваться временной почтой чаще, чем раз в год, лучше выбрать такой сайт внимательнее. Делюсь своим опытом в виде рейтинга 5 сервисов временной почты, которыми я пользовался.

        Что такое временная почта?


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

        Чтобы создать такую почту, нужно зайти на сайт провайдера услуги и нажать кнопку “Получить”. В целом, каждый сайт временной почты предоставляет
        Читать дальше →
      • Что лучше – Oracle или Redis или Как обосновать выбор платформы

          – Это ж надо, — ни к кому не обращаясь, громко сказала она. – Это ж надо! Так прямо и написано – главной задачей общества является извлечение прибыли в интересах акционеров. Ну вы подумайте! Ничего не боятся!

          Юлий Дубов, «Меньшее зло»

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



          Конечно, СУБД так никто не сравнивает, ибо их сильные и слабые стороны хорошо известны. Как правило, сравнению подлежат платформы, решающие какую-либо прикладную задачу. В статье я покажу методику, которая при этом используется, на примере баз данных как предмета, не понаслышке знакомого читателям Хабра. Итак,
          Читать дальше →
        • Компиляторная бомба: 29 байт кода → 16 ГБ .exe

            Достойный наследник ZIP-бомбы и PNG-бомбы (которая в своё время положила Хабр) — компиляторная бомба, которая генерирует огромный бинарник из нескольких строчек кода. Наилучший на сегодня вариант предложил в 2016 году пользователь StackExchange под ником Digital Trauma (последняя версия протестирована в 2020 году). Код на C:

            main[-1u]={1};

            Это 14 байт. По условиям конкурса к результату добавляется 15 обязательных байт (дополнительный параметр для компилятора).
            Читать дальше →
          • Настраиваем DRBD для репликации хранилища на два CentOS 7 сервера

            • Translation
            Перевод статьи подготовлен в преддверии старта курса «Администратор Linux. Виртуализация и кластеризация».




            DRBD (Distributed Replicated Block Device — распределённое реплицируемое блочное устройство) представляет собой распределенное, гибкое и универсально реплицируемое решение хранения данных для Linux. Оно отражает содержимое блочных устройств, таких как жесткие диски, разделы, логические тома и т.д. между серверами. Оно создает копии данных на двух устройствах хранения для того, чтобы в случае сбоя одного из них можно было использовать данные на втором.

            Можно сказать, что это нечто вроде сетевой конфигурации RAID 1 с дисками, отражаемыми на разные сервера. Однако оно работает совсем не так, как RAID (даже сетевой).
            Читать дальше →
          • Chromebook: заметки реального пользователя


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

              Мне приходилось знакомиться с операционными системами, как вполне привычными (Windows, Linux, MacOS), так и с экзотикой (OS/2, QNX, Solaris, KolibriOS, ReactOS и подобными). Каждый раз я встречался и положительными, и отрицательными сторонами каждой из них. Перечислять их смысла нет, каждый делает выбор самостоятельно. Но для себя я определил некоторое количество критериев, которым должен соответствовать мой идеальный вариант операционной системы.
              Читать дальше →
            • 8 трюков в Python, используемых опытными программистами

              • Translation
              image

              Вот восемь изящных приемов Python, которые, я уверен, вы еще не видели. Примените эти приемы в своем коде на Python, чтобы сделать его более лаконичным и производительным!

              1. Сортировка объектов по нескольким ключам


              Предположим, мы хотим отсортировать следующий список словарей:

              people = [
              { 'name': 'John', "age": 64 },
              { 'name': 'Janet', "age": 34 },
              { 'name': 'Ed', "age": 24 },
              { 'name': 'Sara', "age": 64 },
              { 'name': 'John', "age": 32 },
              { 'name': 'Jane', "age": 34 },
              { 'name': 'John', "age": 99 },
              ]

              Но мы не просто хотим сортировать их по имени или возрасту, мы хотим отсортировать их по обоим полям. В SQL это будет такой запрос:

              SELECT * FROM people ORDER by name, age

              На самом деле существует очень простое решение этой проблемы, благодаря гарантии Python, что функции сортировки обеспечивают устойчивость сортировки. Это означает, что элементы, которые сравниваются, сохраняют свой первоначальный порядок.
              Читать дальше →
            • 5 современных альтернатив старым инструментам командной строки Linux

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



              В повседневной работе в Linux / Unix мы используем множество инструментов командной строки — например, du для мониторинга использования диска и системных ресурсов. Некоторые из этих инструментов существуют уже давно. Например, top появился в 1984 году, а первый релиз du датируется 1971 годом.

              За прошедшие годы эти инструменты были модернизированы и портированы на разные системы, но в целом далеко не ушли от своих первых версий, их внешний вид и usability также сильно не изменились.

              Это отличные инструменты, которые необходимы многим системным администраторам. Однако сообщество разработало альтернативные инструменты, которые предлагают дополнительные преимущества. Некоторые из них просто имеют современный красивый интерфейс, а другие значительно улучшают удобство использования. В этом переводе расскажем о пяти альтернативах стандартным инструментам командной строки Linux.
              Читать дальше →
            • Архитектура ИТ решений. Часть 1. Архитектура предприятия

                I. Вступление

                Архитектура распределяет массы и объемы.
                Вдохновение превращает инертный камень в драму.
                Ле Корбюзье.
                Недавно столкнулся со следующей ситуацией, одна крупная ИТ компания подбирала для себя архитектора, с целью доработки компьютерной платформы «собственного исполнения». Такая работа, естественно, требовала привлечения специалиста высокой квалификации. А как это сделать дешево и сердито, чтобы призванный варяг был «и чтец и жнец и на дуде игрец»? Решили без всяких излишеств разработчика ПО, поименовать архитектором, и заполучить помимо кодировщика, еще и профессионала, способного разобраться с чужими решениями, до проектировать их на свое усмотрение, принимать самостоятельные решения и т.п…

                Когда стали выяснять, а как же в организации вообще обстоит дело с архитектурой, обозначились следующие тенденции. Есть ряд высококвалифицированных разработчиков, позиционируемых как архитекторы. Помимо непосредственно создания кода, они выполняют достаточно низкоуровневое проектирование различных технологических систем и задают вектор и горизонт их развития. Решения представлены ими в основном в виде текстовых описаний, разбавленных небольшим количеством схем, в основном производных от диаграмм компонентов. Каждый из архитекторов представляется уникальным и эксклюзивным носителем знаний, а по сути — является узким местом в процессе производства программных продуктов. Ведь на практике без его постоянных уточняющих консультаций, воспользоваться результатом евонной деятельности практически невозможно. Полная, логически выстроенная, структурированная картинка сложного решения есть лишь в его голове.
                Читать дальше →
                • +9
                • 62.1k
                • 7
              • Почему WSL 2 в 13 раз быстрее, чем WSL: впечатления от Insider Preview

                • Translation
                Microsoft готовит релиз Windows May 2020 Update (20H1). Это обновление будет содержать несколько приятных улучшений пользовательского интерфейса, но для разработчиков и других посвященных важнее то, что в новой версии Windows появится WSL 2 (Windows Subsystem for Linux). Это актуальная информация для тех, кто хотел перейти на ОС Windows, но никак не решался.

                Dave Rupert установил WSL 2 на свой 13-дюймовый ноутбук Surface и первые результаты
                приятно удивили:


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