Потребовалось сделать окружение для отстройки приложений для системы Linux, запущенной на платформе с процессором ARM.
Внутри есть eglibc, поэтому решено было попробовать сделать окружение с этой библиотекой Си, а не повсеместно используемой newlib.
Процесс чтения манов, проб, нервов занял около двух дней. Помогли разобраться следующие документы:
Особо поразило мозг решение проблемы “кто первый: курица или яйцо?”
В результате получился набор правил для сборки окружение под ArchLinux (пакеты идут в порядке сборки):
Ну и несколько библиотек сразу в придачу:
Набор HTTP API для управления камерами Axis:
http://www.axis.com/techsup/cam_servers/dev/cam_http_api_index.php
Изначально задача была: извлечь из изображения область ограниченную полигоном, при этом оставшаяся часть изображения должна залиться “прозрачным” цветом (сиречь размер в пикселях не поменяется). Но как оказалось, можно ещё более обобщить эту задачу - вытаскивать произвольные области изображения.
Рассматриваемый инструмент - ImageMagick или GraphicsMagick.
Решение нашлось тут:
http://studio.imagemagick.org/pipermail/magick-users/2006-March/017281.html
Коротко суть: на основе исходного изображения (по сути используется только, что бы задать размеры) создаётся временное изображение-маска и нарисованной фигурой/фигурами которые образуются, если их обрисовать полигоном. Остальные пиксели на маске - прозрачные. Далее маска накладывается на исходное изображение и извлекается только нужная его часть…
Теперь на примере.
Есть изображение:

Нужно вырезать область, заданную полигоном (для простоты - треугольник) с координатами: (10,10)-(400,200)-(100,200)
Шаг 1. Делаем маску:
convert screenshot.png -matte -fill none -draw 'color 0,0 reset' -fill white -draw 'polygon 10,10,400,200,100,200' polygon.png
Получаем следующее (картинка белая :simple_smile: ):

Шаг 2. Вырезаем область:
convert screenshot.png -matte polygon.png -compose DstIn -composite out.png
Получаем чего желаем:

Команды рисования можно посмотреть тут:
http://www.imagemagick.org/Usage/draw/
Библиотеки/рекомендации для работы с JSON.
C
C++
BOOST
Qt4
Просто прекрасно:
Почему сейчас таких фильмов нет?
Накатило, решил найти исходники этой программки. Что делает? Да просто берёт и играет mp3 файл. Чем знаменита? :) А тем, что это мой первый проигрыватель mp3 на Linux, который попался мне случайно на купленном диске во Владивостоке, во времена, когда у меня не было интернета и в своём городе-посёлке я был единственным пингвиноводом.
Source1 (на этом сайте) |
Source2 |
Где найдено
Никаких внешних зависимостей, исходники на чистом Си, в распакованном виде - 290Кб.
PS при сборке на современных системах нужно будет применить такой патч:
--- /home/hatred/download/tmp/mp3/amp-0.7.6/guicontrol.c 1997-08-23 22:30:51.000000000 +1100
@@ -375,7 +375,8 @@
break;
case GETHDR_SYN: warn("oops, we're out of sync.<br/>n");
break;
1. default:
+ default:
+ ;
}
break;
}
по сути, после default:, поставить точку с запятой :simple_smile:
Что бы при использовании плагина googleplusone совместно с BlogTNG при попытке “поделиться” постом в
Google+ вставлялся не абы какой текст, а то, что вам нужно, следует внести некоторые модификации в используемый вами шаблон.
Читаем:
http://newsru.com/russia/10jan2012/games.html
Пацреоты - фперёт!
http://kapano.ucoz.ru/
Просто слов нет. Круто. Красиво. В основном - Владивосток и его окрестности.
http://softwaremaniacs.org/Images/alenacpp/cppmap-2012.png
hypot(x, y) создан, что бы не звать sqrt(x*x + y*y)
Подробности:
http://freetype.sourceforge.net/david/reliable-c.html
UPD 2014-06-09: сменил ссылку, прошлая убилась
http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Frzahg%2Frzahgicprog2.htm - iSeries Information Center, версия 5, выпуск 3
В разделе есть примеры кода, достаточно много про сокеты
написано (в том числе и
мультикаст и
SSL).
- Q: Boost.Asio - что нужно указать в cmake среди компонентов при поиске библиотеки boost?
A: только библиотеку system:
find_package(Boost REQUIRED COMPONENTS system)
- Q: Boost.Thread и кроскомпиляция - что делать, если получаем ошибку вида:
undefined reference to 'boost::tss_cleanup_implemented()'?
A: для начала чуток обратно: в случае Linux, в качестве компонента при поиске библиотеки нужно указывать thread, а в случае windows (и кроскомпиляции): thread_win32, т.е. необходимо писать что-то вроде такого кода:
set(BOOST_COMPONENTS
program_options
system)
# Boost thread library is different on Win/Linux
if(WIN32)
set(BOOST_COMPONENTS ${BOOST_COMPONENTS} thread_win32)
else()
set(BOOST_COMPONENTS ${BOOST_COMPONENTS} thread)
endif()
...
find_package(Boost COMPONENTS ${BOOST_COMPONENTS} REQUIRED)
Подсказку увидел тут:
https://lists.gnu.org/archive/html/mingw-cross-env-list/2010-11/msg00063.html. Так же следует добавить следующее (при статической линковке):
add_definitions(-DBOOST_THREAD_USE_LIB=1)
Далее, собственно, относительно самого вопроса, предлагают в случае появления такой ошибки при компиляции, поместить в любой свой исходник следующее:
namespace boost {
void tss_cleanup_implemented() { }
}
чистой воды хак :) Дополнительно написано тут:
https://solarcore.blogspot.com/2010/10/boost-c-threads-mingw-mac-os-x.html
Если коротко: функиця заполняет структуру типа in_addr, преобразуя сведения о хосте из строкового представления.
У winsock2 нет такой функции. Есть более продвинутый аналог inet_pton, в POSIX он тоже есть, да вот только mingw про неё в windows не знает. Пичалька.
Поэтому делаем примерно следующее:
#ifdef WIN32
static int inet_aton(const char *cp, struct in_addr *inp)
{
if (cp == 0 || inp == 0)
{
return -1;
}
unsigned long addr = inet_addr(cp);
if (addr == INADDR_NONE || addr == INADDR_ANY)
{
return -1;
}
inp->s_addr = addr;
}
#endif
не верх совершенства и корректности, но для моих целей работало.