В windows пользовался pixie – http://www.nattyware.com/pixie.php.
Понадобился аналог под linux – нашёл grabc.
По сравнению с pixie он конечно не так удобен – работает из командной строки, но хоть что-то.
Настройки хранятся в файле ~/.hgrc
[ui] merge = kdiff3 username = bullgare [extensions] extdiff = # для meld в качестве visual diff tool [extdiff] meld = # для meld в качестве visual diff tool #kdiff3 = kompare = [tortoisehg] authorcolor = True longsummary = True postpull = rebase vdiff = kompare editor = meld vdiffnowin = True
Список доступных команд:
http://manpages.ubuntu.com/manpages/lucid/man1/hgtk.1.html
Для работы в командной строке нужно поработать с файлом настроек (/etc/mercurial/hgrc.d/hgext) – раскоментировать hgext.hgk для доступности команды hg view, hgext.rebase, hgext.record.
sudo a2enmod [модуль]
К примеру:
sudo a2enmod rewrite sudo a2enmod expires
Нужно положить в папку ~/.ssh файл id_rsa (или id_dsa) со сгенерированным ключом. У меня был ключ, сгенерированный puttygen – для работы под windows. Для конвертации достаточно загрузить файл приватного ключа в puttygen и сконвертировать в нужный формат, после чего в linux положить этот файл в указанное место.
Сложно придумать человеческое название этому процессу.
К примеру, есть дизайн одной картинкой, из него нужна кнопка, на кнопке уже что-то написано, надо это убрать.
Нужно прямоугольным выделением выделить нужную область, потом Инструменты->Преобразование->Масштаб и подвигать ползунок, пока избражение не закроет всю кнопку.
1. Скачиваем расширение – http://www.xdebug.org/download.php (я качаю ts) и копируем в папку с расширениями php.
2. В php.ini пишем
zend_extension_ts = "< путь-к-папке-ext>/php_xdebug.dll" xdebug.remote_enable=1 xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.remote_port=9000 xdebug.remote_host=localhost xdebug.idekey=bullgare ;ну или другой ;это для профилирования xdebug.profiler_enable=Off xdebug.profiler_output_dir="c:\traces" xdebug.profiler_enable_trigger=On xdebug.profiler_output_name = cachegrind.out.%t.%p
После перезапуска апача phpinfo будет содержать раздел xdebug.
Continue reading »
Наткнулся в сети на интересную статью о том, как ограничить скорость скачивания файлов с сервера.
Код на Python (Django), но если язык не знаком, то в качестве алгоритма почитать тоже полезно.
Ссылка.
В mysql есть очень удобная конструкция
INSERT INTO table (columns) VALUES (values) ON DUPLICATE KEY UPDATE column1=value1, column2=value2
Это очень удобно тогда, когда нужно вставить только те данные, которых в таблице нет (при этом в апдейте указывается уже существующее значение поля).
В postgresql такого, к сожалению, нет.
Но подобное поведение можно сэмулировать несколькими способами. Два самых интересных:
Continue reading »
Вот достаточно подробная статья на эту тему.
В принципе достаточно написать
xdebug_start_trace('<Путь-к файлу>.html', XDEBUG_TRACE_HTML);
...
...
xdebug_stop_trace();
Redmine, конечно, настраиваемый и гибкий, но иногда очень не удобный.
Захотелось сделать кнопочку «Взять в работу», которая появлялась бы на странице тикета.
Делать плагин долго, просто подключить яваскрипт в шаблон – плохо, проблемы при обновлении Redmine.
В итоге решил написать Greasemonkey-скрипт:
// ==UserScript==
// @name Redmine Ticket
// @namespace hc
// @include [урл к Redmine]/issues/*
// ==/UserScript==
var tt = document.createElement('DIV');
tt.innerHTML = "<script>\
var linkInWork = '<a href=\"javascript:void(0);\" onclick=\"setInWork(); return false;\" class=\"icon\">In work</a>';\
$A( $$( '#content .contextual a.icon-del' ) ).each( function( Elem ) {\
Elem.insert( {'after': linkInWork} );\
});\
function setInWork()\
{\
var t = $('loggedas').innerHTML;\
var userId = /\\/users\\/([0-9]*)/.exec(t);\
if ( userId !== null ) {\
userId = userId[1];\
}\
var statusValue = 2;\
setSelectOptionSelected( 'issue_assigned_to_id', userId );\
setSelectOptionSelected( 'issue_status_id', statusValue );\
$('issue-form').submit();\
}\
function setSelectOptionSelected( SelId, Value )\
{\
var sel = $( SelId );\
$A( sel.options ).find( function( option, index ) {\
if( option.value == Value ) {\
sel.selectedIndex = index;\
}\
});\
}\
</script>";
document.getElementById('content').appendChild(tt);
Добавляет ссылки «In work» в список ссылок вверху и внизу страницы.