Hatred's Log Place

DON'T PANIC!

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/

Jun 27, 2012 - 6 minute read - life туризм

Ночь в лесу

Долго собирался и вот, наконец, дошло до дела: опробовать аварийную ночёвку в лесу, когда под руками только самое необходимое, а то и без него.

Итак, 2 июня, после экзаменов в горной школе нашего турклуба, на пару с другом Евгением, сруливаем в, относительно, недалёкие окрестности стольного града Владивостока.

Задачу ставим на первый раз простую: организация укрытия, ночёвка в нём, при этом нет спальника (легенда: “палатка и спальник в рюкзаке, рюкзак свалился в пропасть”). Насчёт пенки решили сделать допущение, ровно как на котелок и еду - в самом деле, не всё же сразу!

Самое главное, если вдруг оказался в чрезвычайной ситуации - не паниковать. Не знаешь что делать - лучше сядь и посиди, успокаивая мысли, не делай лишних телодвижений, шевели головой - на это меньше тратится энергии, а полезного выхлопа больше.

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

И вот, место выбрано, теперь стоит определиться с укрытием. Если вас один-два человека, подойдут даже природные заготовки, вроде вывороченного пня - просто наложите лаги, застелите ветками, засыпьте листвой, и закрытое почти со всех сторон жилище готово. Иногда в лесу падает сухостой, по дороге к земле, бывает зацепляется, при этом, часто, образуется уже почти готовый шалаш, только пообломай лишние ветки, да немного облагородь. Мы решаем делать односкатный шалаш, можно сказать, из ничего.

Посмотришь всякие фильмы, где суровые дядьки показывают, что делать когда случилась опа, у них куда не плюнь - верёвка из лианы: плети, крути, делай что хочешь. А у на в Приморском крае оказывается не хуже - актинидии (в народе киш-мышь), лимонника да дикого винограда где только нет. В нашем распоряжении оказалось немного актинидии, её мы и использовали, как замену верёвки, для укрепления нашего жилища.

Основа - два дерева. Для двух человек достаточно, что бы расстояние между ними было сантиметров 130-140. Меньше - тесно, да дождь по бокам может заливать, больше - дополнительные трудозатраты, как следствие, потеря энергии (это у нас была еда, а если действительно - рюкзак в пропасть?). Находим подходящую сухую жердину, главное что бы она не сломалась от малейшего чиха. Лучшим выбором будет дерево не лежачее на земле, а ещё стоячее - оно меньше подвержено гнили. Глубина ската выбирается по росту самого высокого человека, плюс десять, двадцать сантиметров. Высота ската при этом побирается такой, что бы угол между скатом и землёй был примерно 45 градусов - потом поясню, для чего.

Итак, два дерева найдены, жердина подобрана, теперь её нужно закрепить. У нас веток на деревьях на нужной высоте не оказалось, поэтому нашли две сухие рогатины, нужной высоты, прислонили к деревьям, закрепили актинидией, на рогатины положили жердь.


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


Теперь нужно уложить поперечные лаги. Предварительно нахожу три бревна побольше, можно даже сущую труху, главное что бы было потяжелее. Одно бревно ложу на землю параллельно нашей жерди - на него и на жердь будут ложиться лаги. Лаги - тоже сушнины, только потоньше и полегче, нежели основная жердь, укладываем их на расстоянии 40-60 сантиметров друг от друга. К поперечной жерди приматываем той же актинидией. Когда все лаги будут уложены, на нижнюю часть, сверху ложим два запасённых бревна, тем самым плотно прижав концы к лежачему на земле бревну.


Снова, если нет ничего для вязки, закрепить лаги сверху можно, положив поверх ещё одну жердь - она придавит их к основной


После этого я нарезал тонкой живой гибкой поросли и как бы вплёл её поперёк лагов, в результате получилась этакая сетчатая конструкция. На эту конструкцию теперь будет удобно укладывать “черепицу”… В качестве оной “матёрые выживальщики” используют пальмовые листья, ога, ща, сгоняем по быстрому! Поэтому снова нарезаем поросль, тонкие ветки с листвой, собирая их в своеобразный веник и укладывая их на нашу сетчатую конструкцию таким образом, что бы черенки смотрели вверх. Естественно укладываем с нахлёстом, снизу вверх, как настоящую черепицу.

Всё, по сути на этом процесс строительства укрытия закончен, правда если у вас не окажется коврика (как я писал выше, у нас это было допущением), нужно будет сделать настил, что бы поднять ваше тело от сырости и холода земли (почки вам ещё пригодятся!). Сделать его можно просто: найти два бревна побольше, положить их параллельно боковым стенкам и плотно плотно уложить на них поперечные жерди. Поверх жердей, как и на крышу, можно уложить веток с листвой - комфорта будет значительно больше и отдохнувший организм скажет вам спасибо.

Всё, теперь можно заносить вещи и озадачиваться обогревом жилища.

В качестве обогревателя будет костёр, а другого и не дано! Делаем его из длинных брёвен, желательно их натаскать пока светло, фонарика тоже может не быть, а бегать вотьмах за дровами сомнительное удовольствие. Раскладываем его параллельно входу. Если получится подыскать подходящий материал для нодьи - лучше сделать её: горит долго, жара много. На крайний случай пойдёт и таёжный костёр.

Важным элементом обогрева, про который мы по глупому забыли в этот раз, это теплоотбойник. Название страшное, а суть проста: за костром, на расстоянии 40-50 (и более, зависит от жара) см делается вертикальная стенка, высотой до 50см. Материал - дерево (деревянный век какой-то). Что бы она держалась, берутся 4 ветки молодняка и втыкаются в землю, между ними накладывается стенка, просто и быстро, наличие щелей не особо критично.

Вцелом на все приготовления у нас ушло меньше двух часов, притом, что строительством жилища занимался в основном только я, Женя занимался заготовкой дров и костром, при этом укрытие получилось не на 2х человек, а на 4-5, соответственно есть запас по ресурсам.

Переночевали сносно, костёр прогорал примерно каждые 2 часа, просыпались, от того, что становилось прохладно, подкладывали дров и снова засыпали.

Теперь пару замечаний, которые вынесли после такой ночёвки.

Первое, это уже упомянутый выше теплоотбойник - делать обязательно! Меньший расход дров, даст больше тепла.

Второе, тут мы тоже сделали не правильно, ветер должен надувать на стенку, в нашем случае он дул во внутрь убежища, задувал костёр, поэтому то было очень жарко, то прохладно. Кроме того, костёр сушит листья, и держать дождь они будут хуже, да и спалить из снаряжения, оставшегося, будет проще. А отбойник с правильно расположенной стенкой даст спокойный огонь и ровное тепло. Так же, ветер не будет задувать капли дождя, при подобном расположении ската.

Третье, про угол 45 градусов, его мы тоже не соблюли. Вообще критично, если крыша из листьев (и листья эти не пальмовые), тогда капли дождя будут скатываться и меньше проникать во внутрь. Если найдена какая нибудь плёнка, то лучше укрыть крышу ею, главное закрепить (положить сверху несколько лаг), что бы не унесло ветром

Больше огрехов, вроде не заметили, при этом, вцелом, при строительстве можно было даже обойтись даже без ножа, не говоря уж о каком-то другом инструменте (я пользовался только ножом). Теперь нужно будет отработать ночёвки в безлесье и в зимний период.

И напоследок, немного фотографий, делал на телефон, поэтому не обесудьте. На фотографии, со стороны ската ещё не все ветки с листьями уложены, поэтому выглядит так облезло.