Показаны сообщения с ярлыком заметки на полях. Показать все сообщения
Показаны сообщения с ярлыком заметки на полях. Показать все сообщения

25 апреля 2011 г.

Соглашение о вызовах

Интересная статья о всевозможных вариантах вызова и использования функций: сопрограммы (coroutines), рекурсия, хвостовая рекурсия (tail call optimization), каррирование и многое другое.

http://jjinux.blogspot.com/2011/04/call-me-crazy-calling-conventions.html

2 марта 2011 г.

Волшебная кнопка

Несколько раз я сталкивался с тем, что запущенная в линуксе программа начинает отжирать всю доступную память, система сваливается в штопор, и закрыть виновницу удаётся с большим трудом... Простой пример для теста — откройте XML файл в несколько мегабайт в Firefox. ;)

Уже гораздо позже я узнал, что есть т.н. "волшебная кнопка" — "бесполезная" клавиша SysRq (она делит место жительства с PrintScreen). Это единственная прямая связь с ядром линукса, работающая всегда (конечно, если работает и ядро). Тест из первого абзаца проходится с помощью SysRq+Alt+f — вызывается обработчик ситуации нехватки памяти, который и завершает самый "тяжёлый" процесс. Из любимого ещё убиение X-сервера — SysRq+Alt+k.

Статический анализ кода в Python

В статье на Хабре наткнулся на упоминание статических анализаторов кода для Python. Инструмент этот очень полезен при регулярном его использовании. Немножко подробнее расскажу о pep8, pylint и pyflakes.

pep8

Этот анализатор проверяет соответствие кода знаменитому PEP 8 — руководству по стилю кода Python. В больших и не очень командах хорошая штука, ибо "Readability counts"!

pylint

Самый придирчивый анализатор из всех трёх, хотя стиль кода проверяет немножко иначе, чем pep8 — акцент на "дурно пахнущем" и неоптимальном коде, выдаёт и предложения о рефакторинге. Бонусная опция — генерация UML-диаграмм с помощью команды pyreverse.
Угодить pylint весьма сложно, порой он ошибается — к счастью, настройки достаточно гибкие.

pyflakes

В отличие от pylint, проверяет только на логические ошибки в программе, стиль не учитывает.


На мой взгляд, золотая середина — pyflakes, поначалу можно использовать и pep8, дабы привить соблюдение стиля.

Бонус для пользователей Vim — вызов pyflakes или pylint после каждого сохранения редактируемого файла, сообщения об ошибках помещаются в окошко "quickfix":
command Pylint :call Pylint()
function! Pylint()
    setlocal makeprg=(echo\ '[%]';\ pylint\ %)
    setlocal efm=%+P[%f],%t:\ %#%l:%m
    silent make
    cwindow
endfunction

command Pyflakes :call Pyflakes()
function! Pyflakes()
    let tmpfile = tempname()
    execute "w" tmpfile
    execute "set makeprg=(pyflakes\\ " . tmpfile . "\\\\\\|sed\\ s@" . tmpfile ."@%@)"
    silent make
    cwindow
endfunction

autocmd BufWrite *.{py} :call Pyflakes()

25 февраля 2011 г.

Обработка ссылок mailto в Google Chrome

Наконец нашёл решение давней несуразности: в отличие от Firefox, линуксовый Google Chrome при попытке открыть почтовую ссылку (протокола "mailto") запускает почтовую программу, а мне нужен Gmail. Замечательный superuser.com подсказал, что в Ubuntu для этого достаточно установить пакет desktop-webmail (плюс к этому я выбрал Desktop Webmail в настройках Preferred Applications/Mail Reader — возможно, это необязательно).

10 декабря 2010 г.

Новый старый PNG

Оказывается, формат PNG не так уж и прост. Среди прочего он позволяет эффективно сжимать градиентную заливку внутри картинки, отсюда вывод — если требуется на градиентный фон что-то наложить, эффективнее будет сделать фон отдельной картинкой, а сверху наложить другую с объектами переднего плана и прозрачным фоном.
Есть несколько утилит для оптимизации размера PNG, одна из лучших открытых — OptiPNG, есть удобные обёртки под Windows, Mac и Linux. Но ещё лучше по степени сжатия — бесплатная утилитка PNGOUT.

19 ноября 2010 г.

Грабли в MySQL

Сегодня, как обычно случайно, выяснил, что если подключиться к одной базе и начать там транзакцию с помощью START TRANSACTION/BEGIN, то любой запрос к другой базе приостанавливается — MySQL ждёт, когда вы закончите открытую транзакцию к первой базе.

21 октября 2010 г.

Вся мощь Vim

Я люблю Vim странной долгой любовью. :) Встречая такие мануалы, понимаю, что только начинаю изучать его. Осталось понять сей славный документ, и можно называться Vim-гуру. B-)

8 сентября 2010 г.

Server-side jQuery

jQuery настолько прекрасен, что портируется и на серверные языки, дабы упростить написание всевозможных парсеров. Я использую два порта, pyquery и phpquery, соответственно — для Python и PHP. Весьма облегчают жизнь.