DEVACADEMY / СТАТЬИ http://devacademy.ru Mon, 20 Nov 2017 16:26:52 +0300 <![CDATA[Nunjucks: Шаблонизатор для JavaScript]]> Фреймворки шаблонизаторы отделяют макет (разметку страницы) динамических веб-сайтов и приложений от интегрированной в них логики. Все фреймворки поддерживают различные формы циклов, условной логики и специального форматирования. Но мне хотелось получить такой движок, который бы располагал продвинутыми инструментами построения страницы для нескольких целей:

  • для совместного использования разметки на страницах;
  • для включения отдельных блоков с функциональностью (при необходимости); 
  • в общем и целом для упрощения процесса построения в меру сложных макетов страниц c минимумом прилагаемых усилий.
]]>
http://devacademy.ru/posts/nunjucks-shablonizator-dlia-javascript/ Mon, 06 Mar 2017 17:17:39 +0300
<![CDATA[Непрерывная интеграция для PHP-проектов с помощью PHP Censor]]> В настоящий момент получила широкое распространение практика Continuous integration (CI) (а так же практики Continuous Deployment и Continuous Delivery, которые ей сопутствуют), которая позволяет запускать различные проверки кода и тесты автоматически. Тем самым гарантируется непрерывный контроль качества и работоспособности кода, в отличии от избирательных ручных запусков тестов и проверок.

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

]]>
http://devacademy.ru/posts/nieprieryvnaia-intieghratsiia-dlia-php-proiektov-s-pomoshch-iu-php-censor/ Thu, 02 Mar 2017 16:48:09 +0300
<![CDATA[Как удалить образы, контейнеры и тома Docker]]> Docker позволяет с легкость упаковать ваши приложения и службы в контейнеры, благодаря чему вы можете запускать их на любой платформе. Однако, по мере работы с Docker у вас запросто может накопиться избыточное количество ненужных образов, контейнеров и томов, которые наводят бардак в выходных данных и загромождают собой место на диске. 

]]>
http://devacademy.ru/posts/kak-udalit-obrazy-kontieiniery-i-toma-docker/ Wed, 01 Mar 2017 14:40:24 +0300
<![CDATA[Как управлять многостадийной средой развертывания с помощью системы Ansible]]> Ansible – это мощная система управления конфигурациями, которая используется для настройки и управления инфраструктурой и приложениями в различных средах разработки. Хотя система Ansible и предлагает пользователю простой в понимании синтаксис, гибкие рабочие процессы и мощные инструменты, зачастую бывает довольно затруднительно управлять большим количеством хостов, особенно когда они отличаются средой развертывания и своим функционалом. 

]]>
http://devacademy.ru/posts/kak-upravliat-mnoghostadiinoi-sriedoi-razviertyvaniia-s-pomoshch-iu-sistiemy-ansible/ Wed, 01 Mar 2017 14:20:02 +0300
<![CDATA[Как импортировать и экспортировать базы данных в MySQL или MariaDB]]> Умение импортировать и экспортировать свои базы данных – это очень важный навык для каждого. Вы всегда сможете использовать дампы данных с целью резервного копирования или восстановления более старых копий базы данных в случае непредвиденных ситуаций либо сможете использовать их функционал для перехода на новый сервер или среду разработки.

Работа с дампами базы данных в MySQL и MariaDB не сопряжена с особыми сложностями. В этом небольшом руководстве мы расскажем вам, как экспортировать и импортировать базу данных из файла дампа в MySQL и MariaDB.

]]>
http://devacademy.ru/posts/kak-importirovat-i-eksportirovat-bazy-dannykh-v-mysql-ili-mariadb/ Sun, 26 Feb 2017 19:56:27 +0300
<![CDATA[PHP 7.1 - 9 новых функций, о которых вам стоит знать]]> Наконец, в свет вышла PHP 7.1, новая минорная версия PHP, которая включает в себя ряд новых функций, изменений и исправления ошибок. В настоящей статье мы рассмотрим некоторые новые замечательные функции PHP 7.1, а именно:

  • Итерируемый псевдотип
  • Замыкания через функции обратного вызова
  • Синтаксис с квадратными скобками для списка ()
  • Поддержка ключей в списке
  • Видимость констант класса
  • Типы, допускающие значение null
  • Функции типа void
  • Захват исключений разных типов
  • Исключение «Слишком мало аргументов»
]]>
http://devacademy.ru/posts/php-7-1-9-novykh-funktsii-o-kotorykh-vam-stoit-znat/ Sun, 26 Feb 2017 18:41:18 +0300
<![CDATA[Как создать собственный контейнер внедрения зависимостей на PHP]]> На запрос «контейнер внедрения зависимостей» packagist.org выдает более 95 страниц результатов. Так что можно с уверенностью утверждать, что это «колесо» уже изобретено.

Но ни один шеф-повар не учится готовить только по готовым блюдам. Точно так же, программист не учится только по «готовому коду».

Давайте подумаем, какие задачи мы хотим поручить нашему будущему контейнеру. Для начала выделим в «Контейнере внедрения зависимостей» две роли – «внедрение зависимостей» и «контейнер».

]]>
http://devacademy.ru/posts/kak-sozdat-sobstviennyi-kontieinier-vniedrieniia-zavisimostiei-na-php/ Fri, 02 Dec 2016 08:19:25 +0300
<![CDATA[Размер шрифтов в CSS: em, px, pt или percent?]]>

Применение атрибута font-size для масштабирования текста является одним из самых сложных аспектов стилевого оформления в CSS. CSS предлагает четыре единицы для измерения размера текста, отображаемого в веб-браузере. Какая из этих четырех единиц наиболее подходит для веб-документов? Этот вопрос вызвал множество обсуждений и споров. Дать однозначный ответ на такой вопрос сложно.

]]>
http://devacademy.ru/posts/razmier-shriftov-v-css-em-px-pt-ili-percent/ Tue, 15 Mar 2016 09:04:20 +0300
<![CDATA[Путеводитель по Symfony: Диспетчер событий]]> В этом путеводителе мы будем рассматривать автономные библиотеки (также известные как «Компоненты»), предлагаемые Symfony для создания приложений.

Symfony предлагает компонент EventDispatcher, который позволяет выполнять основные зарегистрированные функции в нашем приложении.

Все основывается на следующем интерфейсе:

<?php

namespace Symfony\Component\EventDispatcher;

interface EventDispatcherInterface
{
    /**
     * @param string   $eventName
     * @param callable $listener
     * @param int      $priority  High priority listeners will be executed first
     */
    public function addListener($eventName, $listener, $priority = 0);

    /**
     * @param string $eventName
     * @param Event  $event
     */
    public function dispatch($eventName, Event $event = null);
}
]]>
http://devacademy.ru/posts/putievoditiel-po-symfony-dispietchier-sobytii/ Tue, 15 Mar 2016 08:51:01 +0300
<![CDATA[Путеводитель Symfony: Компонент HTTPKernel]]> В этом руководстве мы рассмотрим основные компоненты, с помощью которых создаются приложения:

  • HTTP Kenel и HTTP Foundation
  • Диспетчер событий
  • Маршрутизация и YAML
  • Внедрение зависимости
  • Консоль

Symfony предоставляет компопонет HttpKernel который реализует протокол HTTP: он конвертирует Request в Response.

Все вращается вокруг следующего интерфейса:

<?php

namespace Symfony\Component\HttpKernel;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

interface HttpKernelInterface
{
    const MASTER_REQUEST = 1;
    const SUB_REQUEST = 2;

    /**
     * @param Request $request
     * @param int     $type
     * @param bool    $catch   Whether to catch exceptions or not
     *
     * @return Response
     */
    public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true);
}
]]>
http://devacademy.ru/posts/putievoditiel-symfony-komponient-httpkernel/ Sun, 28 Feb 2016 15:20:29 +0300
<![CDATA[Микрофреймворк Symfony]]> Symfony всегда можно было использовать в качестве микрофреймворка. Среди других микрофреймворков, которые позволяют вам добавлять в них все, что пожелаете, можно выделить Empty Edition и MicroFrameworkBundle.

Существует множество критериев, за счет которых фреймворк классификацируется как «микрофреймворк». Вот некоторые из них:

  • небольшой API (использование кода фреймворка в вашем приложении)
  • мало строк кода (LOC)
  • мало зависимостей (количество используемых сторонних библиотек)
  • небольшой объем (время загрузки фреймворка)
]]>
http://devacademy.ru/posts/mikrofrieimvork-symfony/ Sun, 28 Feb 2016 10:10:51 +0300
<![CDATA[Руководство по модульному тестированию. Часть V: имитирующие методы и переопределение конструкторов]]> В предыдущем уроке по PHPUnit вы познакомились с такими эффективными инструментами, как имитирующие объекты и методы-заглушки. Эти понятия являются залогом успешного модульного тестирования, и как только они «улягутся» у вас в голове, вы начнете понимать, насколько полезным и простым может быть тестирование.

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

]]>
http://devacademy.ru/posts/rukovodstvo-po-modul-nomu-tiestirovaniiu-chast-v-imitiruiushchiie-mietody-i-pierieopriedielieniie-konstruktorov/ Tue, 09 Feb 2016 19:45:09 +0300
<![CDATA[Руководство по модульному тестированию. Часть IV: Имитирующие объекты, методы-заглушки и внедрение зависимости]]> В предыдущих статьях я показал вам, как писать базовые тесты для базовых методов. Теперь вы можете пользоваться аннотацией @dataProvider, создавать отчеты о покрытии, и знаете, как пользоваться отдельными утверждениями.

До этого мы писали тесты для простых методов. Вызов внутреннего метода в рамках одного и того же класса, вставка блока if, но ничего особо сложного.

]]>
http://devacademy.ru/posts/rukovodstvo-po-modul-nomu-tiestirovaniiu-chast-iv-imitiruiushchiie-obiekty-mietody-zaghlushki-i-vniedrieniie-zavisimosti/ Tue, 02 Feb 2016 17:19:02 +0300
<![CDATA[Установка Wordpress на Ubuntu 14.04]]> На данный момент WordPress является самой популярной CMS (системой управления контентом) в Интернете. С ее помощью можно с легкостью создавать гибкие блоги и вебсайты на сервере MySQL с PHP-обработкой. Пользуясь огромной популярностью, WordPress это отличный способ быстро настроить и запустить вебсайт.

В этой статье мы рассмотрим установку экземпляра WordPress с веб-сервером Apache на Ubuntu 14.04. Необходимые условия

]]>
http://devacademy.ru/posts/ustanovka-wordpress-na-ubuntu-14-04/ Tue, 02 Feb 2016 17:19:00 +0300
<![CDATA[Обновление до PHP 7 на CentOS 7]]> Версия PHP 7, выпущенная 3 декабря 2015 года, обещает значительное увеличение скорости работы по сравнению с предыдущими версиями этого языка, а также новые функции (например, подсказки скалярного типа). В этом руководстве объясняется, как быстро обновить PHP 5.x (любую версию), работающую на веб-сервере Apache или Nginx, до PHP 7 при помощи пакетов, предоставляемых сообществом разработчиков.

]]>
http://devacademy.ru/posts/obnovlieniie-do-php-7-na-centos-7/ Tue, 02 Feb 2016 17:18:59 +0300
<![CDATA[Обновление до PHP 7 на Ubuntu 14.04]]> Версия PHP 7, выпущенная 3 декабря 2015 года, обещает значительное увеличение скорости работы по сравнению с предыдущими версиями этого языка, а также новые функции (например, подсказки скалярного типа). В этом руководстве объясняется, как быстро обновить PHP 5.x (любую версию), работающую на веб-сервере Apache или Nginx, до PHP 7

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

]]>
http://devacademy.ru/posts/obnovlieniie-do-php-7-na-ubuntu-14-04/ Sun, 24 Jan 2016 09:21:04 +0300
<![CDATA[Улучшенная сериализация с Symfony]]> Если вы когда-либо создавали сценарий экспорта или API, то вам наверняка приходилось форматировать свой контент и иметь дело с сериализацией.

В Symfony этой задачей зачастую занимается JMS Serializer (так указано в документации Symfony).

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

]]>
http://devacademy.ru/posts/uluchshiennaia-sierializatsiia-s-symfony/ Wed, 23 Dec 2015 12:47:43 +0300
<![CDATA[События жизненного цикла в Doctrine 2]]> Общим требованием при создании приложений является понимание того, что в результате какого-либо события в системе активируются определенные действия.

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

]]>
http://devacademy.ru/posts/sobytiia-zhizniennogho-tsikla-v-doctrine-2/ Sun, 13 Dec 2015 13:33:46 +0300
<![CDATA[Обучающее руководство по модульному тестированию. Часть III: Тестирование защищенных/частных методов, отчеты о покрытии и индекс CRAP]]> В третьей части моего обучающего руководства по тестированию я объясню, что такое покрытие кода и почему 100%-е покрытие кода не является обязательной целью.

Но сначала поговорим о тестировании ваших частных/защищенных методов!

Если вы загляните во вторую часть этого руководства, то заметите, что мы инстанцируем класс, который хотим протестировать, через обычный запрос new. У вас может возникнуть вопрос о том, как тестровать защищенные или приватные методы, если к ним невозможно получить доступ напрямую через инстанцированный объект ($url->someProtectedMethod()).

]]>
http://devacademy.ru/posts/obuchaiushchieie-rukovodstvo-po-modul-nomu-tiestirovaniiu-chast-iii-tiestirovaniie-zashchishchiennykh-chastnykh-mietodov-otchiety-o-pokrytii-i-indieks-crap/ Tue, 08 Dec 2015 11:03:03 +0300
<![CDATA[Руководство по модульному тестированию. Часть II: Утверждения, написание настоящего теста и аннотация @dataProvider]]> В первой части этой серии статей я рассказал о первоначальной установке и конфигурации PHPUnit для нового проекта. Я рассказал о некоторых соглашениях, необходимых для работы PHPUnit, а также показал, как создать простой, глупый и бесполезный тест.

Но этот тест познакомил вас с самым базовым утверждением PHPUnit - assertTrue().

Википедия дает следующее определение утверждения:

]]>
http://devacademy.ru/posts/rukovodstvo-po-modul-nomu-tiestirovaniiu-chast-ii-utvierzhdieniia-napisaniie-nastoiashchiegho-tiesta-i-annotatsiia-dataprovider/ Mon, 07 Dec 2015 11:38:36 +0300
<![CDATA[Развертывание Symfony приложения на Ubuntu 14]]> В этом уроке будет рассказано, как вручную развертывать базовое приложение Symfony на сервере Ubuntu 14.04. Мы рассмотрим, как правильно конфигурировать сервер, учитывая при этом меры безопасности и эффективности, чтобы получить приложение, готовое для производства. Если вам нужен вводный урок по Symfony, вы можете почитать о том, как установить и запустить Symfony на Ubuntu 14.04.

]]>
http://devacademy.ru/posts/razviertyvaniie-symfony-prilozhieniia-na-ubuntu-14/ Sun, 06 Dec 2015 14:35:53 +0300
<![CDATA[Установка и использование Docker Compose на Ubuntu 14.04]]> Docker это отличный инструмент, но чтобы воспользоваться его преимуществами по полной, каждый компонент вашего приложения должен работать в своем собственном контейнере. Если у вас сложное приложение со множеством компонентов, то вам будет сложно делать так, чтобы все контейнеры запускались и закрывались вместе (не говоря уже о сообщении между ними).

Сообщество Docker придумало популярный инструмент под названием Fig, который позволил использовать один файл YAML для управления всеми контейнерами и конфигурациями Docker. Инструмент стал насколько популярен, что команда Docker наконец решила создать свою собственную версию, основанную на Fig. Они назвали свою новую разработку Docker Compose. Если вкратце, то он упрощает процессы управления Docker-контейнерами (например, запуск, закрытие и настройка связей и объемов внутри контейнеров).

]]>
http://devacademy.ru/posts/ustanovka-i-ispol-zovaniie-docker-compose-na-ubuntu-14-04/ Sat, 05 Dec 2015 16:52:09 +0300
<![CDATA[Новое Symfony 2.8: Улучшенные формы]]> В списке встроенных типов форм в Symfony отсутствовало поле формы range из HTML5. Этот новый тип отображается в виде слайдера в тех браузерах, которые поддерживают элементы управления форм HTML5. Используйте атрибуты min и max, чтобы ограничить выбираемые значения:

$builder->add('rating', 'Symfony\Component\Form\Extension\Core\Type\RangeType', [
    'attr' => ['min' => 0, 'max' => 10]
]);

Формы, содержащие коллекции, позволяют индивидуально настраивать HTML, используемый для добавления новых элементов (параметр prototype ) и имени заполнителя, используемого в этом шаблоне (параметр prototype_name ). Благодаря параметру prototype_data, Symfony 2.8 также позволяет задавать данные по умолчанию каждого нового ряда коллекции:

]]>
http://devacademy.ru/posts/novoie-symfony-2-8-uluchshiennyie-formy/ Tue, 01 Dec 2015 07:44:48 +0300
<![CDATA[Как создать простую, но эффективную систему очереди сообщений]]> На протяжении последних нескольких месяцев перед нами стояла сложная задача, заключавшаяся в выполнении множества микро-услуг для тысяч запросов наиболее эффективным способом. Нашей первой мыслью было использовать Очередь (что намного лучше, чем создавать таблицу x-SQL со своими собственными статусами, датами создания, приоритетами и т.д.) - и оказались правы. Однако существует очень много вариантов работы с очередью. Итак, вот наши находки, основанные не столько на их технических характеристиках, сколько на наших личных предпочтениях:

]]>
http://devacademy.ru/posts/kak-sozdat-prostuiu-no-effiektivnuiu-sistiemu-ochieriedi-soobshchienii/ Mon, 30 Nov 2015 11:15:26 +0300
<![CDATA[Новое в Symfony 2.8: Symfony как микрофреймворк]]> Микрофреймворк это термин, обозначающий «минималистичный фреймворк веб-приложений». Под этим словом разработчики обычно понимают «быстрые и небольшие фреймворки» - например, Silex. Но под минифреймфорками можно понимать также простые и более гибкие фреймворки, в которых вы можете воспользоваться различными архитектурными решениями.

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

]]>
http://devacademy.ru/posts/novoie-v-symfony-2-8-symfony-kak-mikrofrieimvork/ Mon, 23 Nov 2015 14:40:21 +0300
<![CDATA[45 лучших ресурсов для бесплатного изучения программирования]]> Так вы сможете понять, что вам нравится, а что – не нравится, прежде чем потратите деньги на какой-либо язык кодирования или курсы.

Но выбор бесплатных ресурсов, уроков и книг просто огромен. В этой статье собраны 45 лучших из них.

Для удобства я распределил все ресурсы по темам. Чтобы быстро перейти к определенному разделу, воспользуйтесь Содержанием, приведенным ниже.

]]>
http://devacademy.ru/posts/45-luchshikh-riesursov-dlia-biesplatnogho-izuchieniia-proghrammirovaniia/ Mon, 23 Nov 2015 14:40:19 +0300
<![CDATA[Интервью с Дэвидом Коэном, основателем Techstars]]> В этом посте приведены ответы Дэвида на вопросы о стартапах, в том числе – о том, как обсуждать вопрос собственности с соучредителями, как защитить свою идею, с какими материалами следует ознакомиться основателям стартапов, и многое другое. Эта статья основана на видеоконференции Codementor Office Hours, которую провел известный инвестор и основатель Techstars Дэвид Коэн.

]]>
http://devacademy.ru/posts/intierv-iu-s-devidom-koenom-osnovatieliem-techstars/ Thu, 19 Nov 2015 14:58:59 +0300
<![CDATA[Новое в Symfony 2.8: Улучшенная консоль]]> Теперь к столбцам в таблице можно применять стили

В Symfony 2.8 вы можете задавать индивидуальный визуальный стиль для каждого столбца таблицы.

Для начала инстанцируйте класс TableStyle, чтобы задать характеристики стиля:

use Symfony\Component\Console\Helper\TableStyle;

$rightAligned = new TableStyle();
$rightAligned->setPadType(STR_PAD_LEFT);
Затем примените индивидуальный стиль к любому столбцу таблицы при помощи цифрового индикатора этого столбца:

use Symfony\Component\Console\Helper\Table;

$table = new Table($output);
$table->setHeaders(['#', 'Path', 'Size']);

$table->setColumnStyle(2, $rightAligned);

// ...

$table->render();
]]>
http://devacademy.ru/posts/novoie-v-symfony-2-8-uluchshiennaia-konsol/ Mon, 16 Nov 2015 12:42:26 +0300
<![CDATA[Angular 2: Успеху быть!]]> Как и в любой революции, было дано обещание порвать с прошлым и построить новое светлое будущее. Но проблема была в том, что за окном только начинался 2014 год, и к такому повороту тогда еще никто не был готов: до стандартизации ES6 оставался год, AtScript считался экзотикой, а двустороннее связывание данных было необходимо для приложений, в которых данные обрабатывались через формы. Но, что самое главное, для такого популярного и широко используемого фреймворка была просто необходима обратная совместимость.

]]>
http://devacademy.ru/posts/angular-2-uspiekhu-byt/ Sat, 14 Nov 2015 10:09:02 +0300
<![CDATA[Как установить Ruby on Rails на Ubuntu 15.05, 14.04 LTS и 12.04 LTS при помощи RVM]]> Для этой статьи я использую Ubuntu 14.04. RVM предоставляет простой набор команд для установки одной или нескольких версий Ruby на один сервер.

RVM означает Ruby Version Manager (менеджер управления Ruby). Он позволяет эффективно устанавливать версию Ruby и управлять ей. Установите последнюю стабильную версию RVM на свой компьютер при помощи следующей команды. Эта команда автоматически загрузит все необходимые файлы и установит их на ваш компьютер.

]]>
http://devacademy.ru/posts/kak-ustanovit-ruby-on-rails-na-ubuntu-15-05-14-04-lts-i-12-04-lts-pri-pomoshchi-rvm/ Wed, 16 Sep 2015 11:18:21 +0300
<![CDATA[Разбираемся с файлами /etc/profile и /etc/bashrc]]> Недавно я столкнулся со следующей проблемой: приложение не сохраняло настройку umask, заданную в профиле root-пользователя, или в файле /etc/profile. Немного разобравшись в вопросе, я понял, что приложение использует только ту настройку umask, которая задана в  /etc/bashrc, не принимая даже те значения, которые являются его же собственными сценариями запуска.

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

]]>
http://devacademy.ru/posts/razbiraiemsia-s-failami-etc-profile-i-etc-bashrc/ Thu, 10 Sep 2015 21:16:12 +0300
<![CDATA[Знакомство с Play Framework 2.3.4]]> В этом уроке мы поговорим о следующих аспектах Play Framework:

  • Установка Play
  • Новое приложение
  • Структура Play-приложения
  • Play -консоль
  • Установка Eclipse

Шаг 1: Загрузите Активатор отсюда.

Шаг 2: Распакуйте скачанный ZIP файл.

unzip typesafe-activator-1.3.6-minimal.zip
Archive:  typesafe-activator-1.3.6-minimal.zip
   creating: activator-1.3.6-minimal/
  inflating: activator-1.3.6-minimal/activator.bat  
  inflating: activator-1.3.6-minimal/activator  
  inflating: activator-1.3.6-minimal/activator-launch-1.3.6.jar  

Шаг 3: Добавьте активатор в переменную окружения PATH.

nano .bashrc
export TYPESAFE_ACTIVATOR=/home/developer/activator-1.3.6-minimal
export PATH=$PATH:$TYPESAFE_ACTIVATOR
]]>
http://devacademy.ru/posts/znakomstvo-s-play-framework-2-3-4/ Thu, 10 Sep 2015 19:13:47 +0300
<![CDATA[Шаблоны проектирования в PHP]]> Что же такое шаблоны проектирования? Шаблоны проектирования это не шаблоны анализа, это не описания стандартных структур (например, связанных списков). Это не определенные разработки приложений или фреймворков. По сути, шаблоны проектирования это «описания взаимодействующих объектов и классов, предназначенных для решения общей проблемы проектирования в определенном контексте». Иным словами, шаблоны проектирования предоставляют обобщенное, многократно применяемое решение проблем программирования, с которыми мы сталкиваемся каждый день. Шаблоны проектирования это не готовые классы или библиотеки, которые можно просто применить к вашей системе. Это не конкретное решение, которое можно преобразовать в исходный код. Шаблоны проектирования – это намного больше. Это шаблоны, которые можно использовать для решения проблемы в различных конкретных ситуациях.

]]>
http://devacademy.ru/posts/shablony-proiektirovaniia-v-php/ Tue, 08 Sep 2015 17:34:13 +0300
<![CDATA[Руководство по модульному тестированию. Часть I. Введение в PHPUnit]]> Вот уже несколько месяцев я вынашиваю идею создания подробной серии статей, которая бы превратила новичка в области тестирования в опытного разработчика. Эта серия статей познакомит вас с основными понятиями в области тестирования. Вы поймете, почему статика это плохо, почему внедрение зависимости играет такую важную роль, какова разница между мок-объектом и заглушкой и как полюбить красную и зеленую полоски.

]]>
http://devacademy.ru/posts/rukovodstvo-po-modul-nomu-tiestirovaniiu-chast-i-vviedieniie-v-phpunit/ Mon, 07 Sep 2015 15:56:15 +0300
<![CDATA[Как использовать JMeter для проведения нагрузочного тестирования и производительности вашего веб-приложения]]> Поскольку приложение JMeter представляет собой Java-приложение, его можно использовать для проведения нагрузочного тестирования любого веб-приложения, включая приложения, написанные на PHP, .NET и т.д.

Изначально это приложение предназначалось для тестирования работы Apache Tomcat, который, по сути, представляет собой веб-сервер.

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

]]>
http://devacademy.ru/posts/kak-ispol-zovat-jmeter-dlia-proviedieniia-naghruzochnogho-tiestirovaniia-i-proizvoditiel-nosti-vashiegho-vieb-prilozhieniia/ Sun, 06 Sep 2015 12:16:26 +0300
<![CDATA[Разработка плагина для jQuery: Пять простых шагов]]> Разработчикам известна ситуация, когда во время создания интерактивного веб-приложения приходится писать похожий (или один и тот же) код снова и снова. В таких случаях возникает необходимость в возможности многократного использования кода. Более того, разработчик может столкнуться с проблемами масштабирования и задания пространства имен.

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

]]>
http://devacademy.ru/posts/razrabotka-plaghina-dlia-jquery-piat-prostykh-shaghov/ Sat, 05 Sep 2015 18:55:42 +0300
<![CDATA[Как добавлять NoSQL-запросы в MySQL, интегрированный с memcached, на Ubuntu 14]]> О том, как использовать memcached и его функцию в качестве автономного сервера вместе с MySQL, уже написано во множестве прекрасных статей – например, Установка и использование Memcache на Ubuntu 14.04. Но в качестве автономного сервера memcached выполняет промежуточную функцию, предшествуя уровню доступа MySQL-клиента, и работает только с той информацией, которая находится в памяти, без возможности ее постоянного хранения. Это позволяет выполнять такие задания, как кэширование результатов повторных MySQL-запросов, что экономит ресурсы и оптимизирует работу нагруженных сайтов.

]]>
http://devacademy.ru/posts/kak-dobavliat-nosql-zaprosy-v-mysql-intieghrirovannyi-s-memcached-na-ubuntu-14/ Fri, 04 Sep 2015 21:52:10 +0300
<![CDATA[15 отличных примеров для создания cron задач в Linux]]> MIN HOUR DOM MON DOW CMD

Таблица: Поля и допустимые диапазоны Crontab (синтаксис Linux Crontab)

Основа использования cron – выполнение задач в определённое время, как показано ниже. Это будет выполнять скрипт полного резервного копирования (full-backup) 10 июня в 8.30.

Пожалуйста, обратите внимание, что поле времени использует 24-часовой формат, Так что 8 АМ – 8, 8 РМ – 20 часов.

]]>
http://devacademy.ru/posts/15-otlichnykh-primierov-dlia-sozdaniia-cron-zadach-v-linux/ Fri, 04 Sep 2015 12:24:57 +0300
<![CDATA[5 javascript ошибок, которые появляются без предупреждений]]> Недавно я познакомился с TrackJS, служба мониторинга JavaScript вашего сайта и она меня очень впечатлила. Вы сразу видите всю информацию о возникшей ошибке, включая проблемный файл скрипта, URL, браузер и т.д. Я предлагаю ознакомиться со статьей от автора TrackJS.

Итак, мы работаем с веб-приложениями в неблагоприятной среде. С каждым просмотром страницы наш JavaScript передается по непредсказуемой сети в неконтролируемый нами браузер пользователя. Звучит устрашающе, но давайте разобьём все ошибки на 5 групп, которые оказывают влияние на современные JavaScript приложения, которые разработчик зачастую не замечает вовсе.

]]>
http://devacademy.ru/posts/5-javascript-oshibok-kotoryie-poiavliaiutsia-biez-priedupriezhdienii/ Tue, 30 Jun 2015 16:48:22 +0300
<![CDATA[Установка и использование Codeception]]> Существует несколько методов установки codeception. Мы воспользуемся composer для этой цели, вы, конечно, можете выбрать любой удобный для вам метод.

Для начала перейдем в каталог куда вы хотите установить codeception и где будут храниться ваши тесты. В моем случае - app1.

composer require "codeception/codeception:*"

или

php composer.phar require "codeception/codeception:*"

Через некоторое время codeception будет скачан. После установки вы сможете использовать его в командной строке. Выполним следующую команду, чтобы проверить, что все установилось корректно:

]]>
http://devacademy.ru/posts/tiestirovaniiedah-api-ustanovka-i-ispol-zovaniie-codeception/ Mon, 29 Jun 2015 15:58:51 +0300
<![CDATA[Выбор фреймворка для тестирования (PHP, Codeception или Behat)]]> Существуют различные фреймворки для разработки приложений, которые значительно облегчают нам жизнь. Точно также существуют различные фреймворки для тестирования, которые могут использоваться для автоматического тестирования. Так какой же фреймворк использоваться? Тут все очень субъективно. У всех есть свои плюсы. Важно знать, чего вы хотите достигнуть и в какие сроки. Когда я впервые писал тесты для API, мне понадобилось 4 дня, чтобы найти подходящий инструмент, с помощью которых я мог бы автоматически тестировать все точки API и тесты перед тем, как сделать коммит. Да-да, если у вас нет автоматического инструмента, вам придется все делать вручную каждый день.

]]>
http://devacademy.ru/posts/tiestirovaniiedah-api-vybor-frieimvorka-dlia-tiestirovaniia-php-codeception-ili-behat/ Mon, 29 Jun 2015 14:14:44 +0300
<![CDATA[Зачем писать тесты и использовать инструменты для автоматического тестирования]]> Программистами написано немало книг, в которых говориться о важности TDD (разработка через тестирование) и BDD (разработка через поведение) или о том, что насколько важно писать тесты и производить автоматическое тестирование. Так почему же многие программисты игнорируют тесты? Дело в непрактичности или же все считают тесты теоретической частью, а может жизненный цикл проекта недостаточно длинный или же это настолько трудозатратно? Приведу несколько вопросов и ответов, которые стоит держать в голове о тестировании.

]]>
http://devacademy.ru/posts/dahapi-tiestirovaniie-zachiem-pisat-tiesty-i-ispol-zovat-instrumienty-dlia-avtomatichieskogho-tiestirovaniia/ Sun, 28 Jun 2015 19:25:54 +0300
<![CDATA[Установка и использование PostgreSQL 9.4 на Debian 8]]> Реляционные базы данных - камень преткновения во всех приложениях, которые активно работают с данными. Без них не обходится ни один онлайн магазин, ни запуск ракеты. Одним из примеров достойных уважения БД является PostgreSQL. Она построена по основным стандартам SQL, применяет ACID транзакции, поддерживает внешние ключи и виды (views), а так же все еще в активной стадии разработки.

]]>
http://devacademy.ru/posts/dahustanovka-i-ispol-zovaniie-postgresql-9-4-na-debian-8/ Thu, 25 Jun 2015 15:14:11 +0300
<![CDATA[Доступ к данным Google Analytics из Symfony]]> Существует несколько PHP библиотек, позволяющих получить данные из Google Analytics:

  • GAPI: Google Analytics PHP интерфейс
  • Google API client library: позволяет сразу работать с несколькими продуктами Google, например Google Analytics, Google+ или Google Drive

Обе эти библиотеки используют OAuth2 для авторизации (требование Google). Таким образом предоставляется безопасное соединение и доступ к данным Google Analytics.

]]>
http://devacademy.ru/posts/dahdostup-k-dannym-google-analytics-iz-symfony/ Wed, 24 Jun 2015 15:15:58 +0300
<![CDATA[Построение Symfony форм на Bootstrap 3: Вывод блока подсказки]]> А вот пример результата:

Для начала создадим форму с разметкой bootstrap. Затем добавим подсказку к полю. Есть хорошая новость - начиная с версии 2.6 Symfony уже поддерживает вывод форм с разметкой для bootstrap.

Прежде чем начать, я считаю, что вы уже добавили стили bootstrap в свою разметку страницы. Так же вы должны иметь основные понятия по созданию и выводу форм в Symfony. Если же в каком-то из этих моментов вам не хватает знаний, то я советую прочитать следующие статьи:

]]>
http://devacademy.ru/posts/postroieniie-symfony-form-na-bootstrap-3-vyvod-bloka-podskazki/ Wed, 24 Jun 2015 12:14:58 +0300
<![CDATA[Как установить MongoDB на Ubuntu 14]]> Для установки вам понадобится:

  • сервер Ubuntu 14
  • пользователь с правами sudo, но не root

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

]]>
http://devacademy.ru/posts/kak-ustanovit-mongodb-na-ubuntu-14/ Wed, 24 Jun 2015 10:22:18 +0300
<![CDATA[10 принципов современной разработки на PHP]]> Для большинства разработчиков работа над PHP приложениями сейчас и десять лет назад отличается кардинально. В те времена многие из нас были веб-дизайнерами в чью ответственность входила не только разработка бекэнда, но и проектирование БД, системное администрирование, фронтэнд программирование, а иногда и создание UI.

За последние года картина довольно сильно изменилась. Простые сайты теперь представляют из себя целые SaaS приложения - зачем создавать очередной движок для блога, встраивать CMS или ecommerce систему, когда уже десятки разных продуктов существуют. Другими словами, всё что можно было автоматизировать уже оптимизировано. Но остается один момент не поддающийся этому процессу - нужды заказчиков.

]]>
http://devacademy.ru/posts/dah10-printsipov-sovriemiennoi-razrabotki-na-php/ Sat, 20 Jun 2015 23:08:11 +0300
<![CDATA[Настройка HTTP аутентификации Nginx в Ubuntu 14]]> Nginx - легковесный, по сравнению с Apache, HTTP, обратный прокси сервер написанный Igor Sysoe. Официальную документацию к Nginx вы найдете здесь.

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

]]>
http://devacademy.ru/posts/nastroika-http-autientifikatsii-nginx-v-ubuntu-14/ Wed, 17 Jun 2015 12:21:34 +0300
<![CDATA[OptionsResolver]]> Я думаю, вы не раз писали что-то подобное:

$options = [
    'page' => isset($input['page']) ? $input['page'] : 1,
    'items' => isset($input['items']) ? $input['items'] : 10
];

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

]]>
http://devacademy.ru/posts/obzor-komponentov-symfony2-optionsresolver-1/ Sun, 14 Jun 2015 15:32:59 +0300
<![CDATA[Структура веб-приложений]]> Одна из постоянных задач, с которой я сталкиваюсь в роли веб-разработчика, это какую архитектуру выбрать для моего приложения. Я считаю, что на эту проблему стоит потратить немало времени. Мне понравились идеи, которые изложил Kris Wallsmith на SymfonyCon. Конечно, я не разделяю его мнения полностью, но его речь вдохновляет, да и всегда интересно заглянуть за кулисы и понять других разработчиков.

]]>
http://devacademy.ru/posts/struktura-vieb-prilozhienii/ Sun, 14 Jun 2015 15:26:03 +0300
<![CDATA[Применение кеширования Doctrine DBAL в Symfony2]]> В Symfony2 DoctrineBundle отвечает за внедрение и настройку Doctrine, включая DBAL. Но этот бандл пока не поддерживает настройку кеширования DBAL (но поддерживает его для ORM части Doctrine).

Для начала вам потребуется создать CompilerPass внутри своего бандла. Он будет отвечать за выгрузку службы dbal и добавления необходимых настроек для поддержки кеширования.

<?php
// src/Acme/HelloBundle/DependencyInjection/Compiler/AddDbalCacheConfigurationPass.php

namespace Acme\HelloBundle\DependencyInjection\Compiler;

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;

class AddDbalCacheConfigurationPass implements CompilerPassInterface
{
    public function process(ContainerBuilder $container)
    {
        $id = 'doctrine.dbal.default_connection.configuration';

        if ($container->hasDefinition($id)) {
            $container
                ->getDefinition($id)
                    ->addMethodCall('setResultCacheImpl', array(new Reference('doctrine.orm.default_result_cache')))
            ;
        }
    }
}
]]>
http://devacademy.ru/posts/primenenie-keshirovaniya-doctrine-dbal-v-symfony2/ Thu, 16 Apr 2015 07:14:19 +0300
<![CDATA[Чего ожидать от PHP 7, часть 2]]> В первой части мы рассмотрели наиболее важные аспекты обратной совместимости и новый функционал в PHP 7. В этой же статье мы рассмотрим 6 других нововведений в PHP 7, о которых, однозначно, стоит знать.

Новый экранирующий символ \u позволит указывать символы юникода в шестнадцатеричном формате внутри строк PHP:

Формат использования имеет следующий вид: \u{CODEPOINT}, например символ зеленого сердца можно напечатать так: `\u{1F49A}.

]]>
http://devacademy.ru/posts/chego-ozhidat-ot-php-7-chast-2/ Wed, 15 Apr 2015 13:52:05 +0300
<![CDATA[12 основных команд для вставки данных в MySQL с примерами]]> Следующая команда соединит нас с БД devdb, имя пользователя devuser и пароль mysecretpwd.

mysql -u devuser -pmysecretpwd devdb
mysql>

Мы будем вводить данные в таблицу employee. Структура таблицы приведена ниже:

mysql> desc employee;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(11)     | NO   | PRI | NULL    | auto_increment |
| name   | varchar(20) | YES  |     | NULL    |                |
| dept   | varchar(10) | YES  |     | NULL    |                |
| salary | int(10)     | YES  |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+
]]>
http://devacademy.ru/posts/12-osnovnykh-komand-dlia-vstavki-dannykh-v-mysql-s-primierami/ Tue, 14 Apr 2015 11:53:53 +0300
<![CDATA[Новый установщик Symfony: самый быстрый способ начать работу с Symfony]]> Совсем недавно команда Symfony презентовала установщик для своего фреймворка. Основная задача которого - упростить процесс установки Symfony.

До настоящего времени установка Symfony подразумевала несколько шагов:

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

]]>
http://devacademy.ru/posts/novyij-ustanovschik-symfony-samyij-byistryij-sposob-nachat-rabotu-s-symfony/ Mon, 13 Apr 2015 07:52:10 +0300
<![CDATA[50 самых часто используемых команд в UNIX/Linux с примерами]]> Конечно, не стоит воспринимать эту статью как подробное руководство, но она определенно даст вам отправную точку при работе с Linux. Советую поставить себе в браузере закладку на этот список.

Если я что то упустил, то дайте мне знать в комментариях.

Создание tar архива

$ tar cvf archive_name.tar dirname/

извлечение существующего архива:

$ tar xvf archive_name.tar
]]>
http://devacademy.ru/posts/50-samyih-chasto-ispolzuemyih-komand-v-unixlinux-s-primerami/ Thu, 09 Apr 2015 07:43:25 +0300
<![CDATA[Чего ожидать от PHP7. Часть 1]]> Совершено независимо от того как вы относитесь к PHP 7, он будет выпущен в этом году. Рабочее предложение по PHP 7 прошло практически единогласно (32 к 2). Теперь набор функций уже зафиксирован и мы увидим первый релиз уже в середине июня.

Но что это значит для конечного пользователя? Все мы видели с каким нежеланием веб хостинги переходили на PHP 5.х. Сколько мы увидим новых проблем связанных с обратной совместимостью и насколько это замедлит переход на последнюю версию?

]]>
http://devacademy.ru/posts/chego-ozhidat-ot-php7-chast-1/ Thu, 09 Apr 2015 07:31:55 +0300
<![CDATA[Повышение безопасности и упрощение разработки в Symfony2 при помощи аннотаций и фильтров Доктрины]]> Как вы и сами прекрасно понимаете, пользователь должен видеть только свои заказы, свои сообщения и так далее, и ни в коем случае не чужие. Но, конечно, иногда пропустив условие выборки данных, например, забыв указать WHERE в ParamConverter, мы нарушаем это правило.

Я покажу вам как можно легко избавиться от подобного рода проблем не только на определенных запросах и таблицах, а в пределах всего Symfony приложения. И в этом нам помогут аннотации и фильтры Доктрины.

]]>
http://devacademy.ru/posts/povyishenie-bezopasnosti-i-uproschenie-razrabotki-v-symfony2-pri-pomoschi-annotatsij-i-filtrov-doktrinyi/ Mon, 23 Mar 2015 11:37:47 +0300
<![CDATA[Что необходимо знать каждому Javascript разработчику]]> Javascript - постоянно развивающийся язык, особенно сейчас, когда установлен ежегодный график выхода обновлений спецификаций ECMAScript. В связи с этим важность знания Javascript за пределами jQuery возрастает.

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

]]>
http://devacademy.ru/posts/javascript/ Sun, 22 Mar 2015 08:07:18 +0300
<![CDATA[JSON конфиги в Golang]]> import "encoding/json"

Создадим древовидный JSON файл.

{
   "applications": [
       {
           "name": "app1",
           "db": {
              "host": "db2",
              "user": "root",
              "pass": "",
              "dbname": "test"
           }
       },
       {
           "name": "app2",
           "db": {
              "host": "db2",
              "user": "root",
              "pass": "",
              "dbname": "test"
           }
       }
    ]
}

Опишем структуру. Обращу внимание, что имена свойств нужно писать с большой буквы.

]]>
http://devacademy.ru/posts/json-konfigi-v-golang/ Sun, 22 Mar 2015 07:32:28 +0300
<![CDATA[Строки и и регулярные выражения]]>
  • выделяются одинарными или двойными кавычками
  • двойные кавычки применяются в случае парсинга переменных или использования специальных символов (\n). На скорость обработки данных не влияет
  • strlen($string) - возвращает длину строки, а именно количество байт, а не символов
  • str_word_count($string, $format, $charlist) - возвращает количество слов, $format (0 - возврат количества слов, 1 - массив из всех слов, 2 - ассоциативный массив, где в качестве ключей - положение в строке (индекс)), $charlist - список символов, из которых может состоять слово (то есть 3 - слово fri3nd будет посчитано).
  • count_chars($string, 1) - считает количество вхождений символов, 1 - режим, возвращает массив со всеми символами (0 - возвращает символы, не входящие в строку).
  • soundex($string) // высчитывает soundex ключ строки (строка длинной в 4 символа, начинающаяся с буквы), для поиска по произношению, например, soundex(“Euler”) == soundex(“Ellery”); // E460
  • metaphone($string, $phonemes) - высчитывает metaphone ключ для строки (является более точным сравнением чем soundex(), так как в ней учитываются правила произношения в английском языке, сгенерированные ключи разной длины), $phonemes ограничивает список возвращаемых символов.
  • trim($string, $optional_char_list) - убирает пробелы из начала и окончания строки (space/tab/newline); если задан $optional_char_list, то указанные символы так же удаляются.
  • ltrim($string, $optional_char_list) - удаляет пробелы из начала строки.
  • rtrim($string, $optional_char_list) - аналог chop(), удаляет пробелы с конца строки.
  • ]]>
    http://devacademy.ru/posts/podgotovka-k-zend-sertifikatsii-stroki-i-i-regulyarnyie-vyirazheniya/ Fri, 13 Mar 2015 13:08:24 +0300
    <![CDATA[Как создать таблицы в MySQL и MariaDB на сервере Ubuntu]]> MySQL и MariaDB две наиболее распространенные СУБД, использующие язык запросов SQL. Довольно большое число приложений для Ubuntu в той или иной степени используют MySQL или MariaDB, чтобы хранить свои данные.

    В этой статье мы рассмотрим как создавать таблицы для MySQL и MariaDB. Все примеры, приведенные ниже, проверялись на сервере Ubuntu 12.04 VPS, но они должны работать на любой машине с установленной системой Ubuntu.

    ]]>
    http://devacademy.ru/posts/kak-sozdat-tablitsyi-v-mysql-i-mariadb-na-servere-ubuntu/ Wed, 11 Mar 2015 09:04:02 +0300
    <![CDATA[Как базовые шаблоны помогают понять принцип работы контроллеров]]> Пол М. Джонс однажды завёл интересное обсуждение на тему применения шаблона MVC в веб, основные моменты которой он описал в статье Action-Domain-Responder. Предлагаю вам познакомиться с ней, после чего вы всегда сможете вернуться и прочитать эту статью.

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

    ]]>
    http://devacademy.ru/posts/kak-bazovyie-shablonyi-pomogayut-ponyat-printsip-rabotyi-kontrollerov/ Mon, 09 Mar 2015 12:08:28 +0300
    <![CDATA[Сравниваем AngularJS и EmberJS]]> В своей недавней статье мы сравнивали AngularJS с React и выделили отличия между двумя фреймворками. На этот раз рассмотрим EmberJS фреймворк, который отвечает за все “тяжелые” операции в веб-разработке. Ниже познакомимся с его историей, примерами использования, а так же сравним его с AngularJS в разрезе возможностей и функционала.

    EmberJS - это фреймворк для языка JavaScript, который изначально назывался SproutCore. В декабре 2011 года его решили переименовать в EmberJS для того, чтобы разделить виджет библиотеку SproutCore 1.0 и сам фреймворк. Роль главного разработчика EmberJS сыграл Yehuda Katz, который так же известен своим участием в разработке jQuery, Rails и SproutCore.

    ]]>
    http://devacademy.ru/posts/sravnivaem-angularjs-i-emberjs/ Wed, 04 Mar 2015 13:58:53 +0300
    <![CDATA[Сравнение AngularJS и React]]> В последнее время в области веб-разработки изменения происходят очень быстро. Без лишнего преувеличения, практически каждый месяц появляется новый JavaScript фреймворк, а разобраться во всем этом разнообразии не всегда просто. В этой и нескольких последующих статьях мы рассмотрим некоторые фронт-энд фреймворки для JavaScript и сравним их с AngularJS. Мы познакомимся с их историей и сравним их в функциональном разрезе. В этой статье мы разберёмся с таким фреймворком как React и посмотрим в чем он превосходит, а в чем уступает AngularJS.

    ]]>
    http://devacademy.ru/posts/sravnenie-angularjs-i-react/ Tue, 03 Mar 2015 11:56:19 +0300
    <![CDATA[Все, что необходимо знать о HTTP2]]> Протокол передачи гипертекста, известный как HTTP, с 1999 года лежит в основе обмена данными в сети.

    Совсем недавно Инженерный Совет Интернета (IETF) объявил о готовности HTTP2. Это будет первое обновление протокола за 16 лет. Об этом заявил Марк Ноттингем, глава рабочей группы IETF HTTP, во вторник.

    Как только протокол HTTP2 пройдет все согласования в IETF, он будет опубликован и станет главным протоколом Web. Так что же это означает для пользователей?

    ]]>
    http://devacademy.ru/posts/vse-chto-neobhodimo-znat-o-http2/ Thu, 19 Feb 2015 13:46:06 +0300
    <![CDATA[Применение преобразователя данных]]> Довольно часто нам приходится сталкиваться с ситуацией, когда введенные пользователям данные необходимо привести к какому либо другому виду. Конечно можно вручную преобразовать их в контроллере. А что если эти данные вам понадобятся в еще одной форме в другом месте в приложении?

    Допустим вы используете связь один к одному между сущностями Task (задача) и Issue (проблема), т.е. задача может иметь проблему, а может и не иметь. Если вы просто добавите выпадающий список с полным набором возможных проблем, то отыскать в нем нужную вам будет практически невозможно. А можете создать текстовое поле, в которое пользователь будет вводить номер проблемы.

    ]]>
    http://devacademy.ru/posts/obzor-komponentov-symfony2-primenenie-preobrazovatelya-dannyih/ Thu, 19 Feb 2015 12:32:37 +0300
    <![CDATA[Функции]]>
  • Функция может содержать в себе любой корректный PHP код, включая другие функции и классы.
  • Функция не обязательно должна быть определена до вызова, за исключением её использования в условных операторах.
  • Объявленную функцию нельзя переопределить.
  • В PHP все функции и классы имеют глобальную область видимости - их допускается вызывать даже за пределами функции в случае, когда они были заданы внутри этой функции и наоборот.
  • имена функций не чувствительны к регистру
  • типы: встроенные, определенные пользователем, сторонние (например из расширений).
  • global $id; или $GLOBALS["id"] используются для доступа к глобальным переменным (по сути global $id это ссылка на $var = & $GLOBALS["id"]).
  • В PHP5 появилась возможность задать значение параметра функции по-умолчанию даже для параметров, передаваемых по ссылке (если параметр не был передан, то создается новая переменная).
  • В PHP5 объекты всегда передаются по ссылке, если только они не были клонированы.
  • допускается рекурсивный вызов функций (то есть function recursion($a) { if($a<10){recursion($a+1);} }), следите за тем, чтобы выполнение функций было ограниченно.
  • чтобы проверить существует ли функции в контексте используйте function_exists($function_name).
  • $arr = get_defined_functions() - даст вам полный список всех функций, $arr['user'] - функции заданные пользователем.
  • ]]>
    http://devacademy.ru/posts/podgotovka-k-zend-sertifikatsii-funktsii/ Tue, 17 Feb 2015 18:46:44 +0300
    <![CDATA[Основы PHP]]> Стандартные теги - наилучшее решение при разработке свободно переносимого приложения с учетом обратной совместимости, так как эти теги никогда не будут удалены и их также невозможно отключить через файл настройки.

    <?php
    ... code
    ?>

    Тем не менее в начале страницы может присутствовать только один открывающий тег <?php. Короткие теги возможно отключить (как правило из-за совместимости с XML) установив директиву short_open_tag в файле php.ini:

    ]]>
    http://devacademy.ru/posts/podgotovka-k-zend-sertifikatsii-osnovyi-php/ Tue, 03 Feb 2015 12:17:30 +0300
    <![CDATA[Разбираемся в HTTP прокси NGINX, балансировке нагрузки, буферизации и кешировании]]> В этой мы рассмотрим возможности сервера NGINX в http проксировании, что помогает перенаправлять запросы на бекэнд сервера для дальнейшей обработки. Довольно часто Nginx настраивают в качестве реверсивного прокси для упрощения масштабирования инфраструктуры или для перенапраления запросов на сервера, которые не предназначены для работы при большой нагрузке.

    Также мы затронем каким образом можно осуществить масштабирование при помощи встроенных в Nginx средствах балансировки и каким образом буферизация и кеширование помогут вам улучшить работоспособность прокси.

    ]]>
    http://devacademy.ru/posts/razbiraemsya-v-http-proksi-nginx-balansirovke-nagruzki-buferizatsii-i-keshirovanii/ Thu, 29 Jan 2015 13:44:18 +0300
    <![CDATA[Простая балансировка нагрузки для MySQL и PHP с помощью библиотеки mysqlnd]]> MySQL всегда занимал первое место в качестве СУБД для работы с PHP. Так было практически с создания языка. Конечно сейчас, применяются и PostgreSQL, SQL Server или Oracle, но для работы в web зачастую используется MySQL.

    Выбор пал на MySQL потому, что на запуск решения не приходилось тратить много времени. libmysqlclient распространялся вместе с PHP до тех пор пока не был лицензирован под GPL, после чего эта библиотека была исключена из состава PHP.

    ]]>
    http://devacademy.ru/posts/prostaya-balansirovka-nagruzki-dlya-mysql-i-php-s-pomoschyu-biblioteki-mysqlnd/ Fri, 23 Jan 2015 09:40:07 +0300
    <![CDATA[Авторизация]]> В случае если любой из провайдеров аутентификации (см. Провайдеры аутентификации) подтвердит непроверенный токен, то будет возвращен аутентифицированный токен. Аутентификационный подписчик должен напрямую установить этот токен в TokenStorageInterface при помощи метода [setToken()](http://api.symfony.com/2.6/Symfony/Component/Security/Core/Authentication/Token/Storage/TokenStorageInterface.html#setToken()).

    После этого пользователь считается аутентифицированным, то есть идентифицированным. Теперь в любой части приложения вы можете использовать этот токен для определения доступен ли определенный URL пользователю или может ли он изменять определенный объект. Само решение о праве доступа принимается экземпляром AccessDecisionManagerInterface.

    ]]>
    http://devacademy.ru/posts/obzor-komponentov-symfony2-avtorizatsiya/ Tue, 20 Jan 2015 11:16:42 +0300
    <![CDATA[Что нового в Symfony 2.7: Twig в роли полноправной составляющей фреймворка]]> Когда я (далее Я заменяйте на Fabien Potencier) начинал работать над Symfony2, twig не существовал вовсе. Поэтому для упрощения работы с PHP я создал Symfony Templating Engine.

    Позднее, осознав все неудобства работы с PHP в качестве шаблонизатора, я решил написать свой язык для шаблонов, а именно - Twig, в основу которого я взял язык Jinja2 из Python. Таким образом Symfony2 стал первым популярным фреймворком, который использовал шаблонизатор не на PHP. Конечно, тогда я и не мог представить, что Twig станет настолько популярным среди разработчиков Symfony и поэтому я предусмотрел возможность использования в Symfony2 как Twig, так и PHP.

    ]]>
    http://devacademy.ru/posts/chto-novogo-v-symfony-27-twig-v-roli-polnopravnoj-sostavlyayuschej-frejmvorka/ Thu, 15 Jan 2015 07:48:20 +0300
    <![CDATA[10 вопросов, которые должен задать себе веб-разработчик]]> Тогда сразу же откладываем в сторону книги из серии “Изучаем супер-пупер язык версии 8.3 за 24 часа”. И просто каждый день отвечаем на следующие десять вопросов.

    Ищите паттерны в рабочих и проблемных участках кода. Таким образом вы откроете для себя связь между вещами, которые на первый взгляд, как вам показалось, не имеют ничего общего. Для более глубоко понимания своей работы, просто заведите себе новую привычку - спрашивайте себя “Нет ли здесь шаблона”.

    ]]>
    http://devacademy.ru/posts/10-voprosov-kotoryie-dolzhen-zadat-sebe-veb-razrabotchik/ Sat, 27 Dec 2014 18:34:48 +0300
    <![CDATA[Размещение Rails приложения на Ubuntu 14.04 и серверах Apache и Passenger]]> Думаю, что стоит взять образ 32 битной Ubuntu, так как эта система потребляет гораздо меньше памяти чем её 64 битный аналог (примерно в два раза). Тем не менее, если вам нужна более мощная станция или вы планируете добавлять память размером болльше 4 ГБ, то тогда следует рассмотреть Ubuntu 64.

    Используйте только Ubuntu 14.04, так как на момент написания этой статьи Ubuntu 14.10 не имеет в своих хранилищах Passenger APT репозиторий. Так же Ubuntu 14.04 это LTS релиз, что означает, что её поддержка будет осуществляться куда дольше, чем у 14.10. Такие релизы изначально задуманы таким образом, чтобы люди могли дольше его использовать без переустановок. Ubuntu гарантирует выпуск обновлений для этих версий в течение пяти лет.

    ]]>
    http://devacademy.ru/posts/razmeschenie-rails-prilozheniya-na-ubuntu-1404-i-serverah-apache-i-passenger/ Mon, 22 Dec 2014 12:13:18 +0300
    <![CDATA[Новый элемент HTML <picture> позволит загружать сайты быстрее]]> Вы уже слышали о том, что Интернет становится все более визуальным и для бизнес-сайтов невероятно важными становятся хорошие изображения.

    Однако подобные картинки могут вдарить по посетителям вашей странички. Объем изображения может занимать 1 МБ от объема средней страницы в 1,7 МБ.

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

    ]]>
    http://devacademy.ru/posts/novyij-element-html-picture-pozvolit-zagruzhat-sajtyi-byistree/ Wed, 26 Nov 2014 14:10:08 +0300
    <![CDATA[Введение в облачный хостинг]]> Облачный хостинг - способ использования виртуальных серверов таким образом, что пользователь может легко создавать, изменять и удалять эти сервера. По сути облачный сервер - это выделенные ресурсы на физическом сервере, как, например, CPU ядра или память, где пользователь может установить нужную ему ОС и настроить её по своему усмотрению. Такой подход часто применяется для хостинга сайтов, отправки и хранении электронной почты, а также при размещении других веб приложений.

    ]]>
    http://devacademy.ru/posts/vvedenie-v-oblachnyij-hosting/ Sun, 23 Nov 2014 17:55:23 +0300
    <![CDATA[Углубляемся во внедрение зависимостей в AngularJS]]> В AngularJS существует один недооцененный, но очень важный компонент. Именно он отвечает за целостность и скорость работы фреймворка. Внедрение зависимостей лежит за всеми способностями AngularJS.

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

    ]]>
    http://devacademy.ru/posts/uglublyaemsya-vo-vnedrenie-zavisimostej-v-angularjs/ Thu, 20 Nov 2014 07:39:28 +0300
    <![CDATA[Руководство по стилю программирования и оформления приложений на AngularJS]]> Цель этого руководства – показать основные моменты, на которые стоит ориентироваться при создании AngularJS приложений, которые я не просто опишу, но и обосную почему я решил сделать именно так.

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

    ]]>
    http://devacademy.ru/posts/rukovodstvo-po-stilyu-programmirovaniya-i-oformleniya-prilozhenij-na-angularjs/ Sun, 16 Nov 2014 17:33:44 +0300
    <![CDATA[Создания директивы простого диалогового окна в Angular.js]]> За период своей работы я работал с десятком плагинов по созданию модальных окон, почти все из которых были построены на основе jQuery. Но совсем недавно я осознал, что такие окна самому создать, зачастую, проще. Давайте так и сделаем в стиле Angular.

    Хотелось бы создавать окна при помощи следующего HTML кода:

    <modal-dialog show='modalShown' width='750px' height='90%'>
     <p>Modal Content Goes here<p>
    </modal-dialog>
    ]]>
    http://devacademy.ru/posts/sozdaniya-direktivyi-prostogo-dialogovogo-okna-v-angularjs/ Sun, 16 Nov 2014 15:53:43 +0300
    <![CDATA[Основы управления пакетами в Ubuntu и Debian]]> Одно из основных преимуществ Linux систем - это управление пакетами. Формат самих пакетов и способы управления ими отличается в разных дистрибутивах, но, тем не менее, можно выделить два основных направления.

    В дистрибутивах на базе RHEL используется RPM формат пакетов, а управлять ими можно при помощи rpm или yum. Второе направление используется в операционных системах семейства Debian (например Ubuntu). В них применяется формат пакетов deb, а роль инструментов, помогающих управлять ими, apt и dpkg. Именно вторую группу мы и обсудим в статье. В этой статье-шпаргалке мы пройдемся по всем основным инструментам для управления пакетами, которыми пользуются системные администраторы на Debian и Ubuntu. Сохранив эту статью вы сможете всегда к ней обратиться при возникновении проблем с пакетами.

    ]]>
    http://devacademy.ru/posts/osnovyi-upravleniya-paketami-v-ubuntu-i-debian/ Thu, 13 Nov 2014 12:32:53 +0300
    <![CDATA[Использование классов избирателей для проверки прав доступа в Symfony 2]]> В Symfony права доступа к данным можно проверять используя ACL модуль, но чаще всего его использование является излишним,загромаждающим приложение. Куда удобнее использовать свои созданные правила, больше походящие на простые условия.

    Для того, чтобы использовать классы избирателей (Voters), сначала стоит понять как Symfony с ними взаимодействует. Все они просматриваются каждый раз при вызове метода isGranted() службы security.context. Каждое правило либо разрешает, либо запрещает доступ к определенному ресурсу.

    ]]>
    http://devacademy.ru/posts/ispolzovanie-klassov-izbiratelej-dlya-proverki-prav-dostupa-v-symfony-2/ Sat, 08 Nov 2014 07:55:05 +0300
    <![CDATA[Добавление и удаление пользователей на сервере CentOS 7]]> При создании сервера на Linux, добавление и удаление пользователей - одна из первых задач, с которой вам придется столкнуться. При первом запуске вы получаете только пользователя под именем root. Конечно он открывает вам полный доступ к системе, но использование такого пользователя всегда - не самая разумная идея, так как этот пользователь намного больше подвержен к атакам по безопасности, чем любой другой пользователь. Причиной тому является тот факт, что в таком случае все команды исполняются с правами администратора.

    ]]>
    http://devacademy.ru/posts/dobavlenie-i-udalenie-polzovatelej-na-servere-centos-7/ Wed, 05 Nov 2014 19:29:29 +0300
    <![CDATA[Обзор самых частых ошибок HTTP протокола]]> Каждый раз, при обращении к веб серверу, в ответ вы получаете код статуса ответа. Эти коды делятся на пять основных групп, а каждый код имеет трехзначное значение. Группу кода легко определить по первой цифре:

    • 1хх - информационный
    • 2хх - удачное завершение
    • 3хх - перенаправление
    • 4хх - ошибка на стороне клиента
    • 5хх - ошибка на стороне сервера
    ]]>
    http://devacademy.ru/posts/obzor-samyih-chastyih-oshibok-http-protokola/ Wed, 05 Nov 2014 11:55:02 +0300
    <![CDATA[Composer - все дело в lock файле]]> Composer давно и, видимо, надолго занял твердое место в качестве менеджера пакетов для PHP. Он довольно прост, эффективен и встречается повсеместно.

    Известно, что достаточно создать файл composer.json, в котором просто перечислить список необходимых пакетов и их версий и запустить composer install.

    Потом просто сохраняете вашу версию в систему контроля версий, и любой человек работающий с вами в команде просто выполняет composer install и получает проект со всеми установленными зависимостями.

    ]]>
    http://devacademy.ru/posts/composer-vse-delo-v-lock-fajle/ Sun, 02 Nov 2014 10:21:46 +0300
    <![CDATA[Работаем с data атрибутами в HTML5]]> До создания HTML5 работать с атрибутами в HTML элементах, мягко говоря, не доставляло удовольствия. Приходилось использовать такие атрибуты, как rel или class. А некоторые разработчики даже создавали свои атрибуты.

    Но дело координально изменилось когда HTML5 предоставил нам возможность использования своих data атрибутов. Теперь довольно легко можно сохранять дополнительные данные стандартными средствами.

    ]]>
    http://devacademy.ru/posts/rabotaem-s-data-atributami-v-html5/ Sat, 01 Nov 2014 08:05:12 +0300
    <![CDATA[Определение и проверка параметров конфигурации для бандла в Symfony 2]]> После загрузки параметров из различных источников, их значение и структуру можно проверить при помощи “Definition” части компонента Config. Чаще всего параметры устроены иерархично. Так же, как правило, на них накладываются определенные ограничение, например, параметр может принимать только числовое значение или быть одним из нескольких предопределенных значений.

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

    ]]>
    http://devacademy.ru/posts/opredelenie-i-proverka-parametrov-konfiguratsii-dlya-bandla-v-symfony-2/ Wed, 29 Oct 2014 12:20:15 +0300
    <![CDATA[Введение в сети, интерфейсы и протоколы]]> Для любого кто имеет дело с обслуживанием серверов необходимо базовое понимания сетевых технологий. Это поможет вам не только с легкостью публиковать свои услуги в интернет, но и также быстро находить и устранять проблемы связанные с сетевыми технологиями. Все, что я буду описывать, относится ко всем операционным системам и поможет в настройке различных сетевых служб на вашем сервере.

    ]]>
    http://devacademy.ru/posts/vvedenie-v-seti-interfejsyi-i-protokolyi/ Mon, 27 Oct 2014 11:01:43 +0300
    <![CDATA[Введение в HAProxy и принципы распределения нагрузки]]> HAProxy (High Availability Proxy) - популярный прокси сервер для Linux, Solaris и FreeBSD с возможностью балансировки нагрузки TCP/HTTP с открытым программным кодом. Его основная задача - повышение производительности серверной среды путем распределения рабочей нагрузки среди нескольких серверов (web, приложения, базы данных). Им пользуются такие известные проекты как GitHub, Imgur, Instagram и Twitter.

    ]]>
    http://devacademy.ru/posts/haproxy/ Tue, 21 Oct 2014 12:53:56 +0400
    <![CDATA[57 заметок для стартапа]]> Несмотря на то, что уже существует довольно много заметок, связанных со стартапами, написаны которые были опытными и талантливыми людьми, я позволю себе написать еще одну. Постараюсь изложить собственный опыт, полученный в течение последних четырех лет. Сразу отмечу - никому не пожелал такого тяжелого пути.

    ]]>
    http://devacademy.ru/posts/57-zametok-dlya-startapa/ Wed, 15 Oct 2014 11:36:29 +0400
    <![CDATA[Установка и настройка NoSQL субд RethinkDB]]> RethinkDB - документно-ориентированная база данных, с открытым исходным кодом, с богатыми возможностями администрирования и простой моделью горизонтального масштабирования.

    Одна особенность, которая выделяет RethinkDB среди других NoSQL баз данных - проста в использовании с различными языками программирования. Эта СУБД поддерживает множество драйверов, таких как: php, python, ruby и т.д, что позволяет разработчикам взаимодействовать с базой данных, используя наиболее знакомый язык программирования.

    ]]>
    http://devacademy.ru/posts/ustanovka-i-nastrojka-nosql-subd-rethinkdb/ Wed, 24 Sep 2014 12:12:36 +0400
    <![CDATA[Рекурсивные шаблоны в AngularJS]]> Предположим, что у нас есть иерархический набор данных, например такой как список категорий для продуктов в интернет магазине. Как мы можем использовать AngularJS для отображения вложенных категорий независимо от их глубины вложенности?

    Ответ на этот вопрос достаточно прост - рекурсивные шаблоны, а для их реализации мы будем использовать директиву ng-include.

    ]]>
    http://devacademy.ru/posts/rekursivnyie-shablonyi-v-angularjs/ Sun, 21 Sep 2014 14:45:23 +0400
    <![CDATA[Настройка пользовательских и групповых прав доступа с помощью chmod]]> Вообще, когда мы говорим о каталогах или файлах, нас интересует три набора прав:

    • Пользовательские - касающиеся владельца файла
    • Групповые - права, касающиеся участников одной группы
    • Все остальные - разрешения для тех, кто не подходит к первым двум группам

    Соответственно, каждый пользователь имеет своё уникальное имя и, как правило, принадлежит к одной или нескольким группам. Более того в одну группу может входить несколько пользователей.

    ]]>
    http://devacademy.ru/posts/nastrojka-polzovatelskih-i-gruppovyih-prav-dostupa-s-pomoschyu-chmod/ Fri, 29 Aug 2014 20:51:51 +0400
    <![CDATA[Планировщик событий в MySQL]]> Начиная с версии 5.1 в MySQL появился планировщик событий, позволяющий выполнять различные действия в определенное время. Из этого следует то, что часть функционала можно перенести из Cron на сам MySQL.

    По умолчанию, планировщик отключен. Включим его в конфиге.

    event_scheduler = On

    Или при помощи запроса.

    SET GLOBAL event_scheduler = On;

    Проверить текущее значение переменной можно следующим запросом.

    ]]>
    http://devacademy.ru/posts/planirovschik-sobyitij-v-mysql/ Tue, 26 Aug 2014 15:13:01 +0400
    <![CDATA[Цепочка обязанностей]]>
  • Паттерн Chain of Responsibility (Цепочка обязянностей) позволяет избежать жесткой зависимости отправителя запроса от его получателя (т.е. обеспечивается слабая связанность компонентов системы), при этом запрос может быть обработан несколькими объектами.
  • Объекты-получатели связываются в цепочку. Запрос передается по этой цепочке, пока не будет обработан.
  • Вводит конвейерную обработку для запроса с множеством возможных обработчиков.
  • ]]>
    http://devacademy.ru/posts/shablonyi-proektirovaniya-v-php-tsepochka-obyazannostej/ Sun, 24 Aug 2014 13:34:52 +0400
    <![CDATA[Отправка писем через Mailer]]> Symfony по-умолчанию содержит в себе один из лучших решений в PHP для организации рассылки - Swift Mailer. Конечно же библиотека полностью интегрирована с Symfony и включает в себя некоторые дополнительные функции. Давайте начнем с отправки простого письма с токеном, в котором партнеру сообщается, что его аккаунт был активирован. Но сначала надо настроить несколько параметров в файле parameters.yml:

    ]]>
    http://devacademy.ru/posts/symfony-2-joboard-otpravka-pisem-cherez-mailer/ Tue, 05 Aug 2014 14:54:38 +0400
    <![CDATA[Почему лучше использовать Python в качестве первого языка программирования]]> Чтобы начать понимать Python достаточно хотя бы немного знать английский язык. Как показывают исследования Ассоциации Вычислительной Техники, язык Python занимает лидирующие позиции в качестве первого языка программирования во многих американских колледжах.

    По опросу 39 передовых IT факультетов США, он сместил Java и стал первым языком программирования общего назначения, на который обращают внимание начинающие программисты. 8 из 10 передовых IT факультетов (80%) и 27 из 39 (69%) преподают Python на первых этапах изучения профессии.

    ]]>
    http://devacademy.ru/posts/pochemu-luchshe-ispolzovat-python-v-kachestve-pervogo-yazyika-programmirovaniya/ Mon, 28 Jul 2014 14:54:38 +0400
    <![CDATA[API для партнёров]]> В дополнение к новостным лентам, соискатели могут получать информацию о новых вакансиях в режиме реального времени.

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

    ]]>
    http://devacademy.ru/posts/symfony-2-joboard-api-dlya-partnyorov/ Sun, 22 Jun 2014 16:25:13 +0400
    <![CDATA[Шпаргалка по оптимизации индексирования в Elasticsearch]]> Планируете проиндексировать большой объем данных в Elastisearch? Или вы уже пытались это сделать, но производительность не обрадовала? В этой статье я приведу ряд советов по ускорению процесса индексирования с Elasticsearch. Одни я опробовал лично, про другие просто читал, но считаю, что они должны помочь. В любом случае, надеюсь, мои советы вам помогут.

    ]]>
    http://devacademy.ru/posts/shpargalka-po-optimizatsii-indeksirovaniya-v-elasticsearch/ Fri, 20 Jun 2014 09:21:19 +0400
    <![CDATA[Очередь сообщений и асинхронные задачи с помощью Celery и RabbitMQ]]> Асинхронное или неблокирующее выполнение операций - это такой метод исполнения, при котором некоторые задачи выполняются отдельно от основного потока программы. Такой подход даёт несколько преимуществ, одно из которых - непрерывная работа кода на стороне пользователя.

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

    ]]>
    http://devacademy.ru/posts/ochered-soobschenij-i-asinhronnyie-zadachi-s-pomoschyu-celery-i-rabbitmq/ Mon, 16 Jun 2014 11:02:33 +0400
    <![CDATA[Создаём игру крестики-нолики на Kivy]]> Kivy - кросcплатформенный графический фреймворк на Python, направленный на создание новейших пользовательских интерфейсов даже для приложений, работающих с сенсорными экранами. Приложения, написанные на Kivy, могут работать не только на таких традиционных платформах как Linux, OS X и Windows, но также на Android, iOS и Rapberry Pi.

    Это означает, что в разработке можно использовать различные библиотеки, как Requests, SQLAlchemy или даже NumPy. Допускается даже доступ к нативным мобильным API посредством дочерних проектов Kivy. Еще одна отличительная черта Cython - оптимизированный конвейерный обработчик OpenGL. При его помощи можно легко добиться сложных GPU эффектов, не прибегая к сложным конструкциям в коде.

    ]]>
    http://devacademy.ru/posts/sozdayom-igru-krestiki-noliki-na-kivy/ Sun, 15 Jun 2014 16:26:59 +0400
    <![CDATA[Балансировка нагрузки для NGINX]]> Недавно я написал статью на тему как настроить распределение нагрузки на Nginx, включил в неё немного примеров кода, но, как мне показалось, не всем пользователям она показалась исчерпывающей (включая меня). Поэтому сегодня я приведу пример настройки из реального опыта.

    Описание сети: 3 сервера / машины, работающие на базе Linux (Fedora, Rhel, Centos) .

    ]]>
    http://devacademy.ru/posts/balansirovka-nagruzki-dlya-nginx/ Wed, 11 Jun 2014 13:46:57 +0400
    <![CDATA[RSS]]> Во время поиска работы вы, наверняка, хотели бы получать свежие вакансии сразу же после их публикации. Согласитесь, довольно неудобно каждый раз проверять сайт, поэтому мы создадим несколько новостных лент (RSS), чтобы наши пользователи всегда были в курсе событий.

    При помощи шаблонов мы можем показать содержание страницы в любом формате. Хотя чаще всего они используются для генерации HTML, мы вполне можем применять шаблоны чтобы получить JavaScript, CSS, XML или любой другой формат.

    ]]>
    http://devacademy.ru/posts/symfony-2-joboard-rss/ Tue, 10 Jun 2014 17:09:32 +0400
    <![CDATA[Безопасность]]> Безопасность - это двухэтапный процесс, целью которого является запретить или разрешить доступ к ресурсу для определённых групп пользователей. Первый этап - аутентификация - система идентифицирует пользователя, исходя из предоставленных им данных. На втором этапе система переходит к авторизации и определяет, имеет ли пользователь доступ к определенным данным.

    Настройки системы безопасности хранятся в файле app/config/security.yml. Изменим этот файл:

    ]]>
    http://devacademy.ru/posts/symfony-2-joboard-biezopasnost/ Sun, 08 Jun 2014 12:43:59 +0400
    <![CDATA[Режимы наложения CSS]]> Если вам доводилось сталкиваться с программами для фотомонтажа (Adobe Photoshop, Pixelmator, GIMP), то вы, наверняка, знакомы с ними. Как можно понять из названия, режимы наложения определяют, как одно изображение накладывается на другое. В зависимости от выбранного режима, вы получите разный результат.

    Эти режимы стали доступны в CSS в соответствии со спецификацией. Они определяют, как каждый цвет совмещается с другим на внизу лежащем слое. Таким образом можно добиться довольно интересных результатов.

    ]]>
    http://devacademy.ru/posts/rezhimyi-nalozheniya-css/ Fri, 06 Jun 2014 10:46:49 +0400
    <![CDATA[Декораторы в Python]]> Для понимания декораторов, сначала надо осознать, что все функции в Python это объекты. Что влечет за собой ряд последствий. Рассмотрим их на простом примере:

    def shout(word="yes"):
        return word.capitalize()+"!"
    
    print shout()
    # outputs : 'Yes!'print
    
    # так как это объект, вы можете назначить функцию переменной 
    scream = shout
    
    # Обратите внимание, мы не используем скобки: мы не вызываем функцию, а определяем занчение переменной scream 
    print scream()
    # outputs : 'Yes!'
    
    # Более того, можете удалить старое имя shout, а функция будет все еще доступна из scream 
    del shout
    try:
        print shout()
    except NameError, e:
        print e
    #outputs: "name 'shout' is not defined"
    
    print scream()
    # outputs: 'Yes!'
    ]]>
    http://devacademy.ru/posts/dekoratoryi-v-python/ Mon, 02 Jun 2014 07:30:25 +0400
    <![CDATA[Пространства имён в PHP]]> Начиная с версии 5.3 в PHP были добавлены пространства имен. Должен сказать, что большинство современных языков программирования уже довольно давно поддерживают этот функционал, так что можно сказать, что PHP немного задержались. Тем не менее, давайте рассмотрим как же это нововведение повлияло на разработку приложений.

    PHP не позволяет использовать два класса с одинаковым названием. Они должны быть уникальны. Представьте себе, вы используете какую-либо стороннюю библиотеку, в которой присутствует класс User. Это означает, что свой собственный класс с таким же названием вы уже не сможете использовать. Что не совсем нам подходит, ведь название для класса очень даже удобное.

    ]]>
    http://devacademy.ru/posts/php/ Wed, 28 May 2014 19:02:52 +0400
    <![CDATA[Веб аналитика с помощью фреймворка MongoDB Aggregation]]> До версии 2.1 для агрегации в MongoDB (группировка документов по ключам, вычисление общего или среднего значения и т.д.) приходилось использовать MapReduce., что довольно успешно делали программисты практически на интуитивном уровне. Конечно, присутствует определенный порог вхождения для полного понимания процесса, но использование MapReduce в приложении, написанном не на JavaScript, требует “хакерских” способностей.

    ]]>
    http://devacademy.ru/posts/mongodb-aggregation/ Tue, 27 May 2014 12:16:52 +0400
    <![CDATA[Интерфейс администратора]]> После завершения 11 части наше приложение вполне работоспособно. Им могут пользоваться как соискатели, так работодатели. Настало время обсудить администраторскую составляющую нашего сайта. При помощи Sonata Admin Bundle мы полностью реализуем интерфейс администратора менее чем за час.

    Чтобы установить последнюю версию бандла, добавьте в файл composer.json следующие строки:

    "sonata-project/admin-bundle": "dev-master",
    "sonata-project/doctrine-orm-admin-bundle": "dev-master"

    Затем запустите команду обновления пакетов composer:

    ]]>
    http://devacademy.ru/posts/symfony-2-joboard-interfejs-administratora/ Mon, 26 May 2014 08:58:44 +0400
    <![CDATA[Тестирование форм]]> Давайте откроем файл JobControllerTest и добавим в него функциональный тест охватывающий процесс создания и валидации вакансии. В конце файла добавьте следующий код:

    <?php
    
    # src/App/JoboardBundle/Tests/Controller/JobControllerTest.php
    // ...
    
    public function testJobForm()
    {
       $client  = static::createClient();
       $crawler = $client->request('GET', '/job/new');
    
       $this->assertEquals('App\JoboardBundle\Controller\JobController::newAction',      $client->getRequest()->attributes->get('_controller'));
    }

    Теперь воспользуемся методом selectButton() объекта $crawler для получения формы. Этот метод позволяет выбирать элементы с тегом button и поля ввода submit. После этого через метод form() этого же объекта, получим доступ к экземпляру формы:

    ]]>
    http://devacademy.ru/posts/symfony-2-joboard-tiestirovaniie-form/ Tue, 20 May 2014 13:49:33 +0400
    <![CDATA[Nested Set]]> Создание модели для хранения иерархических данных - совсем непростая задача. Что же мы подразумеваем под иерархическими данными? Представьте, что вам необходимо организовать список продуктов по категориям. Например, у вас будет несколько основных категорий: продукты, оборудование, электроника. А далее вам потребуется разбить их на подкатегории, а те в свою очередь, на более узкие категории. На бумаге всё выглядит довольно просто, а вот в таблице СУБД (система управления базами данных) дело обстоит совсем по другому. В этой статье я попробую рассказать об основной идее этой модели и когда её следует применять. Начну с объяснения более простой иерархической модели, а далее перейдём к модели вложенных множеств.

    ]]>
    http://devacademy.ru/posts/nested-set/ Thu, 15 May 2014 07:59:42 +0400
    <![CDATA[Создание CLI приложения на NodeJS]]> Я только что закончил работу над CLI приложением на NodeJS, sike - инструмент для оповещения пользователей через заданный интервал времени, определенное количество раз. Оповещения задаются при помощи командной строки.

    Эта статья описывает процесс создания простого cli приложения, которое работает как echo. Пользователь сможет выполнить что-то в этом роде:

    cli -m hello

    и терминал просто выведет “hello”.

    ]]>
    http://devacademy.ru/posts/cli-nodejs/ Tue, 13 May 2014 10:04:28 +0400
    <![CDATA[Как установить и использовать Redis]]> Redis был разработан в 2009 году и представляет собой хранилище типа ключ-значение. Следуя опыту таких NoSQL баз данных, как Cassandra, CouchDB и MongoDB, Redis позволяет хранить большой объем данных без ограничений реляционных баз данных. Также его часто сравнивают с memcache, он находит применение в качестве БД для кеширования.

    Перед установкой Redis следует учесть пару нюансов. Для начала обновим пакеты apt-get:

    ]]>
    http://devacademy.ru/posts/redis/ Sat, 10 May 2014 18:54:23 +0400
    <![CDATA[Формы]]> На каждом сайте в том или ином виде присутствуют формы, от простой формы контакта до сложных со множеством полей. Создание форм - не простая задача для разработчика, для начала надо написать HTML форму, реализовать проверку введенных данных, обработку данных перед сохранением в БД, отображение ошибок, восстановление полей в случае ошибок и т.д.

    ]]>
    http://devacademy.ru/posts/symfony-2-joboard-formyi/ Fri, 09 May 2014 12:08:34 +0400
    <![CDATA[Введение в REDIS-PY]]> redis-py - это библиотека на языке Python для управления NoSQL хранилищем Redis.

    Для установки redis-py требуется установленный и запущенный Redis сервер . В [redis’s quickstart] вы найдете инструкцию по установке.

    Чтобы установить redis-py выполните:

    $ sudo pip install redis

    или воспользуйтесь pip

    $ sudo easy_install redis

    или из исходников

    $ sudo python setup.py install

    Проверка

    >>> import redis
    >>> r = redis.StrictRedis(host='localhost', port=6379, db=0)
    >>> r.set('foo', 'bar')
    True
    >>> r.get('foo')
    'bar'
    ]]>
    http://devacademy.ru/posts/vvedenie-v-redis-py/ Wed, 07 May 2014 11:31:26 +0400
    <![CDATA[Профилирование запросов в MySQL]]> Профилирование запросов в Mysql применяется для оценки производительности вашего приложения. При разработке средних и больших приложений приходится иметь дело с сотнями запросов распределенными по вашему коду, которые исполняются каждую секунду. Без техники профилирования запросов бывает очень сложно найти из-за чего страдает быстродействие вашего приложения.

    Лог медленных запросов в MySQL - лог, отмечающий медленные и потенциально проблемные запросы. MySQL по умолчанию поддерживает такой функционал, но он отключен. При помощи настройки определенных переменных сервера мы можем указать какие именно запросы нас интересуют. Чаще всего нам нужны запросы которые требуют определенное количество времени на своё выполнение или запросы, которые некорректно обрабатывают индексы.

    ]]>
    http://devacademy.ru/posts/profilirovanie-zaprosov-v-mysql/ Sat, 03 May 2014 08:47:13 +0400
    <![CDATA[Настройка виртуальных хостов в Nginx на Ubuntu 14.04]]> Будем работать под учетной записью обычного пользователя с sudo правами. Так же вам понадобится установленный веб-сервер Nginx. При желании можно установить полностью LEMP (Linux, Nginx, MySQL и PHP). Чтобы установить Nginx достаточно выполнить следующую команду:

    sudo apt-get update
    sudo apt-get install nginx

    Прежде чем продолжить читать статью, настоятельно рекомендуем выполнить вышеописанные условия. Для примера, мы настроим два домена на нашем сервере. Их имена - example.com, test.com. Если в наличии у вас нет двух свободных имен, то просто придумайте два, а позднее мы покажем как настроить ваш локальный сервер, чтобы проверить их работоспособность.

    ]]>
    http://devacademy.ru/posts/nginx-ubuntu-1404/ Wed, 30 Apr 2014 08:40:28 +0400
    <![CDATA[Функциональное тестирование]]> Функциональные тесты отлично подходят для полной проверки вашего приложения - от запроса в браузере до выданного сервером ответа. Они покрывает все уровни приложения: маршрутизацию, модели, действия и шаблоны. Они очень похожи на то, с чем вы уже сталкивались: каждый раз при изменения действия, вы проверяли корректность его работы в браузере, кликая на ссылки и проверяя элементы на полученной странице. Другими словами, функциональные тесты автоматизируют эти действия.

    ]]>
    http://devacademy.ru/posts/symfony-2-joboard-funktsionalnoe-testirovanie/ Sat, 26 Apr 2014 09:09:11 +0400
    <![CDATA[Создание SSL сертификата для Apache для Ubuntu 14.04]]> TLS или безопасность транспортного уровня - предшественник SSL, отвечает за безопасность на уровне сокетов, по сути это защищённый протокол созданный для того, чтобы обеспечить безопасную передачу обычного сетевого трафика.

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

    ]]>
    http://devacademy.ru/posts/sozdanie-ssl-sertifikata-dlya-apache-dlya-ubuntu-1404/ Fri, 25 Apr 2014 11:09:24 +0400
    <![CDATA[Установка Ruby on Rails на Ubuntu 14.04 при помощи RVM]]> Ruby on Rails - один из самых популярных фреймфорков для разработки сайтов и веб-приложений. Язык программирования Ruby вместе с фреймворком Rails значительно упрощает процесс разработки.

    Так как не существует готового пакета с Ruby on Rails, установка и настройка среды разработки вызывает некоторые трудности. Но, благодаря таким средствам как RVM (Ruby Version Manager - менеджер версий Ruby), установка может быть упрощена. В этой статье мы покажем как установить rvm на Ubuntu 14.04, а затем при помощи него запустить стабильную версию Ruby on Rails. Хотя всю настройку можно выполнить под пользователем root, мы исходили из того, что вы не имеете root доступ.

    ]]>
    http://devacademy.ru/posts/ustanovka-ruby-on-rails-na-ubuntu-1404-pri-pomoschi-rvm/ Thu, 24 Apr 2014 12:54:59 +0400
    <![CDATA[Эффективная настройка Elasticsearch]]> Самое сложное, в этом движке - это его настройка на получение релевантных результатов. Так же хотелось бы отметить, что документация написана довольно плохо. Конечно, это сугубо моё мнение и я не могу сказать, что мы ничего полезного в ней не нашли, но поиски нам давались с большим трудом. Мы провели довольно глубокое исследование, чтобы понять как работает ElasticSearch. И, наконец, мы поняли его основы и готовы сами задокументировать его возможности.

    ]]>
    http://devacademy.ru/posts/effektivnaya-nastrojka-elasticsearch/ Thu, 24 Apr 2014 12:23:57 +0400
    <![CDATA[Юнит тестирование]]> В Symfony2 существует два типа автоматизированных тестов: юнит тесты и функциональные тесты. Юнит тесты проверяют корректность работы методов и функций. Каждый тест должен быть максимально независим от другого. Функциональные тесты отвечают за корректность работы приложения в целом.

    В этой статье рассмотрим юнит тесты, а функциональные оставим на следующий раз. Symfony2 включает в себя стороннюю библиотеку PHPUnit, которая предоставляет собой фреймворк для тестирования. Для запуска тестов требуется установить PHPUnit 3.5.11 или выше.

    ]]>
    http://devacademy.ru/posts/symfony-2-joboard-yunit-testirovanie/ Wed, 23 Apr 2014 08:55:50 +0400
    <![CDATA[Команда]]> Задумывались ли вы, что сейчас люди используют больше 4 миллиардов мобильных устройств? В Австралии население составляет примерно 11 миллионов человек, а количество сотовых телефонов - 22 миллиона - то есть примерно 2 устройства на человека.

    Очевидно, что люди все больше и больше пользуются мобильными устройствами. Их повсеместность обуславливает превосходство СМС сообщений над email. СМС имеет ряд преимуществ: такие сообщения коротки, мгновенны, а самое лучшее - довольно мало спама.

    ]]>
    http://devacademy.ru/posts/shablonyi-proektirovaniya-v-php-komanda/ Wed, 23 Apr 2014 08:55:14 +0400
    <![CDATA[Адаптер]]> Название шаблона говорит само за себя. Он помогает адаптировать ваш код к новым требованиям, не существовавшим ранее без изменения исходных классов или интерфейсов. Допустим, что есть проект, веб-сайт, при помощи которого пользователи могут отправлять сообщения в твиттер компании. Например:

    • Post.php - класс для отправки сообщений. Этот объект содержит в себе текст и URL сообщения.
    • Twitter.php - Твиттер класс. Это самописный класс, или позаимствованный, например с packagist.org
    ]]>
    http://devacademy.ru/posts/shablonyi-proektirovaniya-v-php-adaptier/ Mon, 21 Apr 2014 12:57:46 +0400
    <![CDATA[Изменяем страницу с категориями]]> Для начала добавим маршрут для URL категорий. Добавьте его в начале файла src/App/JoboardBundle/Resources/config/routing.yml:

    # ...
    AppJoboardBundle_category:
        pattern:   /category/{slug}/
        defaults: { _controller: AppJoboardBundle:Category:show }

    Чтобы получить slug категории нам надо добавить метод getSlug() в класс модели Category (src/App/JoboardBundle/Entity/Category.php):

    <?php
    
    # src/App/JoboardBundle/Entity/Category.php
    
    use App\JoboardBundle\Utils\Joboard as Joboard;
    
    class Category
    {
        // ...
    
        public function getSlug()
        {
            return Joboard::slugify($this->getName());
        }
    }
    ]]>
    http://devacademy.ru/posts/symfony-2-joboard-izmieniaiem-stranitsu-s-katieghoriiami/ Thu, 17 Apr 2014 09:28:57 +0400
    <![CDATA[Базы данных SQL, NoSQL и различия в моделях баз данных]]> Сегодня довольно сложно представить себе какое-либо приложение, которое не использовало бы базы данных, будь то сервера, персональные компьютеры или мобильные устройства. От простых игр до серьезных бизнес приложений. Все они обрабатывают, читают и записывают определенный набор данных.

    Система управления базами данных (DBMS/СУБД) - программное обеспечение, предназначенное для хранения и управления данными. Для решения различных задач разрабатывалось всё больше и больше различных СУБД (Реляционные и NoSQL) и программ для работы с ними (MySQL, PostgreSQL, MongoDB, Redis и т.д.)

    ]]>
    http://devacademy.ru/posts/sql-nosql/ Mon, 14 Apr 2014 13:49:50 +0400
    <![CDATA[Сравнение NoSQL систем управления базами данных]]> Основная цель NoSQL баз данных - предоставление дополнительного функционала в отличии от реляционных систем. Например, это может быть хранение пар ключ-значение, тогда вы получите значительное увеличение производительности за счет кеширования, или хранение неструктурных наборов данных с которыми проще будет обращаться.

    Базы данных это логические смоделированные хранилища предназначенные для разных типов данных. Каждая база данных, за исключением безсхемных (NoSQL), использует модель, которая описывает структуру данных. СУБД - это специальные приложения или набор библиотек для работы с различными базами данных.

    ]]>
    http://devacademy.ru/posts/nosql/ Sun, 13 Apr 2014 13:37:30 +0400
    <![CDATA[SQLite vs MySQL vs PostgreSQL: сравнение систем управления базами данных]]> Базы данных - это специально разработанное хранилище для различных типов данных. Каждая база данных, имеет определённую модель (реляционная, документно-ориентированная), которая обеспечивает удобный доступ к данным. Системы управления базами данных (СУБД) - специальные приложения (или библиотеки) для управления базами данных различных размеров и форм.

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

    ]]>
    http://devacademy.ru/posts/sqlite-vs-mysql-vs-postgresql/ Fri, 11 Apr 2014 08:21:21 +0400
    <![CDATA[Подробнее о моделях]]> Из требований второй части у нас должно быть: “На домашней странице пользователь должен видеть последние активные вакансии”. На данный момент отображаются все вакансии вне зависимости от того активные они или нет.

    <?php
    
    # src/App/JoboardBundle/Controller/JobController.php
    
    class JobController extends Controller
    {
        // ...
        public function indexAction()
        {
            $em = $this->getDoctrine()->getManager();
    
            $entities = $em->getRepository('AppJoboardBundle:Job')->findAll();
    
            return $this->render('AppJoboardBundle:Job:index.html.twig', array(
                'entities' => $entities
            ));
        }
    }
    ]]>
    http://devacademy.ru/posts/symfony-2-joboard-podrobnee-o-modelyah/ Thu, 10 Apr 2014 19:00:01 +0400
    <![CDATA[Finder]]> Процесс установки невероятно прост при помощи Composer:

    {
        "require": {
            "symfony/finder": "2.4.*"
        }
    }

    Если вы никогда не пользовались Composer, то здесь вы можете ознакомиться с ним.

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

    ]]>
    http://devacademy.ru/posts/obzor-komponentov-symfony2-finder/ Wed, 02 Apr 2014 10:41:25 +0400
    <![CDATA[Translation]]> Современное приложение должно поддерживать использование разных языков, чтобы люди из любого уголка Земли могли полноценно его использовать. Интернационализация - i18n - процесс разработки приложения с возможностью его перевода на разные языки без изменения структуры программы. Локализация - l10n - процесс адаптации уже переведенного приложения под специфический регион или область, например добавление определенного формата даты или валюты. Компонент Translation предоставляет большое количество способов интернационализации, но не локализации.

    ]]>
    http://devacademy.ru/posts/obzor-komponentov-symfony2-obzor-komponentov-symfony2-translation/ Tue, 01 Apr 2014 11:23:46 +0400
    <![CDATA[Templating]]> Как правило, для отрисовки самих шаблонов с использованием переменных, этот компонент использует какой-либо движок шаблонизатора. Хотя сам компонент позволяет создавать собственные шаблонизаторы, мы с вами узнаем, как правильно интегрировать сторонний движок, например Twig или Smarty. А также настроим загрузку правильного шаблонизатора в зависимости от расширения файла шаблона.

    Использование PHP в шаблонах - это очень распространенная практика. И хотя такой способ имеет свои преимущества, например, не надо изучать новый язык, не надо компилировать файл шаблона, но у него есть и несколько недостатков. К ним относятся:

    ]]>
    http://devacademy.ru/posts/obzor-komponentov-symfony2-templating/ Mon, 31 Mar 2014 20:10:06 +0400
    <![CDATA[Парсинг ресурсов при помощи Python]]> Хочу отметить, что работа над этой статьей ещё не закончена. Если у вас есть замечания или дополнение, добро пожаловать в комментарии.

    Всегда сначала посмотрите предлагает ли сайт собственный API, RSS/Atom фиды также пригодятся.

    Мы будем использовать две дополнительные библиотеки для Python.

    Мы будем использовать библиотеку requests вместо urllib2, так как она во всех отношениях превосходит urllib2. Я мог бы долго это доказывать, но, как мне кажется, на странице этой библиотеки все сказано в одном абзаце:

    ]]>
    http://devacademy.ru/posts/parsing-resursov-pri-pomoschi-python/ Mon, 31 Mar 2014 08:59:17 +0400
    <![CDATA[HHVM, Nginx и Laravel]]> Так же как и во многих остальных статьях в своем блоге, я полагаю что у вас установлена Ubuntu 12.04 LTS в качестве сервера. Хотя установить систему можно и на Mac с помощью Brew (). Информация по установке HHVM на серверные машины, включая последние версии Ubuntu, можно найти здесь. Итак, начнем.

    ]]>
    http://devacademy.ru/posts/hhvm-nginx-laravel/ Sun, 30 Mar 2014 12:33:29 +0400
    <![CDATA[DateTime в PHP]]> Начиная с версии 5.2 в PHP появился такой тип данных как DateTime. Попробуем в этой статье разобраться почему лучше использовать его вместо старых функций date() и time().

    Функция date() используется для строкового отображения даты/времени. Функция принимает два параметра, 1-ый - формат возвращаемой строки, а второй - само значение даты. По умолчанию второй параметр принимает значение текущего момента времени, либо можно указать отметку времени в unix формате (timestamp).

    ]]>
    http://devacademy.ru/posts/datetime-v-php/ Sat, 29 Mar 2014 08:33:24 +0400
    <![CDATA[Фабрика]]> Фабрика (Factory) - один из наиболее часто применяемых шаблонов проектирования в программировании, обычно его используют в случае, когда во время исполнения программы необходимо выбрать один из взаимозаменяемых классов.

    В целом, это удобный способ создания объектов. Фабрика (Factory) способна создавать объекты различных классов, при этом ей совсем необязательно знать тип объекта который она создает.

    ]]>
    http://devacademy.ru/posts/shablonyi-proektirovaniya-v-php-fabrika/ Thu, 27 Mar 2014 18:48:39 +0400
    <![CDATA[SSL сертификат для NGINX на Ubuntu 12]]> SSL сертификат используется для того, чтобы зашифровать информацию на сайте и создать более безопасное соединение. Также он отображает посетителю идентификационную информацию о частном виртуальном сервере. Вы можете воспользоваться услугами специализированных организаций для подтверждения информации о своем сервере, либо создать самостоятельно подписанный сертификат.

    Следующие действия требуют root прав. Также нам понадобится установленный и настроенный сервер nginx. Установить его вы можете выполнив следующую команду:

    ]]>
    http://devacademy.ru/posts/ssl-sertifikat-dlya-nginx-na-ubuntu-12/ Tue, 25 Mar 2014 09:45:27 +0400
    <![CDATA[Оптимизация настройки NGINX]]> NGINX - это быстродействующая замена медленному Apache2. Конечно, NGINX, как и любой другой веб-сервер требует корректной настройки для лучшей производительности.

    • Свежеустановленный и настроенный Debian 7 или Ubuntu 12 (13).
    • Установленный и настроенный NGINX сервер.
    • Понимание основ настройки Linux

    Первые две переменные, которые необходимо настроить это рабочие процессы и рабочие соединения. Сначала разберемся за что они отвечают. worker_process - основа настройки и жизнедеятельности NGINX. Эта переменная указывает допустимое количество процессов привязанных к определенному IP адресу и порту. Обычно допускают один процесс на ядро. Указав большее значение, системе мы не навредим, но, скорее всего, остальные процессы просто будут простаивать.

    ]]>
    http://devacademy.ru/posts/optimizatsiya-nastrojki-nginx/ Sun, 23 Mar 2014 10:27:57 +0400
    <![CDATA[Маршрутизация]]> Если вы обратите внимание на URL домашней страницы Joboard, то в адресной строке вы увидите: /job/1/show. Наверняка, вы привыкли видеть адреса в формате /job.php?id=1. Так как же Symfony определяет какое действие необходимо выполнить исходя из заданного адреса? Почему переменная $id находится там, где должно указываться действие, а не параметр? Попробуем разобраться.

    ]]>
    http://devacademy.ru/posts/symfony-2-joboard-marshrutizatsiya/ Sun, 23 Mar 2014 09:31:11 +0400
    <![CDATA[Работаем с тегами в Symfony 2]]> Определённые сервисы ядра Symfony 2 зависят от тегов, по которым определяют: какие сервисы должны быть загружены, быть оповещены о наступлении события либо применены по другому назначению. Например, Twig использует twig.extension для загрузки расширений.

    Но теги можно использовать и по своему назначению в собственных бандлах. К примеру, ваш сервис работает с какой-либо коллекцией данных или реализовывает “цепочку” действий, которые выполняются последовательно до наступления положительного результата. В этой статье я приведу пример “транспортной цепочки” - коллекция классов реализующих \Swift_Transport. Используя такую цепочку, Swift mailer (служба отправки электронных писем в Symfony2) использует несколько способов отправки писем, до тех пор пока письмо не будет отправлено. В данной статье уделено основное внимание внедрению зависимостей в проект.

    ]]>
    http://devacademy.ru/posts/rabotaem-s-tegami-v-symfony-2/ Fri, 21 Mar 2014 19:38:48 +0400
    <![CDATA[Установка Java на Ubuntu при помощи apt-get]]> Это наиболее простой и, как следствие, рекомендованный способ, в результате которого мы получим установленную OpenJDK6 если у нас Ubuntu 12.04 и более рание версии или OpenJDK7 для версий ubuntu начиная с 12.10. Всё очень просто. Для начала обновим список пакетов из apt-get

    sudo apt-get update

    Теперь проверим была ли установлена Java ранее

    ]]>
    http://devacademy.ru/posts/ustanovka-java-na-ubuntu-pri-pomoschi-apt-get/ Mon, 17 Mar 2014 13:27:03 +0400
    <![CDATA[Контроллёр и Представление]]> Сегодня мы собираемся настроить контроллер для вакансий, который мы создали в прошлой части. Он уже содержит большую часть кода, которая необходима для Joboard:

    • Страница со списком всех вакансий
    • Страница для создания новой вакансии
    • Страница для редактирования вакансии
    • Возможность удаления вакансии

    Хотя текущий код уже готов к использованию, мы всё же переделаем шаблоны, чтобы они больше соответствовали макетам Joboard.

    ]]>
    http://devacademy.ru/posts/symfony-2-joboard-kontrollyor-i-predstavlenie/ Mon, 17 Mar 2014 13:26:57 +0400
    <![CDATA[Модель данных]]> Первым делом мы определим модель данных для Joboard, а для взаимодействия с базой данных будем использовать ORM и в конце этой статьи у вас будет создан первый модуль приложения. Но так как Symfony делает много работы за нас, то этот полностью функциональный веб-модуль мы создадим без написания большого количество кода на PHP.

    ]]>
    http://devacademy.ru/posts/symfony-2-joboard-modiel-dannykh/ Mon, 17 Mar 2014 13:26:50 +0400
    <![CDATA[Спецификация проекта]]> Прежде чем углубляться в код с головой, опишем более подробно, как будет работать проект. В следующих разделах описаны функции, которые мы будем реализовывать в первой версии/итерации проекта с некоторыми простыми историями.

    Веб-сайт Joboard будет иметь четыре типа пользователей: Администратор (владеет и управляет веб-сайтом), пользователь (посетитель веб-сайта, ищет работу), работодатель (посетитель веб-сайта и размещает вакансии) и партнёр (имеет доступ к списку вакансий и публикует их на своем веб-сайте).

    ]]>
    http://devacademy.ru/posts/symfony-2-joboard-spetsifikatsiya-proekta/ Mon, 17 Mar 2014 13:26:42 +0400
    <![CDATA[Начинаем проект]]> В каждой главе, в приложение будут добавляться новые функции и мы будем использовать такой подход для постепенного введения в Symfony фреймворк, а также узнаем о передовом опыте в веб-разработке на Symfony.

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

    Прежде всего вам нужно проверить, что ваш компьютер имеет соотвествующее программное обеспечение для веб-разработки. В качестве операционной системы мы будем использовать Ubuntu 12. Из ПО как минимум нам потребуется веб-сервер Apache, СУБД MySQL и PHP 5.3.3 или более поздней версии. Для Windows рекомендую установить XAMPP или OpenServer, там есть все библиотеки и уже настроено окружение для разработчика. Также вместо сервера Apache вы можете использовать встроенный сервер в php 5.4 и выше, как это сделать буде тпоказано ниже.

    ]]>
    http://devacademy.ru/posts/symfony-2-joboard-nachinaem-proekt/ Mon, 17 Mar 2014 13:26:35 +0400
    <![CDATA[LXML: Быстрая и гибкая обработка XML и HTML в Python]]> Для обработки XML и HTML можно использовать и BeautifulSoup, но эта библиотека использует слишком много памяти и не удовлетворяют требованиям по скорости для больших файлов. Библиотека LXML очень быстро открывает и обрабатывает большие XML или HTML файлы, поэтому мы и будем рассматривать её в этой статье.

    Установить её вы можете отсюда. Давайте рассмотрим работу библиотеки на примерах.

    ]]>
    http://devacademy.ru/posts/lxml-byistraya-i-gibkaya-obrabotka-xml-i-html-v-python/ Mon, 17 Mar 2014 13:26:27 +0400
    <![CDATA[Центрирование элементов по вертикали на чистом CSS]]> До сих пор в CSS было проблемой, что он работает преимущественно вдоль одной оси. В зависимости от контекста это может быть вертикальная или горизонтальная ось. И это отлично подходит для стека блочных элементов (расположенных один за другим), например:

    ~~~{.css} display: block; width: 100%;

    
    Также легко отобразить элементы вдоль горизонтальной оси используя плавающие элементы (float). Однако если вы хотите сделать элементы динамически на обе оси, то у вас будет не так много вариантов для этого. В таком случае вам придётся использовать обходные пути или способы основанные на JavaScript. Но на данный момент новая спецификация CSS column (CSS столбцы) дает нам новую надежду на достижение этой цели используя только чистый CSS. Примечательно, что CSS столбцы отдают приоритет вертикальному выравниванию перед горизонтальным.
    
    ### Горизонтальное центрирование
    
    Горизонтальное центрирование сделать очень просто. Существует несколько способов для достижения эффекта горизонтального центрирования элементов:
    
    ### Inline-block и Inline элементы с выравниванием текста
    
    Inline-block и Inline элементы, обрабатываются как текст - они рассчитывают свои собственные значения ширины и не реагируют на заявленную ширину, если вы не объявили их как блочные элементы (см. Далее).
    
    ~~~{.css}
    display: inline; /* [или] display: inline-block; */
    text-align: center;
    ]]>
    http://devacademy.ru/posts/tsentrirovanie-elementov-po-vertikali-na-chistom-css/ Mon, 17 Mar 2014 13:25:58 +0400
    <![CDATA[Начало работы с проектом на Django 1.6]]> Начало работы с проектом - это критический момент, когда сделанный выбор может иметь долгосрочные последствия. Есть целый ряд учебных пособий, о том, как начать работу с Django фреймворком, но в них очень мало рассказано, как используют Django в профессиональной среде. Начиная с этого небольшого планирования, вы пройдёте большой путь, который в будущем сделает вашу жизнь легче.

    ]]>
    http://devacademy.ru/posts/nachalo-rabotyi-s-proektom-na-django-16/ Mon, 17 Mar 2014 13:25:50 +0400
    <![CDATA[Установка Django 1.6 + Apache 2 + mod_wsgi на Ubuntu]]> После долгих-долгих месяцев разработки своего чудо проекта, вы решили, что пора бы показать его миру. В предвкушении большой посещаемости и популярности вашего сервиса, вы попытались настроить проект на боевом сервере, но у вас ничего не получилось.

    Вы перечитали кучу мануалов, перепробовали всё на свете, но так и не получили работающее приложение. Если вы попали в такую непростую ситуацию, то эта статья расскажет вам, как установить и настроить Django 1.6 с веб-сервером Apache 2 и операционной системой Ubuntu.

    ]]>
    http://devacademy.ru/posts/ustanovka-django-16-apache-2-mod_wsgi-na-ubuntu/ Mon, 17 Mar 2014 10:07:23 +0400
    <![CDATA[Использование строки в качестве Twig шаблона в Symfony2]]> Я переключил свой предпочтительный метод на использование класса Twig_Loader_Chain. Этот метод позволяет назначить несколько загрузчиков в один экземпляр Twig_Environment, так что вы сможете прозрачно обрабатывать шаблоны из файлов или из строк. В нижней части статьи вы увидите описание этого метода.

    Для того, чтобы создать twig шаблон требуется экземпляр класса Twig_Environment. Этот класс содержит метод render, который возвращает обработанный результат из twig шаблона (обычно из файла). Twig Environment использует загрузчик классов, который реализует интерфейс Twig_LoaderInterface, этот класс загружает данные из хранилища (файл, база данных) для последующего их анализа шаблонизатором. По умолчанию Symfony2 использует класс Twig_Loader_Filesystem, который загружает данные шаблонов из файлов, для того чтобы создать шаблон из строки нам нужен экземпляр Twig_Environment, который для получения данных, использует класс Twig_Loader_String. Есть несколько способов, как вы можете это сделать, самый простой способ - это создать экземпляр Twig_Environment и и в качестве загрузчика передать ему экземпляр класса Twig_Loader_String (этот код можно поместить внутри вашего контроллера):

    ]]>
    http://devacademy.ru/posts/ispolzovanie-stroki-v-kachestve-twig-shablona-v-symfony2/ Mon, 17 Mar 2014 10:07:13 +0400
    <![CDATA[Тестирование веб-приложений с помощью Codeception]]> Проектирование и создание большого веб-приложения означает, что ваш рабочий процесс и архитектура предрасполагают к постоянному совершенствованию разрабатываемого продукта. Для того, чтобы ваш продукт стабильно работал и вы были уверены, что новые коммиты не создают новые ошибки на существующем коде, необходимо использовать автоматизированные методы тестирования. И так же, как необходима надлежащая архитектура для вашего приложения, вам необходимо разработать надлежащую архитектуру для платформы тестирования.

    ]]>
    http://devacademy.ru/posts/testirovanie-veb-prilozhenij-s-pomoschyu-codeception/ Mon, 17 Mar 2014 10:07:07 +0400
    <![CDATA[Тестирование Symfony 2 приложений с помощью codeception]]> Какие преимущества вы получаете, используя Codeception с Symfony2? Давайте перечислим все из них:

    • удобный синтаксис для функциональных тестов
    • доступ к контейнеру в юнит-тестах
    • тестирования REST и SOAP сервисов, созданных с помощью Symfony
    • быстрая очистка данных при использовании Doctrine2

    Установка очень проста. Вы можете использовать Composer (как вы обычно это делаете), но мы рекомендуем попробовать phar package. В этом случае вы можете избежать ненужных зависимостей. Но оба варианта равнозначны. Чтобы установить codeception через composer необходимо добавить в composer.json следующий код, а затем обновить:

    ]]>
    http://devacademy.ru/posts/testirovanie-symfony-2-prilozhenij-s-pomoschyu-codeception/ Mon, 17 Mar 2014 09:59:40 +0400
    <![CDATA[Создание слайдера используя twitter bootstrap 3]]> Twitter Bootstrap 3 один из лучших CSS фреймворков для разработки и дизайна систем управления содержимым. С помощью него с лёгкостью можно создавать блоги или страницы портфолио используя систему сеток Twitter Bootstrap (grid layout). В основе многих систем CMS есть базовый компонент “Слайдер” (Carousel), в основном - это последовательное автоматическое отображение изображений, но слайдер может быть каким-угодно: он может отображать последние выполненные проекты, отзывы ваших клиентов, описание специальных предложений, ссылки на новости или последние статьи из вашего блога. В этой статье, мы изучим то, как создать слайдер используя Twitter Bootstrap 3 Carousel компонент.

    ]]>
    http://devacademy.ru/posts/sozdanie-slajdera-ispolzuya-twitter-bootstrap-3/ Sat, 15 Mar 2014 15:03:39 +0400
    <![CDATA[Несколько простых способов увеличить производительность PHP]]> Чтобы сделать сайт более производительным необходимо подключить множество дополнительных слоёв. От создания обратного-прокси кеша с Varnish до конфигурирования группы балансировщиков нагрузки. И для этого есть много хорошо документированных вариантов.

    Но, что делать если вы только начинаете? Что делать если у вас небольшое приложение? Что вы можете сделать прямо сейчас, чтобы сразу почувствовать разницу в производительности?

    ]]>
    http://devacademy.ru/posts/neskolko-prostyih-sposobov-uvelichit-proizvoditelnost-php/ Sat, 15 Mar 2014 14:14:26 +0400