Java + Ant + сетевой диск

Java – наверное самая уродская платформа из всех, с какими я имел дело. Ну и Ant не дальше ушел.
Итак, дано: Linux, сетевой диск с парой гагабай исходников, ant, java, gcc. Простейшая команда ant clean приводит к исключению java.lang.OutOfMemoryError. Перепробовал все найденные в интернете способы изменения объема используемой памяти и прочих шаманских действий – не помогает.
Стал эксперементировать дальше, выяснил, что падает только на сетевых шарах(!!!). Скопировал локально – полет нормальный. Спрашиватся, ну какого хера ошибка OutOfMemoryError, а не что-то подходящее в данной ситуации?!
Вобщем, осталось только процесс копирования автоматизировать.

Альтернативы

Открыл для себя древнюю, но крайне полезную утилитку update-alternatives. Эта утилитка просто незаменима если приходится работать c кривыми не совсем удачными сборочными файлами.
Небольшой пример. У нас есть куча проектов, которые необходимо собирать разными JDK. Что-то собирается при помощи 1.5, что-то 1.6 и вообще ничего нельзя собрать OpenJDK. При переключении с проекта на проект надо либо каждый раз пересоздавать линки на нужный компилятор, либо можно воспользоваться update-alternatives. Continue reading

fstab

Это прям какая-то магия, но каждый раз когда я сталкиваюсь с fstab, у меня уходит куча времени на то чтобы в него что-то прописать. На этот раз мне понадобилось добавить Windows-шары на машину с Fedora 15. И теперь я решил все записать, чтоб уж в следующий раз точно не забыть как же это делается. Continue reading

Внешние проекты в CMake

Я просто весь мозг сломал со следующей ситуцией. Есть CMake проект состоящий из нескольких библиотек и исполнимого модуля. Этот проект использует некую внешнюю по отношению к нему библиотеку. В идеале, в процессе сборки, эту библиотеку надо скачать, собрать, установить и заюзать.
Перечирав кучу документации и устав от эксперементов, я наткнулся на чудесную функцию externalproject_add.

externalproject_add(
    memtree_external
    GIT_REPOSITORY "git@github.com:astavonin/memtree.git"
    CMAKE_ARGS
        -DCMAKE_INSTALL_PREFIX:STRING=${PROJECT_BINARY_DIR}
    UPDATE_COMMAND ""
)
add_library(memtree SHARED IMPORTED)
set_property(TARGET memtree PROPERTY
    IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/libmemtree.a)
include_directories(${PROJECT_BINARY_DIR}/include)

Для того чтобы установка отрабатывала корректно, пришлось добавить несколько строк в CMakeLists.txt

install(FILES ../include/memtree/memtree.h DESTINATION include/memtree)
install(TARGETS memtree DESTINATION lib EXPORT memtree-targets)
install(EXPORT memtree-targets DESTINATION lib/memtree)

Уфф. Убил на это кучу времени, но оно того стоит – обновлять библиотеку теперь куда проще

CMake & Clang

Решил изменить сборку с идущего по умолчанию GCC на Clang для CMake проекта. Сходу наткнулся на граблю. Стандартная команда CMake:

set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_C_COMPILER clang)

Вводит его в вечный цикл, который выглядит как-то так:

You have changed variables that require your cache to be deleted.
Configure will be re-run and you may have to reset some variables.
The following variables have changed:
CMAKE_C_COMPILER= /usr/bin/gcc
CMAKE_CXX_COMPILER= /usr/bin/c++

-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Checking whether C compiler has -isysroot
-- Checking whether C compiler has -isysroot - yes
-- Checking whether C compiler supports OSX deployment target flag
-- Checking whether C compiler supports OSX deployment target flag - yes
…и так до бесконечности…

Лечится не удобно, но юзабельно:

export CXX=/usr/bin/clang++
export CC=/usr/bin/clang
cmake CMakeLists.txt
make

Как начать писать приложения для Mac OS X и iOS

Итак, по пунктам, что надо сделать для начала разработки под Mac OS X или iOS:

  1. Покупка Mac или установка Хакинтош. Я бы крайне не рекомендовал начинать с работы с виртуальной машиной, они работаютнастолько тормознуто, что такой вариант подходит разве что для “одним глазком на Mac OS X взглянуть”. Поэтому наиболее дешевым и доступным вариантом будет либо Хикинтош, либо покупка Mac Mini.
  2. Бесплатно зарегистрироваться в качестве разработчика Apple. Это необходимо сделать для доступа к документации и возможности загрузить 3-й Xcode.
  3. Загрузить бесплатно 3-й Xcode или купить за $4.99 Xcode 4. С учетом стоимости Xcode 4, я думаю что его купить все же логичнее. В то же время, в Xcode 3 доступна iOS SDK 4.3 и SDK для Mac OS X 10.6, так что “на посмотреть” его хватит.

Continue reading

Tasks Explorer 1.5

Ура! Я допилил его! Из нововведений: появилась возможность посмотреть стек вызовов и я решил открыть код под BSD лицензией. Из неприятных нововведений – похоже он стал немного течь. Если у кого-то есть желание поучаствовать в разработке – добро пожаловать!
Выглядит эта радость как-то так:

Ищем быстро. Очень быстро.

Незнаю кто как, но я обычно пишу код в Vim, отлаживаюсь в GDB, ищу Grep. Если первые два пункта не вызывают никаких нареканий, но вот Grep на больших объемах данных, например на проекте с 1GB исходных кодов, несколько нерасторопен.
Решение проблемы довольно простое: надо скрестить Spotlight с Grep и получить шустрый и удобный в работе механизм. Для zsh это можно сделать так:

g()

{
mdfind -onlyin . $1 -0 | xargs -0 grep -n --color=always $1
}