SVN → Внешние зависимости SVN
Данной записью открываю тег заметки, по которому буду описывать некие элементарные (или базовые) вещи скорее для себя, так что многие тут ничего волшебного не увидят.
С системой управления версий SVN работаю уже года полтора и, честно говоря, уже не представляю, как программировал до этого, но вот на внешние зависимости в svn наткнулся недавно. Суть в том, что файлы в одном каталоге подтягиваются системой из другого каталога или вообще из другого репозитория.
В частности, можно таким образом заполнять папку library, содержащую внешние библиотеки. Ниже пример с зендом (ради ссылки, собственно, весь пост и городится)
1 2 | ~$ svn propedit svn:externals library
http://framework.zend.com/svn/framework/standard/tags/release-1.12.0/library/Zend Zend
|
Ранее я либо коммитил внешние библиотеки в репозиторий, либо выставлял игнорирование на всё содержимое папки библиотек, а для обновления библиотек делал всё, как в каменном веке, т.е. сносил одни папки, скачивал и распаковывал другие, отправлял их в хранилище по новой и т.п. Теперь достаточно отредактировать свойство svn:externals
Кроме всего прочего, можно явно указать номера ревизий для внешних зависимостей. Это позволит избежать сюрпризов со стороны внешних хранилищ, когда после очередного обновления проект ломается, ведь код на внешних хранилищах, как правило, вам не подконтролен. Делается это приблизительно так.
1 2 | ~$ svn propedit svn:externals library
http://framework.zend.com/svn/framework/standard/tags/release-1.12.0/library/Zend@4321 Zend
|
P.S. Есть, конечно, и более новомодные штуки, вроде composer, но и до него руки дойдут уже скоро :)

News → Symfony Camp 2012
Посетил сабжевую конференцию. Остался более чем доволен, как и год назад. Ожидания оправдались, было много интересного. По большему счёту, слово Symfony можно безболезненно выкинуть из половины докладов, суть не изменится.
На снимке Kirill Chebunin — Rich model and layered architecture in Symfony2 application

Всячина → Атака роботов
Началось... На неделе просматривал логи сервера и заметил, что мне в блог роботы пишут комментарии. Однако данные приходили от них невалидные, а по моему недосмотру это приводило к 500-й ошибке, так как перенаправление со страницы обработчика формы на страницу записи происходило только для валидных данных.
Любопытство взяло вверх, был написан кусочек кода, сохраняющий эту бессмысленную спамную информацию в отдельную таблицу, а заодно и 500-ошибку убрал. Закоммитил изменения, залил на живой сайт. А с утра началось. Причём не в спамную таблицу, а сразу на сайт, чего ранее не наблюдалось ни разу. Причины сего явления мне неизвестны, такое чувство, что боты чему-то обучились.
Zend Framework → Отправка писем в спул
Под отправкой писем в спул, я подразумеваю именно стратегию, когда реальная отправка письма происходит в фоновом процессе, а не в том, который отправку письма инициализировал. Поясню на примере данного блога. Некто отправляет комментарий, отвечая на комментарий другого пользователя. Этим действием запускается механизм, который отправляет письмо мне, т.е. хозяину блога, о том, что кто-то что-то написал. Дальше отправляется письмо тому, на чей комментарий ответили. Ну и, допустим, что письма о комментарии отправляются всем, кто подписался на комментарии к конкретному топику блога. Так вот зачем нашему некто ожидать, пока всем письма отправятся? В случае же массовых рассылок, когда адресатов сотни и тысячи, по другому и нельзя, по моему.
Решением данной ситуации и будет отправка писем в спул, т.е. помещение их в некую очередь, откуда они будут извлекаться фоновым скриптом, и рассылаться адресатам.

Фотография → Пауки
Разбавлю немного всякое программирование. Фотографии из Крыма, верхняя свежая, а вторая - октября 2010 года. Похоже, что на обоих фотках одно и то же создание, в смысле видовой принадлежности :) @dimocritus подсказывает, что это Steatoda albomaculata, ложная вдова, так и буду считать.

И вторая под катом.
News → Автотвит, первая проба
Реализовал :) Теперь кроме инстаграма и жежешки ещё один робот будет писать твиты за меня. Собственно, этот автотвит будет первый, не считая многозначительного предыдущего "TEST-74"
В ближайшее время постараюсь описать, как это всё работает изнутри :)
News → Поселил здесь свой твиттер
Поселил здесь записи из своего твиттера. Осознанно я там и не нахожусь, в основном автоматом туда записи генерируются или же как сборник полумусорных ссылок этот твиттер использую. Но вот написать для него модуль был просто обязан, хотя бы ради интереса - как это вообще делается? На очереди автоматический репост из блога в микроблог :-)

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

Железо → SD + Eye-Fi - ещё один шажок в беспроводную эпоху
Началось всё с чтения новостных лент сайтов, посвящённых железу и гаджетам. А именно фотоаппараты, оснащённые беспроводными модулями, начали создавать пелевинские вау-импульсы в моём мозгу. Только вот замена зеркалки без Wi-Fi на мыльницу с Wi-Fi в мои планы никак не входила. На помощь пришёл упомянутый выше мозг, он покопался где-то в своих дебрях и извлёк на поверхность аббревиатуру Eye-Fi, заархивированную им при чтении тех же новостных лент.
Что-то отвлёкся я от темы. Короче говоря, нашёл и приобрёл карту памяти с беспроводным модулем на борту - SanDisk Eye-Fi на 4 гектара. Она ниже на картинке, как раз перед погружением в родную стихию.
С виду самая обыкновенная SDHC карточка, каковой и воспринимается устройствами, куда она вставлена. Отличие только в том, что фотографии и видео сбрасываются на компьютер самостоятельно, как только карточка оказывается в радиусе действия Wi-Fi сети, на которую она предварительно настраивается.

News → Торжественная заливка
Произошла она не сегодня, а в ночь с 29-го на 30-е октября. Имеется в виду перемещение на хостинг нового движка и новой базы этого блога.
Как это обычно и бывает, всё прошло не без сучка и с задоринкой. Очень уж хотелось вывесить своё творение во внешний мир, пусть тут ещё и половина не готова из задуманного. Например, раздел бекенда для создания и редактирования записей написал только сегодня, потому и пост запоздавший получается.
Что-то я отвлекаюсь... Короче говоря, где-то в полночь жахнул БД и файлы старого блога на хостинге, закачал новые, обновил страницу - и белый лист в окошке браузера. Никаких ошибок не видно, логи тоже пустые. Блог локально работает на винде дома и на маке на работе. Пришлось ковыряться. Только к половине третьего сайт заработал, а к трём были пофиксены ошибки, которые проявились только на линуксовом сервере.
Основная проблема, которую не сразу смог обнаружить, заключалась в том, что залились не все файлы библиотеки Zend Framework. Заметил случайно, когда дебаги вставлял в библиотечные файлы. На хостинг заливал всё архивом по FTP, а потом распаковывал их в панели (поштучно заливать тысячи файлов выходит во много раз дольше), а при распаковке извлеклись не все файлы, пишет о неудачах. Тут хоть глюк и не с моей стороны, зато узнал о таком полезном инструменте в Total Commander, как синхронизация папок. Теперь им и пользуюсь при обновлении этого движка на хостинге. Даже скриншотик вывешу по этому поводу, а то скучно без картинок.
Ну и пару моих ошибок всплыло, с кастомными хелперами для Zend_Form_Element в форме для комментариев, связанный с большими и маленькими буквами в именовании файлов, причём непонятно, почему на маке сайт нормально функционировал (а не должен был), ведь тоже, вроде, система, которой регистр букв не безразличен. Ну да ладно, исправил и зарубку на будущее оставил в голове, следить внимательнее за буквами.