Дайджест интересных новостей и материалов из мира PHP за последние две недели №20 (18.06.2013 — 30.06.2013)

Предлагаем вашему вниманию очередную подборку с ссылками на новости и материалы.

Приятного чтения!

PHP 5.5

  • Состоялся долгожданный релиз PHP 5.5! — Небольшой обзор новых возможностей есть в хабрапосте , а также тут и тут.
    Согласно принятому ранее решению, ветка 5.3.x закрывается. Последним регулярным релизом станет 5.3.27. В течение года при необходимости будут выпускаться исправления проблем с безопасностью, после чего поддержка 5.3 будет приостановлена окончательно.
  • У php.net новый дизайн (в бете). Краткая новость и опрос — Если у вас есть конкретные пожелания по новому оформлению сайта, то смело делитесь ими тут
  • Новые возможности в PHP 5.5 — Никита Попов собрал все самые значимые по его мнению нововведения в удобной таблице с обозначением автора и ссылками на соответствующие RFC.
  • API хэширования паролей — Об этом уже писал не раз даже сам автор API, но за хороший хабрапост на русском — спасибо!
  • Как быть с 5.4 и 5.3? — Релиз-менеджер PHP 5.3 рекомендует счастливым и не желающим что-либо менять пользователям версии 5.3 продолжать пользоваться ею лишь вовремя устанавливая обновления этой ветки. Пользователям же PHP 5.4 автор рекомендует обновиться до 5.5.
  • Новая константа CLASS — В посте пример того, где действительно необходимо использование новой константы. Кроме того несколько примеров «из жизни» есть в оригинальном RFC.
  • Кэширование байт-кода из коробки — Небольшой обзор прошлого и настоящего кэширования байт-кода в PHP.
  • Практическая польза генераторов из PHP 5.5 — Автор реализовал аналог функции range() с использованием генератора, и демонстрирует насколько это сократило потребление памяти.

Новости и релизы

  • Вышел WordPress 3.5.2 — В релиз включены важные исправления безопасности, всем пользователям настоятельно рекомендуется обновиться немедленно.
  • Вышел Codeception 1.6.3 — Релиз отличного инструмента тестирования. Хоть и минорный, но содержит несколько приятных нововведений, таких, например, как модуль для Yii 2 и Facebook-модуль.
  • Релиз PHP QB 1.3 — Обновилась альтернативная виртуальная машина для PHP, которая благодаря статической типизации позволяет для ряда специфических задач получить значительный прирост в производительности.
  • Быстрый поиск по дайджестам — Небольшой инструмент, который позволяет искать сразу по всем PHP-дайджестам, публиковавшимся на Хабре. Делал для себя, но думаю будет полезен многим, например, если нужно быстро найти все статьи по интересующей теме.

PHP

  • PHP Internals Book: Hashtables — Новая глава книги посвящена хэш-таблице — структуре данных, которая повсеместно используется в реализации интерпретатора.
  • RFC: Поддержка анонимных catch-блоков, Structural Type Hinting — Не смотря на то, что новая версия PHP только вышла, уже появляются предложения для грядущих версий. Пока не революционные, но посмотрим, что будет дальше.

Материалы для обучения

Материалы c прошедших конференций

  • Lone Star PHP 2013 — Слайды 23 докладов с прошедшей в Далласе конференции, полностью посвященной PHP.
  • Внедрение зависимости и DI-контейнеры — Хорошие слайды доклада с прошедшей в Испании конференции deSymfony 2013. Слайды остальных докладов доступны тут, но к сожалению почти все из них на испанском.
  • Обзор Symfony 2 — Видеозапись доклада о внутренностях фреймворка и принципах положенных в его основу.
  • Фреймворк — это не архитектура — Видеозапись доклада, в котором рассказано почему ваш любимый фреймворк не предоставляет архитектуры приложения и какие это имеет последствия.
  • Devconf 2013 — На сайте конференции стали доступны ссылки на слайды докладов, в том числе и по PHP.
  • PHP Object Injection Revisited — Отличная презентация по безопасности десериализации данных в PHP с прошедшей не так давно в Кракове конференции CONFidence.

Ссылка на предыдущий выпуск.

ссылка на оригинал статьи http://habrahabr.ru/company/zfort/blog/185142/

Фильм про UNIX

В этом фильме Деннис Ритчи, Кен Томпсон, Брайан Керниган и другие рассказывают про назначение и возможности ОС UNIX.
Видео очень атмосферное и рекомендуемое к просмотру.

ссылка на оригинал статьи http://habrahabr.ru/post/185158/

Генерация музыки в реальном времени

«Как автоматизировать сочинение музыки?» — этот вопрос тревожит умы музыкантов еще со времен средневековья. Кеплер превращал траектории движения планет в музыку; Моцарт и его современники изобрели игру в «музыкальные кости» — они броском кубиков выбирали из большой таблицы такты и составляли из них менуэты. Но только с появлением компьютеров алгоритмическая генерация музыки получила настоящее развитие. Теория вероятности, марковские цепи, искусственные нейронные сети — все это стало инструментами создания музыки.

Разумеется, чисто математическая музыка редко когда оказывается благозвучной, несмотря на красоту математики как науки. Поэтому люди начали пытаться автоматизировать написание привычной, «классической» музыки. Выявить закономерности в произведениях, разложить музыку на «составляющие» и понять, почему та или иная комбинация нот вызывает у слушателя разные эмоции. Почему простое движение по гамме в разных контекстах воспринимается по-разному? Существует ли идеальное произведение? Твердых ответов на эти вопросы до сих пор нет — есть лишь философские размышления музыковедов да теоретиков. Но музыканты и математики по всему миру не сдаются и продолжают копать этот вопрос.

Будем считать, что со вступлением покончено и перейдем сразу к моей работе. Я начал увлекаться генерацией музыки пару лет назад и выбрал эту тему в качестве своей магистерской работы на мехмате ЮФУ.
Тема моей диссертации звучит страшно: «Инкрементная генерация музыкальных произведений на основе динамических паттернов.» В переводе на русский: генерация музыки в реальном времени с использованием изменяющихся паттернов.

К написанию данного поста меня сподвигла аналогичная работа, опубликованная вчера и личная просьба Vokabre осветить данный вопрос. Я постараюсь по минимуму использовать термины из теории музыки и рассказывать все простым языков, но иногда меня может заносить, так что заранее извиняюсь.

Постановка задачи

Я поставил перед собой задачу написать генератор музыки, который бы мог делать следующее:

  • Генерировать благозвучные мелодии;
  • Гармонизировать мелодию, согласно правилам гармонии;
  • Генерировать аккомпанемент по имеющимся аккордам;
  • Все вышеперечисленное делать в реальном времени (т.е. на лету, такт за тактом);
  • И при этом позволять вмешиваться в процесс генерации (менять инструменты, тональность, высоты нот и тд);
  • Ну и опционально: выводить все это в виде нот, сохранять в midi и mp3.

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

Пример генерируемой музыки

Используемые инструменты

Разрабатывал я все на языке Java, для которого есть замечательная музыкальная библиотека jMusic, уже содержащая музыкальные примитивы, вроде ноты, фразы или партии, а также имеющая инструменты работы с MIDI. Для воспроизведения звука использовался синтезатор Gervill, входящий в состав JDK 1.7 и позволяющий воспроизводить музыку с использованием внешних звуковых банок в формате .sf2. Также была использована библиотечка JAVE (Java Audio Video Encoder) — которая пережимает захваченное wav аудио в компактный mp3.

Структура генератора

Тут все, вроде, очевидно. Модель упрощенная и не претендует на универсальность, но основные структурные единицы музыкального произведения демонстрирует наглядно.

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

Модуль основной мелодии

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

У Баха некоторые из произведений очень легко описываются одинаковыми паттернами, например, вот эта прелюдия в до-миноре имеет один и тот же паттерн (меняется только аккорд, по которому идет движение)

Повторю еще раз: паттерн — это не абсолютные ноты, это лишь отношение между нотами. «Вторая нота выше предыдущей на полтона», или «вторая нота отстоит от первой на три ступени текущей тональности», или «вторая нота является следующей нотой по текущему аккорду» (т.е. для до мажорного аккорда вслед за «до» прозвучит «ми»).

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

Построение ведется в три этапа.

  1. Построение каркаса из простейших паттернов.
  2. Замена некоторых из нот более паттернами более мелкой длительности (с сохранением движения в сторону следующей ноты)
  3. Внесение финальных коррективов и добавление украшений (форшлагов и трелей)

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

Модуль гармонизации

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

Таким образом, необходимо задачу упростить и сделать реализуемой за разумные сроки. Так что введем ряд ограничений: во-первых гармонизировать будем только трезвучиями (никаких септ- и нонаккордов, пока что), во-вторых пренебрежен несколькими правилами касательно уменьшенных аккордов, которые могут затруднять жизнь, и в-третьих — сделаем обязательным движение к доминанте в конце 4 предложения и к тонике в конце 8-го. Чтобы у слушателя возникало ощущение завершенности.

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

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

Модуль генерации второстепенных аккордов

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

Воспроизведение

Когда все сгенерировано — полученная партитура поступает в распоряжение всех плееров: один выводит это в виде звука, другой рисует ноты, а третий — пишет в файл. Чтобы гениальное произведение не пропало!

Пользовательский интерфейс

Пользовательский интерфейс позволяет задавать параметры как до, так и во время самой генерации (изменения вступят в силу уже в следующем такте). Можно менять инструменты, их роли (мелодия\втор. голос\аккомпанемент), громкость, октаву и так далее. Также можно регулировать общий темп и громкость произведения, его тональность и частоту появления украшений. Это такой дирижерский пульт для виртуального ансамбля.

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

P.S. Это мой первый пост на хабре, так что если я допустил какие-то ошибки в разметке — дайте знать, пожалуйста!

ссылка на оригинал статьи http://habrahabr.ru/post/185154/

Простой веб-сервер на базе NAS

image

По многочисленным просьбам пользователей решил таки написать инструкцию как организовать практически полноценный LAMP-сервер на базе D-Link DNS-325/345.
Многие гуру администрирования схватятся за сердце, будут пить валерьянку и рекомендовать мне, курить что-то менее забойное 😉
И я с этим полностью согласен. Ну не на счет курить, а насчет того, что так делать очень и очень не рекомендуется. Не рассчитаны аппаратные параметры подобного устройства на работу полноценного LAMP, не потянет он хорошую нагрузку. Ну, как говорится, хозяин барин. Раз пользователь хочет, нужно его хотя бы направить в правильное русло. Иначе каждый начинает изобретать свой велосипед, строить что-то на базе fun_plug & optware, иногда просто следуя разрозненным инструкциям, не всегда понимая, что он делает.
В качестве веб-сайта в данном примере будет применяться одна из самых известных на сегодня CMS систем Joomla!.. Безусловно, вместо нее можно применить как другие системы (Drupal, WordPress, SugarCRM и т.п.), так и самописные сайты с использованием PHP & MySQL.
Почему Joomla!? Ну наверно просто первый попавшийся на глаза Адд-Он CMS. Ну и еще я нашел довольно не плохое описание Joomla!
Раз хорошее описание есть, рассказывать про настройку и работу с Joomla! я не буду, тем более сам в ней не силен, использую ее просто как веб-болванку.
И так, для начала нам понадобиться установить на NAS терминального демона. Настоятельно рекомендую sshd, а не telnetd. Брать тут dlink.ua/dns, после установки обязательно сменить пароль.
Адд-Он ставиться так:
1. Качаем сам Адд-Он на локальный диск. Если он запакован архиватором – распаковываем.
2. Заходим в веб-интерфейс DNS-325/345 раздел «Application Management / Add-Ons» и устанавливаем Адд-Он.

image

3. Запускаем его.

image

4. По тому же принципу скачиваем, устанавливаем и запускаем Joomla!

image

5. Для MySQL в данном Адд-Оне не предусмотрели свой собственный логин/пароль, видимо подразумевается, что будет предварительно установлен Адд-Он phpMyAdmin, у которого админские логин/пароль – admin/admin. Установите phpMyAdmin.
6. Проверяем установленные Адд-Оны.

image

sshd тут не светится, потому, что является чистым CLI (command line) клиентом, и веб-интерфейса не имеет. «Вы сурка не видите, но он есть!» 😉
Если мы открываем «Applications / Joomla» видим следующее

image

Нажимаем «Launch»

image

Нажимаем «Далее» и следуем инструкциям.

image

Имя пользователя и пароль для MySQL те, которые используются в phpMyAdmin. По умолчанию это admin/admin. Продолжите установку.
В данном случае в «Панели управления» Joomla! мы получаем

image

если выбираем «Сайт» видим

image

Дальнейшая настройка, руссификация и конфигурирование Joomla!, как я писал, согласно инструкции.
На данном этапе сайт с Joomla!’ой доступен по ссылке

http://ip_address_dns-3x5/Joomla/

image

Все веб-интерфейсы Адд-Онов и его собственный находяться в каталоге /var/www/
Т.е., если вы используете, например vTigerCRV – это будет каталог /var/www/vTigerCRM, а ссылка соответственно

http://ip_address_dns-3x5/vTigerCRM/

Теперь определимся с TCP-портом. Базовый интерфейс NAS остается на стандартном порту http – 80. Это конечно можно поменять, что fun_plug и делает, но я бы этого не рекомендовал. Поэтому рассматривать смену TCP-порта для базового интерфейса NAS не буду. Кто хочет изменить – пожалуйста, но сами. И так предлагаю порт 81. Тем более часто сталкиваюсь с такой проблемой – у некоторых операторов «исторически» присутствуют фильтры на некоторые порты, включая 80-ый. Когда-то это защищало абонента от лишнего трафика, во времена, когда инет считался помегабайтно. Сейчас в основном unlimited, но правила фильтрации на большинстве базовых маршрутизаторов у операторов остались. Хотя служба поддержки может об этих фильтрах ничего и не знать.
Ну вернемся к настройке веб-сайта. Этот момент, для «не любителей линукса», будет самый тяжелый. Если вы установили sshd, вам нужен ssh-клиент. Их в общем-то большое множество, но я лично под Windows пользуюсь PuTTY. Кто-то предпочитает сетапить, но я всегда пользуюсь версией «For unattended access»
И так, мы установили ssh сервис на свой NAS. Запускаем Putty и делаем следущее

image

Нажимаем «Open», получаем предложение для первого захода согласиться с сертификатом

image

Говорим «Да». На предложение «login as» вводим «root» и 2 раза Enter. Видим

image

Не забудьте сменить пароль!
Создаем копию конфига базового веб-сервера.

cp /etc/lighttpd/lighttpd.conf /mnt/HD/HD_a2/Nas_Prog/Joomla/

Редактируем файл конфигурации.

vi /mnt/HD/HD_a2/Nas_Prog/Joomla/lighttpd.conf

Для входа в режим редактирования нажмите «i», для возврата в режим просмотра нажмите «Esc». Меняем следующие строки:

server.document-root = "/var/www/" на server.document-root = "/var/www/Joomla/" 

server.port = 80 на server.port = 81 

$SERVER["socket"] == ":80" { на $SERVER["socket"] == ":81" { 

$SERVER["socket"] == "[::]:80" { на $SERVER["socket"] == "[::]:81" { 

index-file.names = ( "web/login.html","index.php" ) на index-file.names = ( "index.html","index.php" ) 

Удаляем секцию HTTPS. Удалить строку – 2 раза нажать «d».

$SERVER["socket"] == "172.17.17.150:443" { ssl.engine = "enable" ssl.pemfile = "/etc/server_v4_bond0.pem" 

Закрываем файл с сохранением. Нажимаем «:x» + Enter.

image

Если по какой-то причине нужно выйти без сохранения нажимаем «:q!» + Enter.
Проверяем работоспособность веб-сервера. Для этого запускаем
для DNS-345

/usr/sbin/lighttpd-angel -D -m /usr/lighty_lib -f /mnt/HD/HD_a2/Nas_Prog/Joomla/lighttpd.conf &

для остальных моделей

/usr/sbin/lighttpd-angel -D -m /usr/local/lib -f /mnt/HD/HD_a2/Nas_Prog/Joomla/lighttpd.conf &

Если высветится строка с «server started» — вы все сделали верно. Если «exited normally with exitcode: 0» — где-то ошибка, например что-то сделали не так при редактировании или порт 81 может быть занят другой программой. Вариантов может быть много, поэтому присылайте мне скриншот или тект ошибки, постараюсь помочь.
Ну будем считать, что сервер запустился. Проверяем в броузере

http://ip_address_DNS:81/

image

Теперь добавим веб-сервер в автозапуск. Для этого возвращаемся в PuTTY.

vi /mnt/HD/HD_a2/Nas_Prog/Joomla/init.sh

Добавляем строку запуска в конец файла и выходим с сохранением.

/usr/sbin/lighttpd-angel -D -m /usr/local/lib -f /mnt/HD/HD_a2/Nas_Prog/Joomla/lighttpd.conf &

image

С настройкой и автозапуском веб-сервера все, «не любители линукса» могут вздохнуть с облегчением, а гуру глотнуть очередную порцию валерьянки 😉
Теперь организуем доступ к вашему сайту из Интернета. Для этого, на маршрутизаторе нужно сделать «проброс порта». Вкратце расскажу на примере D-Link DIR-651. Для всех остальных – читайте документацию на свой маршрутизатор.
Заходим в веб интерфейс маршрутизатора. Для большинства это адреса по умолчанию

http://192.168.0.1/ или http://192.168.1.1/

image

В данном случае Имя пользователя «admin», пароль «admin».

image

Заходим в «Расширенные настройки» раздел «Межсетевой экран / Виртуальные серверы».

image

Нажимаем «Добавить».

image

«Шаблон» выбираем «Virtual Server HTTP». «Имя» вводим любое, например Joomla. «Внешний порт» оставляем стандартный для HTTP – 80. Внутренний меняем на тот, который вы назначили своему веб-серверу. В нашем случае 81. «Внутренний IP» — это IP-адрес вашего DNS-325/345. В данном примере 192.168.0.100. Нажимаем «Изменить» и «Сохранить».
В случае, если 80-ый порт со стороны провайдера таки закрыт, «Внешний порт» тоже меняем, например на 81.

image

Теперь любой пользователь Интернет, введя в броузере ваш внешний статический IP-адрес или доменное имя, привязанное к этому IP-адресу, увидит ваш сайт.

image

В заключение хочу сказать несколько слов.
Повторю, что NAS – это все же не веб-сервер и подобное лучше делать на специализированных машинах. Но с другой стороны, если сайт не предусматривает активных посещений или является информационным внутрикорпоративным, в принципе можно и так. Хотя не стоит забывать, что в выбранной вами CMS системе может быть дырочка в безопасности. А «доброжелателей» в Интернете много.
Все же, если вы решились на использование NAS в качестве веб-сервера, надеюсь эта инструкция вам поможет. Если в процессе будут возникать вопросы, на dlink.ua/dns есть форма Feedback. Пишите, как говорится помогу чем смогу. На этой же странице имеются другие интересные Адд-Оны. Новые Адд-Оны оперативно выкладываются на страничку Facebook’а. Пользуйтесь на здоровье!

ссылка на оригинал статьи http://habrahabr.ru/post/185152/

Simple-Science — Простые опыты (дайджест #24)

image

Сегодня в выпуске #24:

  • бумажная болгарка;
  • одноразовый патефон;
  • стекло плавится в микроволновке;
  • перегретая вода в СВЧ печи;
  • дистилляция воды;
  • цветное пламя солей.

Внимание:

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

Бумажная болгарка

Одноразовый патефон

Стекло плавится в микроволновке

Перегретая вода в СВЧ печи

Дистилляция воды

Цветное пламя солей

Подписаться на новые видео можно на странице Вконтакте или заглядывать на сайт "Опыты для детей и взрослых детей".

ссылка на оригинал статьи http://habrahabr.ru/company/gtv/blog/185150/