Console tool for Kohana unit-test module
19 апреля 2008Мой текущий похапэ-фреймворк Kohanaphp для тестирования предоставляет модуль, работающий через веб-интерфейс…
Мне это несколько дико, поэтому нацарапал консольную приблуду на ruby, которая парсит этот самый веб-интерфейс.
Скриншот прилагается.
Для использования поправить SITE_URL в 17й строке и chmod a+x
run_tests.rb
Zend_Framework после Django
10 апреля 2008Чувак после работы с Django хвалит Zend Framework. Или это агент влияния или я ему не верю.
iPod Nano 8Gb + Linux
20 марта 2008Завел таки железяку сабжевую. Opensuse 10.3 дома и на работе.
Всего-то нужно было снести libgpod2, поставить libgpod3 (V0.6.0 is the first release to support the new iPod Classics and Nano Videos), после этого обновился Amarok.
В общем, все линуксячие приложения (floola, amarok, etc) для синхронизации юзают libgpod, разрабатываемый под gtkpod.
Зря только время потратил на то, чтобы iTunes под wine заработало. Оно-то заработало, но свою железяку в упор не видит.
Вывод: щас все брошу и виндовс поставлю.
Хакерская локаль 13_37 K0h4n4
18 марта 2008В транке мого коханого фреймворку обнаружилась прикольная хакерская локаль 13_37
пример прилагается )))
$lang = array
(
'there_can_be_only_one' => '7h3r3 c4n b3 0n|y 0n3 1n574nc3 0f K0h4n4 p3r p463 r3qu357.',
'uncaught_exception' => 'Unc4u6h7 %s: %s 1n f1|3 %s 0n |1n3 %s',
'invalid_method' => '1nv4|1d m37h0d <tt>%s</tt> c4||3d 1n <tt>%s</tt>.',
'cannot_write_log' => 'Y0ur |06.d1r3c70ry c0nf16 53771n6 d035 n07 p01n7 70 4 wr174b|3 d1r3c70ry.',
'resource_not_found' => '7h3 r3qu3573d %s, <tt>%s</tt>, c0u|d n07 b3 f0und.',
'no_default_route' => 'P|3453 537 4 d3f4u|7 r0u73 1n <tt>c0nf16/r0u735.php</tt>.',
'no_controller' => 'K0h4n4 w45 n07 4b|3 70 d373rm1n3 4 c0n7r0||3r 70 pr0c355 7h15 r3qu357: %s',
'page_not_found' => '7h3 p463 y0u r3qu3573d, <tt>%s</tt>, c0u|d n07 b3 f0und.',
'stats_footer' => '|04d3d 1n {execution_time} 53c0nd5, u51n6 {memory_usage} 0f m3m0ry. 63n3r473d by K0h4n4 v{kohana_version}.',
'error_message' => '3rr0r 0ccurr3d 47 <57r0n6>|1n3 %s</57r0n6> 0f <strong>%s</strong>.'
);
Exception Conference #07
17 марта 2008Удачно так сходил, выиграл Ipod Nano 8GB

С линуксами, естественно, проблемы.
“Неприятный сюрприз приготовила компания Apple пользователям ОС Linux. Дело в том, что последнее поколение популярных плееров iPod не работает с открытой ОС.
Происходит это потому, что в новые плееры встроена функция автоматического присваивания криптографической контрольной суммы базе данных записей, находящихся в памяти устройства. Это необходимо для того, чтобы приложения сторонних разработчиков не смогли синхронизировать контент с плеерами iPod.”
мастдайный iTunes кое-как завелся под wine, зато не увидел железяку.
Прослушал 3 доклада по python. Метаклассы и дескрипторы / PEAK rules / Django как платформа для фрилансера.
Для поверхностно знакомого с питоном это грузок. До ruby не дождался, но там доклады были тоже нишевые. Stroke DB какое-то ))). Подозреваю, что это что-то типа KirbyBase
Рецепты Капистрано
11 марта 2008проблема:
не получается выполнять команды на удаленном хосте
no such file or directory: /usr/bin/env (php, mysql, etc.)
решение: установка $PATH
default_environment["PATH"] = '/opt/csw/php5/bin:/opt/csw/mysql5/bin:/opt/csw/bin:/usr/sbin:/usr/local/bin:$PATH'
проблема: аяяй, чекаут кода (таски setup, update_code, rollback_code, and symlink) пытается выполняться во всех ролях!! (на мейл сервере, на MySQL сервере и т.д. )
решение: прописываем у таких ролей :no_release => true
role :mail, config_production[:mail][:host], :no_release => true
role :solr, config_production[:solr][:host], :no_release => true
role :db, config_production[:db][:host], :no_release => true
проблема: не можем выполнить удаленную команду, т.к. не можем даже влогиниться (начиная от версии Capistrano 2.1)
** [err] Permission denied, please try again. ** [err] Permission denied, please try again. ** [err] Permission denied (publickey,gssapi-with-mic,password). svn: Connection closed unexpectedly
решение: Начиная с версии 2.1, капистрано больше не запрашивает pty в каждой команде. Проблема в том, что на некоторых системах (на Соляре точно, проверено) некоторые команды (svn, passwd) автоматически впадают в неинтерактивный режим.
# по умолчанию оно false
default_run_options[:pty] = true
проблема: я хочу получить данные коннекта к базе от пхпшного приложения в руби, и юзать для сетапа чего-нибудь, и пусть мне дадут готовый хеш
решение: (для Symfony)
php кусок
// гдето тут берется DSN
// mysql://root:pwd@localhost/mydb
$data = preg_split('(://|@|/|:)', $link);
list($conf_arr[':dbtype'], $conf_arr[':user'], $conf_arr[':pass'], $conf_arr[':host'], $conf_arr[':dbname']) = $data;
echo base64_encode(sfYaml::dump($conf_arr));
руби кусок (получаем настоящий юзабельный тру-хеш с символами в кач. ключей)
# Get DB conf
desc "Get DB connection hash"
task :db_get_conf, :roles => :web do
enc = ""
run "cd #{app} && php deploy-db-sendconf.php" do |channel, stream, data|
enc = data
raise data if stream == :err
end
# base64decode & convert to hash from YAML
YAML.load enc.unpack("m")[0]
end
авторизация (ручками)
# restart apache webserver
desc "Restart the web server"
task :restart, :roles => :web do
sudo "svcadm restart svc:/network/http:cswapache2" do |ch, stream, out|
ch.send_data "#{sudo_password}\n" if out =~ /^Password:/
raise out if stream == :err
end
end
вроде бы хватит сегодня
Капистрано cli для не-ROR проектов
11 марта 2008Документация, нужно заметить, не на высоте. Хотя, для деплоймента родных Ruby On Rails проектов ее хватает.Итак, задача по деплойменту PHP проекта, написанного на Symfony.
Процесс деплоймента размазан тонким слоем по 3м веб-серверам (test, staging, production) + mail сервер + сервер перекодировки видео + сервера баз данных.Создано консольное ruby приложение, внутри которого и поднимается Capistrano
gem 'capistrano', '>= 2.1.0'
require 'capistrano/cli' # капистрановский command-line utility
require 'modules/logger/' # свой логгер
# почему-то родной конфиг был только для чтения, а мы хотим писать (смотреть ниже cap_conf.logger к примеру)
module Capistrano
class Configuration
attr_accessor :config
end
end
# а вот и наш экземпляр, который хавает таски и выполняет
cap_conf = Capistrano::Configuration.new
# вот свой логгер
cap_conf.logger = DepLogger.getInstance()
# грузим задачи
cap_conf.load 'deploy' # базовые таски из lib/capistrano/recipes/deploy.rb
# файлы задач названы инкрементально (01_xxx.rb, 02_xxx.rb, 03_xxx.rb)
Dir['tasks/*.rb'].sort.each do |plugin|
cap_conf.load(plugin)
end
Используется вышеозначенное примерно вот так:
cap_conf.myproject.create
В namespace myproject таск create выглядит так:
namespace :myproject do
desc "Create Myproject"
task :create, :roles => :web do
# включаем транзакцию
transaction do
on_rollback do
site.rm_after_import # site это один из таск-неймспейсов, подгруженых ранее.
end
# выполнение тасков
site.task1
# ...
# ...
site.task10
end
end
end
Чтобы удалить роровское непотребство при деплоймент процессе, переопределяем родной deploy:finalize_update в одном из тасков, напр в 10_xxx.rb
речь идет о директориях log, public, tmp, system, pids, все то, что закомментировано.
# Override some RoR artefacts
namespace :deploy do
desc < <-DESC
Touches up the released code, etc. See original Capistrano description
DESC
task :finalize_update, :except => { :no_release => true } do
sudo "chmod -R g+w #{latest_release}" if fetch(:group_writable, true)
sudo "chown -R #{conf[:owner_user]}:#{conf[:owner_group]} #{latest_release}"
# mkdir -p is making sure that the directories are there for some SCM's that don't
# save empty folders
#run < <-CMD
# rm -rf #{latest_release}/log #{latest_release}/public/system #{latest_release}/tmp/pids &&
# mkdir -p #{latest_release}/public &&
# mkdir -p #{latest_release}/tmp &&
# ln -s #{shared_path}/log #{latest_release}/log &&
# ln -s #{shared_path}/system #{latest_release}/public/system &&
# ln -s #{shared_path}/pids #{latest_release}/tmp/pids
#CMD
end
end
В принципе это все. Как обойти некоторые спотыкачки (хождение через gateway только в одной из ролей, неработающий sudo, etc.), опишу в следующий раз.
Сайт на пхп ?
29 февраля 2008Если сайт прячет заголовки сервера
Date: Fri, 29 Feb 2008 10:22:08 GMT
Server: Apache/2.2.3 (CentOS) DAV/2 SVN/1.4.2 mod_ssl/2.2.3 OpenSSL/0.9.8b PHP/5.2.4 mod_fastcgi/2.4.6
или заменяет расширения *.php файлов на скажем, *.zoo, *.asp (чтобы ввести в заблуждение и затруднить взлом)
у php есть странные способы сказать всем, что да, я написан на пхп
к урлу добавляем
- ?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
- ?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
- ?=PHPE9568F35-D428-11d2-A769-00AA001ACF42
- ?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
и отбрасываем всякие сомнения прочь
Весна
28 февраля 2008Если кто не заметил - весна начинается, когда дорожает пиво, и активизируются чары.
Вчера в аську влезли непонятно откуда взявшиеся хедхунтеры :\
Global Logic с метро “Палац украина” и какие-то xt-labs с метро “Минская”
по первым понятно, далековато от Троещины, а вторые вообще внятно не могут сказать что хотят - “приходите, поговорим”
