26 окт. 2010 г.

в этом посте я напишу, как я приспособил свой Vim для программирования на Clojure.
для этого существует замечательный плагин - VimClojure. он умеет, разумеется, подсвечивать синтаксис и делать правильные отступы, как и любой языковой плагин, но кроме того он обладает такими полезностями, как автодополнение (omni completion), документация по языку и, наконец, самое полезное - запуск REPL’а в буфере Vim’а!!!
к сожалению, последнюю функцию оказалось весьма непросто настроить. остальные работали из коробки.

приведу краткое руководство по включению плагина и настройке REPL’а (по сути дела, частично процитирую с переводом эти инструкции)
  1. скачиваем с сайта vim.org последнюю версию плагина.
    для меня это была версия 2.2.0. вполне возможно, что в следующей версии надо будет делать что-то другое, хотя скорее всего изменения будут в сторону упрощения.
  2. распаковываем архив в ~/.vim (или в ~\vimfiles на винде) так, чтобы соответствующие папки попали в соответствующие, если те уже существуют.
  3. прописываем (странно, если у кого-то это ещё не сделано) в ~/.vimrc (или ~\_vimrc на винде) следующие строчки:
    set nocompatible
    filetype plugin indent on
    syntax on
    желательно в таком порядке и где-нибудь вверху файла.

всё, теперь основные функции плагина будут работать. одна из них кстати - это замечательная подсветка скобочек: они подсвечиваются парами разными цветами радуги! так сразу видно вложенность и читабельность кода намного повышается. для этого надо включить соответствующую опцию:
let g:vimclojure#ParenRainbow = 1

чтобы настроить интерактивную часть плагина, нужно произвести следующие манипуляции:
  1. скачать vimclojure-nailgun-client-2.2.0-SNAPSHOT.zip.
  2. распаковать его куда следует (например туда, где установлен clojure).
  3. если у вас винда - то для вас уже сделан ng.exe, если нет - надо сделать в консоли make и получить исполняемый файл ng.
  4. прописать в .vimrc:
    let vimclojure#WantNailgun = 1
    let vimclojure#NailgunClient = “путь к этому исполняемому файлу/ng”
  5. скачать server-2.2.0-SNAPSHOT.jar.
  6. теперь надо запустить (и это придётся делать каждый раз, когда вы будете начинать работу заново) этот сервер:
    java -cp clojure-1.2.0/clojure.jar:clojure-contrib-1.2.0/:server-2.2.0-SNAPSHOT.jar vimclojure.nailgun.NGServer 127.0.0.1 &
  7. можно наслаждаться всякими крутыми штуками - как просмотр документации по текушему слову под курсором, или вычисление текущей строки/блока/файла, или просто запуск REPL’а в отдельном буфере.

но в 6м шаге кроется главный подвох. у меня с первого раза не получилось запустиь этот сервер. и со второго тоже. и я никак не мог понять, что я делаю не так. смысл в том, что надо просто делать всё аккуратно - надо правильно указать пути после параметра -cp (java classpath):
<путь к скачанному дистрибутиву clojure/clojure.jar>:<путь к библиотекам clojure-contrib>:<путь к серверу, который мы скачали на шаге 5>

надеюсь, эта инструкция кому-нибудь поможет.. в другой раз напишу, как установить режим редактирования с парными скобками paredit, который тоже очень и очень удобен и, пожалуй, даже обязателен при программировании на Lisp/Clojure.

11 окт. 2010 г.

Про Vim и LaTeX
.

Весь вечер сегодня и всю ночь разбирался я в LaTeX'е и настраивал под него Vim. Я пользуюсь замечательным плагином Latex-Suite, но в нём столько всего - прям ваще дофига, так что я долго ещё буду в нём копаться..
Мне захотелось написать о паре крутых настроек прямо сейчас (в 5 ночи/утра), потому что потом как известно не найдётся на это времени.
  • Про языковые раскладки и математический режим Теха

    Я пользуюсь внутренним переключением раскладок в Vim'е:
    set keymap=russian-jcuken
    set iminsert=0
    set imdisable

    Поскольку стандартным сочетанием Ctrl-^ пользоваться неудобно, я замапил его на бесполезную кнопку § (на моём маке она рядом с 1, а та, которая там расположена на обычных клавах - с ~ и ` - между Shift и z).
    noremap §
    lnoremap §

    inoremap §


    На этой же кнопке есть не менее бесполезный символ ±, на который я повесил следующее сочетание:
    inoremap ± $
    lnoremap ± $

    и поместил его в ftplugin/tex.vim чтобы оно работало только в теховских файлах. Это очень удобно: пишешь основной текст на русском, нажимаешь ± и при этом в техе символом $ открывается математический режим и переключается раскладка на английскую, вводишь формулы, снова нажимаешь заветную клавишу и вуаля - режим формул закрыт, а раскладка снова русская, можно дальше набирать текст.

  • Про аббревиатуры и макросы

    В плагине Latex-Suite есть множество макросов для быстрого набора различных теховских конструкций. Их можно посмотреть вот тут.
    Мне очень нравятся макросы, начинающиеся на `. Они короткие и понятные. Например, ` + 'латинская буква' заменяется на "соответствующую" греческую: `a -> \aplha, `t -> \theta и т.д. А сочетание `/ - вставляет команду для дроби: \frac{<++>}{<++>}<++> - при этом в ней есть места для подстановки (<++>) при нажатии Ctrl-j курсор перескакивает к следующему такому месту и там сразу можно писать то, что нужно.

    В общем, таких макросов много, они удобны, но разумеется, хочется написать свои, чтобы ускорить набор, например, собственных команд или окружений. поначалу, я пользовался встроенным вимовским iabbrev, но он как-то кривовато работает и довольно неудобен. Так что стоит воспользоваться, опять же, мощью Latex-Suite и в ftplugin/tex.vim прописать конструкцию следующего вида:
    call IMAP('>=', ' \geq ', 'tex')
    call IMAP('<=', ' \leq ', 'tex')
    - в первом аргументе IMAP то, что надо заменять, во втором - на что заменять. Всё очень просто. Так же можно это сделать для окружений. Но для того, чтобы пользоваться спецсимволами типа (перевод строки), нужно их экранировать и брать второй аргумент в двойные кавычки:
    call IMAP('def ', "\\begin{definition}\<++>\\\end{definition}", 'tex')
    call IMAP('опр ', "\\begin{definition}\<++>\\\end{definition}", 'tex')

  • Построчная синхронизация исходника с результатом

    Это, пожалуй, самая крутая функция, которую я сегодня настроил. Для этого я установил pdf-viewer Skim (mac only), и произвёл следующие манипуляции:
    1. в настройках Skim на вкладке Синхро сделал следующие настройки:

    2. а в ftplugin/tex.vim прописал:
    let g:Tex_DefaultTargetFormat='pdf'
    let g:Tex_CompileRule_pdf='/usr/texbin/pdflatex -synctex=1 -file-line-error -interaction=nonstopmode $*'
    let g:Tex_ViewRule_pdf = 'Skim'

    во второй опции главное - это -synctex=1. Об этом я прочитал вот тут, но к сожалению попал я туда не сразу и пришлось долго искать альтернативы типа pdfsync.. А тут перечислены альтернативные вьюеры, если этот почему-то не подходит.

    В результате этих несложных манипуляций получилась следующая картина:

    когда я редактирую теховский исходник в Vim'е, я нажимаю \ll чтобы скомпилировать его и \ls, чтобы перейти к соответствующему месту в pdf с результатом. Наоборот, когда я просматриваю результат и, положим, нахожу ошибку, я нажимаю Cmd-Shift, щёлкаю мышкой по ошибке и попадаю в Vim'е на соответствующую строчку с кодом!

  • Spell-check

    ну и напоследок, я немного разобрался с проверкой орфографии в Vim'е. не могу сказать, чтобы очень хорошо разобрался и поэтому пользоваться пока не очень удобно, но как и каждый раз, удивлён тем, что в Vim'е таки есть эта функция и она вполне себе нормально работает! вот вкратце, как ей пользоваться:
    1. вкл. ':set spell' / выкл. ':set nospell'.
    2. установить язык проверки ':set spelllang=ru_yo' (русский язык с буквой ё).
    3. перейти к следующей/предыдущей ошибке: ']s' и '[s' соответственно.
    4. добавить в словарь: 'zg'.
    5. предложить варианты исправления: 'z='.
P.S.
Хочу отдельно отметить, что когда я набрал ':set spelllang=ru', MacVim сказал мне что для такого языка словаря нет и спросил разрешения скачать. Я был шокирован и разрешил - он просто скачал нужные файлы и всё - в прежние времена он в лучшем случае отправил бы меня самого всё искать и качать, а то бы и просто ругнулся, что не знает такого языка. А теперь-то - всё для людей!

11 апр. 2010 г.

Покупки на Amazon.com

Купил недавно на Amazon.com себе iPod Touch (3G 64Gb). А сейчас заказал ещё один для знакомого.
Значительно сэкономил по деньгам, но главное - приобрёл опыт покупки через интернеты из-за границы.
Вот краткая схема, по которой я действовал:

1. Оформление кредитки. Подходит любая, которой можно платить в интернете. Например Visa e-Card. Виртуальная карта, только для электронных платежей. Я оформил такую в ВТБ24.
2. Регистрация на Paypal. Необязательно. Я регистрировался, потому что думал ещё на e-bay покупать.
3. Регистрация на Shipito.com. Посредник для доставки товаров из Америки в Россию.
4. Регистрация на Amazon.com. Там на месяц дают возможность бесплатно пользоваться двухднейвной доставкой. на деле это занимает 3-4 дня, с обработкой на почтах, но всё же довольно быстро.
5. Покупка. Оплата по кредитке. Адрес оплаты Российский. Адрес доставки американский - полученный в Shipito.
6. Получение посылки из Amazon'а в Shipito. Оплата доставки (через Paypal или просто по кредитке).
7. Ожидание. Я заказал доставку Expess Mail (рекомендую - это не сильно дороже, но довольно быстро), поэтому ждал недолго. 7-8 дней через океан.
8. Обработка в России на таможне, почте и тп. У меня всё прошло очень быстро - всего несколько дней.
9. Получение.

Первые 5 пунктов совершаются в один вечер. через ~3-4 дня посылка оказывается в Shipito. если для отправки денег на счету достаточно, они отправляют в тот же день или на следующий. потом 7-8 дней до России. и так далее..
Итого, я сэкономил ~4000р. (если сравнивать с официальными реселлерами Apple, то вообще 8000р.) и потратил ~17дней со дня заказа, до дня получения.


ссылки на статьи которые меня вдохновили и очень помогли, там все подробности:
o самая главная, которую я прочитал первой, не очень подробная, зато сразу понятна общая схема (много полезного есть в комментариях)
o много информации про кредитки
o так я остлеживал посылку (помимо писем от USPS)
o всё про Shipito
o ещё раз обо всём, но я не читал особенно, нашёл уже после покупки

p.s. забыл сказать маленький нюанс: в Shipito надо заполнить таможенную декларацию. я написал в наименовании "mp3 player" (не надо писать конкретно), и указал стоимость 330$. реальная стоимость была 350, но беспошлинный лимит у нас на таможне 10000р. за его превышение необходимо платить пошлину: (x-10000)*0.3, где x - стоимость товара.