Хрень
Можно сказать научно-популярный фильм, да.
Можно сказать научно-популярный фильм, да.
это меня проняло:
Еще один процесс, который может породить множество зомби, это демон… Иногда я должен напоминать себе, что пишу статью по программированию, а не сценарий фильма ужасов.
Отсюда: http://ibash.org.ru/quote.php?id=12598 по наводке l1feh4ck3r’а
Задачка: http://bishop-it.ru/2010/03/codeinrussian
Ну там в комментах я написал, в 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
А в нем и первая часть моей статьи по основам схемотехники в Linux: “Схемотехника в Linux с помощью gEDA. Часть 1: gschem”
Скачать выпуск: http://osa.samag.ru/get/OpenSource057.zip
Есть такой пакет CEDET, в прошлом посте дал ссылочку на статью Алекса Отта по его настройке.
Захотелось получить красивое меню автодополнения после ввода .
или ->
в C/C++ программах. Изучая его же
конфиги (начинающим, и не только - рекомендую, есть интересности, в частности - автовставка шаблона при создании нового файла) наткнулся на интересную минорную моду:
company-mode, которая то, что мне нужно и делает. Причем, по ходу ввода - выбор в меню изменяется.
Подкатом картинка, которая демонстрирует как это работает у меня.
Пасхалки :)
Столкнулся с проблемой: в некоторых модах, которые добавляют пункты меню в Emacs, эти самые пукнты меню оказываются пустыми, причем, при последующем перезапуске, бывают оказываются и не пустыми.
Сначала поставлена задача: удалить рекомендации в своем блоге на Juick.com, вручную неохота было, решил написать скрипт, в результате получился некоторый аналог DELETEALL, только без удаления подписок, комментов.
Код:
#!/bin/bash
### Удаляет ваши сообщения или рекомендации с Juick.com
# section может быть: blog, recomm
section="blog"
# имя блога, по сути - ваш ник
blog="vasya"
# Jabber account, в котором у вас зарегестрирован juick@juick.com
jname="vasya.pupkin"
jpass="superpassword"
jserv="jabber.ru"
## BEGIN ##
u="http://juick.com/$blog/?show=$section"
tmp_file=tmp_$section.txt
while true
do
# посты со страницы будут удалены, соответственно их место
# займут более старые
lynx -dump "$u" > $tmp_file
# Вычленяем ссылку на следующу страницу
tmp=`cat $tmp_file | grep 'Older ->' | grep '|'`
if [ -z "$tmp" ]; then
next_num=`cat $tmp_file | grep 'Older ->' | awk -F']' '{print $1}' | sed 's| <br/>[||'`
else
next_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/>
| while read line
do
post_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 10
done
# А вот когда указателя на следующую страницу не будет, тогда выходим
if [ -z "$next_num" ]; then
break;
fi
done
Для чего не спрашивайте, просто стало интересно написать :) Для работы нужно:
Счастливые арчеводы могут первые два пункта поставить из репозиториев, а sendxmpp собрать из AUR: http://aur.archlinux.org/packages.php?ID=17929
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), находим чуть выше ее строку:
delete($self->{SIDS}->{$currsid});
и заменяем на:
delete($self->{SIDS}->{$currsid}) unless $currsid eq $sid;
Примерный патч выглядит так:
--- /usr/share/perl5/XML/Stream.pm.orig 2007-07-10 21:16:47.000000000 +0400
@@ -1160,7 +1160,7 @@
$self->{SOCKETS}->{*STDIN} = $sid;
}
1. delete($self->{SIDS}->{$currsid});
+ delete($self->{SIDS}->{$currsid}) unless $currsid eq $sid;
if (exists($self->GetRoot($sid)->{version}) &&
($self->GetRoot($sid)->{version} ne ""))
Файл принадлежит пакету libxml-stream-perl версии 1.22 в ArchLinux это пакет perl-xml-stream версии 1.23, там данные исправления уже присутствуют, так что если есть возможность - обновляемся, или ставим Arch, правда не задаем глупых вопросов, а то новоявленные арчеводы ex-убунтоиды ими уже на форуме поддостали :)
Пользительная книжка, не лишне держать под рукой:
http://www.lemis.com/grog/Documentation/PUS/
Книжка представлена в виде единого PDF и отдельных PDF для каждой части.
И прицепом: Object-Oriented Programming With ANSI-C
Если у кого есть ссылка на переводы - киньте в комменты.
Держим голову в холоде, ноги в тепле:
http://www.openspace.ru/society/projects/201/details/16563/
Подогнали тут машинку, мамка 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…
Разбираюсь.
Сам проект - git-хостинг. Там же хостятся проекты Qt ( http://blog.gitorious.org/2009/05/11/welcome-qt/, http://qt.gitorious.org/), Qt Creator ( http://qt.gitorious.org/qt-creator).
Агрегация собственного опыта, идей, мыслей.
Итак, по шагам.
Естественно, разработка это ниразу не линейный процесс, по ходу дела могут меняться требования, мысли. Главное не забывайте отражать эти изменения в документации. Что перечислено выше, отнимает достаточно много времени, но потом писать становится значительно проще, количество костылей сводится к минимуму. Да и лишний раз заставит подумать - а нужно ли оно?
Из дополнительных пунктов:
Ссылки в тему: