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

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


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

t.me/4x_pro

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

Как перейти на формат 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 (который лежит в корне). Читать далее…

Преобразование PSD в TIFF с сохранением слоев

4X_Pro
Давно искал инструмент, который позволил бы конвертировать PSD во что-нибудь, что корректно читается GIMP (например, тот же TIFF) с сохранением слоев, причем так, чтобы это можно было делать под Linux. И вот вроде бы нашел подходящий сервис под названием Zamzar. Испытал, получил вполне приемлемый результат (но несколько слоев в результате конвертации оказались смещенными). Из недостатков сервиса можно назвать только ограничение на размер файла (50 Mb, но в большинстве случаев мне этого хватит) и то, что ссылка на файл высылается на EMail, а не выдается сразу же.

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

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