Портрет 4X_Pro
Был в Сети 30 окт. 2024 г., 09:34
Мультиблог
4X_Pro
Кратко о себе: Web-разработчик. Пишу на PHP, Python, JavaScript. Знаю Ruby и Go, со студенческих времён более-менее помню C и asm. Специализируюсь на ускорении загрузки сайтов и разработке ботов для Telegram. Linuxоид (использую Debian+LXDE). Сторонник IndieWeb, slow lifer.

Социальные сети


Новости сайта в Telegram

t.me/4x_pro

Компьютерное

Удаление файлов старше N дней

4X_Pro

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

find путь -type f -mtime +дни -print | xargs rm -f

Здесь find находит по указанному пути. все файлы со временем модификации более чем указанное количество дней назад, выводит их список, который передается утилите xargs, которая для каждого полученного аргумента вызывает rf -f. В случае, если команда выполняется через cron, пути нужно прописывать полностью, например:

/usr/bin/find ./ -type f -mtime +2 -print | /usr/bin/xargs /bin/rm -f

Как перейти на формат WebP с минимальными изменениями сайта

4X_Pro

Некоторое время назад появился новый формат для графических изображений — WebP. Этот формат обладает рядом преимуществ по сравнению с JPEG: поддерживает как сжатие с потерями, так и сжатие без потерь, а также прозрачность изображений (альфа-канал), и во многих случаях сжимает изображения эффективнее (на моих сайтах — изображения в WebP получаются 30-35% меньше). Но к сожалению, полностью перейти на этот формат пока не так просто. Во-первых, сейчас его полноценно поддерживают только Web-броузеры, работающие на основе WebKit, а Firefox и IE/Edge — нет. Во-вторых, исправить на уже существующем сайте расширения всех файлов с .jpg на .webp может быть весьма трудоемкой задачей. Но недавно я нашел интересное решение, которое предложил Vincent Orback на Github: использовать подмену JPEG на WebP с помощью mod_rewrite. Для этого добавим в .htaccess такие строки: Читать далее…

Безопасный редирект или как защититься от спамвертайзинга

4X_Pro
Сегодня получил письмо от хостера, в котором говорилось, что на один из моих сайтов поступила жалоба на спамвертайзинг, и приводился пример спамного письма. Из него выяснилось, что на самом деле спамом рекламируется совершенно другой сайт, а от моего используется только скрипт, который делал редирект со статусом 301 на указанный ему в параметрах адрес.
Таким образом, в современных условиях наличие на сайте скрипта, который позволяет делать редирект без какой-либо проверки, небезопасно. Возникла мысль, как можно его защитить, но при этом не слишком усложнять. Решение нашлось быстро: передаем в скрипт редиректа два параметра, один из которых — это сам URL, второй — хеш, который считается от URL и некоторой строки-ключа. Редирект происходит только тогда, когда рассчитанный на основе URL хеш совпадет с переданным, в остальных случаях выдается ошибка 404. (Естественно, при этом придется поправить все те места на сайте, где генерируется ссылка на скрипт с редиректом, чтобы рассчитать и добавить хеш.) В результате получаем вот такой скрипт: Читать далее…

Несколько советов, как делать резервные копии баз данных

4X_Pro

На первый взгляд, сделать резервную копию базы данных какого-либо сайта предельно просто, если есть доступ к утилите mysqldump и планировщику заданий cron. Добавляем в планировщик запись вида:

3 14 * * * /usr/bin/mysqldump -u root -pпароль имя_базы > путь/backup.sql

и все, каждый день в 3 часа 14 минут будет сниматься дамп. Время для резервного копирования следует выбирать так, чтобы в этот момент нагрузка на сервер была минимальной за сутки.
Но такое решение недостаточно надежно. Если база повредится, скажем, в 3:12, то дамп будет перезаписан пустым файлом.
Для защиты от этого имеет смысл сохранять перед снятием новой копии сохранять старую, а также делать отдельные копии через определенные промежутки времени. Например, я сохраяю еженедельную и ежемесячную, а чтобы меньше нагружать SQL-сервер, просто копирую файлы дампа: Читать далее…

Как отформатировать сумму и дату на JavaScript

4X_Pro

Недавно потребовалось вывести в Интернет-магазине сумму заказа с десятичными разделителями, причем сделать это с помощью JavaScript. Стал искать, есть ли встроенные средства для этого и обнаружил объект NumberFormat. В простейшем случае форматирование выполняется так: var str = new Intl.NumberFormat().format(value), где value — это число, которое нужно отформатировать. По умолчанию используются свойства системной локали, но можно и указать ее явно: new Intl.NumberFormat('ru-RU'), и хеш с опциями в качестве второго параметра. Напримр, new Intl.NumberFormat('ru-RU', { style: 'currency', currency: 'RUB', currencyDisplay: 'symbol'}) явно указывает, что нужно использовать форматирование, применяемое для денежных сумм, использовать валюту рубль и выводить не "руб.", а ₽. О других опциях можно узнать в справочнике.

Поскольку некоторые старые броузеры с этим объектом работать не умеют, рекомендую выполнять проверку с помощью такой функции:

function formatPrice(value) {
 if (Intl.NumberFormat) return new Intl.NumberFormat('ru-RU',{ style: 'currency', currency: 'RUB', currencyDisplay: 'symbol'}).format(value);
 else return value; // если броузер не поддерживает этот объект, оставляем все как есть, без обработки
}

Для форматирования даты используйте объект Intl.DateTimeFormat c аналогичным методом format.

Виртуальный шпионаж или Как узнать о человеке все

4X_Pro

Любой человек, ведущий более-менее активную жизнь в Сети так или иначе оставляет в ней свои следы. И вооружившись терпением и умением правильно пользоваться поисковыми системами, можно собрать о нем немало любопытной информации. Основной подход здесь такой: нужно тщательно проверять каждую новую зацепку, которую удается найти. Скажем, выполняя поиск по Email, находим профиль на форуме, и делаем поиск по логину и всем контактам профиля. Также следует помнить, что Интернет в целом является ненадежным хранилищем информации, поэтому рекомендуется на каждого человека заводить файл, в который сохранять всю найденную информацию в виде скриншота, ссылки и предполагаемой оценки достоверности. Вот несколько рекомендаций для различных исходных данных. Читать далее…

Adminer — легкая альтернатива phpMyAdmin

4X_Pro
Иногда бывает нужно выполнить на сайте несколько SQL-запросов, а ни SSH-доступ, ни PHPMyAdmin на хостинге по тем или иным причинам недоступны. Коненчо, можно загрузить и установить phpMyAdmin самостоятельно, но из-за его большого объема на загрузку и установку уходит достаточно много времени. В результате я стал искать какой-нибудь альтернативный скрипт, который состоял бы всего из одного файла и не требовал бы настройки, а только ввода логина/пароля. В итоге остановился на решении под названием Adminer. Это небольшой скрипт (около 200 Кб, если использовать английскую версию), который умеет показывать список и структуру таблиц, данные из них, выполнять SQL-запросы, делать экспорт и импорт данных. В общем, все необходимое для того чтобы быстро изучить и подправить базу данных сайта.

Редактор баз данных для Linux

4X_Pro
Долгое время для работы с базами данных MySQL (создания таблиц, редактирования данных, импорта, экспорта и т.п.) использовал замечательную программу HeidiSQL. Но увы, она существует только под Windows. Поэтому когда в очередной раз перебрался под Linux, встал вопрос о ее замене. Рассмотрев несолько вариантов, остановился на DBeaver (который поддерживает не только MySQL, но и множество других баз данных, например, PostgreSQL и SQLite) и является открытым ПО. В Ubuntu он устанавливается командой sudo apt-get install dbeaver-ce. Пока из недостатков выявил только один: интерфейс хуже в плане юзабилити. В частности, чтобы добраться до списка БД или списка таблиц в базе, нужно совершить больше щелчков мышью, так как индексы. В остальном программа вполне меня устраивает.

Google Maps: перемещение карты и маркеров

4X_Pro

В одном из предыдущих сообщений я писал про то, как вывести карту с помощью Google Maps API и поставить на ней маркер. Тема, как выяснилось, весьма востребованная, и я решил начать по ней серию публикаций, где буду рассказывать о том, как сделать различые действия с Google Maps. Итак, сегодня речь пойдет о перемещении самой карты и маркеров на ней при наступлении каких-либо внешних событий.

Читать далее…

Упрощаем разделение тем в PunBB

4X_Pro
Есть у меня с давних времен один форум, работающий на PunBB. В целом в нем меня все устраивало, кроме одного: очень неудобного разделения темы на несколько в случае возникновения оффтопика. Неудобство заключалось в том, что при разделении тема разбивалась на страницы точно так же, как при обычном просмотре, в результате чего если оффтопик шел на нескольких страницах, каждую из них приходилось вырезать в отдельную тему, а потом склеивать.
Наконец, мне это надоело, и я решил немного подредактировать исходный код moderate.php (который лежит в корне). Читать далее…

Страницы:
Задать вопрос

Здесь можно задать мне вопрос или спросить совета по любой теме, затронутой в блогах или на форуме. После того, как я отвечу, вопрос и ответ появятся в соответствующем разделе. Но не забываем, что я — сторонник slow life, поэтому каких-либо сроков ответов не обещаю. Самые интересные вопросы станут основой для новых тем на форуме или записей в блоге.
Сразу предупреждаю: глупости, провокации, троллинг и тому подобное летит прямо в /dev/null.