Hatred's Log Place

DON'T PANIC!

Mar 7, 2010 - 2 minute read - linux

Из одной установки ArchLinux

Подогнали тут машинку, мамка Asus CUBX-L, процессор Intel Celeron 600MHz, RAM около 415Mb (free кажет 416800Kb, что-то не могу подобрать комбинацию, там 3 планки стоят). У меня вообще в последнее время какая-то тенденция с оживлением всякого старого железа, лотеком прям себя ощущаю.

Образ с которого устанавливаюсь 2009.08, так вот, на машинке или сам привод немного подгоняет, или диск так записан (возможности проверить на другом нет), но при попытке установке пакетов, вылетает на том, что не может проверить контрольные суммы у некоторых пакетов. Причем, установка пакетов у меня выбрана не с диска, а с сети - благо у меня локальное зеркало есть. Это навело на мысль - удалить пакеты, чтобы перезакачались: была такая проблема на моём EeePC - подглючивала сетевая карта.

Сказано - сделано. Иду в /mnt/var/cache/pacman/pkg и… правильно, пытаюсь удалить некорректные пакеты, а оно мне что? А оно мне говорит - а нет таких файлов. Опппппааааа… ЧДКВ?

Смотрю какой командой запускается pacman: pacman –root /mnt –config /tmp/pacman.conf –noconfirm -S <список пакетов>

Смекаю, я же зеркало выбирал, значит должно быть отражено в конфигурационном файле, а вдруг там ещё что, понаписано… Открываю: nano /tmp/pacman.conf

и что я вижу? там в секции [options] указаны два параметра для CacheDir, один верно ведет в /mnt/var/cache/pacman/pkg, а другой, на те пакеты, что на диске: /src/… и так получилось, что пакеты, на которые ругалось, не изменились с августа прошлого года, а т.к. диск/привод гонят - прочитаться не смогли, на что ругнулось, что контрольные суммы не получилось просчитать.

Удаляю эту строчку, после чего возвращаюсь на пункт Install packages и пробую заново устанавливать пакеты - удача :)

To be continued…

Feb 28, 2010 - 1 minute read -

Несколько заметок по работе с Gitorious.org

Сам проект - git-хостинг. Там же хостятся проекты Qt ( http://blog.gitorious.org/2009/05/11/welcome-qt/, http://qt.gitorious.org/), Qt Creator ( http://qt.gitorious.org/qt-creator).

  1. регистрируемся, но, т.к. это не рашин стартап, поддерживается и вход по OpenID , что мне очень удобно и вкусно.
  2. при помощи ssh-keygen сгенерируйте ключ:``` cd ~/.ssh ssh-keygen -f id_rsa_gitorious

Feb 21, 2010 - 3 minute read - programming

Мысли по написанию программ

Агрегация собственного опыта, идей, мыслей.

Итак, по шагам.

  1. Самое первое - решить, а нужно ли? возможно уже существует более лучшее решение, в котором легче допилить, то, что тебя не устраивает?
  2. Берем бумажку, блокнот (блокнот - лучшее оружие вор^Wпрограммиста!), и пишем те задачи которые должна решать программа, эдакие основные фичи, глобальные юзкейсы.
  3. Продумываем, при помощи того же блокнотика, интерфейс, если он есть.
  4. По результатам берем, рисуем блок-схему, для начала укрупненную. Особенно это нужно для диалоговых приложений.
  5. Далее начинаем детализировать блок схему, в виде отдельных схем описываем отдельные алгоритмы, помогает продумывать в том числе и общую архитектуру.
  6. Если нужна база данных, начинаем чертить таблички, придумывать поля, смотреть какого типа они должны быть, придумывать связи
  7. Когда уже получится достаточно стройная картина, обязательно переложить все это в электронный вид - если проект закрытый, будет самим легче разобраться, а если OpenSource - то сторонним разработчикам.
  8. Выбираем инструментарий: тут в основном язык, библиотеки (в том числе с опорой на лицензию, для собственного использования - пофиг, но если планируешь распространять, то озадачься).
  9. Распечатываем алгоритмы, обклеиваем ими стену - что бы всегда было перед глазами, что бы в любой момент можно было увидеть цельную картину проекта, какие части как между собой взаимодействуют.
  10. Глядим на все это дело, начинаем думать, какими структурами языка это все реализовывать: что засунуть в структуру, что - в класс, какие классы будут базовыми, какие наследоваться, какие интерфейсы внутри классов, делаем пометки на той же бумажке (результаты уже не нужно будет заносить в комп, точнее не нужно в том виде, в каком вы их, эти пометки делали).
  11. Может и не логичное место: придумайте правила оформления кода (мои заметки можно глянуть тут), от себя хочу сказать - все равно какой он будет главное: * соблюдайте его на протяжении всего проекта * используйте отступы и пусты строки для оформления блоков - читабельность кода увеличивается в разы * не чурайтесь комментариев (немного далее)
  12. Про комментарии сказано было, но я рекомендую сразу подумать и о системе документирования самого кода, API библиотек и тому подобного. Для себя использую Doxygen, в коде просто вставляются комментарии в нужной форме, но основе которых, при помощи Doxygen генерируется документация на код в формате HTML/RTF/man
  13. Ну, наверное, в основном - все. Для проверки - перейдите к пункту 1 :simple_smile:

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

Из дополнительных пунктов:

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

Ссылки в тему:

PS Пишите код так…

Feb 19, 2010 - 5 minute read - life

Torrents.Ru ---> RuTracker.Org

На правах кросс-постинга: http://serj-nickel.livejournal.com/139844.html

От себя: предлагаю также репостить, и поддержать петицию.


//Уважаемые пользователи!

18 февраля 2010 года компанией “Ру-Центр” (Москва, Ленинградский проспект, д.74, корп.4, тел +7 (495) 994-46-01 +7 (495) 737-06-01, www.nic.ru ) без предупреждения, и какого либо уведомления было приостановлено делегирование домена TORRENTS.RU. По информации из “Ру-Центра” “Делегирование домена TORRENTS.RU приостановлено на основании Постановления следственного отдела по Чертановскому району Прокуратуры г.Москвы от 16.02.2010г”.

В “Ру-Центр” направлен соответствующий запрос, однако, весьма вероятно, что выяснение обстоятельств займет некоторое время, в течение которого адрес torrents.ru будет недоступен. В связи с этим мы вынуждены были в срочном порядке сменить доменное имя на rutracker.org.//

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

Самая “частная” мысль: какого чёрта?! Во-первых, что это за “приостановление делегирования”? Я что-то не пойму - там что, есть решение суда?! Я не юрист, но с позиции здравого смысла мне кажется, что в столь экстренном порядке что-то закрывать можно лишь в том случае, когда это реально угрожает чьей-то безопасности. А здесь что происходит? 16 февраля накатали какую-то там бумагу - и через два дня уже всё готово, всё закрыто? Ну допустим, в России плохой суд, нечестный и коррупционный, но здесь-то не было никакого суда! Пиздец, короче. Видимо, в сраной рашке этой стране любой чиновник имеет право закрыть что угодно. В таком случае заявляю о скором издании Постановления о закрытии к ебёной матери следственного отдела по Чертановскому району прокуратуры г.Москвы от 18.02.2010г. Во-вторых, уж кто-то, а Торрентс.ру был максимально лоялен к правообладателям. В правилах там написано, что каждый запрос с документально подтверждёнными правами на материалы, выложенные на трекере, приведёт к удалению соответствующих раздач, и так в самом деле происходило! Я ещё как-то могу понять мотивы суда над Pirate Bay - эти ребята делали то же, но открыто называли себя пиратами, игнорируя все попытки с ними договориться. При этом в их родной Швеции был громкий судебный процесс, длившийся несколько месяцев, имевший огромнейший резонанс (взять хотя бы место Пиратской партии в Европарламенте!). Да и в Рунете большинство трекеров не отличается особым рвением оставаться в правовом поле. Торрентс.ру - исключение. И тем не менее наехали именно на него.

Мысль номер два: все эти т.н. правообладатели (если это они) не ведают, что творят. Ежу понятно, что файлообмен в том или ином виде победил. Нужно пытаться извлекать из этого выгоду, а не устраивать бессмысленные репрессии. Неужели они не знают, что помимо более 9000 копий экранки фильма “Аватар”, который можно найти в любой локальной сети, Торрентс.ру - хранилище ссылок на редчайшие материалы, купить которые легально просто невозможно даже в Москве, не говоря уже о провинции?! Взять хотя бы первый фильм Тарантино, оцифрованный и переведённый, как и сотни других раритетов, энтузиастами! А помните последний фильм братьев Коэн, который в нашей отсталой северной стране даже в прокат не вышел? А что насчёт собственных оцифровок виниловых пластинок? Что, в конце концов, насчёт авторских раздач, которых не так мало, как может показаться? Подскажите, где это взять легально? На Горбушке? Может быть, проведя полдня и пройдя пять километров вдоль прилавков, я таки найду половину того, чего искал. Но это в столице. А как насчёт Тулы и Рязани, не говоря уже о Барнауле и Томске? А что насчёт русскоязычного населения за рубежом? Думаете, православный храм в центре Парижа для эмигрантов полезнее, чем возможность смотреть русское кино и слушать русскую музыку? Не думаю. Пока государство занималось чёрт знает чем, люди сами решили для себя проблему культурного голода. Более объёмной и при этом структурированной коллекции произведений искусства на русском языке в свободном доступе объективно нет. Было бы чертовски несправедливо, если бы такой проект погиб из-за чьей-то банальной жадности. Торренты - дело огромной важности, действительно объединяющее носителей русскоязычной культуры по всему миру. Дадут фору любым хвалёным нацпроектам - факт.

И, наконец, третья мысль. Железным аргументом структур, пытающихся помешать свободному файлообмену, является такой: “Это незаконно!” Ах, вот ведь радетели за законность нашлись! Но даже не в этом суть. Суть в том, что закон для человека, а не человек для закона. Если реалии изменились, общество должно иметь право издать новые законы, этим реалиям соответствующие. Атеизм, гомосексуализм, эвтаназия - все эти вещи ещё совсем (по историческим меркам) недавно были под запретом. А, например, расовая сегрегация была в порядке вещей. Однако общество изменилось, и в процессе своего развития поменяло взгляды на эти вещи и, как следствие, к власти пришли люди, которые привели законодательство в соответствие с ними. Так происходит в идеале; так должно происходить. Грустный же вывод напрашивается сам собой: по видимому, в России проделать подобную корректировку законодательства мы не в силах.

PS Некоторое время назад я открыл статистику ThePirateBay.org и Torrents.ru и увидел, что количественные показатели (число зарегистрированных пользователей, раздач, сидов, личеров) у них очень близки. Принимая во внимание, что Бухту называют трекером номер один в мире, и что информация на его русскоязычном аналоге куда как лучше структурирована, я испытал чувство, которое испытываю довольно редко - гордость за то, что именно люди, которые говорят со мной на одном языке, собрали, по видимому, крупнейшую коллекцию своей культуры. Я увидел, что они испытывают потребность в культурном обмене друг с другом, что многим из них правда интересно и доставляет удовольствие потратить своё время и силы на поиск, оцифровку, перевод материала - и выложить его в свободный доступ, не прося ничего взамен, а лишь ожидая, что с ними так же поделятся чем-нибудь полезным.

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

PPS http://www.girus.ru/petition/33/

UPD Желающие сделать перепост - делайте! (с кнопочкой не вышло, но и вручную это не так сложно)

Feb 19, 2010 - 1 minute read - linux

info с человеческим лицом

Все знают про man страницы (man чаво?) и удобную программу apropos, все, надеюсь, ими активно пользуются.

Все знают и про info-страницы, рожденные в недрах проекта GNU, но, управление у программы info достаточно… неудобное, just for me.

Feb 19, 2010 - 2 minute read - programming

Geeqie и закачка картинок на ImageShack

В Geeqie продолжили традцию предка GQView в части технологии инструментов, что удобно - теперь они редактируются созданием .desktop файла и могут быть расположены в любом пункте меню/подменю (не до конца доделано, но пользоваться уже можно).

Итак, что потребуется

  • imageshack-upload из одноименного пакета, Арчеры могут поставить пакет из AUR
  • xmessage или zenity для формирования диалога изменения разрешения картинки

Начнем…

Запускаем Geeqie, идем: Edit -> Preferences -> Configure editors. Откроется окно настройки редакторов, которые могут вызываться из Geeqie.

Нажимаем Create. Появится окно создания нового инструмента, где в основном окне ввода расположен шаблон, который можно подправить под себя. Начинаем с того, что в нижем окне ввода заменяем new.desktop на что-то вроде: ImageShackUpload.desktop. В качестве тела .desktop файла вставляем:

[Desktop Entry]
Version=1.0
Type=Application
Name=Image Shack Upload

# If you have zenity installed use:
#
#   cmd="zenity --list --text='$Q' --column='Selector' --column='Size' --radiolist TRUE No FALSE 1024x768 FALSE 800x600 FALSE 640x480 FALSE 400x300 || echo No" 
#
# if you have xmessage installed use:
#
#   cmd="xmessage -print -buttons 'No,1024x768,800x600,640x480,400x300' '$Q'" 
#
# If you use other dialog system, configure it, or use next command for disable resoultion selection:
#
#   cmd="echo No"
#
Exec=Q="Resize image before upload?"; cmd="zenity --list --text='$Q' --column='Selector' --column='Size' --radiolist TRUE No FALSE 1024x768 FALSE 800x600 FALSE 640x480 FALSE 400x300 || echo No"; size=`eval $cmd`; (for img in %F; do send_img=$img; if [ x"$size" != x"No" ]; then base=`basename $img`; noext=`echo $base | sed 's/.[A-Za-z0-9]*$*'`; ext=`echo $base | sed "s/^$noext*"`; send_img="/tmp/${noext}_$size$ext"; convert -scale $size $img $send_img > /dev/null 2>&1 || send_img=$img; fi; imageshack-upload $send_img 2>&1 | grep '^http:'; done)

# Desktop files that are usable only in Geeqie should be marked like this:
Categories=X-Geeqie;
OnlyShowIn=X-Geeqie;

# Show in menu "File"
X-Geeqie-Menu-Path=FileMenu/FileOpsSection

# This is a filter - $GEEQIE_DESTINATION is required
X-Geeqie-Filter=false

# It can be made verbose
X-Geeqie-Verbose=true

В зависимости от того, стоит у вас zenity/xmessages - вы должны заменить команду cmd="…" на нужно вам. Кроме того, настройки тут говорят - располагать пункт в меню File. Нажимаем Save, возвращаемся опять в окно настройки инструментов, где наблюдаем и наш новосозданный инструмент. Закрываем.

Теперь выбираем файлы за для закачки и идем File -> Image Shack Upload, появляется диалог, в котором нам предстоит выбрать разрешение, в которое пережмется картинка, или No, если изменение размера не нужно. После закрытия окна начнется процесс закачки (если кстати прервать нельзья, только с соседнего терминала чем-то вроде killall curl), ссылки на закачанные файлы будут выведены в окне, откуда их можно скопировать и вставить в нужное вам место.

Enjoy!

Feb 18, 2010 - 1 minute read - linux

Церковь vs Linux

На правах юмора, бояна и кросспостинга


навеяно #536746, почему христианская церковь, не одобряэ Linux (да, это относится так же и к Unix):

  1. там часто фигурирует число зверя – 666
  2. там говорится про вилы (а чем черти колют грешников) – fork()
  3. там часто фигурируют демоны
  4. там часто взучат призывы убить (kill) и убить всех (killall)
  5. очень часто упоминается про убийство родителей и детей
  6. там обитают зомби
  7. там ложь — это истина (общепринято: 1 – true, 0 – false, так в оболочке, нормальное завершение процесса, это код возврата – 0)
  8. из #536746: тут ведется пропаганда детской порнографии (cp)

что ещё?

Отдельно, то, что не подходит как обощение, частно для конкретного дистрибутива/семейства

  1. у FreeBSD вообще черт на логотипе
  2. Толстый пингвин на логотипе — пропаганда чревоугодия

тут тоже – что ещё?

Feb 18, 2010 - 3 minute read - programming

./configure для qmake-based проектов

./configure для qmake-based проектов

Что бы очень не заморачиваться с формированием ./configure скрипта (и configure.exe программы для windows) при помощи autotools, когда вся их мощь не очень нужна, поможет проект qconf

Для Арчеводов, можно собрать из AUR svn версию: http://aur.archlinux.org/packages.php?ID=18686

Далее, на правах вольного пересказа английского README.

Intro

Итак, собираем, устанавливаем. Далее идем в корень вашего проекта, где лежит qmake файл, cоздаем там, для примера, файл myproject.qc примерно следующего содержания (это xml файл):

<qconf>
  <name>myproject</name>
  <profile>myproject.pro</profile>
</qconf>

дале пускаем: qconf myproject.qc

На выходе получаем скрипт ./confugure с функционалом, в базовой части соответствующей autotools.

Если запустить без аргумента, будет выбран первый найденный .qc файл, если их найдено не будет - автоматически будет выбран первый .pro файл, и на основе его собран минимальный .qc файл (как в примере выше).

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

Итак, на этот момент мы имеем готовый ./configure скрипт, который запускаем без параметров или смотрим ./configure --help.

Как это работает

После запуска ./configure, будет сформирован файл conf.pri, в котором будут содержаться различные переменные, отвечающие за сборку, основные из которых:

  • PREFIX
  • BINDIR
  • LIBDIR
  • QTDIR

Этот файл вы можете включать в ваш .pro файл: include(conf.pri)

Т.е. обобщая, как это работает: qconf формирует, на основе .qc файла, скрипт ./configure, который, будучи запущенным, выполняет нужные вам проверки, создает conf.pri, запускает qmake для вашего .pro файла, который (как я выше написал) может включать conf.pri файл (соответственно, все что будет записано в conf.pri - будет доступно для qmake).

Возможные директивы для .qc файла

  • <name>NAME</name> - имя проекта
  • <profile>FILE.pro</profile> - .pro файл проекта
  • <dep>...</dep> - описываем зависимости, проверка на которые будет проводиться:```xml
    * `"type"` - определяет модуль (примеры модулей идут вместе с qconf, правда только два: qt31.qcm и qt41.qcm). Если type задана как **pkg**, проверка происходит при помощи pkg-config (выводы --libs и --cflags будут добавлены при компиляции):
     * опрашивается параметры:
       * `"name"`
       * `"pkgname"`
       * `"version"` в которой могут содержаться знаки отношения: ">=", "<=", иначе принимается "="
    * `<required />` - определяет обязательность зависимости
    * `<disabled />` - зависимость выключена
    
  • <arg>DESRIPTION</arg> - дополнительные агрументы для скрипта ./configure, сам аргумент будет доступен через переменную окружения QC_NAME (большими буквами, можно достучаться в модулях проверки через getenv), включают атрибуты:
    • "name" - имя
    • "arg" - значение
  • <lib /> - включает режима, когда собираемый проект - библиотека
    • <static /> - в случае, если <lib />, собирать статическую библиотеку
  • <noprefix /> - очищает PREFIX
  • <nobindir /> - очищает BINDIR
  • <prefix>PATH</prefix> - задаем PREFIX (по умолчанию: /usr/local)
  • <bindir>PATH</bindir> - задаем BINDIR (по умолчанию: PREFIX/bin)
  • <incdir>PATH</incdir> - задаем INCDIR (по умолчанию: PREFIX/include)
  • <libdir>PATH</libdir> - задаем LIBDIR (по умолчанию: PREFIX/lib)
  • <datadir>PATH</datadir> - задаем DATADIR (по умолчанию: PREFIX/share)
  • <qtdir>PATH</qtdir> - задаем QTDIR
  • <moddir>PATH</moddir> - добавляет пути поиска модулей для
  • <qt3 /> - конфигурация для qt3 окружения (но сама qconf зависит от qt>=4.1, используйте версию 1.1 для qt3)

Да, пример где используется - psi, там же, в директории qcm можно найти очень много приятных модулей проверки.

Ну и да, это всего лишь помощь к qmake, но не замена. Его тоже настраивать нужно. И читать руководства по нему.

PS пока очень сумбурно, потому как, сейчас сам только с ним столкнулся, потом будет дополняться, уточняться.

Feb 13, 2010 - 1 minute read -

Бортовой журнал переехал на главную

Т.к. основная ценность данного ресурса - это мои бредни, поэтому они заслуженно переезжают на главную страницу, тут же новости и прочая периодика.

Информация о ресурсе переехала на страницу “О ресурсе”, и приобрела чуть более линейный вид.

За сим - всё.

Feb 11, 2010 - 4 minute read - programming

Qt Creator и автоматическое создание реализации метода/прототипа

UPD: Информация больше не актуальна, теперь подобные средства кодогенерации встроены в Qt Creator.

Долгое время пользовался для написание программ, с использованием Qt4 интегрированную среду разработки QDevelop, и хотя она почти всем устраивает, за несколькими исключениями:

  • непонятно работает автодополнение
  • на 500 строках и больше начинает ощутимо поддтормаживать

Feb 5, 2010 - 1 minute read -

Medit из mercurial

Текущая версия замечательного редактора tags:medit?do=showtag&tag=medit|medit это 0.9.4 и она не обновлялась больше года. Решил собрать и попробовать сборку из mercurial, благо, смотря на даты последних изменений можно заметить, что работа ведется:

http://bitbucket.org/muntyan/moo/

Не все гладко - несколько переработан интерфейс, некоторые ошибки так и не исправлены (типа стоит галочка “переносить текст”, а он не переносится, а если убрать - будет переноситься).

Кроме того, сменили систему сборки на cmake, в результате не все доделали, и пришлось сделать два патча и один work-around для того, что бы пакет собрался вообще и с ctags, в частности. Кроме того, правила cmake пока не докрутили для python-plugin, в результате ни консоли питона, ни питоновских команд для пользовательских утилит. Хотя меня не это больше смущает - на питоне сделан терминал был, удобная, иногда, штука.

По питону, есть бага: http://sourceforge.net/tracker/?func=detail&aid=2929703&group_id=167563&atid=843451 будемс следить.

В общем, в результате изысканий, сделал правило для сборки и поместил в AUR: http://aur.archlinux.org/packages.php?ID=34336 там же необходимые патчи, хотя они тривиальны.

Да, рекомендую ознакомиться со справкой к программе, там вы найдете, в частности, как управлять поведением редактора на разных файлах (типа установить ширину отступа и кодировку, делается в манере, схожей с vim)

Feb 2, 2010 - 1 minute read - programming

C/C++ Coding Style

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

В общем вот: /C/C++ Coding Style

По ходу будет дополняться.