Слегка разочаровался в Scala

Когда-то, довольно давно, я взялся за поиск альтернативы для C++, который во все времена был и, как мне думается на данный момент, будет моим основным рабочим инструментом. Само собой, эта альтернатива мне была нужна не для того, что бы перейти в какую-то иную сферу, а для тех случаев, когда либо хочется написать что-то свое, либо нужно быстро создать какой-то прототип, проверить ту или иную концепцию. В такой ситуации JVM-based язык очень удобен и, по большому счету, безальтернативен, конкуренцию может составить разве что Python со своим простым синтаксисом и безграничным набором библиотек. Continue reading

MemCardsBuilder готов

Завершил работу над экспериментом по написанию кода на Scala и знакомством с библиотекой LuceneMorphology – проектиком MemCardsBuilder. Дабы не тратить время совсем уж впустую, я старался сделать эксперимент максимально полезным при минимальном функционале. Поэтому, функций не так уж и много:

  1. Анализ заданных текстов и выявление частот вхождения слов с учетом морфологии. Благодаря учету морфологии see, saw, seen расцениваются как одно слово, а не 3.
  2. Загрузка переводов с lingvo.yandex.ru для полученного словаря.
  3. Построение ментальных карт в формате разделения при помощи табуляций. Данный формат воспринимает такое замечательное приложение как Anki. При импорте карт в Anki, необходимо выставить галочку “Allow HTML in fields”.

На данный момент, да и скорей всего не только на данный момент, приложение поддерживает только en -> ru построение карт. В принципе, библиотека LuceneMorphology позволяет организовать ru -> en построение без особых проблем и в MemCardsBuilder заложена такая возможность, просто она не реализована. А вот для организации поддержки чего-то за пределами русский<->английский я не вижу возможностей, т.к. я не нашел какой-то аналогичной библиотеки поддерживающий морфологический анализ для, например, испанского или немецкого языков.

Пример того, как можно запустить приложение:

java -jar MemCardsBuilder-1.0-SNAPSHOT-jar-with-dependencies.jar --from-pos 100 --to-pos 110  -s /path/to/analysed/file/data.txt -d ~/out.txt

Приложение понимает следующие ключи:

  • –from-pos (не обязательный параметр, по умолчанию равен 0) минимальный индекс обрабатываемого слова. Например, был построен словарь из 1000 слов, при задании ключа –from-pos 100, все слова с индексом от 0 до 99 не войдут в результирующую выборку.
  • –to-pos (не обязательный параметр, по умолчанию равен количеству слов) максимальный индекс обрабатываемого слова.
  • –meanings-count (не обязательный параметр, по умолчанию равен 2) максимальное количество значений слова, для каждой из частей речи, включаемых в ментальную карту.
  • -s (обязательный параметр) файл с данными для анализа. Ключ -s может быть использован несколько раз в этом случае все указанные файлы будут обработаны как единый объект.
  • -d (обязательный параметр) файл для записи ментальных карт.

Собранное приложение можно загрузить в двух форматах:

  1. Все в одном флаконе: MemCardsBuilder-1.0-SNAPSHOT-jar-with-dependencies.jar
  2. Только сам проект: MemCardsBuilder-1.0-SNAPSHOT.jar

C++11 for VIM

Озаботился поддержкой C++11 для самого лучшего редактора на земле, который в кривых руках имеет всего два режима: бибикать и всё портить. Как оказалось, достаточно приемлемую поддержку можно найти тут.

Немного радости

Сегодня вышел Rust 0.7. С учетом того, что на один релиз уходит около 3-х месяцев, можно предположить что в следующем году выйдет Rust 1.0, что вообще прекрасно! Ну а пока, можно собрать новую версию этого замечательного компилятора и поглядеть на изменения, написать что-либо интересное и полезное.

Сюрприз от Installd

Вчера мне Installd сюрприз сделал. Конечно, можно сказать что нужно внимательнее читать документацию, но, всей документации не перечитаешь, поэтому сюрпризы не избежны. А суть сюрприза вот в чем.
Возникла задача следующего плана: надо взять приложение A, выпилить из него часть функций, воткнуть новые и в результате получить приложение B. Причем, приложения A и B должны уметь работать параллельно. Каждое из приложений содержит в себе драйвера, демоны и кучу других системных компонентов. Таким образом, на диске, получаем приблизительно такую структуру:

/-- Library
    +--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. В результате, в процессе сборки, я столкнулся с ошибкой:

configure: git: submodule status
-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

Continue reading

Clear Case –> Git

Во время работы в ЛК мне казалось, что Perforce это одно из воплощений Песца на земле. Ну что сказать, я сильно ошибался, и теперь, видимо в наказание за мои заблуждения, мне приходится работать с Clear Case. Причем, типичная тут схема работы это основная машина на Венде, на которой разработчик все пишет и сборочная машина на Linux. Доступ к исходникам осуществляется посредством шареных сетевых папок. В целом схема рабочая, но, во-первых, сборка идет довольно медленно, во-вторых, сборку приходится периодически перезапускать из-за сетевых ошибок, таких как broken pipe, input/output error.
Вдоволь намучившись с подобной работой я решил что так дальше жить нельзя и надо что-то делать. Самым лучшим вариантом, пришедшим мне в голову, оказалось использование Git для собственного контроля версий в процессе разработки.
Continue reading