inline SVG + HTML4.01
Возможно ли, не нарушая HTML4.01 Transitional, поместить SVG внутрь HTML документа (не XHTML)?
Естетсвенно, чтобы он отображался :-)
Возможно ли, не нарушая HTML4.01 Transitional, поместить SVG внутрь HTML документа (не XHTML)?
Естетсвенно, чтобы он отображался :-)
subj, результат (картинка) будет выводиться в файл (предположительно PNG или SVG, т.к. это оптимально по размеру). Смотрю в сторону lib*svg, но или зависимостей море или функций рисования не нахожу совсем.
Нужно для www-отчетов, сейчас это рисуется HTML-ем так: http://free-sa.sourceforge.net/demo/1174492667-1174493402-7/g_192.168.0.15.html Проблема в том, что такого HTML хака уже не хватает, нужно что то потяжелее, для большего разнообразия в наглядности (PieChart и пр.). То, что для внедрения SVG в страницу пользователю потребуется установить SVG-плагин проблемой не считаю, хотя если будет поддержка вывода в PNG, то формат картинок пользователь сможет выбирать (PNG будет ведь тяжелее SVGZ).
libgd - морально устарел, есть нехорошие мысли о её безопасности, графика некрасивая (без сглаживания).
Возможен ли захват с HDD-видеокамеры, имеющей только USB в режиме времени, близком к реальному (для видеоконференции, в которой будут показываться неоцифрованные плакаты и рисунки). Например, интересна камера JVC GZ-MG505. Сейчас стоит вопрос о приобретении, можно и другую, эта понравилась 3CCD и ценой (почти отведенный на покупку потолок).
P.S. Я не встретил ни одной HDD-камеры с IEEE1394 на прошлых выходных в двух крупных магазинах Питера.
Система печати cups, OpenOffice 2.2.0 Professional от ИнфраРесурс, брал OOo_2.2.0_LinuxIntel_ru_infra.tar.gz, т.к. Slackware (установил распаковкой архива в /opt/openoffice). Проблема в том, что драйвер принтера (точнее его PPD) позволяет задавать некоторые настройки, например переключать черно-белый/цветной режим.
Произведенные изменения стандартных настроек:
В CUPS, через web-интерфейс в настройках принтера через конпку "Set Printer Options" установил режим по-умолчанию: черно-белый.
Тесты:
1. В CUPS, через web-интерфейс напечатал тестовую страницу: черно-белая, ОК.
2. Запустил Konqueror, открыл www.yandex.ru, выбрал печать, в свойствах принтера (диалоге KDE) поставил цветной режим, напечатал страницу: цветная, ОК.
3. Тут же в Konqueror, распечатал www.yandex.ru, перед печатью в свойствах принтера (диалоге KDE) поставил черно-белый режим, напечатал страницу: черно-белая, ОК.
4. Запустил /opt/openoffice/program/spadmin, в свойствах принтера указал цветной режим, запустил swriter, набрал цветной текст, отправил на печать страницу: цветная, ОК.
5. Теперь уже в запущенном swriter пытаюсь поменять цветной режим на черно-белый (хоть через Файл->Печать, хоть через Файл->Настройки принтера), не меняется, при повторном заходе в эти меню, опять вижу цветной, если перед печатью в диалоге печать выставить черно-белый режим и отправить на печать страницу с цветным текстом получу ее в цвете, вот тут ОШИБКА :-(
Возможно OpenOffice не совсем корректно установлен или не там где надо меняет настройки? У меня при такой установке в домшней директориии создаласт субдиректория ".openoffice.org2". Пробовал под root-ом, тоже самое.
<script language="JavaScript" type="text/javascript">
setTimeout('top.location.href = "my.cgi"', 5000);
</script>
Собственно хочется кнопочки/ссылки/комбинации клавиш, которая прервет/приостановит обновления страницы.
В JavaScript совсем не силен. Escape в браузере не работает, т.е. кнопка Stop активируется на доли секунды, когда собственно обновление и происходит (т.е. если зажать ее и держать 5 секунд, то обновление прекратится).
Собственно, subj. Функции View* возвращают указатель на static char *, по сути все три делают double2string преобразование, просто по-разному (некоторые округляют, некоторые добавляют k/M в конце числа). Опции сборки: -O4 -march=i486 -fomit-frame-pointer -std=c99 -lm
char *(* MYview)(double ivalue);
int main(void) {
int i, x = 3;
if (x == 1) MYView = View1;
else if (x == 2) MYView = View2;
else if (x == 3) MYView = View3;
for (i = 0; i < 1000000; i++) fprintf(stdout, "%s\n", MyView(47653423.0));
return 0;
}
Код выше тормознее, чем приведенный ниже на 20% (согласно поля real команды time: 3.300 для кода выше > 2.700 для кода ниже):
int main(void) {
int i, x = 3;
for (i = 0; i < 1000000; i++) {
if (x == 1) fprintf(stdout, "%s\n", View1(47653423.0));
else if (x == 2) fprintf(stdout, "%s\n", View2(47653423.0));
else if (x == 3) fprintf(stdout, "%s\n", View3(47653423.0));
return 0;
}
И если это нормально, тогда может кто то пояснит в каких случаях указатели на функции эффективны?
Подсмотрел тут http://www.linux.org.ru/view-message.jsp?msgid=1897145 интересное решение по преобразованию макросов и числового в строковый формат, теперь вот мучаюсь :-)
Макросы в программе сейчас используются для определения размеров массивов, соответственно в fscanf выражения нужно вставлять строковое значение числового макроса за вычетом единицы (согласно man на fscanf ширина поля задется без завершающего '\0').
Нерабочий код (на примере того по ссылке):
#define MAXBETASIZE 1024
#define _s(a) #a
#define _string(a) _s(a)
...
char beta[MAXBETASIZE];
sscanf(bigstring, "%" _string(MAXBETASIZE-1) "s", &beta);
Единицу в последнем случае он не вычитает и ругается при сборке, можно ли препроцессор заставить вычитать её?
Сразу скажу, что пишу кроссплатформенную программу, и не у нее, а у систем, в которых она используется есть проблема: перед запуском невозможно выставить для нее переменные среды.
Теперь про локализацию: я так понимаю, что необходимо использовать функции catopen, catclose и catgets (gettext не стандарт для всех систем, кроме Solaris и Linux). Есть несколько вопросов по применению POSIX-функций (я конечно могу опытным путем проверить их в Linux и HP-UX, но это не полный перечень платформ, которые хотелось бы поддерживать, вразумительной документации не нашел):
1. POSIX не определяет, где хранить каталоги (cat-файлы), т.е. catopen конечно читает NLSPATH, но, например, в Slackware Linux ни переменной NLSPATH, ни одного .cat файла я не обнаружил. Вопрос: куда программа по make install должна их забросить и что должна передавать в качестве первого параметра catopen?
2. Правильно ли будет (оч. хочется) сделать массив указателей типа char * и при старте программы заполнить его указателями через catgets? Ведь catgets с номером сообщения мало информативен для кода, да и обременяет программу каждый раз по catgets делать поиск (пусть даже по индексу) в каталоге.
3. К п.2 выше, живут ли значения catgets после очередного вызова catgets? Согласно man из HP-UX и Linux - живут.
4. Согласно man на catgets, сказано, что если catopen не нашел каталога (вернул -1), то будут использоваться значения по-умолчанию для C/POSIX. Правильно ли я понимаю, что через NLSPATH всегда должна быть доступна директория en (или какая? en_US? en_GB???) с локализацией на английском?
P.S. Гуглил, яндексил, читал стандарт, всё весьма противоречиво, кстати, очень ругают *BSD системы :-\
GCC генерирует предупреждение, описанное в subj для строки с execv. Хочется правильно его избежать (т.е. не отключая предупреждения). Если argsarray переопределить как char *, и убрать преобразование типа в execv, тогда ругается на строку с циклом for, т.к. program является const char *. Есть какой-нибудь красивый способ избежать предупреждений в таком коде:
void MYsystem(const char *program, ...) {
pid_t childpid;
int tmp = 0;
va_list args;
const char *argsarray[MAXARGS];
childpid = fork();
if (childpid == 0) {
va_start(args, program);
for (argsarray[0] = program; (argsarray[tmp] = va_arg(args, char *)) != NULL; tmp++);
execv(program, (char * const *)argsarray);
Интересует программа написанная давно, хочется посмотреть код и Makefile без BSD/GNU расширений. А то в одном из Unix руководств по Makefile было сказано, что такое условие: ifneq ($(srcMakefile),yes) вполне себе standard, а make в FreeBSD 4.x ругается на эту строку. К тому же раньше Makefile-ы были короче, а то сейчас после autotools можно с ума сойти разбираясь в зависимостях ;-)
Да и по shell такая же проблема, есть руководства, но они или короткие, или не уточняют соответствует конструкция Bourne SHell или она только для Bourne Again SHell :-\ Просто беда какая то, даже по C вызовам man в Linux не всегда все несовместимости пишет.
Free-SA - это программа для замены устаревшего SARG, её отличают:
- более внятная архитектура и код (C/HTML/CSS);
- скорость формирования отчетов от 7 до 20 раз выше по сравнению с SARG (7х - для 50Мб файла access.log, 20x - для 1Гб);
- все отчеты успешно проходят проверку W3C validator;
- потенциальная поддержка различных форматов файлов журналов (сейчас только Squid, CLF, Postfix, Qmail, CGP);
- дополнительные отчеты (в т.ч. для оценки эффективности сервера);
- изменяемые "на-лету" темы оформления (сейчас всего 3).
Цели Free-SA:
- контроль расхода трафика по пользователям;
- контроль выполнения политик безопасности (в части доступа к ресурсам сети Internet) и информационная поддержка при служебных расследованиях некоторых инцидентов;
- оценка эффективности работы серверов.
Подскажите как можно декодировать в javascript строку вида: %EA%E0%F2%E5%E3%EE%F0%E8%FF?
unescape не подходит, он только latin-1 на выходе дает, это подтверждает и скрипт:
var enced="http://www.yandex.ru/yandsearch?stype=&nl=0&text=fluke+%EA%E0%F2%E5%E...;
var unenced=unescape(enced);
document.write(unenced);
Собственно subj. record обрывается где то на 40 минутах, хотя файл по длине соответствует 2 часам и xmms показывает 2 часа, а winamp - 40 минут. record оставлялся на 8 часов, это время и нужно писать.
К сожалению, что написал record после записи я не видел, но возможно кто то сталкивался и подскажет.
P.S. Пользователь действовал строго по инструкции и выключил компьютер ровно через 8 часов, а не раньше. Перебоев с питанием не было.
Как обрезать картинку AVI файла без его перекодирования?
В форуме было уже такое сообщение, но к сожалению ни в mencoder, ни в avidemux2, ни в virtualdub этого сделать не удалось (не нашел ничего, все попытки что то такое сделать были неудачными).
Ведь это возможно, особенно если учесть, что обрезать мне нужно много файлов и одинаково (сверху 64, снизу 48). Мне хоть как то обрезать, можно и 32 кратно.
Для проекта, который будет открыт как OpenSource поделитесь пожалуйста образцами журналов следующих демонов/сервисов:
- wu-ftpd
- Postfix (оч. нужен)
- Sendmail
- MS ISA (оч. нужен)
- MS IIS
1. Конфиденциальную информацию в образцах можете заменить любой другой (только чтобы структура не нарушалась).
2. Желательно, чтобы образец включал в себя как минимум 2 записи: одна с кодом ошибки (для www-серверов это 4xx), вторая - обычная.
3. Если журналы в нескольких форматах и они у вас есть, то нужны все.
4. Если у вас есть образец журнала другого популярного сетевого демона/сервиса, то он тоже пригодится.
Что уже есть:
- Common Log Format (CLF), используется apache;
- Combined Log Format, используется apache и thttpd;
- Squid 2.5.x native log format;
- vsftpd;
- qmail.
При желании/необходимости, можно образцы засылать на xsov@netscape.net
Теперь по части опроса:
1. Что вас не устраивает в SARG/LightSquid и их аналогах?
2. Как вы видете группы в этих программах?
3. Какие отчеты будут интересны с точки зрения безопасности?
4. Что бы вы хотели изменить в таких программах (тут пишите всё что угодно)?
P.S. Загонять журналы в СУБД не получится - теряется оперативность :-(
P.P.S. Текущая версия продукта обладает почти всеми возможностями SARG и некоторыми дополнительными, работает минимум в 7 раз быстрее SARG (достигнутый сейчас максимум - 20). Пока не доработаем выкладывать не будем.
Почти за 1 год Asterisk IP-PBX дорос до очередной стабильной версии 1.4. Основные изменения (всего около 30 серьезных изменений):
Я про эти коды:
100 Continue
101 Switching Protocols
102 Processing
200 OK
201 Created
202 Accepted
203 Non-Authoritative Information
204 No Content
205 Reset Content
206 Partial Content
207 Multi Status
300 Multiple Choices
301 Moved Permanently
302 Moved Temporarily
...
Есть некая программа на C, которая ведет учет по кодам, сейчас она это делает так:
double ec[602]; /* у squid с 000 до 601 находится 47 кодов */
ec[code] += bytes;
ec конечно не весь тут используется (много неисользуемых элементов), можно сделать таблицу трансляции, типа:
short int ttable[602][2] = { 100, 0 } ...
через которую можно транслировать, что байты с кодом 100 запишутся в ec с номером элемента 0. Но такой массив ttable будет сложен в инициализации (много пустых мест), можно и функцию сделать, которая будет транслировать через такую таблицу.
Я уже подумываю на какой-нибудь математикой для свертки этих 47 кодов в обычный char...
Подскажите, как лучше организовать? Исходники Squid и Apache смотрел, им проще (они сами определяют когда какой код писать, а мне считывать).
Ввиду того, что я так и не получил вразумительного ответа тут: http://www.linux.org.ru/view-message.jsp?msgid=1561742 решил провести самостоятельное тестирование. Если есть возможность - протестируйте на своей платформе.
Сначала о платформе, на которой эти тесты проводились:
- CPU: AMD Athlon Thunderbird 850@977 (1956 bogomips);
- RAM: 256Mb PC133@115;
- HDD: 80Gb 7200rpm 8Mb WDC WD800BB-00JHA0 (fw: 05.01C05).
- OS: Slackware Linux 10.2+current;
- KERNEL: 2.6.17 (с www.kernel.org).
Список процессов (не ядерных) перед тестированием:
1215 ? Ss 0:00 /usr/sbin/syslogd
1218 ? Ss 0:00 /usr/sbin/klogd -c 3 -x
1300 ? Ss 0:00 /usr/sbin/gpm -m /dev/mouse -t imps2
1397 tty1 Ss 0:00 -bash
21639 tty1 S+ 0:00 \_ /usr/bin/mc -P /tmp/mc-root/mc.pwd.1397
21640 ? Ss 0:00 \_ cons.saver /dev/vc/1
21641 pts/0 Ss 0:00 \_ bash -rcfile .bashrc
22279 pts/0 R+ 0:00 \_ ps axf
1399 tty3 Ss+ 0:00 /sbin/agetty 38400 tty3 linux
21569 tty2 Ss 0:00 -bash
21589 tty2 S+ 0:00 \_ mcedit /tresult.txt
21590 ? Ss 0:00 \_ cons.saver /dev/vc/2
#include <limits.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main() {
FILE *test;
time_t t1, t2;
char tbuf[8192] = "\000";
int i = 0;
double d1 = 32768.0;
double d2 = 111111111111.0;
double d3 = 22222222222222222222222.0;
char *s1 = "s1";
char *s2 = "s2mid";
char *s3 = "s3 very-very long";
short int si1 = 1;
short int si2 = 256;
short int si3 = 32765;
int i1 = 1;
int i2 = 65536;
int i3 = 1122334455;
char c1 = '1';
char c2 = '[';
char c3 = '\n';
test = fopen("/testfile", "w");
t1 = time(NULL);
while (i++ < 8000001) {
/* 1: sprintf+fputs
sprintf(tbuf, "%c %hd %d <t1> %'.0f %c <text2> %s %d %s <middle text3> %hd %c %'.0f %d %s %'.0f %hd",
c1, si1, i1, d1, c2, s1, i2, s2, si2, c3, d2, i3, s3, d3, si3);
fputs(tbuf, test);*/
/* 2: sprintf+fwrite
sprintf(tbuf, "%c %hd %d <t1> %'.0f %c <text2> %s %d %s <middle text3> %hd %c %'.0f %d %s %'.0f %hd",
c1, si1, i1, d1, c2, s1, i2, s2, si2, c3, d2, i3, s3, d3, si3);
fwrite(tbuf, strlen(tbuf), 1, test);*/
/* 3: fprintf
fprintf(test, "%c %hd %d <t1> %'.0f %c <text2> %s %d %s <middle text3> %hd %c %'.0f %d %s %'.0f %hd",
c1, si1, i1, d1, c2, s1, i2, s2, si2, c3, d2, i3, s3, d3, si3);*/
/* 4: 15x fprintf
fprintf(test, "%c ", c1);
fprintf(test, "%hd ", si1);
fprintf(test, "%d ", i1);
fprintf(test, "<t1> %'.0f ", d1);
fprintf(test, "%c ", c2);
fprintf(test, "<text2> %s ", s1);
fprintf(test, "%d ", i2);
fprintf(test, "%s ", s2);
fprintf(test, "<middle text3> %hd ", si2);
fprintf(test, "%c ", c3);
fprintf(test, "%'.0f ", d2);
fprintf(test, "%d ", i3);
fprintf(test, "%s ", s3);
fprintf(test, "%'.0f ", d3);
fprintf(test, "%hd", si3);*/
/* 5: 15x sprintf+1x fwrite */
sprintf(tbuf, "%c ", c1);
sprintf(&tbuf[strlen(tbuf)], "%hd ", si1);
sprintf(&tbuf[strlen(tbuf)], "%d ", i1);
sprintf(&tbuf[strlen(tbuf)], "<t1> %'.0f ", d1);
sprintf(&tbuf[strlen(tbuf)], "%c ", c2);
sprintf(&tbuf[strlen(tbuf)], "<text2> %s ", s1);
sprintf(&tbuf[strlen(tbuf)], "%d ", i2);
sprintf(&tbuf[strlen(tbuf)], "%s ", s2);
sprintf(&tbuf[strlen(tbuf)], "<middle text3> %hd ", si2);
sprintf(&tbuf[strlen(tbuf)], "%c ", c3);
sprintf(&tbuf[strlen(tbuf)], "%'.0f ", d2);
sprintf(&tbuf[strlen(tbuf)], "%d ", i3);
sprintf(&tbuf[strlen(tbuf)], "%s ", s3);
sprintf(&tbuf[strlen(tbuf)], "%'.0f ", d3);
sprintf(&tbuf[strlen(tbuf)], "%hd", si3);
fwrite(tbuf, strlen(tbuf), 1, test);
}
t2 = time(NULL);
fprintf(stderr, "TIME ELAPSED: %d\n", (int)(t2 - t1));
fclose(test);
return 0;
}
В следующих сообщениях отпишу по каждому алгоритму полученные результаты, m16/a256 - это параметры hdparm.
По моим тестам fprintf медленнее fputs+sprintf, то есть быстрее вывести в память всё sprintf-ами и вывести затем в файл одним fputs. Однако на практике в моем приложении это не всегда подтверждается (есть места где fprintf оказывается быстрее sprintf+fputs).
1. От чего зависит скорость работы fprintf (при стандартных размерах буферов, т.е. без игр с setvbuf), и разная ли будет относительная скорость работы fprintf/sprintf+fputs для разных платформ? Или я совсем не прав, потому что тесты выводили информацию на stderr, который я сливал в /dev/null (вроде stderr запрещено буферизовать).
2. Стоит ли fputs заменить на fwrite в случае если sprintf+fputs все-таки лучше?
По коду: рассматриваю использовать ли Nx sprintf+N/50x fputs или Nx fprintf, размер порции частовыводимой информации в файл от 5 до 32 байт (N/50 - это неподтвержденная моя прикидка).
P.S. Поделитесь опытом. Да, программа обрабатывает входящий поток миллионов записей... (wc -l для типового файла выдал 6'896'149).
Как то нехорошо получается:
- ядра в дистрибутивах отличаются;
- glibc в дистрибутивах отличаются;
- версии наборов стандартных библиотек и сами библиотеки тоже отличаются;
- теперь и init-скрипты отличаются...
Все это создает тотальную несовместимость линуксов с линуксами, смотреть противно (ага-ага: "а ты не смотри", мне потом с некоторыми такими обособленными работать).
В 1995 было все куда проще... Slackware и RedHat, притом совместимые на всех уровнях.
P.S. См. http://www.linux.org.ru/view-message.jsp?msgid=1550475
← предыдущие | следующие → |