• Запасной вариант для Let's Encrypt — бесплатные автоматические УЦ

      Для многих Let's Encrypt стал неотъемлемой частью веб-разработки, а автоматическое обновление сертификата каждые 90 дней — рутинной процедурой. Фактически, сейчас это самый популярный удостоверяющий центр в интернете. Это великолепно, но и опасно.

      Возникает вопрос: а что, если серверы Let's Encrypt временно перестанут работать? Не хочется думать о возможных причинах сбоя. Но желательно предусмотреть запасной вариант. То есть такой же удобный автоматизированный центр бесплатной сертификации.

      К счастью, запасные варианты есть. Как минимум два. Такие же бесплатные автоматизированные УЦ, созданные по образцу Let's Encrypt.
      Читать дальше →
    • Особенности уплаты налогов самозанятыми IT-фрилансерами

      Решил попробовать новый налоговый режим и озадачился порядком расчета и уплаты налогов при работе через фриланс биржу:


      • Кто будет являться моим контрагентом — биржа или заказчик (4% или 6% налог соответственно)?
      • Налоговой базой является сумма, полученная биржей от заказчика, или полученная мной от биржи?
      • Облагается ли налогом комиссия биржи за вывод денежных средств?
      • Что является датой получения дохода — дата зачисления на баланс аккаунта фриланс биржи или дата вывода? (При получении дохода в иностранной валюте нужно посчитать рублевый эквивалент по курсу ЦБ на день получения)
      • Можно ли выводить деньги по итогам месяца или нужно выводить по каждой сделке отдельной транзакцией?

      Так как беглое гугление результатов не дало, ваш покорный слуга обратился с вышеуказанными вопросами в ФНС (Федеральная налоговая служба). И так: если вам как и мне хочется сразу начать платить налоги правильно — добро пожаловать под кат.

      Читать дальше →
    • Возможности SQLite, которые вы могли пропустить

        Если вы используете SQLite, но не следите за его развитием, то возможно некоторые вещи, позволяющие сделать код проще, а запросы быстрее, прошли незамеченными. Под катом я постарался перечислить наиболее важные из них.
        Читать дальше →
      • Тренируемся дома: отжимания по программе Пола Уэйда

        • Translation

        image


        Представляю программу Тюремных Тренировок Пола Уэйда. Начнём с серии классических упражнений со своим весом для верхней части тела — отжиманиям.


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


        Серия сосредоточена на цепочке из 10 последовательных упражнений. Когда освоите одно упражнение, то перейдёте к следующему и так далее…
        Мы называем базовые упражнения как «10 уровней», и достигнув 10 уровня, вы станете сильнейшим настолько, насколько это возможно для человека в этих движениях. По этой причине, последняя ступень именуется «уровнем мастера». Вам станет понятнее, как это работает, если дополнительно ознакомитесь с книгой Тренировочная Зона (Издательство Питер).

        Читать дальше →
      • Клуб анонимных Дедов Морозов 2020–2021 на Habr

          КДПВ На дворе уже ноябрь и это говорит о том, что очередной високосный год наконец-то подходит к концу и приближается Новый Год! Приближение этого светлого, доброго, семейного праздника ознаменует старт очередного сезона, традиционной для Хабра забавы, Анонимный Дед Мороз!
          Читать дальше →
        • Делаем поиск в веб-приложении с нуля

          • Tutorial
          В статье «Делаем современное веб-приложение с нуля» я рассказал в общих чертах, как выглядит архитектура современных высоконагруженных веб-приложений, и собрал для демонстрации простейшую реализацию такой архитектуры на стеке из нескольких предельно популярных и простых технологий и фреймворков. Мы построили single page application с server side rendering, поддерживающее просмотр неких «карточек», набранных в Markdown, и навигацию между ними.

          В этой статье я затрону чуть более сложную и интересную (как минимум мне, разработчику команды поиска) тему: полнотекстовый поиск. Мы добавим в наш контейнерный рай ноду Elasticsearch, научимся строить индекс и делать поиск по контенту, взяв в качестве тестовых данных описания пяти тысяч фильмов из TMDB 5000 Movie Dataset. Также мы научимся делать поисковые фильтры и копнём совсем немножко в сторону ранжирования.

          Читать дальше →
          • +23
          • 7.4k
          • 1
        • Создание favicon для сайта 2020

          Что такое favicon и для чего он нужен?


          Favicon – это значок (иконка), который отображается во вкладке браузера, закладках, а также в сниппетах результатов поиска.

          image

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

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

          Какой формат использовать для favicon?


          Раньше в качестве основного формата использовали ICO. Особенность данного формата – мульти-размерность. Данный файл может хранить в себе несколько размеров иконки. На смену ICO пришел формат PNG. ICO все еще поддерживаемый, но большинство современных браузеров выбирают PNG формат иконки, который легче. Некоторые браузеры не могут выбрать правильный значок в файле ICO, что приводит к неправильному использования значка с низким разрешением.

          О каких платформах пойдет речь в этой статье?


          • Classic desktop browsers
          • Android Chrome
          • iOS Safari Web Clip
          • Mac OS
          • Windows

          Читать дальше →
        • Выбираем недорогой CDN. Обзор сервисов и тарифов

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

            После небольшого ресерча наш рейтинг недорогих CDN провайдеров возглавили BunnyCDN, BelugaCDN и OVH. Сравним их предложения.

            Читать дальше →
          • Как убрать из Git-репозитория файлы с конфиденциальной информацией

            • Translation
            Файлы проиндексированы, написано сообщение коммита, данные отправлены на сервер… И вдруг хочется повернуть время вспять. В коммит попал файл, которого там быть не должно. Когда такое случается, приходит время обращаться к поисковику.

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

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


            Удаление файлов с конфиденциальной информацией из Git-репозитория (изображение большого размера)
            Читать дальше →
          • 6 мощных возможностей CSS, которые позволяют обойтись без JavaScript

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


            Читать дальше →
          • «Просто похудеть» — непросто

              Интернет наводнен статьями о том, как похудеть "просто съедая меньше чем потратил" и отчетами об успешном опыте некоторых везунчиков. Чего нету (ну или очень мало) в интернете — это отчетов о том, как миллионы людей безрезультатно пытаются просто "съесть меньше", садясь на все новомодные диеты и неизменно возвращаясь к тому, с чего начинали, а иногда и скатываясь по шкале индекса массы тела в еще более красную зону.


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

              Хакнуть свой мозг
            • Вебсокеты на PHP. Часть 3. От чата до игры: Battle City

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

                Как обычно, в конце статьи ссылки на демонстрационную игру и исходный код на гитхабе.

                Содержание:
                • Поддержка вебсокетов браузерами
                • Разработка онлайн-игры
                • Благодарности
                • Демка и исходный код

                Читать дальше →
              • Уязвимости PHP-фреймворков


                  10 июня компания Digital Security провела онлайн-встречу по информационной безопасности Digital Security ON AIR. Записи докладов можно посмотреть на Youtube-канале.


                  По материалам докладов мы выпустим цикл статей, и первая из них — об уязвимостях PHP-фреймворков уже ждет под катом.

                  Читать дальше →
                • Нативный способ покрасить SVG-иконки

                    Когда вам нужна возможность менять цвет иконок через CSS, что вы делаете? Вариантов не так много.

                    Обычно используются либо шрифты иконок, либо исходный код SVG скачивается и вставляется в HTML вручную. Шрифт нужно оптимизировать, иначе пользователь загрузит разом все иконки без надобности. Работа с исходным кодом требует тяжелых DOM-операций и потенциально опасна.

                    Чтобы защититься от вредоносного кода SVG нужно «почистить». Встроенный в Angular санитайзер, к примеру, не работает с SVG и превращает их в пустую строку. Можно воспользоваться проверенным инструментом DOMPurify и подключить его с помощью нашей библиотеки ng-dompurify, о чем я подробно рассказывал.

                    Давайте посмотрим на еще один способ, доступный в современных браузерах, — тэг USE.


                    Читать дальше →
                  • Вы уверены, что пишете объектно-ориентированный код?

                    • Translation

                    Мы, PHP-разработчики, горды тем, что пишем на ООП-языке (можно легко здесь заменить PHP на C#, Java или другой ООП-язык). Каждая вакансия содержит требования про знание ООП. В каждом собеседовании спрашивают что-нибудь про SOLID или трех "китов" ООП. Но когда дело доходит до дела — мы получаем просто классы, наполненные процедурами. ООП проявляется редко, обычно в коде библиотек.


                    Обычное веб-приложение — это классы ORM-сущностей, которые содержат данные из строки в базе данных и контроллеры(или сервисы — неважно), содержащие процедуры работы с этими данными. Объектно-ориентированное программирование — оно про объекты, которые владеют собственными данными, а не предоставляют их для обработки другому коду. Отличная иллюстрация этого — вопрос, который был задан в одном чате: "Как я могу улучшить этот код?"

                    Читать дальше →
                  • Видеозаписи всех докладов с PHP Russia 2020 Online

                      Онтико, благодаря поддержке Badoo, опубликовали видеозаписи всех докладов PHP Russia 2020 Online в открытый доступ.

                      Конференция прошла 13 мая, в ней приняло участие более 5 000 PHP-разработчиков. Каждый из семи докладов и трех включений со специалистами из компаний-партнёров одновременно смотрели сотни человек. К закрытию количество участников не снизилось, и в среднем каждый участник посмотрел хотя бы один доклад. Для нас как для программного комитета конференции это значит, что мы собрали правильную программу.

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

                      И вот теперь эти доклады доступны всем желающим, так же как и на конференции с оригинальной дорожкой и с синхронным переводом от Skyeng. Бонусом, полученным от онлайн-формата, ко всем видео прилагается запись Q&A-сессии. Можно сказать, что впервые можно переслушать то, что обсуждали в кулуарах, или вообще узнать, о чем говорили, когда ты убежал на следующий доклад.


                      Чуть подробнее о каждом докладе
                    • Переезд в Иннополис



                        В 2017 году мы с семьёй переехали в Иннополис.

                        За 3 года жизни эйфория прошла и сформировалось какое-то устойчивое мнение об этом городе.

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

                        Меня никто не просил писать эту статью и тем более не платил за неё. В общем, это не заказная «приезжайте к нам, у нас тут классно». Пишу всё так, как вижу своими глазами.
                        Читать дальше →
                      • Интерполяция: рисуем гладкие графики средствами PHP и GD

                          Распространенной задачей для программиста является рисование графиков. Входными данными является массив точек (xi;yi). Как правило, мы знаем только некоторые значения — в определенных точках графика. Чтобы построить непрерывный график кривой необходимо прибегнуть к интерполяции или аппроксимации.



                          Интерполяция — построение кривой, проходящей через заданные точки.
                          Аппроксимация — приближение кривой к исходной, но не обязательно проходящей через заданные точки.

                          В этом топике я хочу продемонстрировать свою библиотеку для PHP, которая производит интерполяцию с помощью многочлена Лагранжа, C-сплайна и сплайна Акимы, а также аппроксимацию кривой Безье. Дополнительно в ней реализована отрисовка отрезка со сглаживанием (антиалиасингом).

                          Кратко рассмотрим методы интерполяция и аппроксимации.
                          Читать дальше →
                        • Инструменты гигантов: software development edition

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

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


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

                          Читать дальше →
                        • Мегафон продолжает вмешиваться в мой HTTP-трафик в 2020 году, отправлять рекламу, даже после получения запретов на это

                            Недавний пост «Вы видели людей, которые пользуются мобильными контент-подписками?» опять всколыхнул внутреннее недовольство отношением Мегафона ко мне и я решил рассказать про свою «войну» с зелёно-фиолетовым оператором и попытками оградиться от рекламы и вмешивания в мой HTTP-трафик.

                            Ситуация на текущий момент: Мегафон продолжает вмешиваться в мой HTTP-трафик, хотя имеет от меня прямой запрет на это. Продолжает отправлять мне рекламу, хотя также получал от меня неоднократно требования прекратить это.

                            Мотивация от оператора:
                            При заключении между нами договора, в нём был пункт, что Вы согласны на получение рекламы при использовании наших услуг.
                            Вместо выполнения Федерального Закона «О Рекламе», статья 18, п. 1, при обращениях к оператору с требованием прекратить распространять рекламу в мой адрес:
                            Рекламораспространитель обязан немедленно прекратить распространение рекламы в адрес лица, обратившегося к нему с таким требованием.
                            Мегафон подключает дополнительные услуги «отказа от рекламы» (у меня их с десяток), которые иногда не работают, и реклама продолжает приходить.



                            Например, после скриншота выше, сегодня получил очередную зелёно-фиолетовую рекламу.
                            Считаю что такого рода вещи должны предаваться гласности, так как дело не в том, что «проблема» решится (хотя до сих пор не решилась) для одного абонента, а в том что этот опыт поможет многим. Ведь по всем проблемным запросам смм Мегафона уводит клиента в личное общение и решений проблем не остаётся в паблике. Попробую это исправить.
                            С подписками, как оказалось, разобраться проще всего. Расскажу под катом про свой опыт и с ними, и с вмешательством в HTTP-трафик:

                            • почему вы видите сайты с подписками, даже если кликнули по объявлению в выдаче Google,
                            • размышления, много ли мобильные подписки приносят денег оператору,
                            • как Мегафон вмешивается в HTTP-трафик,
                            • про рекламу, от которой вы не можете отказаться,
                            • чеклист того что можно сделать, для минимизации рекламы, подписок и вмешательств в HTTP-трафик.
                            Читать дальше →