Навеяно (англ.)

Наткнулся вот тут на такую мысль. Считаю важной. Цитата
«The ability to take data – to be able to understand it, to process it, to extract value from it, to visualize it, to communicate it is going to be a hugely important skill in the next decades.»
Автор: Hal Varian, Chief Economist, Google

Eclipse RCP (4.3) приложение с использованием maven. Продукт

Сегодня как и обещал, расскажу про то, как сделать готовый продукт. В следующих статьях, если они будут – расскажу про то, как подключить в Eclipse RCP обычные maven’овские зависимости.

Итак, открываем наши проекты в eclipse и делаем вот что. В проекте ru.mrdekk.ercp.gui есть файлик ru.mrdekk.ercp.gui.product. Так вот – этот файлик надо перенести в проект ru.mrdekk.ercp.repository:

Необходимо сконфигурировать уровни запуска и параметры автостарта. Открываем файл продукта, который мы только что перенесли. Переходим на вкладку Configuration. В Start Levels … нажимаем кнопку Add …

Далее в появившемся окне необходимо выбрать бандлы org.eclipse.equinox.common и org.eclipse.equinox.ds и нажать ОК

Для обоих бандлов установить start level = 2 и auto start = true, далее таким же способом необходимо добавить бандл org.eclipse.core.runtime:

Для этого бандла необходимо установить только auto start = true. В итоге получим что-то вроде:

На вкладке Overview в поле ID введите ru.mrdekk.ercp.product:

Измените «The product configuration is base on…» на features:

На вкладке Dependencies нажмите кнопку Add …

И выберите org.eclipse.rcp:

Также нажмите кнопку Add Required … eclipse добавить требуемые зависимости:

И конечно добавить нашу фичу:

Теперь запустим сборку проекта через maven, мы должны получить как обычно успешный результат:

[INFO] Reactor Summary:
[INFO]
[INFO] mrdekk.ru eclipse rcp demo - parent ............... SUCCESS [0.109s]
[INFO] mrdekk.ru eclipse rcp demo - gui .................. SUCCESS [2.875s]
[INFO] mrdekk.ru eclipse rcp demo - feature .............. SUCCESS [0.125s]
[INFO] mrdekk.ru eclipse rcp demo - update site .......... SUCCESS [5.531s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16.734s
[INFO] Finished at: Thu Oct 03 11:12:56 NOVST 2013
[INFO] Final Memory: 16M/38M
[INFO] ------------------------------------------------------------------------

В папке target/repository мы должны увидеть метаданные и файлы для продукта:

Теперь заставим maven собирать для нас пакет инсталляции продукта, и архивный файл. Для этого в pom.xml проекта ru.mrdekk.ercp.repository необходимо написать следующее:

    <build>
        <plugins>
            <plugin>
                <groupId>org.eclipse.tycho</groupId>
                <artifactId>tycho-p2-director-plugin</artifactId>
                <version>${tycho-version}</version>
                <executions>
                    <execution>
                        <!-- install the product using the p2 director -->
                        <id>materialize-products</id>
                        <goals>
                            <goal>materialize-products</goal>
                        </goals>
                    </execution>
                    <execution>
                        <!-- create zip file with the installed product -->
                        <id>archive-products</id>
                        <goals>
                            <goal>archive-products</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

И запустите сборку снова, вы должны будете увидеть каталог продукта и архивный файл в папке target:

[INFO] Reactor Summary:
[INFO]
[INFO] mrdekk.ru eclipse rcp demo - parent ............... SUCCESS [0.094s]
[INFO] mrdekk.ru eclipse rcp demo - gui .................. SUCCESS [2.766s]
[INFO] mrdekk.ru eclipse rcp demo - feature .............. SUCCESS [0.109s]
[INFO] mrdekk.ru eclipse rcp demo - update site .......... SUCCESS [12.953s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 24.250s
[INFO] Finished at: Thu Oct 03 11:17:54 NOVST 2013
[INFO] Final Memory: 17M/42M
[INFO] ------------------------------------------------------------------------

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

На этом основные статьи по Eclipse RCP закончены. Вы можете добавить этот проект например в Hudson и автоматически собирать его там. Я постараюсь сделать еще несколько статей, в которых расскажу про то, как подключать в Eclipse RCP проекты обычные maven’овские зависимости.

P.S. Исходники как всегда доступны в github

Eclipse RCP (4.3) приложение с использованием maven. Сайт обновлений

Продолжаю повествование о том, как собрать Eclipse RCP проект с помощью maven’а. Сегодня поговорим о том, как сделать Update Site для нашего проекта. Update Site нужен для распространения компонентов Eclipse RCP и готовых приложений. Когда Вы устанавливаете что-то себе в Eclipse вы пользуетесь одним или несколькими Update Site’ами.

Итак, открываем наш проект.

Для начала создадим проект Update Site’а через стандартные функции Eclipse, для этого File > New > Other … > Plug-In Development > Update Site Project:

Eclipse создаст нам проект. Далее необходимо site.xml переименовать в category.xml. Для этого нужно кликнуть правой кнопкой мыши на этом файле и выбрать Refactor > Rename:

Далее необходимо открыть полученный файл в Manifest Editor. В Eclipse есть бага, которая не позволяет сделать это простым двойным щелчком, поэтому нужно по правой кнопке выбрать Open With > Category Manifest Editor.

Далее создадим и отредактируем некоторые параметры в нашей категории:

Добавим ссылку на новую фичу (надо нажать на кнопку Add Feature). Выберем нашу фичу:

После этого, как обычно преобразуем полученный проект в проект maven. Для этого по правой кнопке Configure > Convert to Maven Project. Не забываем о том, что в настройках maven’а необходимо повторять те же идентификаторы. Тип проекта – eclipse-repository

После преобразования проекта в проект maven’а необходимо в pom.xml указать ссылку на родительский проект, после чего полученный pom.xml примет примерно следующий вид:

<project
        xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                            http://maven.apache.org/xsd/maven-4.0.0.xsd" >

    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>ru.mrdekk.ercp</groupId>
        <artifactId>ru.mrdekk.ercp.parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>..</relativePath>
    </parent>

    <artifactId>ru.mrdekk.ercp.repository</artifactId>
    <packaging>eclipse-repository</packaging>

    <name>mrdekk.ru eclipse rcp demo - update site</name>

</project>

И добавим полученный проект в качестве модуля в родительский pom.xml. Секция modules будет выглядеть следующим образом:

    <modules>
        <module>gui</module>
        <module>feature</module>
        <module>repository</module>
    </modules>

После чего все это дело надо сохранить и попробовать собрать через родительский проект maven’ом. Должно получится примерно следующее:

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] mrdekk.ru eclipse rcp demo - parent ............... SUCCESS [0.094s]
[INFO] mrdekk.ru eclipse rcp demo - gui .................. SUCCESS [2.984s]
[INFO] mrdekk.ru eclipse rcp demo - feature .............. SUCCESS [0.109s]
[INFO] mrdekk.ru eclipse rcp demo - update site .......... SUCCESS [1.157s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12.266s
[INFO] Finished at: Fri Sep 27 10:38:27 NOVST 2013
[INFO] Final Memory: 15M/37M
[INFO] ------------------------------------------------------------------------

Теперь протестируем полученный репозиторий, для этого надо через правую кнопку мыши зайти в свойства проекта папки target/repository проекта repository (Properties).

Затем выделить и сохранить в буфер обмена путь к полученному репозиторию:

Теперь выберем в главном меню Help > Install New Software … Добавим новый Update Site (надо нажать кнопку Add):

Мы должны увидеть содержимое этого репозитория, т.е. нашу фичу:

Нажмите Cancel, ведь мы пока не собираемся устанавливать нашу фичу в Eclipse. Как обычно исходники доступны на github тут

Eclipse RCP (4.3) приложение с использованием maven. Часть 2. Фича!

Добрый день, читатели!

Сегодня продолжил создавать приложение на основе Eclipse RCP. Сегодня сделаем фичу (feature). Фича – это компонент rcp который может быть отдельно установлен в Eclipse, в том числе в тот, под которым вы его разрабатываете. В дальнейшем нам этот компонент понадобится чтобы создать пакет приложения и сайт апдейтов.

Работу будем продолжать в уже созданном нами проекте. Создадим проект фичи, для этого File > New > Other … > Plug-in Development > Feature Project.

Заполним необходимые поля. Обязательно убедитесь в том, что проект находится в каталоге родительского проекта в отдельной папке, в нашем случае это папка feature. Дальше мы будем использовать имя этой папки кое где.

Выберем созданный нами в предыдущей статье плагин:

Далее преобразуем полученный проект в проект Maven’а. Правой кнопкой мыши на проекте, Configure > Convert to Maven Project. Далее не забываем, что настройки артефакта maven’а должны совпадать с настройками в билде эклипса. Кроме того, обратите внимание на packaging type, он должен быть eclipse-feature.

pom.xml проекта должен выглядеть примерно следующим образом. Ссылку на родительский проект необходимо вписать руками.

<project
        xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                            http://maven.apache.org/xsd/maven-4.0.0.xsd" >

    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>ru.mrdekk.ercp</groupId>
        <artifactId>ru.mrdekk.ercp.parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>..</relativePath>
    </parent>

    <artifactId>ru.mrdekk.ercp.feature</artifactId>
    <packaging>eclipse-feature</packaging>

    <name>mrdekk.ru eclipse rcp demo - feature</name>
</project>

Теперь пропишем в родительском проекте этот проект в качестве модуля для того, чтобы он собирался при сборке всего проекта. Секция modules в родительском проекте должна выглядеть примерно следующим образом:

    <modules>
        <module>gui</module>
        <module>feature</module>
    </modules>

После этого попробуем собрать проект. Должно получится примерно следующее:

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] mrdekk.ru eclipse rcp demo - parent ............... SUCCESS [0.109s]
[INFO] mrdekk.ru eclipse rcp demo - gui .................. SUCCESS [2.953s]
[INFO] mrdekk.ru eclipse rcp demo - feature .............. SUCCESS [0.109s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.171s
[INFO] Finished at: Wed Sep 25 10:47:53 NOVST 2013
[INFO] Final Memory: 14M/35M
[INFO] ------------------------------------------------------------------------

В следующий раз настроим сборку продукта и сайта апдейтов.

Eclipse RCP (4.3) приложение с использованием maven

Итак. Намедни потребовалось создать eclipse rcp приложение на платформе Kepler. Положение осложнялось тем, что сборку надо было проводить с использованием maven’а. Ввиду того, что платформа kepler (4.3) достаточно новая и в ней было много всего переделано, информации по ней – кот наплакал. Поэтому пришлось подключать лом и чью-то матерь. Но в итоге все получилось. Методику этого получилось я и постараюсь описать тут.

Начнем с того, что у Вас должен быть установлен eclipse последней версии, в нем должен быть настроен maven и инструменты для разработки eclipse rcp. Я использовал для этого Spring ToolSuite, в котором мавен уже есть из коробки, а eclipse rcp tools легко ставятся через Install New Software. Методику этого всего я тут описывать не буду – материала навалом даже на русском языке.

Для начала создадим родительский проект для мавена – File > New > Maven Project.

Затем настроим основные вещи

pom.xml будет выглядеть следующим образом

<project
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                        http://maven.apache.org/xsd/maven-4.0.0.xsd" >

    <modelVersion>4.0.0</modelVersion>
    <groupId>ru.mrdekk.ercp</groupId>
    <artifactId>ru.mrdekk.ercp.parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>mrdekk.ru eclipse rcp demo - parent</name>

</project>

Для дальнейшего прогресса необходимо добавить некоторые вещи. Для начала – настройки, пока только версия tycho – инструмента для сборки rcp проектов maven’ом. Все это добавляем в pom.xml:

    <properties>
        <tycho-version>0.18.1>/tycho-version<
    </properties>

Теперь добавим репозиторий eclipse rcp который нужен будет maven’у и tycho для получения артефактов:

    <repositories>
        <repository>
            <id>eclipse-platform</id>
            <layout>p2</layout>
            <url>http://download.eclipse.org/eclipse/updates/4.3/R-4.3-201306052000</url>
        </repository>
    </repositories>

Добавляем maven’овский плагин tycho в сборку:

    <build>
        <plugins>

            <plugin>
                <groupId>org.eclipse.tycho</groupId>
                <artifactId>tycho-maven-plugin</artifactId>
                <version>${tycho-version}</version>
                <extensions>true</extensions>
            </plugin>

        </plugins>
    </build>

C родительским проектом пока все, теперь создаем непосредственно проект eclipse rcp – File > New > Project … > Eclipse 4 > Eclipse 4 Application Project:

Запустим приложение для проверки работоспособности, для этого:

  • 1. Открываем файл определения продукта – ru.mrdekk.ercp.gui.product
  • 2. На вкладке «Overview» нажмите «Launch an Eclipse application».

Вы должны увидеть примерно следующее:

Теперь преобразуем проект в maven’овский проект. Для этого нажимаем правой кнопкой мыши на проекте и выбираем Configure > Convert to Maven Project. Появится следующее окошко, в нем вбиваем нужные данные. Внимание! Важно чтобы эти данные совпадали с тем, что Вы ввели когда создавали проект, т.е. MANIFEST/Bundle-SymbolicName == POM/artifactId и MANIFEST/.qualifier == POM/-SNAPSHOT!

Eclipse будет ругаться на полученный pom, т.к. он не увидит tycho. Чтобы все получилось, необходимо указать ссылку на созданный нами родительский проект, Ваш pom.xml должен выглядеть примерно следующим образом:

<project
        xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                            http://maven.apache.org/xsd/maven-4.0.0.xsd" >

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>ru.mrdekk.ercp</groupId>
        <artifactId>ru.mrdekk.ercp.parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>..</relativePath>
    </parent>

    <artifactId>ru.mrdekk.ercp.gui</artifactId>

    <packaging>eclipse-plugin</packaging>
    <name>mrdekk.ru eclipse rcp demo - gui</name>

</project>

Дальше на проекте ru.mrdekk.ercp.gui нажимаем правой кнопкой и Maven > Update Project …

Надо кроме того добавить проект ru.mrdekk.ercp.gui как модуль основного (родительского проекта), для этого в pom.xml родительского проекта добавляем:

    <modules>
        <module>gui</module>
    </modules>

Далее на проекте ru.mrdekk.ercp.parent нажимаем правой кнопкой и Run As > Maven build … Указываем цели «clean package» и нажимаем Apply, затем Run.

Все должно нормально собраться:

[INFO] Reactor Summary:
[INFO]
[INFO] mrdekk.ru eclipse rcp demo - parent ............... SUCCESS [0.109s]
[INFO] mrdekk.ru eclipse rcp demo - gui .................. SUCCESS [2.860s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.797s
[INFO] Finished at: Mon Sep 23 11:02:05 NOVST 2013
[INFO] Final Memory: 14M/34M
[INFO] ------------------------------------------------------------------------

В следующих статьях расскажу что делать дальше. Мы соберем feature и update site, что позволит нам публиковать приложения для установки в eclipse и распространять бинарные билды.

Для референсов исходники проекта доступны на github’е вот тут.

Мысли вслух

Давно я сюда уже ничего постоянно не писал, видимо стоит возобновить практику. В последнее время по долгу службы приходится работать с языком Java в области Enterprise приложений. Можно говорить много слов об этом, но я сейчас не об этом. Для Java есть замечательный Spring Framework, который позволяет сосредоточиться на проблеме, а не на вспомогательных вещах, которые кочуют из проекта в проект.

Так как я сам лично люблю С++, то попытался я поискать чего нибудь подобного для этого языка. И не нашел. Причем по отдельности, по разной функциональности есть готовые разработки и библиотеки, есть даже в Open Source, однако чего-то целостного я не нашел. Может быть кто в курсе? Или С++ настолько непопулярен для разработки такого рода приложений?…

Впрочем, увидим…

Устанавливаем C++ драйвер для MongoDB на Mac OS X Mountain Lion

Потребовался мне вдруг С++ драйвер для MongoDB на Mac OS X, так как писать для FreeBSD софт на С++ лучше всего под Mac OS X в xCode, вот такой уж винегрет.

Поэтому, первое что делаем, качаем вот отсюдова вот файлик с названием cxx-driver/mongodb-linux-x86_64-latest.tgz пофигу что linux – скомпиляем и так, ведь для Mac OS X специально нету :( а жаль.

Распаковываем, и идем в распакованную папку, пытаемся сделать

1
# scons

Но вот блин, scons’а нет на маке, увы :(

Ладно, качаем его отсюдова вот

и дальше

1
# python setup.py install

Возвращаемся в папку с распакованным драйвером MongoDB, и пытаемся снова сделать

1
# scons

Веселье продолжается – на маке не установлен Boost, отлично идем и качаем исходники отсюдова вот

Как скачалось распаковываем и идем в распакованную папку и делаем

1
2
3
# ./bootstrap.sh
# ./b2
# sudo ./b2 install

Алилуйя! Возвращаемся в папку с распакованным драйвером и снова делаем

1
2
# scons
# sudo scons install

И вуаля – теперь у нас есть MongoDB C++ драйвер для Mac OS X Mountain Lion

Поиск подстроки в файлах на сервере FreeBSD

Ок, чтобы долго не бегать, сразу дам ответ на вопрос «Как найти строку во всех файлах в текущей папке»:

1
find $PWD -name '*.*' -exec grep -l "TEST" {} \;

Использовать по протоколу ssh, $PWD указывает на текущую директорию (можно посмотреть путь командой pwd).

Параметр -name ‘*.*’ указывает что идёт поиск всех файлов по маске *.*. К этим файлам выполняем (-exec) команду grep, которая ищет строку TEST в списке файлов и (можете изменять на свою, не забывайте только экранировать некоторые символы, например кавычки) и выводит список всех файлов (-l).

Взято отсюда