Hatred's Log Place

DON'T PANIC!

Oct 17, 2012 - 1 minute read - projects programming

CMakeProjectManager2 - последние изменения

Как я уже писал, вяло пилю модифицированную версию плагина CMakeProjectManager для Qt Creator’а. Там же указаны причины, вынудившие меня на это. Но разговор, не про это, а про то, что с момента прошлого поста было сделано.

Итак:

  1. Для каждого профиля сборки сохраняются введённые параметры для CMake, так что, выбрав в следующий раз “Run CMake” не нужно вспоминать, с какими параметрами вы его запускали и легче управлять профилями сборки. Вкупе с последней фичей из апстрима: сохранения глобальной истории параметров для CMake, получается достаточно мощный механизм.
  2. Используя вышеприведённую информацию, появилась возможность при модификации дерева исходников (добавление, удаление, переименование) в фоновом режиме запускать обновление CBP файла и дерева сборки, что особо актуально при использовании глоббинга.
  3. По сравнению с первым вариантом, получилось значительно сократить расходование памяти при использовании плагина, особенно когда в дереве проекта много вспомогательных модулей, временного C/C++ кода.

Кодовая база периодически синхронизируется с GIT версией Qt Creator. Если кто-то будет делать клоны для стабильных релизов, просьба отписываться с информацией об оных.

HINT:

Так как, при добавлении, удалении или переименовывании файла, не осуществляется модификация CMakeLists.txt, то нужно вносить изменения самому, либо использовать globbing:```cmake# UTILS file(GLOB_RECURSE UTIL_SOURCES “../util/.cpp”) file(GLOB_RECURSE UTIL_HEADERS “../util/.h” “../util/*.hpp”)

Oct 8, 2012 - 1 minute read - programming c++

Паттерн Iterator

Полезно, когда нужно перебирать последовательно какие-то данные, мне, в частности, потребовалось для перебора кодеков и форматов во C++ враппере для FFMPEG, а так же получения набора параметров и именованных констант, которые они могут принимать.

Основные идеи данного паттерна изложены по этой ссылке: http://sourcemaking.com/design_patterns/iterator, а возможные реализации на C++ здесь:

Сведения эти - общетеоретические. Более практическое описание с разделением итераторов на типы приведено на cplusplus.com: http://www.cplusplus.com/reference/std/iterator/, в частности вводятся понятие следующих типов итераторов (а так же наглядная таблица, по которой можно понять какие методы и операторы должны определяться в классе-итераторе):

А что бы несколько привести итераторы к одному виду, существует класс в стандартной библиотеке, называется ~std::iterator~, почитать можно здесь: http://www.cplusplus.com/reference/std/iterator/iterator/, там же приведён простой пример итератора.

Oct 4, 2012 - 1 minute read -

Emacs configs

В след за выкладываю свои конфиги для Emacs: https://gitlab.com/hatred-configs/emacs((Репозитории для клонирования: https://gitlab.com/hatred-configs/emacs.git, git@gitlab.com:hatred-configs/emacs.git))

На данный момент они не совсем самодостаточны: нужно некоторые пакеты устанавливать самостоятельно, так что запуск emacs --debug-init в первое время в помощь. Все недостающие пакеты есть в AUR для ArchLinux.

Кроме того, некоторые расширения тянутся из git, и они подключены как субмодули, поэтому после клонирования репозитория нужно будет выполнить следующие команды: git submodule init git submodule update

Пожелания по унификации приветствуются.

Sep 17, 2012 - 2 minute read -

Emacs Org mode + ditaa + Artist mode

Ditaa - DIagrams Through Ascii Art - “компилятор” для ASCII диаграмм, на выходе создаёт достаточно приятные для глаза диаграммки:

Ditaa дружит с org-babel в Emacs org-mode, так что можно создавать диаграммы прямо в режиме заметки в Org mode.

Для начала, нужно добавить в .emacs (или .emacs.d/init.el) следующее:

;; 
;; Org Babel 
;; 
(require 'ob-tangle) 
(setq org-ditaa-jar-path "/usr/share/emacs/site-lisp/org_contrib/scripts/ditaa.jar") 
;(setq org-plantuml-jar-path "~/java/plantuml.jar") 


(defun bh/display-inline-images () 
(condition-case nil 
(org-display-inline-images) 
(error nil))) 
(add-hook 'org-babel-after-execute-hook 'bh/display-inline-images 'append) 

; Make babel results blocks lowercase 
(setq org-babel-results-keyword "results") 

(org-babel-do-load-languages 
(quote org-babel-load-languages) 
(quote ((emacs-lisp . t) 
(dot . t) 
(ditaa . t) 
(R . t) 
(python . t) 
(ruby . t) 
(gnuplot . t) 
(clojure . t) 
(sh . t) 
(ledger . t) 
(org . t) 
(plantuml . t) 
(latex . t)))) 


; Do not prompt to confirm evaluation 
; This may be dangerous - make sure you understand the consequences 
; of setting this -- see the docstring for details 
(setq org-confirm-babel-evaluate nil) 

С моей версией emacs-org-mode из AUR ditaa уже идёт комплекте. Если нет, скачайте с домашнего сайта и укажите путь до него.

само рисование осуществляется в блоке кода:

#+begin_src ditaa :file out.png 
... 
... 
... 
#+end_src 

Теперь небольшой хинт. Есть в штатной поставке emacs 24 такой минорный режим, как artist-mode - позволяет рисовать в ASCII, его-то можно использовать для рисования диаграмм, далее вспоминаем про такую штуку как narrowing (ну хоть убейте - не знаю как перевести, а если кратко: то можно выделить блок текста, так, что бы все изменения были только с ним, а остальные части документа вообще бы никак не могли быть доступны для изменения). Посему:

Шаг 1: жмем сколько нужно ‘RET’ (в народе - Enter) в блоке #+begin_src/#+end_src - выделяем себе пространство для дальнейшего манёвра

Шаг 2: выделяем весь этот блок и жмем ‘C-x n n’ (если включен CUA mode, то вместе ‘C-x’ нужно нажимать или ‘C-x C-x’ или ‘S-C-x’, я использую второе) - тем самым мы перейдём к редактированию только этого блока

Шаг 3: выключаем artist-mode: M-x artist-mode

Шаг 4: рисуем диаграмму

Шаг 5: выключаем artist-mode: M-x artist-mode

Шаг 6: убираем выделение региона: ‘C-x n w’

Шаг 7: Жмем ‘C-c C-c’ находясь внутри блоке #+begin_src/#+end_src - запустится ditta и картинка покажется ниже блока кода.

Для себя, включение и выключение Artist mode я повесил на клавиатурную комбинацию ‘C-x a’, а выбор инструмента рисования в режиме Artist mode на C-s (инкрементный поиск тут не нужен)

И на последок, скрин-каст про artist mode: http://www.cinsk.org/emacs/emacs-artist.html

Sep 10, 2012 - 1 minute read -

Luakit configs

Выложил свои конфиги для Luakit на Gitorious: https://www.gitorious.org/hatred-configs/luakit

Помимо небольших кастомизаций под себя:

  • цвета закладок
  • сохранение сессии по w, а открытие окна по wi
  • включено отображение полосы прокрутки

сделана подсистема URI Rewrite и в globals.lua показано, как можно её использовать:

  • globals –> uri_rewrite_enable [true/false] — включить или выключить URI Rewrite
  • список uri_rewrites позволяет указать, что и как заменять, в конфиге показано как там заполнять, чуть ниже показано как делать “синонимы” для доменов, что бы, к примеру, для сайта с и без www. в начеле, делать одинаковые замены.
  • горячая клавиша Shift-F5 - перечитать текущую страницу, используя URI Rewrite

Посмотреть изменения относительно оригинальных конфигов: git diff master hatred

Aug 16, 2012 - 1 minute read - programming c++

Using Internet Sockets

Работая над программой столкнулся с проблемой в части функционала сокетов, пока искал в интернетах возможный пути решения проблемы, натолкнулся на интересное руководство: Beej’s Guide to Network Programming. Using Internet Sockets

Руководство доступно в в различных форматах (по ссылке выше можно найти подходящие), вот самые удобные, на мой взгляд:

Руководство переведено на несколько языков, но русского среди них нет, так что если кому не терпится - переводите, будет, по крайней мере, от меня, большое спасибо и пару-тройку бутылочек пива, если окажетесь в зоне досягаемости :)

Стоит отметить, что помимо всяких Linux/Unix есть информация и про Windows, в частности будет полезно при разработке кроссплатформенных сетевых приложений.

Ещё, среди кучи ссылок, в тексте обнаружилась такая полезная: UNIX Socket FAQ - тоже кладезь знаний.

В дополнение, книжка “Linux Socket Programming by Example”, можно купить на Амазоне: http://www.amazon.com/Linux-Socket-Programming-Example-Warren/dp/0789722410 или:

Jul 7, 2012 - 1 minute read - linux

Mime тип для GPX

Столкнулся с тем, что в файловых менеджерах в уютненьком Арчике GPX файлы отображаются просто как “Документ XML”, соответственно если назначишь для открытия какую программу, это распространяется на все XML файлы.

Выход: сделать описание Mime типа

Рассмотрю вариант индивидуальный для пользователя, общесистемно - домашнее задание.

Шаг первый, создаём файл $HOME/.local/share/mime/packages/application-gpx+xml.xml:

<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
    <mime-type type="application/gpx+xml">
        <comment>Geoinformation data (waypoints, tracks and so on) in GPX format</comment>
        <glob-deleteall/>
        <glob pattern="*.gpx"/>
    </mime-type>
</mime-info>

Для ленивых, качаем в одну команду: wget -O $HOME/.local/share/mime/packages/application-gpx+xml.xml http://htrd.su/wiki/_export/code/post/2012/07/07/mime_tip_dlja_gpx?codeblock=0

После чего выполняем команду: update-mime-database $HOME/.local/share/mime

Усё.

Для быстрого просмотра удобна программа Viking, в Арчике есть в стандартных репозиториях.

Jun 28, 2012 - 1 minute read - programming

Библиотеки для MinGW

Некоторые библиотеки находятся в AUR, некоторые собираются сами, но есть ещё такой чудный проект как Windows KDE: http://windows.kde.org/ в рамках которого, для компиляции KDE уже отстроено много библиотек.

Найти их можно:

Ну и поиграться с версиями, начиная отсюда: http://www.winkde.org/pub/kde/ports/win32/

Что самое чудное, есть версии не только для mingw, но и для VC10, а так же версии библиотек с отладочной информацией.

UPD

Для зависимостей между модулями будет полезно: http://www.winkde.org/pub/kde/ports/win32/repository-4.8/config/config.txt

И все файлы одним списком без разделение ня kde & win32libs: http://winkde.org/pub/kde/ports/win32/releases/stable/4.8.0/