it заметки kpp

воскресенье, 22 января 2012 г.

Trendnet TEW-652BRP v1.1R from DD-WRT to Factory Firmware

Не удавалось это сделать довольно долго. Backup loader не принимал прошивки и всё тут. Сколько не меняй подписи, ID... всё бесполезно.

Пришлось разбираться средтсвами dd-wrt. Всё оказалось довольно просто.

  1. нужна оригинальная прошивка. Я взял самую новую из тех, что нашёл
  2. в dd-wrt нужно включить SSH. Имя пользователя при подключении будет root, пароль - пароль от web-интерфейса
  3. открываем консоль, переходим в каталог, где лежит оригинальная прошивка (у меня TEW652BRPA1_FW110B29.bin)
  4. пишем
    dd if=TEW652BRPA1_FW110B29.bin of=mtd-made bs=1
    
    на выходе получим файл mtd-made
  5. загружаем во временную папку на роутере (IP устройства у меня 192.168.1.1):
    scp mtd-made root@192.168.1.1:/tmp/
    
  6. идём на роутер:
    ssh root@192.168.1.1
  7. На нём выполняем:
    mtd -r write /tmp/mtd-made linux

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

понедельник, 31 мая 2010 г.

Математические вычисления и графики в LyX с использованием Sage

LyX — это WYSIWYM процессор документов, который прозрачным образом работает с LaTeX. То есть пользователь создаёт в этом процессоре файлы *.lyx, из которых потом создаются и компилируются *.tex.
Sage — это система компьютерной алгебры, работающая прозрачным образом с другими математическими пакетами. Основной интерфейс — командная строка, при этом используется всё многообразие возможностей python. Также доступен web-интерфейс, который можно опробовать на сайте разработчиков.
Совместное использование этих двух разработок открывает интересные возможности. Например, можно создавать отчёты, в которых вычисления, графики и аналитические выкладки будут выполняться автоматически, почти как в маткаде каком-нибудь, но с наглядной структурой LyX, гибкостью python и возможностями вёрстки LaTeX.

Установка

LyX есть почти в любом современном дистрибутиве, так что устанавливается обычным образом. Он написан на Qt, есть порт под Windows. LyX потянет за собой LaTeX.
С Sage всё не так просто. Он сейчас есть только под linux, в дистрибутивах, если и представлен, то в не особо работоспособном виде. Запускать под виндой разработчики советуют при помощи виртуальной машины.
Разработчики Sage предлагают загрузить сборку под вашу архитектуру (386 или amd64) и дистрибутив (Ubuntu и Fedora, но, думаю, будет работать и в остальных). Сборка содержит в себе, кроме sage-модулей, python, maxima, gap и много чего ещё. Скачиваете архив, распаковываете в какую-нибудь папку и сразу можно запускать из неё sage или sage-notebook — сервер для веб-интерфейса. Также в неё входит стиль для LaTeX, который всегда можно скачать отдельно.
Пусть всё это не особо совместимо с менеджерами пакетов, но достаточно удобно.
Буду предполагать, что вы распаковали архив в каталог /usr/local/sage.

Подготовка

Теперь, когда установлены LyX и Sage, можно приступить к их объединению.
Для этого потребуется:
  1. Настроить LaTeX.
  2. Написать скрипт.
  3. Настроить LyX.
1. Настройка LaTeX
Стиль sagetex, о котором упомянуто выше, должен быть виден LaTeX'у. В мануале к стилю советуют положить его в папку ~/texmf/tex/genetic. Под убунтой, видимо, нужно класть в ~/.local/share/texmf/tex/genetic
У меня заработало (пока без LyX) так:
$ sudo ln -s /usr/local/sage/local/share/texmf/tex/generic/sagetex/ /usr/local/share/texmf/tex/generic/sagetex/
и потом
$ sudo texhash /usr/local/share/texmf/tex/generic/sagetex/ # ну, или путь, куда вы только что положили стиль
Кстати, говоря, TexLive, который ставится по умолчанию в убунте, содержит стиль sagetex. Но есть проблема с версиями — sage и sagetex разных версий друг с другом не дружат, поэтому важно, чтобы LaTeX имел дело именно с новым sagetex.sty.
Узнать, какой файл возмёт LaTeX, если ему сказать \usepackage{sagetex}, можно так:
$ kpsewhich sagetex.sty
Этот стиль подразумевает следующую последовательность сборки документов, его использующих:
$ latex tex_with_sage.tex # генерируется файл с командами sage tex_with_sage.sage
$ sage tex_with_sage.sage # генерируется файл с ответами системы
# сборка индекса и прочие команды, которые вам нужны
$ latex tex_with_sage.tex # получаем результат
LyX, понятное дело, не умеет запускать sage. Но он умеет работать с noweb. Что это — сейчас даже и не важно, нам просто нужно, чтобы в системе был файл noweb.sty. Можно установить пакет noweb, а можно просто создать этот файл.
2. Скрипт
Как только LyX начинает собирать итоговый файл (например pdf), он генерирует во временном каталоге файл *.tex и запускает обычные команды (pdflatex, makeindex и т.д). Потом он запускает во вьювере итоговый файл *.pdf или *.dvi или копирует этот файл в папку с исходным документом.
Если тип документа — noweb, то будет сгененирован файл *.nv (по сути тот же *.tex), для этого файла будет запущена специальная программа, которая создаёт *.tex, после чего в ход уже идут pdflatex, makeindex и иже с ними.
В качестве этой программы, мы подсунем LyX'у такой простенький скрипт:
#!/bin/bash

name=`basename $1 .nw`

# uncomment and replace path if you have problems with
# old version of sagetex.sty in texlive
# ln -sf /usr/local/share/texmf/tex/generic/sagetex/sagetex.sty sagetex.sty

# generating *.sage file
latex $1  > $name.sage.log 2>&1
echo "" >> $name.sage.log

# generating *.sout file
/usr/local/sage/sage $name.sage >> $name.sage.log 2>&1

ln -sf $1 $2

# now LyX can run latex in usual way
Я положил его в $HOME и назвал sagelyx.sh.
3. Настройка LyX
В настройках документа должны быть доступны классы с Noweb. Если они недоступны, возможно нужно запустить Инструменты->Переконфигурировать.
Дальше, нужно сказать LyX'у, что для документов Noweb нужно запускать наш скрипт (см. рисунок).
В преамбулу всех документов добавляем:
\usepackage{sagetex}

Использование

Теперь можно в документе ввести формулу (или сделать TeX-вставку):
$26^{3}\cdot10^{3}=\sage{26**3+10**3}$
Если включён предпросмотр формул, то LyX заменит команду \sage на ??. Это потому что для предпросмотра используется только один проход LaTeX. Однако, если нажать кнопку Просмотр PDF, то откроется pdf с проставленными числами.
Простенький пример и мой скрипт: http://www.box.net/shared/air7v45yqk

воскресенье, 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) .+ ... %) я не знаю почему, но работает только так