воскресенье, 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 }