Авг 26

В windows пользовался pixie – http://www.nattyware.com/pixie.php.
Понадобился аналог под linux – нашёл grabc.
По сравнению с pixie он конечно не так удобен – работает из командной строки, но хоть что-то.

Теги:
Авг 26

Настройки хранятся в файле ~/.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.

Теги:
Авг 26
sudo a2enmod [модуль]

К примеру:

sudo a2enmod rewrite
sudo a2enmod expires
Теги:
Авг 26

Нужно положить в папку ~/.ssh файл id_rsa (или id_dsa) со сгенерированным ключом. У меня был ключ, сгенерированный puttygen – для работы под windows. Для конвертации достаточно загрузить файл приватного ключа в puttygen и сконвертировать в нужный формат, после чего в linux положить этот файл в указанное место.

Теги:
Авг 19

Сложно придумать человеческое название этому процессу.
К примеру, есть дизайн одной картинкой, из него нужна кнопка, на кнопке уже что-то написано, надо это убрать.
Нужно прямоугольным выделением выделить нужную область, потом Инструменты->Преобразование->Масштаб и подвигать ползунок, пока избражение не закроет всю кнопку.

Теги:
Авг 17

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 »

Авг 15

Наткнулся в сети на интересную статью о том, как ограничить скорость скачивания файлов с сервера.
Код на Python (Django), но если язык не знаком, то в качестве алгоритма почитать тоже полезно.
Ссылка.

Теги:
Авг 06

В mysql есть очень удобная конструкция

INSERT INTO table (columns) VALUES (values) ON DUPLICATE KEY UPDATE column1=value1, column2=value2

Это очень удобно тогда, когда нужно вставить только те данные, которых в таблице нет (при этом в апдейте указывается уже существующее значение поля).
В postgresql такого, к сожалению, нет.
Но подобное поведение можно сэмулировать несколькими способами. Два самых интересных:
Continue reading »

Теги:
Июл 30

Вот достаточно подробная статья на эту тему.
В принципе достаточно написать

xdebug_start_trace('<Путь-к файлу>.html', XDEBUG_TRACE_HTML);
...
...
xdebug_stop_trace();
Теги:
Июн 22

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» в список ссылок вверху и внизу страницы.

Теги:
preload preload preload