воскресенье, 19 апреля 2009 г.

Ускоряем octave

Некоторые интерпретаторы держат в памяти таблицу имён всех функций, классов, переменных и т.д. для всех установленных модулей (плагинов). Это приводит к тому, что интерпретатор загружается и обрабатывает скрипты тем дольше, чем больше таких расширений установлено.
Для сравнения: в python нужно явно указывать какие нужны модули (import mudule_name), в php автоматически загружаются все модули, указанные в php.ini.
Octave во всех дистрибутивах, с которыми я имел дело, по умолчанию загружает все установленные модули, но имеется возможность это отключить. Достаточно вызывать octave таким образом:
octave --no-site-file
или даже таким
octave --no-site-file --norc --no-init-file
то есть без всяких настроек модули в таком случае, нужно загружать при помощи команды pkg:
pkg load нужный_модуль
Теперь octave запускается существенно быстрее
Пример файла-скрипта:
#!/usr/bin/env octave --silent --no-site-file --no-history
pkg load audio

Freq = 44*1000; % Частота несущей в герцах
Time = 5; % Продолжительность звучания

t = 0 : 1/Freq : Time;  % Вектор значений времени
w = sin(2000 * sin(t)); % Передаваемый сигнал

y = sin(f*t + w); % Фазовая модуляция сигнала

sound(y, Freq) % воспроизведение

понедельник, 5 января 2009 г.

Пример использования memcache в клиентской программе на C

В rc хранится результат последней операции (успешно или нет).
 1 #include <stdio.h>
 2 #include <string.h>
 3
 4 #include <libmemcached/memcached.h>
 5
 6 int main(int argc, char** argv)
 7 {
 8     /* Basic libmemcached structures */
 9     memcached_st *mc = NULL;
10     memcached_stat_st *mc_st = NULL;
11     memcached_return rc;
12
13     /* Server information: */
14     /*const*/ char hostname[]="localhost";
15     /*const*/ unsigned int port = 11211;
16     /*const*/ char args[] = "";
17
18     /* To set: */
19     /*const*/ char key[] = "my_key";
20     /*const*/ char value[] = "my_value";
21
22     /* To get: */
23     /*const*/ char key_r[] = "my_key";
24     char* res  = NULL;
25     size_t ressize = 0;
26     uint32_t flags;
27
28     /* Let's do it */
29     mc = memcached_create (NULL);
30     rc = memcached_server_add(mc, hostname, port);
31     mc_st = memcached_stat (mc, args, &rc);
32     rc = memcached_set (mc, key, strlen(key),
33                             value, strlen(value), 0, 0);
34     res = memcached_get (mc, key_r, strlen(key_r),
35                             &ressize, &flags, &rc);
36     rc = memcached_flush(mc, /* Now */ 0);
37
38     /* Output results */
39     printf( "Welcome to libmemcached sample program!\n"
40             "Version of the memcached server is:\t%s\n"
41             "The pair (key => value) "
42             "have been set:\t(%s => %s)\n"
43             "The value associated with key\t\t%s\n"
44             "have been read. The value is:\t\t%s\n",
45             mc_st->version, key, value, key_r, res);
46
47     /* Clean up */
48     if (mc)     memcached_free(mc);
49     if (mc_st)  free(mc_st);
50     if (res)    free(res);
51     return 0;
52 }

воскресенье, 7 декабря 2008 г.

А что ещё может lyx

В новых версиях lyx часто не все возможности отражены элементами интерфейса. Через версию новые фичи обычно появляются, но использовать их можно начать и раньше. Просто их нужно найти, а потом действовать методом копипаста. А вот найти их удаётся благодаря импортированию в lyx серьёзных трудов в tex.

суббота, 13 сентября 2008 г.

Как сделать альтернативыне короткие заголовки в Lyx

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

Например, попалась тут задачка — показывать текущие заголовки в верху каждой страницы книжки. Если текущий заголовок (название главы или раздела) слишком большой, то он не влезет в отведённое для него место. В latex решается просто — созданием альтернативных заголовков. Прочесал все меню Lyx и подобной функциональности не обнаружил.

Интереса ради, сделал простой latex-файл с нужной функциональностью и импортировал его в Lyx.

Обнаружилось, что Lyx ещё как умеет работать с альтернативными заголовками, хоть и не даёт элементов управления ими. В коде файла Lyx это выглядит так:

\begin_inset OptArg status collapsed \begin_layout Standard Короткий заголовок \end_layout \end_inset

В общем, вот инструкция:

  • Создаём файл *.lyx c таким содержимым:
    \lyxformat 276
    
    \begin_document
    
    \begin_header
    
    \textclass book
    \language russian
    \inputencoding auto
    
    \paperpagestyle fancy
    
    \end_header
    
    \begin_body
    
    \begin_layout Section
    \begin_inset OptArg
    status collapsed
    
    \begin_layout Standard
    Короткий заголовок
    \end_layout
    
    \end_inset
    
    Очень-очень-очень-очень-очень длинный, длиннющий заголовище
    \end_layout
    
    \end_body
    \end_document
    
    и открываем его в Lyx
  • выделяем серенькую штучку Opt и копируем её в свой документ, в свой длинный заголовок
  • заменяем содержимое штучки на нужный короткий заголовок

Всё, теперь в верхней части страницы и в содержании будет использоваться короткий заголовок

четверг, 4 сентября 2008 г.

%)

В Matlab комментарии начинаются со знака '%'.

Обожаю писать комментарии вида

0*q2(0,0) + 0*o1p_exp2(0,0,0) .+ ... %) я не знаю почему, но работает только так

суббота, 23 августа 2008 г.

Octave как скриптовый язык

Matlab — очень полезная в технике и математике вещь. Множество toolbox'ов позволяют проводить самые разные математические эксперименты, моделировать практически что угодно. Но часто от этого монстра требуются лишь функции продвинутого калькулятора, который должен брать команды из командной строки или m-файла и выполнять их, выводя результат (если только вывод не сказано подавить). Такие m-файлы, вообще говоря, редко используют какие-то сверх сложные toolbox'ы, а значит для их выполнения весь Matlab не нужен. При всём при этом m-файлы можно рассматривать как программы (скрипты), что сильно выделяет их среди файлов других "калькуляторов" вроде процессоров электронных таблиц.

Чтобы не "таскать" за собой Matlab, можно воспользоваться, например, Matlab Compiler. На выходе будет исполняемый бинарный файл, для работы которого нужно внушительное количество библиотек Matlab'а.

Другой вариант — использовать open-source ПО для выполнения m-файлов. Кроха (по сравнению c Matlab'ом) Octave умеет это делать.

Создадим m-файл hello.m:

#!/usr/bin/octave --silent

disp('hello world!')
2+2
input('Done.');

И дадим ему права на исполнение. В Winodows придётся создать bat-файл hello.bat:

"c:\program files\octave\octave.exe" --silent hello.m

Или же нужно создать соответствующую ассоциацию файлов для типа m.

В результате получим исполняемый файл (hello.m или hello.bat), который при запуске выведет:

hello world
ans = 4
Done.

и будет ждать нажатия Enter.

Всё это может спасти от необходимости переписывания m-файла на какой-нибудь C++. Чем меньше функций из Matlab'овских toolbox'ов используется в m-файле, тем больше шансов, что он запустится в Octave.

вторник, 15 июля 2008 г.

Линуксойд

Sorce'ик не компилится,
Система в kernel panic.
Линуксойду видятся
сны in command line