morontt.info

ФотографияЧудо 3D-технологий

Такого вот чудика встретили во время прогулки.

Трубоног

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

Ниже ещё несколько фоток, да и разрешение повыше, если по ссылкам перейти.

Вот, собственно, и всё :)

Теги: юмор фото

Doctrine 2Пользовательские функции DQL

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

SELECT * FROM `spam` AS `s`
WHERE MD5(`s`.`secretfield`) = 'hash';

Дальнейшие действия хоть и касаются DQL и Doctrine, но будут описаны в контексте фреймворка Symfony 2. Оригинальную статью можно обнаружить в документации

user-defined-functions

Zend FrameworkZend_Service_Twitter, небольшие изменения

Месяц назад обновил версию Zend Framework до 1.12.3 в движке этого блога, потестировал изменения локально, ничего страшного не обнаружил, залил на хостинг. Белый экран. Спустя пару минут вспомнил, что в девелоперском и тестовом окружениях у меня отключены последние сообщения из твиттера. А так же и то, что в последнем (первом) зенде были внесены изменения в Zend_Service_Twitter в связи с обновлением API до версии 1.1

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

PHPУстановка ImageMagick

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

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

sudo port install ImageMagick
sudo port install php5-imagick

Минут 45 ожидания (и наблюдения за компьютерной жизнью в консоли) и готово. Так долго вышло потому, что порты давно не обновлялись, а с установкой расширения попутно пересобралось всё, что только можно.

Ошибка httpd.exe

ТестированиеАвтоматизированное тестирование

Это вторая запись из серии, посвящённой тестам, первая находится тут. В ней будет описан процесс установки и настройки функционального тестирования в Symfony2 с использованием Behat и Mink

Для начала, наверное, стоит рассказать о том, что такое эти Behat и Mink, и с чем их едят. Первое - это библиотека, которая интерпретирует человеко-понятные сценарии и, собственно, выполняет их в виде тестов. Второе - это абстрактная библиотека эмулятора браузера, которая содержит множество готовых определений, используемых Behat-ом при разборе тестовых сценариев, характерных именно для общих задач браузера. Помимо этих специфических определений, Mink предоставляет объектно-ориентированных интерфейс, позволяющий общаться с браузером. Сложно, конечно, описать это в двух словах, нужно самому посмотреть и пощупать :)

Сперва создадим пустой проект или же будем считать, что он уже существует. Я не стал особо заморачивать себе голову и скачал с офсайта Symfony Standard 2.1.7 without vendors. Установкой всех необходимых библиотек будет заниматься composer, а запускается сей процесс (установки) буквально одним взмахом левой пятки.

php composer.phar install

Ну а теперь займёмся настройкой проекта для тестирования. В первую очередь подправим файл composer.json, добавив в него следующие штуки:

ТестированиеУстановка Sahi

Sahi Dashboard

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

Если в двух словах, то это некий драйвер, который будет самостоятельно кликать по кнопкам и ссылкам, заполнять поля форм и выполнять прочие операции на сайте. Самостоятельно - это немного не то слово, будет происходить именно то и только то, что описано в тестовом сценарии. В отличии от других (но не всех, конечно) "эмуляторов" браузеров, Sahi умеет работать с динамическими веб-приложениями, т.е. AJAX и прочий javascript ему по зубам. Ладно, закончим с лирическим вступлением...

Идём на официальный сайт, перемещаемся в раздел с Open Source версией и кликаем на загрузку. Скачиваем. Скачается, скорее всего, jar-файл, но бояться его не стоит, всё отлично запустится и установится, если, конечно, Java JDK (или JRE) уже установлен.

Apacheкак запаролить определённый URL средствами Apache

Иногда возникает такая ситуация, когда нужно запаролить опредённый URL средствами веб-сервера (Apache в данном случае). Выяснять почему и зачем не будем, так как надо всё-таки решать поставленную задачу.

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

<Location "/category/zhelezo">
    AuthType Basic
    AuthName "Only for administrator" 
    AuthUserFile "/path/to/.htpasswd"
    require valid-user
</Location>

Видно, что закрывается URL http://example.org/category/zhelezo. Путь к файлу .htpasswd должен быть абсолютным, иначе работать не будет (проверял). Упоминать даже не буду, что этот файл не должен быть доступен через веб :)

PHPЛокальные проблемы PHP

Подключился на днях к новому проекту на Symfony 2 и начались проблемы :) Проблемы не с симфонией, конечно, а с php, точнее, с его настройками. Скачал проект, установил внешние библиотеки и буквально с первой команды наблюдаю такую красоту в терминале.

warning date_default_timezone_get

ApacheПередача GET-параметров при переадресации

Допустим, что два или более сайта обслуживаются одним веб-приложением, но различать их всё же надо. Предположим, что разделение это происходит в файле .htaccess, путём определения параметра city.

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^pupersite\.kh\.ua$ [NC]
RewriteRule ^(.*)$ index.php?city=kharkov [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^pupersite\.zp\.ua$ [NC]
RewriteRule ^(.*)$ index.php?city=zaporozhye [L]

Проблема здесь в том, что происходит замена GET-параметров в строке запроса, т.е. по ссылке вида pupersite.zp.ua/?param1=1&param2=3 приложение параметров param1 и param2 не получит.

Zend FrameworkZend_Service_Twitter, последние записи twitter

Внимание, данная запись устарела. Описанное работоспособно для ZF 1.12.2 (и ниже) и twitter API 1.0, более актуальная запись находится тут → Zend_Service_Twitter, небольшие изменения

Обещался почти месяц назад описать внутренности кода, вытягивающего последние записи из твиттера, так что теперь придётся. Или забью и забуду.

Сложного ничего нет. Необходима лишь документация и гугл. Кроме того, нужно зарегистрировать своё веб-приложение на dev.twitter.com для того, чтобы получить consumer key и consumer secret. Там же вами для приложения будет указан callbackURL, который примет токен для авторизации.

Параметры для аутентификации поместим в application.ini

twitter.callbackUrl = "http://yourhost.com/twitter/callback"
twitter.siteUrl = "http://twitter.com/oauth"
twitter.consumerKey = "dadd58b24026011e2ce361"
twitter.consumerSecret = "ljsvb3fEM28e8c5a4fbb4f38bc378pNRzL5I1CrfV5B"

Далее создаём контроллер для твиттера приблизительно такого вида.

1 2 3 4 5 6 7 8 9