Кодинг

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

Пишем свой плагин для WordPress, добавляем в каталог плагинов

1 комментарий
Wordpress change comment parent

Плагин в репозитории WordPress

Вот написал простенький плагин для WordPress-а, и добавил его в официальный репозиторий плагинов. Что делает? Позволяет изменять родительский комментарий для любого пользовательского комментария.

К примеру, частенько пользователи промахиваются с веткой, и отвечают не в ту, что ломает наглядность ведения комментариев. И если случайному пользователю, оставившему комментарий, дела до этого, как правило, нет, то вот последующим читателям это может доставить неудобства. Читать далее →

Проксирование, ресайз и кеширование картинок с помощью NGINX

10 комментариев

Есть некий удаленный сервис (далее images.service.com), по функционалу похож на каталог товаров. У него есть АПИ благодаря которому, я могу выводить этот список товаров на своем проекте (далее site.com). Но вот незадача, удаленный ресурс частенько падает. И как следствие — в каталоге пропадают абсолютно все товары, и вы сами представляете, наверняка, что это такое.

Пришлось прикрутить кеширование данных всех товаров через АПИ. По сути, сам проект уже работает с кешированными данными. Но вся беда в картинках каждого товара. Приблизительная схема работы проекта:
Кеширование товаровКак только падает удаленный сервис, пропадают картинки товаров, что очень сильно сказывается на юзабилити проекта, и вообще выглядит убого.

Товаров в каталоге около 10 000. Картинок у каждого в среднем 30. Плюс 3 размера каждой картинки (large, medium, small), итого около 900 000 различных изображений (это около 80ГБ). Товары в каталоге динамичны — появляются, удаляются. Т.е. и за актуальностью картинок тоже надо бы следить.

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

Подытожим наши требования:

  • проксировать картинки с удаленного сервиса и сохранять их локально
  • если есть уже сохраненная картинка, то отдавать ее
  • автоматически ресайзить картинки, пересохранять их в progressive JPEG
  • минимизировать обращения к удаленному серверу, а именно:
    • если удаленная картинка не найдена, то такой ответ сервиса кешировать
    • если сервис упал, то такие ответы тоже кешировать
    • если есть уже сохраненная картинка бОльшего размера, то использовать ее (т.е. взять ее, отресайзить, сохранить, и отдать пользователю), без обращения к удаленному сервису
  • в случае ошибки отдавать картинку-заглушку

Использовать PHP или любые другие скриптовые средства не хотелось, из-за их тормознутости/отжирания памяти. Все это удалось решить средствами NGINX.

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

Gitolite, Автодеплой dev… или как я работаю с GIT

4 комментария
схема деплоя dev версии

Cхема деплоя dev версии

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

Gitolite позволяет управлять репозиториями, настраивать доступ, в общем практически все что нужно и даже чуточку больше. Подробнее об этом можно глянуть в википедии. Но если в кратце, то gitolite предоставляет доступ к репозиториям посредством ssh, авторизуя пользователей по ключам. С помощью коммитов в специальный репозиторий мы управляем остальными репозиториями. В общем до жути удобно, и максимально просто.
Читать далее →

Как работать с IPv6 в PHP

13 комментариев

Работа с IPv6 в PHP

Вольный перевод:
https://www.mikemackintosh.com/5-tips-for-working-with-ipv6-in-php/

Работать с IPv4 в php было очень просто, для этого существовало две функции ip2long и long2ip. Эти функции давали возможность переводить IP адрес в обычное число и обратно. К сожалению, в IPv6 такой возможности нет.

Адрес IPv4 состоит из 32 бит — размер который изначально поддерживает большинство операционных систем и языков программирования. 32-ух и более битные платформы поддерживают работу с числами от 0 до 4 294 967 295 (или 232, которое и является максимальным количеством IP адресов в сети). Это давало возможность преобразовывать адрес в число, что в свою очередь давало возможность экономично использовать память и ресурсы системы.

С IPv6 же другая история. На данный момент большинство компьютеров используют 64-ех битную архитектуру, и работают под управлением 64-ех битной ОС. Самое большое беззнаковое число допустимое на 64bit платформе — 18 446 744 073 709 551 616 (или 264). Но IPv6 допускает несоизмеримо больше количество адресов — 340 282 366 920 938 463 463 374 607 431 770 000 000 (или 2128). Это очень огромное число, и, к сожалению, это приводит к проблемам при работе с ним. Читать далее →

qTranslate-X вывод статьи в другом языке

3 комментария

Допустим установлен у вас плагин qTranslate-X. Допустим есть два языка: русский и английский. К примеру вам нужно вывести и русский и английский заголовок статьи на русскоязычной версии сайта. Сходу это сделать не получится, т.к. этот плагин автоматически переводит всю статью на текущий язык.

Делается это так:

$postId = get_the_ID();

wp_cache_delete($postId, 'posts');
$mypost = WP_Post::get_instance($postId);

$titleEn = qtrans_use('en', $mypost->post_title, false);

$titleEn — будет содержать заголовок на английском. В общем вот и все. Подробнее почему именно так, смотрите далее.

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

Удобная обертка PDO

13 комментариев

Выкладываю на ваш суд свой класс-надстройку над стандартным PDO. Писался и совершенствовался он с каждым проектом, и содержит все мои изменения суммарно.

Ссылка на GitHub (обновлено 26.06.2016)

Данное расширение добавляет следующий функционал:

  • Цепочки вызовов
  • Аналоги функций из pear::db
  • Показать сформированный запрос
  • Функции для подсчета статистики запросов
  • Дополнительные функции
  • Дополнительные опции
  • Другие изменения

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

Как хранить IPv4 в БД

10 комментариев

Как ни странно, но многие разработчики до сих пор хранят ip адрес в базе плейн текстом, что вобщем то совсем непрактично.

На самом деле адрес IPv4 удобно хранить в виде беззнакового int 32. И в этой кратенькой статье я вам расскажу о том, как это делать и какие неоспоримые преимущества это дает. Я думаю, этот материал будет полезен многим.

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

Правильный ресайз прозрачных картинок на PHP

26 комментариев

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

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

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

Проектирование… А нужно ли?

2 комментария

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

Ладно. От слов к делу. На днях пришлось (ну или не совсем пришлось, скорее захотелось) писать программу десктопную для диагностики автомобилей через интерфейс OBD-2, вообщем это тонкости, и к делу отношения не имеет. Довольно сложные алгоритмы, да и учитывая то что прикладные программы я последний раз разрабатывал лет пять-семь назад, то это вообщем то было довольно таки сложно. Читать далее →

Конвертер GDF шрифтов (PHP класс)

9 комментариев

Многие из PHP кодеров наверняка замечали что в библиотеке GD, помимо использования шрифтов TrueType, FreeType, встроенных в GD шрифтов и т.д. можно использовать некие GDF шрифты.

Формат этот очень редкий и используется только в библиотеке GD. Конечно если хорошо погуглить то можно найти уже перекодированные шрифты, онлайн сервисы для перекодирования из TTF и десктопную программу 2002 года под винь для рисования GDF шрифтов и перекодированию из TTF. Но к сожалению, не все шрифты уже перекодированны да и что делать если нам нужен свой шрифт? Онлайн сервисы не всегда удобны. А десктопная программа — не всегда лучший выход.
Читать далее →