Sleep в Qt

Как-то очень сильно отвлекся от Qt. А тут на днях пришлось вернуться =) Долго вспоминал, как раньше реализовал задержку, или sleep в Qt (да, да, да, это плохо, и т.д., но иногда уж очень надо, особенно если нужно сдать лабу, чтобы отстали.)

Пример тривиальной реализации:

Резервное копирование сайта на dropbox

Недавно столкнулся с проблемой резервного копирования сайтов на vps. Сайты работают на wordpress, так что нормальные варианты с git, composer и т.д. не рассматривал. Все как можно проще, но надежно. Итак, постановка задачи: с некой периодичностью нужно бэкапить базы и все содержимое нескольких проектов.

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

Настройка nginx + php-fpm в Debian/Ubuntu

Nginx - это HTTP-сервер. По сравнению с apache он более отказоустойчив, способен выдержать большое количество соединений. В основном применяется на продакшн серверах, почему-то его редко настраивают для локальной разработки, хотя это не сложнее, чем настроить apache + php.

Configuration

При создании бандла,  который будет использоваться как библиотека (и не только), полезно будет его конфигурировать.

Конечно, можно все вынести в параметры, обойтись таким образом без конфигурации, но это будет некошерно. =)

Правильная практика описывать конфигурацию в config.yml, а часть необходимых параметров выносить в parameters.yml:

Паттерны и архитектура веб-приложений

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

Вещи, необходимость понимания которых возникает при разработке средних и больших проектов. Но даже для относительно небольших проектов это важно.

Наследование бандлов

наследование У Symfony framework  интересная система наследования бандлов (bundle). Интересная она тем, что действует как ООП наследование с точностью до наоборот. При наследовании бандла модификации задевают родительский. Это очень удобно: если вам не понравился какой-то компонент, или вы хотите его расширить/заменить реализации - можно использовать механизм наследования бандлов, не изменяя при этом родительский бандл, но при использовании родительского бандла как раз будет использоваться новый функционал.

Работа с полями класса в Ruby.

ООП в этом вашем Ruby сильно отличается от ООП в этом нашем пролетарском php =). К примеру, возьмем такую тривиальную вещь как поля класса. Несмотря на то, что методы инкапсулируются, поля - нет. (Другими словами, для полей нельзя применить модификатор доступа). Все поля protected.

Service Container and Dependency Injection in Symfony framework

Иногда одна единственная идея способна изменить все представление о программировании. Для меня одной из такой идей была идея сервис-контейнера. Это как золотой грааль). Вообще-то, идея не сугубо Symfony framework, это просто один из удачных паттернов проектирования приложений, часто используемый в Symfony.

Коллекция Bundle

Костыли_и_велосипедыПомимо стандартного набора поставки Symfony, существует множество бандлов (Bundle) от сторонних разработчиков, которые очень упрощают жизнь при разработке приложения (действительно, зачем изобретать велосипед, если есть готовое решение). Не будем разворачивать спор по поводу нередкого присутствия в бандлах функционала, который никогда не будет использован в вашем приложении - скорость разработки покроет эти достаточно мелкие проблемы. Приведу скромную коллекцию бандлов, сильно упрощающих жизнь.

Для установки бандлов нужно во первых, добавить его в проект, с помощью composer, к примеру:

composer require "presta/sitemap-bundle:~1.4"


Использование Composer

Composer - менеджер зависимостей, или, лучше сказать, пакетов для php.

Официальная страница: https://getcomposer.org/

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

Doctrine. Структура. Entity

Сразу после начала работы с Doctrine обзавелся некоторыми предрассудками. Сам их сейчай искоренил, но, может у кого-то они еще есть, может заметка кому-то поможет =)

SEO. Внутренняя оптимизация. Часть 1.

Из предыдущей заметки мы ознакомились с понятием SEO. Также мы уже знаем, что такое поисковый индекс и как он обновляется с помощью поисковых роботов.

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