Если возникла необходимость отобразить специальные символы в Vim, то сделать это очень и очень просто:
Post Category → Инструменты
Слегка разочаровался в Scala
Когда-то, довольно давно, я взялся за поиск альтернативы для C++, который во все времена был и, как мне думается на данный момент, будет моим основным рабочим инструментом. Само собой, эта альтернатива мне была нужна не для того, что бы перейти в какую-то иную сферу, а для тех случаев, когда либо хочется написать что-то свое, либо нужно быстро создать какой-то прототип, проверить ту или иную концепцию. В такой ситуации JVM-based язык очень удобен и, по большому счету, безальтернативен, конкуренцию может составить разве что Python со своим простым синтаксисом и безграничным набором библиотек. Continue reading
MemCardsBuilder готов
Завершил работу над экспериментом по написанию кода на Scala и знакомством с библиотекой LuceneMorphology – проектиком MemCardsBuilder. Дабы не тратить время совсем уж впустую, я старался сделать эксперимент максимально полезным при минимальном функционале. Поэтому, функций не так уж и много:
- Анализ заданных текстов и выявление частот вхождения слов с учетом морфологии. Благодаря учету морфологии see, saw, seen расцениваются как одно слово, а не 3.
- Загрузка переводов с lingvo.yandex.ru для полученного словаря.
- Построение ментальных карт в формате разделения при помощи табуляций. Данный формат воспринимает такое замечательное приложение как Anki. При импорте карт в Anki, необходимо выставить галочку “Allow HTML in fields”.
На данный момент, да и скорей всего не только на данный момент, приложение поддерживает только en -> ru построение карт. В принципе, библиотека LuceneMorphology позволяет организовать ru -> en построение без особых проблем и в MemCardsBuilder заложена такая возможность, просто она не реализована. А вот для организации поддержки чего-то за пределами русский<->английский я не вижу возможностей, т.к. я не нашел какой-то аналогичной библиотеки поддерживающий морфологический анализ для, например, испанского или немецкого языков.
Пример того, как можно запустить приложение:
Приложение понимает следующие ключи:
- –from-pos (не обязательный параметр, по умолчанию равен 0) минимальный индекс обрабатываемого слова. Например, был построен словарь из 1000 слов, при задании ключа –from-pos 100, все слова с индексом от 0 до 99 не войдут в результирующую выборку.
- –to-pos (не обязательный параметр, по умолчанию равен количеству слов) максимальный индекс обрабатываемого слова.
- –meanings-count (не обязательный параметр, по умолчанию равен 2) максимальное количество значений слова, для каждой из частей речи, включаемых в ментальную карту.
- -s (обязательный параметр) файл с данными для анализа. Ключ -s может быть использован несколько раз в этом случае все указанные файлы будут обработаны как единый объект.
- -d (обязательный параметр) файл для записи ментальных карт.
Собранное приложение можно загрузить в двух форматах:
- Все в одном флаконе: MemCardsBuilder-1.0-SNAPSHOT-jar-with-dependencies.jar
- Только сам проект: MemCardsBuilder-1.0-SNAPSHOT.jar
C++11 for VIM
Озаботился поддержкой C++11 для самого лучшего редактора на земле, который в кривых руках имеет всего два режима: бибикать и всё портить. Как оказалось, достаточно приемлемую поддержку можно найти тут.
Немного радости
Сегодня вышел Rust 0.7. С учетом того, что на один релиз уходит около 3-х месяцев, можно предположить что в следующем году выйдет Rust 1.0, что вообще прекрасно! Ну а пока, можно собрать новую версию этого замечательного компилятора и поглядеть на изменения, написать что-либо интересное и полезное.
Сюрприз от Installd
Вчера мне Installd сюрприз сделал. Конечно, можно сказать что нужно внимательнее читать документацию, но, всей документации не перечитаешь, поэтому сюрпризы не избежны. А суть сюрприза вот в чем.
Возникла задача следующего плана: надо взять приложение A, выпилить из него часть функций, воткнуть новые и в результате получить приложение B. Причем, приложения A и B должны уметь работать параллельно. Каждое из приложений содержит в себе драйвера, демоны и кучу других системных компонентов. Таким образом, на диске, получаем приблизительно такую структуру:
+--Application Suport
+-- Company Name
+--Product A
+--Product B
Где Product B – директория с системными файлами нового приложения. С учетом того, что инсталляторы в Mac OS X воспринимаются исключительно как автоматизированное средство для копирования файлов, решение было предельно простым: взять уже имеющийся инсталлятор и поменять в нем “Product A” на “Product B”, не забыв поправить конфигурирующие скрипты. Но не тут то было.
Если попытаться установить два продукта параллельно, то начиналась магия: установка продукта A деинсталлировала продукт B и vice versa. Перерыл все логи инсталлятора, греша на pred- и post- install скрипты – ни малейшего намека на то, кто удаляет продукт. Хотел уже было браться за DTrace, но тут коллеги напомнили о fs_usage… Нашелся виновник: installd. Но, казалось бы, причем тут Installd?! А вот при том, что инсталлятор не только распаковывает файлы в нужные директории, но еще и делает “обновление” для пакетов с одинаковыми идентификаторами!
Ментальные карты
При работе над требованиями к новому проекту, при работе над какой-то относительно большой заметкой или статьей или какой-то другой структурированной информацией я одно время активно использовал Mindjet. По большому счету, приложение ну просто всем хорошо кроме своей цены. В стародавние времена лицензия на это приложение стоила порядка 250 долларов, что, конечно, не мало, но оно того стоило. Потом, долгое время я не работал ни над чем таким, где могли бы потребоваться ментальные карты, но на днях необходимость возникла и я полез на сайт производителя, что бы узнать, сколько сейчас стоит эта радость. Ну что сказать, цена меня не обрадовала, так как теперь купить приложение и пользоваться им неограниченное количество времени нельзя, дело в том, что авторы перешли на систему подписок и в год набегает порядка 300 долларов.
Да, само собой, я пишу это не для того что бы порекомендовать покупать столь дорогущее приложения, а для рекламы его аналога – XMind! XMind, как впрочем и Mindjet, является кроссплатформенным приложением и отлично запустился как на моем домашнем Mac OS X, так и на рабочей Ubuntu. С учетом того, что XMind базируется на Eclipse, то он очень прожорлив, но за его “цену”, это очень легко простить, а создаваемы в нем ментальные карты не на много хуже того, что получалось в Mindjet.
Rust 0.3
Вышла новая версия языка Rust с номером 0.3. Несмотря на то, что говорить о каком бы то ни было коммерческом использовании языка рано, он обретает все более и более четкие формы, появляется понимание куда же он движется. Continue reading
Сборка Rust из репозитория
Очень часто, особенно в случае с рабочими машинами, доступ в интернет довольно жестко ограничен и почти все протоколы за исключением HTTP(S) заблокированы. Именно с такой проблемой я и столкнулся пытаясь собрать Rust. Все дело в том, что кроме основного модуля кодовой базы, который можно загрузить по HTTPS, у проекта есть два дополнительных подмодуля, для которых жестко заданна работа через протокол Git. В результате, в процессе сборки, я столкнулся с ошибкой:
-1170ffba3ac5191930b40c897d4569a9d8a296a3 src/libuv
-3a57b672f89adcb2d2d06adc564dc15ca4e276d6 src/llvm
configure: git: submodule update
fatal: unable to connect to github.com:
github.com[0: 207.97.227.239]: errno=Connection timed out
Clear Case –> Git
Во время работы в ЛК мне казалось, что Perforce это одно из воплощений Песца на земле. Ну что сказать, я сильно ошибался, и теперь, видимо в наказание за мои заблуждения, мне приходится работать с Clear Case. Причем, типичная тут схема работы это основная машина на Венде, на которой разработчик все пишет и сборочная машина на Linux. Доступ к исходникам осуществляется посредством шареных сетевых папок. В целом схема рабочая, но, во-первых, сборка идет довольно медленно, во-вторых, сборку приходится периодически перезапускать из-за сетевых ошибок, таких как broken pipe, input/output error.
Вдоволь намучившись с подобной работой я решил что так дальше жить нельзя и надо что-то делать. Самым лучшим вариантом, пришедшим мне в голову, оказалось использование Git для собственного контроля версий в процессе разработки.
Continue reading