Archive for June, 2006

Переключатель раскладки клавиатуры

Обычно все для этого используют две различных комбинации - Alt+Shift или Ctrl+Shift. Я же, спасибо Линуху, уже года три использую в этом качестве кнопку Caps Lock.

Плюсов куча - во-первых, это всего одна кнопка, а не комбинация. Во-вторых, её никогда не нажмёшь случайно - как бывает, нажимается Ctrl+Shift, если хотел использовать какую-то комбинацию с этими кнопками, но передумал. В-третьих, она расположена удобнее для руки - на том самом частоиспользуемом среднем ряду.

В общем, с какой стороны ни глянь - сплошные плюсы. ;) Однако есть одна проблема - если в X11 это всё настраивается легко, то в винде - хрена, МС предоставила крайне малый набор хоткеев. :( Первое время я выкручивался с помощью Punto Switcher’а, у которого было два недостатка. Он толстый (до 8 метров в памяти) как для маленькой утилитки, и Shift+CapsLock в нём не переключали раскладку, а включали сам CapsLock. Что раздражало, конечно.

Однако с полтора года назад я наткнулся на маленькую, но очень полезную утилиту, которую как будто для меня и сделали. ;) Называется она lswitch, и делает всего одно необходимое действие - биндит переключение раскладки на произвольную клавишу. Ну и “lswitch 20” в автозагрузке убирает все проблемы. ;)

Да, натолкнул меня на мысль написать это всё - пост Ивана Сагалаева, который пишет, что для него индикатором является лампочка Капслока. К сожалению, в винде либо работает она, либо переключатель раскладки - да еще и сам виндовый индикатор раскладки бывает подглючивает, и перестаёт корректно отображать.

Спасает то, что я привык в любой программе возвращаться на английский. ;) Не то чтобы даже привык, а просто рефлекс такой развился - не знаю, от чего, но уже давненько оно такое. ;)

Так что вот - рекомендую использовать. Куда удобнее стандартных комбинаций.

17 comments »

Text Editors

Выбор текстового редактора - это однозначно очень напряжная штука.

Помню, когда-то давно, окончилось это где-то на первом курсе - я использовал Aditor, и был вполне доволен. Но как раз и отказался от него потому, что как раз начал в консольке рыться - на вииях, и начал использовать vim. Угу, некоторое время я его даже на своём компе в качестве дефолтного редактора держал, пока случайно не попал на EmEditor - и вот эта штука у меня прижилась надолго. <!—more—>

Примерно через год (несколько больше двух лет назад - в марте вроде это было) Хейз с Дымом заразили меня Емаксом. И до конца того семестра я точил и точил свой конфиг. ;) Отлично помню обмен удачными находками в конфигах, потраченными на это дело выходными, ну и так далее. ;) В результате получился довольно удобный конфиг, плюс на некоторое время прекратили своё существование (в качестве моих утилит, естественно ;) mutt и vim. Плюс пытался заменить EmEditor, который упорно сопротивлялся. ;)

После того произошло еще много чего, в том числе и полгода jed’а в никсах, но сейчас всё опять по-прежнему: vim в качестве редактора в консоли, EmEditor в качестве редактора по дефолту в винде и Emacs в качестве ньюсо/почточиталки - и, естественно, редактора.

Но у них у всех есть свои недостатки:

  • Emacs - ну тут понятно. Это был бы идеальный вариант, если бы он не весил в озухе туеву хучу мегов. Или хотя бы запускался быстро. Но - увы - оно толстое и прожорливое, что в качестве почитать почту катит - я его один раз запускаю, но в качестве редактора всяких конфигов и мелких файлов - аж никак.

  • vim - его модальность последнее время меня всё больше и больше достаёт. С одной стороны - удобно, что вроде как комбинации клавиш проще, с другой - я и так Емаксовые знаю неплохо, а Ctrl-K мне в виме не хватает. ;) А времени на редактирование уходит больше

  • EmEditor - это в принципе отдельная история, и он не подходит для редактирования конфигов (под никсами не работает ;), но его, похоже, тоже нужно менять.

И я, перещупав кучу редакторов, так и не смог найти такой, который бы понравился. :( Ну вот какой редактор в никсах есть, чтоб нормально работал со скринами, чтоб имел нормальные бинды, ну и был достаточно функционален в стиле “заменить всё в этом выделении”? Такое вообще реально?

16 comments »

Оптимизация в питоне

Есть тут у нас на сервере скрипт, который занимается относительно простым с виду делом - выводит в том формате, котором нам хочется, файлики в определённом каталоге. Ну чтоб качать их можно было. Написан был мной и Саней еще в марте, просто чтобы иметь возможность гибко управлять выводом - никакие реализации автоиндексов в различных веб-серверах никакой такой гибкости не обеспечивают. Ну написали - и он лежал себе, работал. Но вот несколько дней назад я окончательно разобрался с nginx’ом, сделал пару интересных штук, и понял, что и как нужно улучшить в скрипте. ;) Ну, нашёл его версию, работающую в FastCGI, всё завёл, запустили - и впустили на него реальных юзеров. ЛА поднялось до 3-4, а top писал, что питон отжирает 20-25% проца. Ну да, в принципе понятно - туда добавилось достаточно много функций, а также работа с БД - он имел право на более долгое исполнение… но не на торможение всей системы!

В общем, юзеров спихнули обратно, и я пошёл разбираться - первым делом отыскал советы по оптимизации, и начал их читать. Поубирал конкатенацию строк с помощью +, сделал всё через списки и .join.

В итоге - время исполнения скрипта на вывод одной из директорий (в которой много файлов) занимал целую секунду. Путём оптимизации с этой конкатенацией время стало 8 десятых - в принципе, 20% производительности - это неплохо… Но я просто задницей чуял где-то подвох. ;) И я таки нашёл его: взял и закомментировал функцию определения типа файла (да, эти самые image/jpeg и text/plain). Результат меня просто поразил: время исполнения снизилось до 3-5 сотых секунды! То есть практически в 20 раз…

Ну и на радостях я побежал смотреть другие директории: в корне оказалось 15 сотых, а вот в том месте, где было полтора десятка каталогов, время возросло (вот сейчас уже не уверен в точности чисел, лишь в их порядке) где-то до 45-60 сотых. Поразмышляв, я понял, что наверное просто сильно тормозят вызовы функции определения размера директории - а она у нас злая, определяет размер директории, пробегаясь по ней рекурсивно. Ну и, понятное дело, я решил переделать, чтоб эту функцию нужно было вызывать только 1 раз - а почитав те самые советы, убедился в этом. Переделал функцию так, что на входе получает список директорий, а на выходе отдаёт словарь с размерами - и время исполнения понизилось до 15 сотых. ;)

Вот так красиво скрипт ускорился во много раз. ;)

10 comments »