Category: it

Category was added automatically. Read all entries about "it".

Neo4j: создание public сервера

Neo4j по умолчанию предоставляет полный доступ к базе данных и не ограничивает время одной транзакции. Для открытого сервера это может привести к замедлению ответа или вообще смерти сервера, что не желательно. Однако пара простых настроек поможет вам этого избежать. Все настройки, кстати, хранятся в `${neo4j.home}/conf/`

Collapse )

Jenkins в качестве диспетчера задач.

Нашёл, как использовать Jenkins в качестве диспетчера вместо сron.

Идея в том, что бы создать Multi-configuration project, затем, в зависимости от потребностей, можно даже не импортировать код, а просто выбрать Execute Shell в качестве Build Step. В окошке шелла можно писать практически всё, что угодно, включая sudo комманды (конечно, придётся дать дженкинсу на них привилегии). Бонус в том, что один и тот же проект можно вызывать по всякому, включать в билд-цепочки (причём делая их зависимыми друг от друга), организовывать себе сообщения на емайл и Jenkins сохранит все логи, какие только возможны.

Сейчас замутил харвестеры через Jenkins, довольно стабильно всё работает.

Отображение JavaDoc в GitHub

Существует такая вещь как javadoc, которая помогает всем лентяем писать красивые (но, по большей части, бесполезные) каменты к своим программам. Вообще я считаю, что javadoc не есть good, поскольку мануал к серьёзной библиотеке не должен генерироваться непойми кем, но иногда, всё же, без него не обойтись особенно, если за написание комментариев вам не платят.

Существует другая вещь - GitHub Pages, которая позволяет вам запостить документацию к своему проекту. Сразу возникает вопрос - можно ли сочетать одно с другим? Не верьте тем пустобрёхам, которые скажут вам, что это невозможно, что нужно использовать *.md или что-то вроде. Они просто ламмеры не умеют читать мануалы. Сейчас я расскажу вам, как легко и просто отобразить страничку, сгенерированную JavaDoc в GitHub.
Collapse )

Java: поддержка JAXB в maven

Раз пошла такая пьянка, поделюсь ещё одним рецептом - как подключить к maven проекту поддержку JXAB. Всё опять же решается через плагины. Прежде всего, вам придётся скачать или создать xsd файл с описанием схемы XML. Файл этот следует положить в ${project.basedir}/src/main/xsd (это директоря для xsd по-умолчанию).

Затем подключаем плагин в pom:
 <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxb2-maven-plugin</artifactId>
        <version>1.6</version>
        <executions>
          <execution>
            <id>xjc</id>
            <goals>
              <goal>xjc</goal>
            </goals>
          </execution>
        </executions>
    <configuration>
      <packageName>com.my_projects.foo</packageName> <!-- Имя пакета для сгенерировнных классов -->
    </configuration>

      </plugin>

Раздел <configuration> в данном случае не явлется обязательным, вы можете использовать его в том случае, если хотите переименовать пакет или же xsd по каким-то причинам не содержит имя пакета вообще.

После обноваления проекта (left click on project name -> Maven -> Update Project...) у вас в target/generated-sources/jaxb появятся снерированные JAXB классы.

Больше информации и примеров, как всегда на странице разработчика.

Java: динамический тип enum

Enum в Java, это больше, чем просто набор констант. Поскольку каждая переменная в Java является объектом или стремится быть таковым, то, когда вы объявляете:

enum Numbers { ONE, TWO, THREE };

вы, на самом деле, создаёте четыре новых статических объекта. Объект Numbers и по одному объекту для каждой из констант. Это позволяет делать просто поразительные вещи, например, получить строку, содержащую имя константы:

String oneName = Numbers.ONE.name();

Или получить константу по её имени:

Numbers number = Numbers.valueOf("TWO");

Или сравнить две константы с проверкой на тип и инициализацию:

if (number.equals(Numbers.THREE);

Это довольно большое удобство, но оно действует ровно до того момента, пока вы точно знаете, какие именно константы вам потребуются. К несчастью, иногда вы не можете этого знать (к, примеру, если тип перечесления задаётся из некой базы данных). Как быть в таком случае?

Collapse )

Android: исправление ошибки "R cannot be resolved to a variable"

На случай, если кто-то столкнулся с этой проблемой:

1) Проапдейтьте ADT, SDK, Eclipse, Java и прочее.
2) Убейте фолдер gen, он создастся вновь
3) Правый клик по проекту, выберете пункт меню Android Tools -> Fix Project Properties
4) Правый клик по проекту, выберете пункт меню Properties -> Java Build Path -> Order and Export. Убедитесь, что порядок ANDROID_FRAMEWOK, LIBRARIES, DEPENDENCIES, gen и src
5) В том же окне, в разделе Android выставьте в качестве target последний фреймворк.
6) Проверьте, что все файлы и фолдеры в res имеют в качестве названия только буквы английского нижнего регистра, знак подчёркивания и цифры.
7) проверьте, что в файлах исходников в src отсутствует директива "import android.R" в начале файла
8) Выберите пункт меню Project -> Clean.. и перегрузите экликпс.

mysql: InnoDb в сочетании с INSERT...IGNORE

Таблицы InnoDB после версии MySQL 5.1.22 приобрели одну неприятную особенность (кстати, нигде не документированную sic!)

Традиционно, если у вас есть в таблице поле с флагом auto_increment, оно будет увеличиваться на единицу при каждой новой строчки. Эта вещь весьма подходит для создания разнообразных индексов, и я, к примеру, использую его весьма широко. До версии 5.1.22, при записи новой строки в таблицу происходила, так называемая, AUTO-INC блокировка всей таблицы. Она гарантировала, к примеру, что если вы будете производить запись из двух параллельных потоков, вы не сможете присвоить двум строчкам одинаковые индексы.

Collapse )

Linux: Использование gSOAP для доступа к betfire

Потратив пару дней на разбирательство с библиотекой gSOAP я решил записать себе короткую инструкцию на будущее.

gSOAP включена в стандартные пакеты федоры, однако в ней, почему-то выключена SSL. По скольку я использую gSOAP для доступа к API BetFair, который поддерживает только SSL, мне пришлось выкинуть стандартный пакет и ставить gSOAP с нуля. На момент написания статьи последняя версия была 2.8. Инсталляция пакета стандартна:

Collapse )

C++ Чтение файла методами STL.

В STL есть свой оригинальный способ чтения файлов. Если вам не нужно исследовать файл по-строчно, то получить файл в виде объекта std::string можно при помощи следующего кода:

    std::ifstream f("/path/to/file");
    if (f.is_open()) {
        std::string str((std::istreambuf_iterator<char>(f)), std::istreambuf_iterator<char>());        
    }

linux: Редактирование очень больших файлов.

Существует два неплохих способа. Первый - это использование жутко не удобного редактора vi, который, однако, способен читать и редактировать файлы любого размера. Второй, это разбить файл на мелкие части, поменять, что нужно, и собрать обратно. Первый способ в особых комментариях не нуждается. Второй способ выглядит примерно так:

#Для разбивки файла
split –bytes=1m /path/to/large/file /path/to/output/file/prefix

#Для склейки файла обратно
cat /path/to/output/file/prefix* > /path/to/new/large/file