Август 8, 2011
Может случиться, что у вас, как и у меня очень ssh-клиент долго подключался к серверу. Я долго жил с этим, а поправить оказалось легко.
Затык оказался в двух местах – во-первых и главных ssh-сервер может делать reverse dns lookup, и это может занимать продолжительное время. В интернетах пишут, что всему поможет выставление настройки UseDNS no на сервере, но я решил вопрос, просто подключаясь к серверу по ip-адресу. Через nslookup или как-то еще узнаем адрес машины, после чего лезем в
~/.ssh/config и добавляем запись:
Host dev-server
#connect through ip address to speedup connect
Hostname 172.19.1.234
#Hostname dev-server.local
User dev
Соответственно, подключаемся через ssh dev-server
Задержка стала меньше, но все равно бесит. Подключаемся к машине с параметром -vvv и внезапно узнаем, что клиент последовательно перебирает все методы авторизации, начиная не с вашего. Соответственно, выставляем первым тот, который нужен, и начинаем подключаться мгновенно.
Host *
PreferredAuthentications password,hostbased,publickey,keyboard-interactive
Август 4, 2011
Моим основным почтовым клиентом уже лет пять является sylpheed. Главное его достоинство – он фантастически быстрый. Стартует мгновенно, подвесить его за все это время мне не удалось, ну и функционала у него за глаза. Единственный его минус, вернее особенность – он написан на GTK2 без привязки в гному, соответственно никакой интеграции с третьим гномом или Ubuntu Unity в природе не наблюдается.
Решил добавить костылей, чтобы эту ситуацию исправить. Как оказалось, управлять меню и счетчиком иконки довольно просто. В результате добавил нужные записи в файл ярлыка sylpheed и написал небольшой python-скрипт, который отслеживает появление новых сообщений и выдает об этом информацию. Получилось как надо:
Все выложено, куда следует. Из минусов – для того, чтобы все запускалось внешне без изменений, пришлось переименовать бинарник из пакета и скрипт положить на его место, поэтому при следующем обновлении все конечно сломается. Если такая перспектива пугает, то можно заменить только .dektop файл, ну или сделать нормальный патч к клиенту и запулить его на лаунчпад.
Июнь 5, 2011
На глаза попалась презентация на сто слайдов, которая вкратце описывает все то, что накопилось в закладках моего браузера за последний год-полтора.
http://addyosmani.com/toolsforjqueryapparchitecture/
Виджеты, SPA, MVC, History, templating, deployment и прочие слова, все здесь.
Май 28, 2011
При всем великолепии vim’а есть еще плюшки, которые не устают радовать глаз. Одна из них – это поиск и замена в файлах.
Искать можно как вперед ( / ), так и назад( ? ), сразу искать слово под курсором( * ), перемещаться по результатам поиска как туда ( n ), так и обратно( N )
С заменой все тоже очень богато. Можно заменять отсюда и до конца строки/параграфа/текста, так же и наоборот, между определенными строками, на определенное количество строк и т.д.(http://vim.wikia.com/wiki/Search_and_replace). Можно заменить в выделенном блоке текста( выделить и нажать v ).
Самое прекрасное – это то, что везде можно использовать регулярные выражения.
Например, в xml файле есть куча тегов <transition>blablabla</transition>, которые занимают несколько строк. Удалить можно одним махом:
:%s/<transition>\_.\{-}<\/transition>//g
Здесь \_ – это любой символ, включая символы новой строки, \{-} – это нежадный аналог оператора * в других диалектах.
Использованная литература:
Regular Expression matching more than a single line in Vim
Vim Regular Expressions
Март 21, 2011
Спеки – не панацея, и уже много раз давали сбой. Только все начали облизываться на web sockets, как их выпилили обратно, а теперь новая радость.
В последней версии опера представила поддержку нового тега – device. Мужики в whatwg подумали и решили его отменить.
Поспешили, бывает.
Март 10, 2011
Свежая книга по новым технологиям. В книге рассматривается новый стандарт HTML и сопутствующие технологии. Первая глава представляет собой введение, из которого можно узнать историю создания новой версии стандарта, а также о том, как с помощью минимальных действий перевести свой документ под новый стандарт. Во второй главе рассматриваются новые введенные элементы и их место в документе – поясняется смысл новых тегов с точки зрения семантики. Далее авторы переходят к нововведениям для форм и представляют новые
элементы ввода, методы проверки вводимых данных и т.д. Четвертая глава относится к элементам аудио и видео, в пятой рассматривается холст (canvas). Авторы разбирают области применимости элементов и возможности, которые они представляют.
Следующие главы посвящены различным новым jacascript API, которые определены в стандарте или сопутствующих спецификациях. Разбираются такие вопросы, как хранение данных, автономная работа, drag’n'drop, геолокация, а также протоколы для кроссдоменного общения между iframe-ами (web messaging), и протокол для установления двусторонней связи между клиентом и сервером (Web sockets).
Немного о самой книге – при переводе видимо старались сохранить неформальный дух авторов и сохранить все их шутки, в результате все они смотрятся достаточно чужеродно в русском языке, но в целом стиль приемлимый. Также, достаточно много опечаток и мелких ошибок в верстке, которые лезут в глаза. Стоит заметить, что присутствуют они только в поясняющем тексте, в примерах с кодом особых ляпов замечено не было. Примеры коды набраны желтым шрифтом, читать его можно только при достаточно хорошем освещении.
К минусам книги стоит отнести то, что для большинства технологий не очерчен статус их поддержки браузерами, либо это определяется вскользь. Также рассмотрены не все новые технологии (нет, к примеру, File API).
В заключение хочу сказать, что книга является хорошим введением в новый стандарт, и весьма полезна, особенно если есть проблемы в английским языком. Очень понравились первые главы про разметку: очень подробно, грамотно, присутствуют выдержки из спецификации. Примеры вполне жизнеспособные, язык внятный.
Если проблем с английским нет, то книгу вполне можно заменить несколькими добротными сайтами по теме, например – http://diveintohtml5.org/, http://html5doctor.com/, http://caniuse.com/ и, конечно, недавно анонсированным http://developers.whatwg.org/.
Март 4, 2011
Меня давно угнетало, что, в vim повторялся следующий шаблон:
находимся в папке ~/someproject
Начинаем работу: cd ~/someproject && gvim some/deep/file1.txt
Предположим, что в той же папке лежит файл file2.txt
Раньше я всегда набирал для file2 путь полность, т.к. до этого путь вводился через командную строку.
И вот, оказывается, что в vim есть спецрегистр %, который содержит имя текущего буфера. В итоге набор сократился до краких:
$ cd ~/someproject
$ gvim some/deep/file1.txt
А теперь делаем в редакторе: :e %C-W C-W C-W
И все, красота!
Декабрь 31, 2010
Решил поторопиться и докодить всякие вещи, на которые как всегда не хватает времени.
1) Перевел руководство пользователя к gmpc. Клиент отличный, в нем есть все и еще немного больше для того, чтобы управлять своей музыкальной коллекцией совместно с mpd. Использую уже года три, очень доволен. Кроме богатого функционала у gmpc есть та особенность, что он работает просто реактивно, не жертвуя для этого ни чем. Запускается моментально, без проблем переваривает большие списки файлов и отказывается падать вообще, автор молодец, решил помочь проекту хоть как-то. По скорости работы с gmpc может поспорить только почтовый клиент sylpheed, который можно успеть запустить, проверить почту и быстро ответить на сообщение, пока тот же evolution успеет достроить свой интерфейс.
2) Влепил пару патчей для getmap, раньше поле города было позорно регистрозависимым, а по ссылкам только для чтения зачем-то выводились ненайденные запросы.
3) Решил выложить прототип онлайн менеджера паролей, встречайте:
http://kdb.dpetroff.ru/
Эта программа также как и getmap выросла из того, что «а круто посмотреть, можно ли читать двоичные файлы с помощью javascript». Можно, без особых проблем. Особенности программы:
- В качестве формата файлов подходят базы паролей от keepassx и keepass (старый формат, который по сути тот же, что и у keepassx)
- Из механизмов шифрования поддерживается только AES256, он стоит во обеих программах по умолчанию, но вдруг вы решили поменять
- Программа использует HTML File API. Из этого следует два вывода: 1) Серверной части просто нет. Можно собрать этот менеджер паролей у себя в укромном уголке vds или просо не бояться, что я на сервере храню все введенные пароли. 2) Для работы нужен свежий google chrome или firefox 3.6+, остальные пока не почесались с поддержкой стандарта. Да, про safari не знаю.
- На firefox 3.6 расшифровка файла может занять длительное время, из-за большого выставленного исла раундов шифрования ключа (можно менять в keepass в настройках базы). По умолчанию стоит 50000, firefox жевал у меня это 2 минуты, google chrome справлялся за 5 секунд, opera за схожий промежуток времени. Такие вот дела. Решить можно просто – поставить число раундов, например, 5000.
- Все стандартные значки поддерживаются, все нестандартные не поддерживаются
- Если у вас нет файла на посмотреть, возьмите этот. пароль 123123
В программе конечно же есть известные и неизвестные баги.
Благодаря этому проектику научился читать cpp код, разобрался в разумных пределах в шифрованием AES256, написал парсер формата файлов keepassx сначала на питоне, потом на js, а на самом js накодил на удивление удачный код для создания многоэкранных приложений в рамках одного html файла.
В общем, было интересно =) Всех с наступающим
Декабрь 8, 2010
Как это часто бывает, демка, на которую думал потратить пару дней, отняла у меня больше месяца. Замысел был такой – в яндекс.картах все хорошо, но искать там сразу можно только одну точку. А потом еще одну. И еще. Что делать, если их сто?
Можно делать вот так: http://getmap.dpetroff.ru/
Сайт позволяет загнать сразу большой список адресов и найти их на карте. Вот, например, адреса всех салонов Евросети в Москве. Как ни странно, у этой сети нормальной карты с адресами нигде нет, адреса брал со страницы интернет-провайдера. И ведь эта контора не одна такая ущербная.
При каждом новом поиске генерятся две ссылки – только для чтения и для полного доступа, больше никакой авторизации не предусмотрено. Зато можно искать несколько раз, разные результаты помечать метками разного цвета, и при необходимости перетаскивать как отдельные метки так и целые результаты поиска в другие группы. При большом списке адресов какие-то конечно останутся ненайденными, так их можно тут же на месте подредактировать, и если новый адрес известен яндексу, метка сразу появится на карте, а после этого всего можно подредактировать все заголовки. Теперь можно смело сохранить ссылку в закладках или раздать нужным людям.
При всем при этом сервис не достиг даже половины того удобства, которым мог бы обладать. Можно было бы предоставить возможность тасовать метки между собой в пределах одного поиска, сделать везде возможность добавлять аннотации и комментарии, настоящей киллер-фичей была бы возможность сохранения истории действия пользователя и его предыдущих запросов. Ну и всякие иконочки и ссылочки. И все это можно было бы делать до победного конца, но я решил, что нужно уже выкатить стабильный срез, чтобы поставить точку, ну или точку с запятой и заняться другими делами :)
К слову сказать, анимация неожиданно не тормозит в седьмом эксплорере! Остальные технические детали, пожалуй, как-нибудь потом.
Если вдруг есть комментарии, пожелания или предложения, буду рад услышать.
Декабрь 6, 2010
Возникла задача открыть csv экселем, а тот вместо добротного уникода показал мусор. Поиски вывели на тред, где описано приемлемое решение задачи:
1. Конвертируем в UTF-16.
2. Добавляем BOM в начало файла.
3. В качестве разделителей используем символы табуляции.
Если говорить на php, то выдача файла должна происходить следующим образом:
header("Cache-Control: must-revalidate");
header("Pragma: must-revalidate");
header("Content-type: application/vnd.ms-excel; charset=URF-16LE");
header("Content-disposition: attachment; filename=file.csv");
echo chr( 0xFF ) . chr( 0xFE ) . mb_convert_encoding( $content, 'UTF-16LE', 'UTF-8' );
Надеюсь, этот пост сэкономит кому-нибудь пару сотен нейронов.