Или: можно ли использовать Qt Creator не для Qt? Если коротко - можно.
Почему он? Потому что оказалось, что он достаточно функционален в мелочах, в частности индексирования кода и автодополнения. Крайне удобен в применении его Locator (что вызывается по стандартному сочетанию клавиш Ctrl+K), применение Локатора вообще сводит использование мыши в Qt Creator к минимуму (что удивительно для среды ориентированной на тулкит Qt4 и создание, в основном, графических приложений). Да, правда обвыкнутся по началу нужно, но потом… Если плагин (
http://gitorious.org/creator-plugins), который добавляет функционал по автоматическому созданию реализации функции/метода по его прототипу, так же Я, до того, как узнал про этот плагин, делал
свой патч, со схожим функционалом. В общем, все что нужно для удобной работы с проектом (навигация, дополнения, подсветка синтаксиса, отстройка, отладка и т.п.) здесь есть.
Осталось понять, как это добро использовать. Вопросов нет, когда речь идет о родных средствах, типа .pro файла и qmake, а вот при использовании с не qmake/cmake проектами, можно воспользоваться Generic Project, который используют вашу систему сборки, не вмешиваясь в неё. Подробности всегда можно посмотреть на официальном сайте:
http://doc.qt.nokia.com/qtcreator-snapshot/creator-project-generic.html
Собственно по ссылке выше и рассказано все, что нужно знать. Тезисно:
используется ваша система сборки, порядок шагов по сборке можно задать в свойствах проекта, по умолчанию, это выполнение команды make all, соответственно там можно задать любую нужную последовательность, которая соответствует вашей системе сборки.
аналогично задаются шаги по очистке проекта.
аналогично задается цель для запуска.
аналогично задаются зависимости между проектами (они должны быть открыты).
при создании указывается директорий вашего проекта, по умолчанию просканируется дерево и добавятся все *.c, *.cpp, *.cc, *.h, *.hpp файлы (как сказано - все известные типы).
после создания проекта и сохранения настроек на диске будет создано несколько файлов:
* project_name.files - тут список файлов входящих в проект, обычно исходники, в помощь парсеру, можно править вручную, обновляются автоматически, при добавлении файла в проект из самого Creator’а
* project_name.includes - тут список include директорий, в помощь парсеру, можно править вручную
* project_name.config - заявляется как обычный C файл, в котором можно записывать ваши макроопределения:#define VERSION "0.0.1" и т.п.
* project_name.creator - собственно сам файл проекта, его открывать в Creator’е для загрузки проекта, сейчас никаких настроек больше не содержит.
* в процессе работы появится файл project_name.creator.user в котором будут сохранены ваши параметры сборки, очистки проекта, информация о запускаемых модулях.
Теперь как это можно использовать? Покажу на примере своего небольшого Makefile:
Что тут делается, во первых - автоматически получается список файлов проекта из project_name.files, далее, компилятором автоматически подключается project_name.config, и все объявленные там макросы будут доступны внутри кода.
Естественно тут нет и намека на множественные цели, но проект можно разбивать на подпроекты, их зависимости друг от друга задавать в Creator’е, а самих объединять в рабочие области (workspace). В общем и целом - ограничено все только вашей фантазией, и, по сути, данные действия превращают Qt Creator в продвинутый редактор кода, с базовыми функциями управления проектами, чего часто бывает достаточно.
Да, индексация проекта происходит при его загрузке, что требует времени, поэтому есть лишний повод бить большие проекты на части :)
Из описания: библиотека включает визуальные виджеты, вспомогательные не визуальные классы, полезные в первую очередь для программ технической направленности. Так виджет для 2D построений предоставляет возможности масштабирования, ползунки, круговые органы управления, компасы, термометры, колеса прокрутки, кнопки для контроля или отображения значений переменных, массивов и т.д. Посмотреть все это добро можно на снимках:
http://qwt.sourceforge.net/controlscreenshots.html
Библиотека распространяется на условиях модифицированной версии GPL, и достаточно либеральными исключениями, в частности разрешается статическая линковка, без раскрытия исходников, обязательному открытию подлежат только изменения в самой библиотеке. Подробности:
http://qwt.sourceforge.net/qwtlicense.html
На странице проекта можно найти ссылки на производные работы, например:
QwtPolar, виджет для построения в полярной системе координат
QwtPlot3D, виджет для 3D построений и использованием OpenGL.
QtiPlot, готовое приложение, использующее виджет QwtPlot, для анализа и построения данных.
Существуют биндинги к питону и ruby.
Для пользователей ArchLinux в extra есть пакеты:
extra/qwt
extra/qwtplot3d
Т.е. сама библиотека и её 3D вариант.
У всех на слуху очередное нововведение нашего замечательного правительства, о сокращении количества часовых поясов. Что не за очередное блеяние с экрана в исполнении ВВП или МДА, то бред полнейший. А все как мыши: плачут, колются, но продолжают жрать кактус.
Вот несколько ссылок по сабжу (да новостные ленты, я им тоже не верю, но из кучи гумуса можно вытащить по крайней мере червей на рыбалку или золотую монетку):
Россия переводит время зря и цитата отсюда, мне она о многом говорит, особенно если вспомнить, люди из какой партии у власти стоят:
Есть у реформы и сторонники. Они поголовно находятся в административном корпусе регионов. Приблизившись к Москве на час, можно будет оперативнее и полнее взаимодействовать со столичными властями, хором заявляют чиновники в разных концах России.
или:
Недовольны и жители Камчатского края, что отныне и без того короткий световой день (особенно зимой) стал еще меньше. Правда, теперь жители Чукотки и Камчатки в новогоднюю ночь будут смотреть обращение президента не в час ночи, а в полночь.
о да! как же, не услышат ровно в 12 часов очередную порцию бреда с экрана телевизора..
12 марта дума Чукотского автономного округа поддержала идею о переходе региона в восьмой часовой пояс из девятого. Соответствующее обращение было направлено премьер-министру России Владимиру Путину. Сейчас временная разница между Москвой и Чукоткой — девять часов.
и сразу же:
Стоит отметить, что работники чукотского филиала Северо-восточного НИИ идею о переходе из одного часового пояса в другой не поддержали. “Смена временного пояса скажется на здоровье и производительности труда жителей”, — считают они.
Да нахрена эти ученые нужны, зачем нужна эта какая-то РАН (особенно с последними порывами лихо реформировать академию)!
PS у меня ощущение, что вместо людей в думах у нас зомби и/или манекены, а решения принимает электронный (или даже механический) бредогенератор.
Решил тут собрать небольшое окружение на основе IceWM, вернуться, так сказать к истокам (работал он у меня в бытность ещё P100/24RAM). Но т.к. теперь ему предстояло работать на ноутбуке, в режиме питания от батареи было бы хорошо иметь возможность наблюдать статус разряда.
Еще один процесс, который может породить множество зомби, это демон… Иногда я должен напоминать себе, что пишу статью по программированию, а не сценарий фильма ужасов.
Ну там в комментах я написал, в gcc такое не проканывает (пока точно известно, что проканывает в MSVC, а как дела обстоят с компиляторами Intel/Sun/Borland мне не известно). Но… в транслите так же сделал вариант:
http://codepad.org/zEs0pjLl или тут:
/*
* Собирать:
* gcc -include stih.h -o stih stih.c
* Посмотреть вывод препроцессора:
* gcc -E -include stih.h -o stih stih.c
*/
/*
* stih.h
*/
#include <stdio.h>
#define NACHALO int main() {<br/>
char *out = NULL; <br/>
char *txt = NULL; <br/>
FILE *fp = NULL;
#define KONETS return 0;}
#define PROGRAMMY
#define Vyvedi
#define tekst
#define na
#define v
#define ekran out = NULL
#define fajl out =
#define nachalo ; if (out == NULL) <br/>
fp = stdout;<br/>
else <br/>
fp = fopen(out, "w"); txt =
#define konets ; if (fp != NULL)<br/>
{<br/>
if (txt != NULL) fprintf(fp, "%s", txt);<br/>
if (fp != stdout) fclose(fp); <br/>
}
#define teksta
/*
* stih.c
* Тут перевел в транслит, т.к. gcc (только ли он?) не поддерживает #define РУССКИЙ
* в общем, сути не меняет
*/
NACHALO PROGRAMMY
Vyvedi tekst na ekran
nachalo teksta
"YA pomnyu chudnoe mgnoven'e: <br/>n<br/>
Peredo mnoj yavilas' ty, <br/>n<br/>
Kak mimoletnoe viden'e, <br/>n<br/>
Kak genij chistoj krasoty."
konets teksta
Vyvedi tekst v fajl "Stikh.txt"
nachalo teksta
"V tomlen'yakh grusti beznadezhnoj<br/>n<br/>
V trevogakh shumnoj suety,<br/>n<br/>
Zvuchal mne dolgo golos nezhnyj<br/>n<br/>
I snilis' milye cherty."
konets teksta
KONETS PROGRAMMY
Захотелось получить красивое меню автодополнения после ввода . или -> в C/C++ программах. Изучая его же
конфиги (начинающим, и не только - рекомендую, есть интересности, в частности - автовставка шаблона при создании нового файла) наткнулся на интересную минорную моду:
company-mode, которая то, что мне нужно и делает. Причем, по ходу ввода - выбор в меню изменяется.
Подкатом картинка, которая демонстрирует как это работает у меня.
Столкнулся с проблемой: в некоторых модах, которые добавляют пункты меню в Emacs, эти самые пукнты меню оказываются пустыми, причем, при последующем перезапуске, бывают оказываются и не пустыми.
Сначала поставлена задача: удалить рекомендации в своем блоге на Juick.com, вручную неохота было, решил написать скрипт, в результате получился некоторый аналог DELETEALL, только без удаления подписок, комментов.
Код:
#!/bin/bash
### Удаляет ваши сообщения или рекомендации с Juick.com# section может быть: blog, recommsection="blog"# имя блога, по сути - ваш никblog="vasya"# Jabber account, в котором у вас зарегестрирован juick@juick.comjname="vasya.pupkin"jpass="superpassword"jserv="jabber.ru"## BEGIN ##u="http://juick.com/$blog/?show=$section"tmp_file=tmp_$section.txt
whiletruedo# посты со страницы будут удалены, соответственно их место# займут более старые lynx -dump "$u" > $tmp_file# Вычленяем ссылку на следующу страницуtmp=`cat $tmp_file| grep 'Older ->'| grep '|'`if[ -z "$tmp"];thennext_num=`cat $tmp_file| grep 'Older ->'| awk -F']''{print $1}'| sed 's| <br/>[||'`elsenext_num=`cat $tmp_file| grep 'Older ->'| awk -F'|''{print $2}'| awk -F']''{print $1}'| sed 's| <br/>[||'`fi# да, этаким мы сделаем trim, сделайте при помощи sed, будет элегантней (и просто)next_num=`echo$next_num| awk '{print $1}'`next_link=`cat $tmp_file| grep "$next_num. http://"| grep "show=$section"| grep 'page='| awk '{print $2}'` cat $tmp_file <br/>
| grep '<br/>[[0-9]*<br/>]#[0-9]*,' <br/>
| grep 'now<br/>|ago' <br/>
| awk '{print $1}' <br/>
| sed 's|^<br/>[[0-9]*<br/>]||;s|,$||' <br/>
|whileread line
dopost_num=`echo$line| sed 's|^#||'`action="D"[ x"$section"= x"recomm"]&&action='!'echo"Delete/unrecomend post: $line (http://juick.com/$post_num)"echo"$action$line"| sendxmpp -u $jname -p "$jpass" -j $jserv -s 'bye' juick@juick.com
sleep 10done# А вот когда указателя на следующую страницу не будет, тогда выходимif[ -z "$next_num"];then break;fidone
Для чего не спрашивайте, просто стало интересно написать :) Для работы нужно:
UPD: спасибо камраду sandr1x
, в Ubuntu/Debian работа программы sendxmpp (там кстати её версия указана как 1.18, хотя актуальная - 0.0.8) завершается с ошибкой:
Can't use an undefined value as a HASH reference at /usr/share/perl5/XML/Stream.pm line 1165.
С подобным поведением сталкивались на работе когда настраивали sendxmpp для отправки уведомлений. Решение такое: открываем файл /usr/share/perl5/XML/Stream.pm переходим на строку указанную в ошибке (1165), находим чуть выше ее строку:
Файл принадлежит пакету libxml-stream-perl версии 1.22 в ArchLinux это пакет perl-xml-stream версии 1.23, там данные исправления уже присутствуют, так что если есть возможность - обновляемся, или ставим Arch, правда не задаем глупых вопросов, а то новоявленные арчеводы ex-убунтоиды ими уже на форуме поддостали :)