Что бы при использовании плагина 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
не верх совершенства и корректности, но для моих целей работало.
По сути парочка дополнений для этой статьи: http://mingw-cross.sourceforge.net/cross_debug.html
Задача: есть win32 приложение, собранное путём кросс-компиляции при помощи cmake и mingw32, нужно запустить его в отладчике и поймать на чём оно падает.
Необходимый инстументарий:
- установленный mingw32
- wine (winconsole)
- бинарная версия gdb для windows, брать тут:
http://sourceforge.net/projects/mingw/files/MinGW/Extension/gdb/
- версия gdb, собранная для Linux, знающая как подгружать win32 приложения, собранные mingw. Тут нужно искать сборку для вашего дистрибутива, для пользователей ArchLinux я сделал PKGBUILD и поместил его в AUR:
https://aur.archlinux.org/packages.php?ID=54802
продвинутые пользователи могут подглядывать в мои правила сборки и собирать самостоятельно :)
Бинарную версию нужно будет распаковать, например в ~/bin/mingw32-gdb-win32/. В директорию ~/bin/mingw32-gdb-win32/bin/ при этом следует сделать следующие симлинки:
cd ~/bin/mingw32-gdb-win32/bin/
ln -s /usr/i486-mingw32/bin/libexpat-1.dll .
ln -s /usr/i486-mingw32/bin/libiconv-2.dll .
ln -s /usr/i486-mingw32/bin/libintl-8.dll .
Всё. Впринципе всё готово для отладки.
- Запускаем сервер:```bash
wineconsole cmd /K ~/bin/mingw32-gdb-win32/bin/gdbserver.exe localhost:6000 test-app.exe [аргументы для программы с которыми она должна запускаться]
1. Запускаем клиент gdb:```bash
i486-mingw32-gdb test-app.exe
- В запущенной версии gdb выполняем следующую команду:```gdb
(gdb) target remote localhost:6000
unsigned long arg = 1;
ioctlsocket(sockfd, FIONBIO, &arg);
в Linux:
int arg = fcntl(sockfd, F_GETFL, NULL);
arg |= O_NONBLOCK;
fcntl(sockfd, F_SETFL, arg);
или универсальная функция:
void setSockNonblock(int sockfd)
{
#ifdef WIN32
unsigned long arg = 1;
ioctlsocket(sockfd, FIONBIO, &arg);
#else
int arg = fcntl(sockfd, F_GETFL, NULL);
arg |= O_NONBLOCK;
fcntl(sockfd, F_SETFL, arg);
#endif
}
Занимаясь разработкой небольшой программы, использующей сокеты, потоки и не использующей фреймворков, типа Qt, столкнулся с необходимостью собрать это дело для Windows. Подводных камней оказалось много, как результат познакомился с такими милыми сущностями, как Boost.Thread и Boost.Asio.
Но тут вспомнилось, как мне уже приходилось собирать под Windows окружение, для компиляции исходников, использующих Boost и стало грустно. Грустно настолько, что оказалось проще сделать бинарники путём кросс-компиляции. И вот, когда дело было сделано, натыкаюсь на этот ресурс:
http://nuwen.net/mingw.html
Стефан (автор этого поделия) предоставляет сборку MinGW включающую сам компилятор, набор полезных библиотек (включая Boost 1.47.0!) и некоторых полезных утилит. Пакет не требует установки, просто распаковываем в c:
mingw и пользуемся.
Так что на будущее, буду пробовать.
Внезапно, правда? :)
Но волей судеб нужно было портировать программку, в которой использовался nanosleep(2). И…
Для внезапно стало откровением: В WINDOWS НЕТ ТАЙМЕРОВ ВЫСОКОГО РАЗРЕШЕНИЯ. А есть только по сути хаки и вызов Sleep, с минимальным промежутком в 10мс.
Наиболее часто рекомендуемый вариант:
void sleep_nsec(int64_t interval)
{
int64_t time1 = 0, time2 = 0, sysFreq = 0;
QueryPerformanceCounter((LARGE_INTEGER *) &time1);
QueryPerformanceFrequency((LARGE_INTEGER *) &sysFreq);
do
{
QueryPerformanceCounter((LARGE_INTEGER *) &time2);
} while(((time2-time1)*1000.0*1000.0/(double)(sysFreq)) < interval);
}
Но тут мы упираем процессор в полку. Есть вариант с использованием select, но, по отзывам, он так же может ждать не менее 10мс.
Т.е., по сути, это единственный вариант для Windows, да ещё и не лишённый глюков: почти все процессоры уже умеют автоматическое понижение частоты… Чуете? Пока работает цикл, значение sysFreq может измениться (поправьте меня, если я не прав) и время потекло.
Кроме того, наткнулся на статью:
http://www.codeproject.com/KB/system/timers_intro.aspx - Timers Tutorial
Описываются различные вариант таймеров: стандартные win32, мультимедийные, Waitable Timers (не знаю как лучше перевести на русский язык), Queue Timers. Но опять таки, все периоды - миллисекунды.
Сегодня пролетело в рассылке:
Hi,
Qt Creator master has recently got a feature, which has been requested a
few times, for Doxygen blocks generation. If you type /**
or /*!
and
press enter/return before a declaration, you’ll get something like:
/*!
*
* <br/>param data
* <br/>param options
* <br/>return
*/
QString generate(const Data &data, const Options &options);
You can also opt whether or not you want an additional <br/>brief
command
and leading asterisks for comment continuation (when breaking lines).
The options are in Text Editor->Completion->Documentation Comments.
Notice that the style is identified from the comment beginning. If you
start it with /*!
then the Qt style is used. Otherwise, the Java style
with the @
prefix for the commands is picked.
Cheers,
Leandro
Проверил - работает, удобно :)
Шаг 1. Взять sqlite-jdbc отсюда: http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC или при помощи Maven (описание по той же ссылке)
Шаг 2. Положить у себя в проект класс SQLiteDialect, взятый отсюда: http://arnoraps.tweakblogs.net/blog/3146/hibernate-with-sqlite.html или из архива отсюда: http://code.google.com/p/hibernate-sqlite/ (HibernateSQLite.zip)
Шаг 3. В конфигурацию Hibernate добавить примерно следующее: ```xml
org.sqlite.JDBC
jdbc:sqlite:./data.db
ru.sincore.db.SQLiteDialect
…