Hatred's Log Place

DON'T PANIC!

May 18, 2013 - 1 minute read - Comments -

Небольшой редизайн сайта

Собственно основу можно заметить невооружённым глазом: * Убрана большая шапка * Убраны большие закруглённые углы

Менее заметные: * Большой логотип претерпел некоторый “ребрендинг” (этот логотип предлагается как картинка по умолчанию при репостинге в G+) * Сделаны миникопии логотипа под разные размеры, один из них выводится в верхней навигационной строке, другой используется как favicon (теперь видно, что там картинка, а не чёрная клякса, но чёткости так и не получилось добиться) * Возвратил стандартный поиск по сайту, потому как гугловский внезапно стал глючить и выдавать пустые ответы (при этом поисковые запросы типа “site:htrd.su ЗАПРОС” работают исправно), разбираться лень, т.к. сам не веб-разработчик и тратить на это время просто жалко (на крайний случай: https://www.google.ru/search?q=site%3Ahtrd.su). Кроме того, это несколько ускорило загрузку страницы. * Небольшая косметика правой колонки: убрано лишнее, подкорректированы размеры шрифтов * Немного откорректированы шрифты заголовков

Apr 18, 2013 - 2 minute read - Comments - programming c++

Build Boost on Windows with MinGW

Чисто заметка, без вдавания в детали.

Для начала нужно поставить MinGW и MSYS.

Сделать это можно двумя путями. Первый, это поставить и то и другое средствами mingw-get-inst: http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/

Но там только GCC 4.7.2, а мне нужен был GCC 4.8 (где брать свежие сборки MinGW я уже ранее писал, замечу только, что брать нужно версию с поддержкой threads-posix и dwarf, если вдруг захочется использовать бинарные сборки Qt). MSYS поставил при помощи mingw-get (http://sourceforge.net/projects/mingw/files/Installer/mingw-get/, а можно и вручную, скачивая и распаковывая файлы отсюда: http://sourceforge.net/projects/mingw/files/MSYS/). Распаковываем его, к примеру, в C:<br/>msys, далее: cd C:
msys
bin mingw-get.exe update mingw-get.exe install msys

После этого MSYS будет расположен в C:<br/>msys<br/>msys<br/>1.0. Если потребуется ещё что-то от msys: mingw-get list вам в помощь.

Далее сборка Boost (у меня 1.53.0).

Распаковываем его, например в D:<br/>boost_1_53_0

Настраиваем пути до компилятора (делаем это из запущенной копии cmd): set PATH=c:
msys
msys
1.0
bin;c:
mingw
bin;%PATH%

Тут обращаю ваше внимание на один факт, за который разработчикам буста нужно малость по рукам настучать: буст соберётся хорошо только в случае, если MinGW поставлен в C:<br/>MinGW и ни как иначе!

После чего собираем bjam: cd D:
boost_1_53_0
tools
build
v2 bootstrap.bat gcc b2 –prefix=C:
boost install set PATH=%PATH%;C:
boost
bin

Теперь мы готовы собирать сам буст: cd D:
boost_1_53_0
bjam -j2 toolset=gcc –build-type=complete –prefix=C:
boost install

Вместо -j2 ставим нужное количество потоков сборки.

После продолжительной сборки буст будет расположен: * заголовки: C:<br/>boost<br/>include<br/>boost-1_53 * библиотеки: C:<br/>boost<br/>lib

И полезные параметры при сборке:

-Wno-unused-local-typedefs -DGLIBCXX_FORCE_NEW -D_WIN32_WINNT=0x0501 -DBOOST_THREAD_USE_LIB -DBOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN

Для совсем ленивых, напоминаю про альтернативную сборку MinGW от Стефана, в ней он уже обновил GCC до 4.8 и Boost до 1.53. Кстати, Стефан работает в Microsoft :laughing:

Apr 12, 2013 - 1 minute read - Comments - life

С днём космонавтики!

Надеюсь мои ощущения, что космические программы стали более активными, не просто ощущения. Поздравляю всех причастных!

Apr 9, 2013 - 2 minute read - Comments - programming

Qt Creator: C/C++ parser and "pre-included" headers

Некоторые компиляторы (если не все) поддерживают такую функциональность: через параметр командной строки можно указать файл или файлы, которые будут подключаться автоматически к каждому обрабатываемому файлу. У GCC это опция -include```.

В некоторых проектах используют эту особенность, как результат - явного включения файла нет, а парсер в Qt Creator’е не видит части объявлений.

Решения единого нет: для каждого типа проекта (qmake, cmake, generic & etc), теоретически, оно своё (если есть вообще). В моём случае используется Generic project, для него решение существует.

И решение достаточно простое: Generic Project Mananger использует несколько файлов для хранения настроек проекта: * ProjectName**.creator** - головной файл, по сути не содержит никакой полезной информации * ProjectName**.files** - список файлов проекта (может содержать и не исходники) * ProjectName**.includes** - пути поиска заголовочных файлов * ProjectName**.config** - как гласит комментарий внутри этого файла: “ADD PREDEFINED MACROS HERE!

Вот последний файл самый интересный. Комментарий немного наводит в ступор и мы решаем, что тут можно только писать код вида: #define MACRO some_value

На самом деле, парсером этот файл воспринимается как обычный заголовочный файл и информация из него используется для парсинга всего остального. Чуете профит? Если нет, подсказываю: по сути это и есть наш “pre-included” header для парсера! И писать в нём мы можем всё, что понимается препроцессором (если быть точнее: парсером скеатора). Т.е. мы можем сделать такое: #include “includes/pre-included.h”

И всё, что объявлено в нашем pre-included.h станет доступно парсеру при обработке каждого файла. Дело сделано!

Было бы любопытно узнать как такое можно реализовать для Qmake и Cmake проектов.

PS вопрос этот я поднял в списке рассылки Qt Creator’а, пока ждал ответ, в голову пришла идея с #include, в результате список только подтвердил моё изыскание :)

UPDATE: рано обрадовался, внезапно, решение отказалось работать. Имхо, причина в несовсем корректном использовании .config файла.

Apr 8, 2013 - 1 minute read - Comments - programming c++

C++ Template Metaprogramming

Что-то не нашёл официального русского перевода книги, только сделанный в частном порядке (читать сложновато): http://enotcpp.blogspot.ru/2011/11/c-template-metaprogramming-david.html

На английском: http://ultra.sdk.free.fr/misc/docs/Addison.Wesley.C++.Template.Metaprogramming.Concepts.Tools.and.Techniques.from.Boost.and.Beyond.pdf или среди торрентов: http://rutracker.org/forum/viewtopic.php?t=1140883

Mar 28, 2013 - 1 minute read - Comments - programming c++

Qt Creator: "the debugger could not load the debugging helper library" на Windows XP

Решение подсказывают тут и тут. Если коротко: нужен GDB скомпилированный с поддержкой Python и Qt Creator на это расчитывает. По первой ссылке его рекомендуют брать в QtSDK, но качать его сильно накладно. Недолгое гугление привело на эту ссылку: http://origin.releases.qt-project.org/gdb/windows-xp/.

Устанавливатся просто: скачиваем, распаковываем, в настройках китов в Qt Creator (Tool -> Options… -> Build & Run -> Kits) выбираем новый отладчик (для MinGW) и живём.

PS другие версии: http://origin.releases.qt-project.org/gdb/ PPS более корректные ссылки: http://builds.qt-project.org/job/gdb-windowsxp/ и http://builds.qt-project.org/job/gdb-windows/

Mar 28, 2013 - 1 minute read - Comments - programming c++

Scott Meyers. Effective C++ in an Embedded Environment

This PDF document contains the presentation materials from Scott Meyers’ two-day training course Effective C++ in an Embedded Environment. It provides an in-depth examination of how C++ can be applied in embedded systems, including costs of language features, ROMing, ISRs, memory management, safety-critical and real-time considerations, and more.

Формат: презентация в PDF, чётко и по делу.

Для желающих получить без оплаты:

Mar 25, 2013 - 1 minute read - Comments -

С переездом!

Переехал на новый хостинг, вроде всё основное запустил. Заодно обновился и обновил плагин googleplusoneng.

Теперь проблем со скоростью (100Мбит) и доступностью (всё же сервер в серверной :)) должно быть поменьше.

Mar 5, 2013 - 1 minute read - Comments -

Google Drive и прокси с доменной авторизацией

Google Drive [речь про Windows] может работать только с прямым подключением к интернету или через прокси, настроенный в IE и без авторизации.

Что бы решить сабжевую проблему: * http://superuser.com/questions/416845/google-drive-with-proxy-authentication - рецепт * http://cntlm.sourceforge.net/ - основной ингредиент

Пересказывая… Ставим cntlm прокси, идём в “C:
Program Files
Cntlm”, редактируем cntlm.ini, указываем логин и домен. При этом не спешим вводить свой пароль открытым текстом, вместо того вызываем cntml.exe следующим образом: cntlm.exe -H

вводим пароль, и копируем один из вариантов хеша в конфиг.

После всего этого делаем команду: net start cntml

и сервис у нас запущен.

В настройках прокси IE указываем: * хост: localhost * порт: 3128

Пробуем зайти на куда нибудь и радуемся жизни. Если на этот момент Google Drive уже поставлен и запущен, он сразу сможет подрубиться и начать свою работу.

UPD: Под Linux нужно попробовать: https://aur.archlinux.org/packages/insync/

Jan 23, 2013 - 2 minute read - Comments -

ArchLinux, systemd, run-level 3, startx, udisks и монтирование

Столкнулся с ситуацией: после перехода к systemd и его logind внезапно отказались монтироваться флешки средствами udisks и udisks2. При этом на соседнем компьютере всё нормально. Разница при этом между ними только одна: на одном иксы запускаются через kdm, на другом - startx. Вот там, где используется startx монтирование и не работает.

В ходе разбора наткнулся на эпичный тред, где поттеринг пытается убедить, что нужно апдейтить startx: https://bugzilla.redhat.com/show_bug.cgi?id=820675

Но оставим этого человека альтернативной ориентации и вернёмся к нашим баранам. А бараны такие: заставить без костылей или минимум оных монтировать накопители средствами udisks/udisks2 на машине, где используется startx.

Для начала выясняем, а в чём собственно соль проблемы. Выясняется, что когда мы запускаем иксы, они захватывают отдельный терминал и переключают пользователя на него, тем самым мы как бы переключаемся из сессии, созданной при логине в консоли, и она становится неактивной. Новой сессии для иксов при этом не создаётся. В результате этого в выводе команды loginctl show-session $XDG_SESSION_ID

видим такие строчки: Active=no

При этом, изучая конфиги polkit, мы можем увидеть, что мы можем регулировать права доступа для монтирования для активной сессии, неактивной и для остальных. Отсюда вытекает первый вариант исправления ошибки (и первый костыльный): править конфиги polkit и разрешать доступы с неактивных сессий для операций монтирования.

Проблема метода очевидна: ближайшее обновление и нам нужно мержить, или менять снова. Не гут.

Второй метод, запустить иксы на том же терминале, на котором мы залогинились. К примеру, мы зашли с первой консоли, команда tty выдаёт следующее: /dev/tty1

тогда, что бы запустить иксы на этой консоли нам нужно выполнить следующую команду: startx – vt1

И видим, что в выводе loginctl Active стал yes. Viva!

В таком варианте есть свой плюс: если заблокировать экран, допустим, с помощью xscreensaver, то мы не сможем переключиться на первую текстовую консоль и, нажав Ctrl-C, убить иксы и получить доступ к залогиненому аккаунту. Здесь же кроется и минус: подвисшую сессию оперативно не убьёшь, особенно, если она отказывается реагировать на Ctrl-Alt-BS. Плюс как-то не классически.

Как последний штрих, добавляем в ~/.bashrc следующее:

stx()
{
	local vt=$(fgconsole)
	startx -- vt$vt
}
alias startx='stx'

и продолжать пользоваться просто командой startx.

Здесь же кроется забавный баг: теперь, если случайно нажать startx в окне терминала в запущенных иксах, поверх них запустится их вторая копия и переключиться между ними не получится ни при каких обстоятельствах. Так что будьте осторожны и бдительны.

Как заключение: подобные изменения лишний раз подтверждают правило: работает - не трожь! Особенно если это касается системообразующих функций, систем загрузки и пр.

Материалы которые помогли мне разобраться: * https://bugzilla.redhat.com/show_bug.cgi?id=820675 * https://bugzilla.redhat.com/show_bug.cgi?id=826459 * https://bugzilla.redhat.com/show_bug.cgi?id=806491 * http://lists.freedesktop.org/archives/systemd-devel/2012-August/006385.html * https://gist.github.com/3489325