Как стать автором
Обновить
29
0
Ivan Dudarev @trawl

Дилетант

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

Клуб анонимных Дедов Морозов 2020–2021 на Habr

Время на прочтение2 мин
Количество просмотров39K
КДПВ На дворе уже ноябрь и это говорит о том, что очередной високосный год наконец-то подходит к концу и приближается Новый Год! Приближение этого светлого, доброго, семейного праздника ознаменует старт очередного сезона, традиционной для Хабра забавы, Анонимный Дед Мороз!
Читать дальше →
Всего голосов 92: ↑91 и ↓1+133
Комментарии688

Делаем поиск в веб-приложении с нуля

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

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

Читать дальше →
Всего голосов 22: ↑20 и ↓2+23
Комментарии1

Создание favicon для сайта 2020

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

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


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

image

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

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

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


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

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


  • Десктопные браузеры
  • Chrome на Android
  • Иконка закладки в iOS (PWA)
  • macOS
  • Windows

Читать дальше →
Всего голосов 44: ↑42 и ↓2+46
Комментарии30

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

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

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

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


Удаление файлов с конфиденциальной информацией из Git-репозитория (изображение большого размера)
Читать дальше →
Всего голосов 44: ↑38 и ↓6+50
Комментарии19

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

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


Читать дальше →
Всего голосов 39: ↑33 и ↓6+39
Комментарии58

«Просто похудеть» — непросто

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

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


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

Хакнуть свой мозг
Всего голосов 157: ↑135 и ↓22+166
Комментарии638

Вебсокеты на PHP. Часть 3. От чата до игры: Battle City

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

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

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

Читать дальше →
Всего голосов 40: ↑33 и ↓7+26
Комментарии23

Уязвимости PHP-фреймворков

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


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


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

Всего голосов 28: ↑25 и ↓3+31
Комментарии21

Нативный способ покрасить SVG-иконки

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

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

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

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


Читать дальше →
Всего голосов 22: ↑21 и ↓1+22
Комментарии22

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

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

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


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

Читать дальше →
Всего голосов 19: ↑17 и ↓2+25
Комментарии32

Видеозаписи всех докладов с PHP Russia 2020 Online

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

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

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

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


Чуть подробнее о каждом докладе
Всего голосов 40: ↑40 и ↓0+40
Комментарии10

Переезд в Иннополис

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


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

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

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

Меня никто не просил писать эту статью и тем более не платил за неё. В общем, это не заказная «приезжайте к нам, у нас тут классно». Пишу всё так, как вижу своими глазами.
Читать дальше →
Всего голосов 171: ↑165 и ↓6+200
Комментарии480

Интерполяция: рисуем гладкие графики средствами PHP и GD

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



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

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

Кратко рассмотрим методы интерполяция и аппроксимации.
Читать дальше →
Всего голосов 80: ↑77 и ↓3+74
Комментарии23

Инструменты гигантов: software development edition

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

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


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

Читать дальше →
Всего голосов 6: ↑6 и ↓0+6
Комментарии1

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

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

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

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



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

  • почему вы видите сайты с подписками, даже если кликнули по объявлению в выдаче Google,
  • размышления, много ли мобильные подписки приносят денег оператору,
  • как Мегафон вмешивается в HTTP-трафик,
  • про рекламу, от которой вы не можете отказаться,
  • чеклист того что можно сделать, для минимизации рекламы, подписок и вмешательств в HTTP-трафик.
Всего голосов 179: ↑176 и ↓3+232
Комментарии288

Нужные HTTP-заголовки

Время на прочтение5 мин
Количество просмотров44K
Наши клиенты в Fastly любят манипулировать заголовками HTTP. Подбор правильной комбинации заголовков — одна из лучших вещей, какую вы можете сделать для безопасности своего сайта и значительного вклада в его производительность.

Большинство разработчиков знают о важных и нужных HTTP-заголовках. Самые известные — Content-Type и Content-Length, это почти универсальные хедеры. Но в последнее время для повышения безопасности начали использоваться заголовки вроде Content-Security-Policy и Strict-Transport-Security, а для повышения производительности — Link rel=preload. Несмотря на широкую поддержку в браузерах, лишь немногие их используют.

В предыдущей статье мы рассмотрели ненужные заголовки. Сейчас разберёмся, какие заголовки действительно следует настроить для своего сайта.
Читать дальше →
Всего голосов 29: ↑29 и ↓0+29
Комментарии5

Разворачиваем школьный учебный портал на Moodle и BigBlueButton

Время на прочтение14 мин
Количество просмотров37K
В конце марта 2020 маленькая камчатская школа столкнулась с той же проблемой, что и все школы нашей страны: как учить детей если они не могут ходить в школу?

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

Изучение федеральных порталов дало понимание, что имеющиеся уроки имеют слишком примитивное изложение тем, а те, что позволяют загружать свой материал скорее всего не переживут возросшую нагрузку. Поэтому были сформулированы требования к учебному порталу:
Читать дальше →
Всего голосов 15: ↑15 и ↓0+15
Комментарии28

PHP-Дайджест № 179 (21 апреля – 4 мая 2020)

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

Свежая подборка со ссылками на новости и материалы. В выпуске: 4 принятых RFC предложения для PHP 8, включая атрибуты (аннотации / декораторы), порция полезных инструментов, онлайн-конференции и митапы, видео, подкасты и многое другое.

Приятного чтения!


Читать дальше →
Всего голосов 57: ↑57 и ↓0+57
Комментарии25

Опыт создания сборок Linux под одноплатники с поддержкой обновлений

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

Введение


На данный момент, на рынке представлен большой ассортимент одноплатников на любой вкус по приемлемой цене.

Как правило, различные сборки от производителей, предназначены для оценки платформы и являются отправной точкой нового проекта, поэтому не всегда подходят под конкретные задачи. В задачах где требуется высокая надежность, перед разработчиком встает вопрос, как доработать дистрибутив и потом не поплатиться за это полной переработкой образа и системы обновления.
Читать дальше →
Всего голосов 82: ↑82 и ↓0+82
Комментарии65

Маленькие хитрости SSH

Время на прочтение6 мин
Количество просмотров41K
В этой статье собраны наши лучшие приемы для более эффективного использования SSH. Из нее вы узнаете как:

  • Добавить второй фактор к логину SSH
  • Безопасно пользоваться agent forwarding
  • Выйти из вставшей SSH сессии
  • Сохранить постоянный терминал открытым
  • Поделиться удаленной сессией терминала с другом (без Zoom!)

Добавление второго фактора к своему SSH


Второй фактор аутентификации к своим SSH соединениям можно добавить пятью разными способами:

  1. Обновить свой OpenSSH и использовать ключ шифрования. В феврале 2020 года в OpenSSH была добавлена поддержка ключей шифрования FIDO U2F (Universal Second Factor). Это отличная новая функция, но есть нюанс: только те клиенты и серверы, которые обновились до версии OpenSSH 8.2 и выше смогут пользоваться ключами шифрования, так как февральское обновление вводит для них новые типы ключей. Командой ssh –V можно проверить клиентскую версию SSH, а серверную — командой nc [servername] 22
Читать дальше →
Всего голосов 42: ↑42 и ↓0+42
Комментарии22

Информация

В рейтинге
Не участвует
Откуда
Калининград (Кенигсберг), Калининградская обл., Россия
Работает в
Дата рождения
Зарегистрирован
Активность

Специализация

Бэкенд разработчик
Средний
От 3 000 $
PHP
Linux
SQL
Nginx
Symfony
Laravel
PostgreSQL
MySQL