Архив блогов типа Blogger: делаем локальную копию с помощью HTTrack Website Copier



15 коммент.
Архив блога можно сделать по-разному: например, экспортом в XML с помощью встроенной функции Blogger - но это для авторов. А если нужна работающая копия блога вместе с картинками, помещёнными на другом хостинге, простым wget-ом тут точно не обойтись. И тут нам на помощь приходит httrack website copier - это offline browser, который позволяет скачивать сайты целиком. В этом посте привожу небольшое руководство по httrack, в смысле как пользоваться httrack для зеркалирования блогов а-ля Blogspot.


Мои пять копеек, или Как скачать блог на blogger для локального просмотра

Так как с помощью wget (во всяком случае версии 1.10.2) создать полностью работоспособную копию блога на blogspot не получается, будем для этих целей использовать так же входящий в дистрибутив Debian (и не только его) offline броузер под названием httrack website copier, или просто httrack далее.
Насчёт wget - друзья, мне самому он очень нравится, но есть задачи, которые ему не по зубам. Без обид, всем теоретикам от WGET: ребята, прежде, чем делать глобальные выводы, ПОПРОБУЙТЕ СВОИ РЕЦЕПТЫ! Просто скачайте чей-нибудь мало-мальски нагруженный джаваскриптами и картинками на другом хостинге блог на blogspot с помощью wget, потом откройте его offline и Вы увидите большую разницу. Поверьте, это не так просто, и я на 100% солидарен с Андреем Афанасенко и его комментариями в обсуждении этой темы: всё не так просто.
Опций, ключиков и шаманских проклятий к httrack море, но нам надо скачать блог - так что будем использовать и проверять опыт предыдущих поколений. Всё течёт и всё меняется, и на момент последней правки этого поста командная строка, которая позволяет зеркалировать для локального просмотра блог на blogspot выглядит так:
httrack "http://ВАШБЛОГТУТ.blogspot.com/" "+*.css" "+*.js" "+*.jpg" "+*.jpeg" "+*.tiff" "+*.png" "+*.gif" "+*.giff" "+*.swf" "+.ico" -v --disable-security-limits -s0 "-*666*" "-*BlogBacklinkURL*"
Кавычки обязательны. При этом хорошо бы сделать какой-нибудь каталог, в который вы будете это сваливать (например, /home/vasya/ЗЕРКАЛОБЛОГА/ ) и уже внутри этого каталога запускать httrack с вышеупомянутыми заклинаниями.
Во всяком случае для блогов на платформе блоггера эта формула работает: по крайней мере, так удалось полностью скачать блог IceWM and all around полностью, вместе с работающими ссылками на картинки (для просмотра в полный рост) и ссылками в метках, которые позволяют просмотреть все посты с одной меткой.
И ещё. Блоги некоторых особо злостных графоманов (вроде меня) занимают много, много места, так что запаситесь временем и местом на диске. Очень может быть, что сразу, за один раз, блог вытащить не удастся. Конкретно "Записки дебианщика" занимают вместе с картинками и комментариями почти 2Гб. Будучи сжатыми архиватором 7Z с агрессивными настройками, "записки" занимают 107Мб, но распакуются в те же 2Гб. Кстати скачать "Записки дебианщика" одним архивом теперь можно по этой ссылке.


Обновление локальной копии
Для того, чтобы продолжить скачивание большого блога или синхронизировать локальную версию с тем, что есть в Интернете, httrack может обновить скачанный проект. Насколько я понял, для этого нужно добавить к вышеупомянутому заклинанию ключик --update

То есть для обновления уже скачанного блога с blogspot из директории, где находится директория
hts-cache (в ней лежит файл hts-cache/doit.log который содержит все нужные параметры) и пишем:
httrack "http://ВАШБЛОГТУТ.blogspot.com/" "+*.css" "+*.js" "+*.jpg" "+*.jpeg" "+*.tiff" "+*.png" "+*.gif" "+*.giff" "+*.swf" "+.ico" -v --disable-security-limits -s0 "-*666*" "-*BlogBacklinkURL*" --update
И httrack пытается обновить проект. И обновляет его, выкачивая оставшиеся файлы. Кстати, чтобы пропускать файлы со слишком тормозных серверов, можно ещё тайм-аут для httrack поставить поменьше, добавив ключик --timeout 20 после чего тайм-аут будет 20 секунд.

Отмечу так же, что в каталоге hts-cache лежат два больших архива в формате ZIP - так вот, удалить можно только тот из них, который называется old.zip, а new.zip лучше не трогать. Дело в том, что эти файлы содержат информацию, необходимую httrack для обновления скачанного сайта, и если эти файлы удалить, то вы не сможете просто обновить копию (придётся выкачивать всё заново).


Ссылки в тему
Над этой темой бились лучшие умы блоговедения и блоготехники, достижения коих увековечены к примеру в заметке Дмитрия Конищева Создание зеркала сайта и в посте Андрея Афанасенко Архив блога/blogarchive. За что оным умам (а так же всем, кто принимал участие в обсуждениях) низкий поклон и огромная благодарность.
Так же благодарность тов.
vnaum за то, что разыскал в дебрях документации к Блоггеру ссылку на возможность получить все посты Blogger с помощью скриптов на Python.
Читать далее

Небольшая шпаргалка по командам SVN



33 коммент.
В этом посте я решил собрать простые и наиболее часто используемые мной команды svn, часть параметров и способов работы с репозиториями svn, которых я склонен забывать. Это своеобразная шпаргалка, описание subversion на простых примерах. Чтобы теперь находки по работе в subversion никуда не потерялись - им место в блоге.

По ходу действия хочу подчеркнуть, что Subversion, хотя и является инструментом в первую очередь для программистов, может использоваться и людьми, от программирования достаточно далёкими. Если вы имеете дело с документами в формате LaTeX, то никто не запрещает использовать Subversion или любую другую систему контроля версий: LaTeX в общем тоже язык программирования оформления документов, так что использование Subversion будет так же продуктивно.

Пример, который я люблю приводить своим студентам - их диплом. Большой документ, много текста и картинок. Обычно написание диплома в форматах, к тому не предназначенных, приводит к кошмару вида diplom-pupkin-last-best-new-cool-version45.doc с полным непониманием того, что изменилось в 44 версии и как посмотреть, много ли поменял научный руководитель в тексте с прошлой встречи. Subversion, будучи использованной вместе с LaTeX, избавляет от головной боли и других нежелательных расстройств при написании диплома или (того хуже) диссертации.


Наполнение репозитория Subversion
Репозиторий, созданный командой:
$ svnadmin create /usr/local/svn/newrepos
нужно наполнить свежими данными. Для этого есть команда svn import это быстрый способ скопировать не версионированное дерево файлов в хранилище, например:
$ svn import mytree file:///usr/local/svn/newrepos/some/project \
-m "Initial import"
Adding mytree/foo.c
Adding mytree/bar.c
Adding mytree/subdir
Adding mytree/subdir/quux.h

Committed revision 1.

Стоит заметить, что после завершения импорта, оригинальное дерево файлов не конвертируется в рабочую копию. Для того, чтобы начать работать вам необходимо создать новую рабочую копию (svn checkout) дерева файлов.


Добавление новых файлов и каталогов в репозиторий Subversion
Например, вы создаёте крупный документ в ЛаТеХе, и появился новый каталог с новыми текстами или картинками. Как их добавить в Subversion репозиторий? Очень просто:
$ svn add temp A temp A temp/Lit_obzor2_edt.tex

Теперь смотрим на статус наших файлов и видим, что против них стоит буква А - значит, они Added, то есть добавлены:

$ svn status
? image
? biblio
? optcodeimages
M draft_PhD_Konnik.dvi
! PhD_Konnik.log
A temp
A temp/Lit_obzor2_edt.tex
! PhD_Konnik.toc
M PhD_Konnik_chapter_results.tex~
! PhD_Konnik_chapter_introduction.dvi
! PhD_Konnik.aux
! PhD_Konnik.bbl
! draft_PhD_Konnik.log
! PhD_Konnik.blg
! draft_PhD_Konnik.toc
! draft_PhD_Konnik.aux
! draft_PhD_Konnik.bbl
M PhD_Konnik.dvi
! draft_PhD_Konnik.blg
M PhD_Konnik_chapter_results.tex
! PhD_Konnik_chapter_introduction.log

Они будут помещены в репозиторий при следующей отправке (commit).

Обновление рабочей копии до состояния репозитория
Файлы, находящиеся в репозитории свежее, чем у вас в рабочей копии. Дубовый вариант заключается в том, чтобы удалить свою рабочую копию и сделать chekout из репозитория. Это проходит, если репозиторий только ваш и вы уверены, что никаких изменений в рабочей копии вы не потеряете. Но есть вариант и получше:
$ svn update U
biblio/my.bib
U
biblio/my.bib.bak

Updated to revision 9.

Это обновит вашу локальную копию до ревизии, которая находится в репозитории SVN. После этого можно приступать к работе с файлами, так как они обновлены до последней версии.

Латинские буквы перед именем файла имеют свой сакральный смысл, скрытый в недрах документации сокрушительных размеров (кстати, документация очень хороша, и есть даже частичный перевод на русский тут). Собственно, буква означает действие, которое выполнил Subversion для приведения рабочей копии в актуальное состояние:
U foo

Updated — Файл foo был обновлен


A foo

Added — Файл или директория foo были добавлены в рабочую копию.


D foo

Deleted — Файл или директория foo были удалены из рабочей копии.


R foo

Replaced — Файл или директория foo была заменена в рабочей копии; это значит, что foo был удален, а новый элемент с таким же именем был добавлен.


G foo

merGed — Файл foo получил новые изменения из хранилища, однако ваша локальная копия содержит ваши
изменения. Либо изменения не пересекаются, либо они точно такие же, как ваши локальные изменения, поэтому Subversion успешно выполнил слияние изменений хранилища с файлом.


C foo

Conflicting — Файл foo получил от сервера конфликтующие изменения. Изменения с сервера пересекаются с
вашими изменениями фала.


Просмотр истории ревизий в Subversion
Часто нужно просмотреть, что и как редактировалось - для этого при отправке новых данных в репозиторий (commit) есть смысл писать содержательные и осмысленные комментарии. Если это так, то можно многое узнать о том, что и когда редактировалось:
$ svn log --revision 1:3
что значит: выдать лог ревизий с первую по третью. Увидим:
----------------------------------- r1 | penta4 | 2008-06-03 15:49:21 +0400 (Втр, 03 Июн 2008) | 1 line Initial dissertation state
--------------------------------
r2 | penta4 | 2008-06-03 16:56:01 +0400 (Втр, 03 Июн 2008) | 3 lines Committed new editions
---------------------------------
r3 | penta4 | 2008-06-03 16:58:12 +0400 (Втр, 03 Июн 2008) | 2 lines incremental ------------------------------------------------------------------------


Очень удобно, когда нужно кому-то отправить историю правок вашей программы или документа.


Просмотр изменений в Subversion
Например, нужно просмотреть изменения, происшедшие со второй по четвёртую ревизии. Легко!
$ svn diff --revision 2:4 PhD_Konnik.tex > PhD_Konnik.tex.diff.r2-4
Это выведет нам в diff-файл все изменения, а ваш любимый текстовый редактор их с удовольствием подсветит для более удобного просмотра.



Отмена изменений в Subversion

Вы сидите и правите какой-то документ - и тут с ужасом понимаете, что правите _не тот_ документ. Не беда - переносите изменения во временный файл, а для того документа, который вы нечаянно испортили, пишем:
$ svn revert UMNIK08-Report-01/Report-01-sub1-shortened.tex
Reverted 'UMNIK08-Report-01/Report-01-sub1-shortened.tex'
После этого SVN вернёт файл Report-01-sub1-shortened.tex в то состояние, в котором он находится в репозитории.


Копирование или перемещение нескольких файлов в SVN/Subversion (multiple targets move/copy in SVN)
Странно, однако SVN не понимает символов типа *, так что ваша попытка сделать так:
$ svn mv MCBC/*jpg LinuxImages/
приведёт к ошибке:
svn: Client error in parsing arguments
Чтобы не перемещать все файлы по одному, воспользуемся _ваша любимая оболочка тут_, в моём случае это Bash:
for i in *.cs ; do svn mv $i newFolder/ ; done
Конечно, если в вашей операционной системе есть нормальная консоль :-)


Выдача определённой правки файла из репозитория
Например, нам очень нужно посмотреть, каким был файл при второй правке. Для этого пишем:
$ svn cat --revision 2 PhD_Konnik.tex > PhD_Konnik.tex.v2
То есть выводим результат второй правки файла PhD_Konnik.tex и записываем его в файл PhD_Konnik.tex.v2 для дальнейшего просмотра.


Восстановление удалённых файлов в Subversion
Ну и наконец самое страшное: вы приказали Subversion удалить файл из репозитория, а потом кто-то вам говорит: этот файл нужно вернуть. На самом деле, файл, который вы удалили из SVN, никуда не делся: элемент исчезает из правки HEAD, но продолжает существовать в более ранних правках. Так что вопрос "как восстановить удалённый файл в Subversion" имеет довольно простой ответ: скопировать его из последней правки, где он был.

Главное вспомнить, как этот файл назывался. Если помним хотя бы частично имя файла (например, overview), то можно попросить Subversion вывести все упоминания о правках этого файла так:
svn log -v | grep spatialcoh -A 5 -B 5
Здесь параметры для grep такие: -A 5 это выдача 5 строк после (After) совпадения, -B 5 это 5 строк до (Before) совпадения. Получим длинный вывод вида:
spatialcoherencyexplained.eps 436 | penta4 | 2009-12-02 15:39:30 +0300 (Срд, 02 Дек 2009) | 2 lines
Changed paths:
M /PhD_Konnik_autoreferat.tex
M /PhD_Konnik_chapter_opticalcoding.tex
M /PhD_Konnik_chapter_overview.tex
D /images-opticalcoding/spatialcoherencyexplained.eps
M /images-opticalcoding/sxemacorrelator3.eps
M /latex.py
M /svnstatus.tex
M /zagashnikPhD_Konnik.tex

--
M /biblio
A /formaldocs/disserDocs.tif.7z
A /images-opticalcoding/PSFdotssize.eps
M /images-opticalcoding/PSFoutofLambdaDeltaLambdavsfromNumberOfElementsPSFRus.ps
A /images-opticalcoding/auxilaryImagesForDisser.svg
A /images-opticalcoding/spatialcoherencyexplained.eps
M /zagashnikPhD_Konnik.tex

TENGIBLE changes:
- autoreferat is improved slightly;
- Spatial coherency is improved
Красным подчеркнул я: видно, что файл
spatialcoherencyexplained.eps удалён в правку 436, и теперь хотим его восстановить. Смотрим, в какой правке файл был удалён - в 436, значит, в 435 есть его последняя копия. Восстанавливаем:
svn copy --revision 435 file:///phdthesis/images-opticalcoding/spatialcoherencyexplained.eps spatialcoherencyexplained.eps
Всё, теперь файл появится снова, вместе с историей правок (что важно) и вы можете его править дальше.

Ссылки
Разумеется, это далеко не все возможности Subversion - в данном посте не рассмотрены возможности создания и слияния веток, но в качестве быстрого введения должно хватить. Больше есть в переведённом на русский исчерпывающем мануале тут.
Читать далее

Как построить графики с погрешностями в gnuplot по экспериментальным данным



17 коммент.
Собственно, наиболее часто в экспериментальной физике требуется строить графики, которые отражают точность измерений - на графиках требуется откладывать погрешности. Так как чаще всего данные организованы в таблицы, построить график с погрешностями в gnuplot нетрудно, однако в этом деле есть ряд подводных камней, о чём ниже.

Для того, чтобы указать gnuplot строить графики с погрешностями, строка с командой plot в скрипте должна содержать директиву with errorbars:
  • погрешности откладываются для данных по оси Х: with xerrorbars
  • погрешности откладываются для данных по оси Y: with yerrorbars
  • погрешности откладываются для данных по обоим осям: with xyerrorbars
Величину погрешности можно посчитать для каждой точки (в зависимости от эксперимента, например, при измерениях на разных пределах) и сделать для этого в файле данных test.dat данных отдельную колонку:
#  X     Y     dX    dY
1.0 1.2 0.8 1.5
2.0 1.8 0.3 2.3
3.0 1.6 1.0 2.1


В этом случае, чтобы построить график с погрешностями по оси Y, например, последняя команда в скрипте для графика будет выглядеть так:
gnuplot> plot "test.dat" using 1:2:3 with yerrorbars
Общая идея, думаю, понятна: сначала указываются колонки, содержащие данные, а потом колонки, содержащие значения погрешностей. Таблица, любезно утянутая отсюда, даёт прекрасную иллюстрацию:

Data Format Columnusing with
(X,Y) data X Y 1:2 lines, points, steps,
linespoints, boxes, etc.
Y has an error of dY X Y dY 1:2:3 yerrorbars
X has an error of dX X Y dX 1:2:3 xerrorbars
Y has an error of dY, and
X has an error of dX
X Y dX dY 1:2:3:4 xyerrorbars
Y has a range of [Y1,Y2] X Y Y1 Y2 1:2:3:4 yerrorbars
X has a range of [X1,X2] X Y X1 X2 1:2:3:4 xerrorbars
Y has a range of [Y1,Y2], and
X has a range of [X1,X2]
X Y X1 X2 Y1 Y2 1:2:3:4:5:6 xyerrorbars


Для иллюстрации разберу два рабочих примера с построением графиков с погрешностями и аппроксимацией данных.


Пример 1. Построить график с погрешностями по обеим осям в gnuplot

Итак, есть экспериментальные данные в виде таблицы с разделителями - пробелами:

16 18 0.72 10 whiteLEDS 1 10
12 30 0.61 12 greenUltraBrightLEDS 1 10
8 200 0.45 20 HGlamp 1 15
6 1600 0.35 35 AlGaAsLser 1 50
4 17000 0.28 68 NdYAG-laser 1 900
4 25000 0.27 70 HeNeLaser 1 1100

Нужно построить зависимость первой колонки от второй, при этом погрешности по оси X составляют 7% от данных, а по оси Y указаны в колонке 7. Вот такой при этом получается код для gnuplot:

#! /usr/bin/gnuplot -persist
set terminal postscript 'NimbusSanL-Regu' eps enhanced
set output "./plot/PSFoutofLambdaDeltaLambdavsfromNumberOfElementsPSF.ps"
set encoding koi8r
set xlabel "Light's monochromaticity, {/Symbol l}/{/Symbol D}{/Symbol l}" font "NimbusSanL-Regu,18"
set nokey
set bmargin 4
set ylabel "Number of resolvable points of the PSF's kinoform" font "NimbusSanL-Regu,18"
set logscale x
set grid
set xrange [1:100000]
set mxtics 10
set style line 1 lt 1 pt 7 ps 0.5
plot "./PSFoutofLambdaDeltaLambda.txt" using 2:((300/$1)**2):7:(((300/$1)**2)*0.07) with xyerrorbars linestyle 1, "./PSFoutofLambdaDeltaLambda.txt" using 2:((300/$1)**2) smooth bezier with lines


Результат строительства графика:
Что в этом коде (и графике) есть примечательного, заставившего меня таки покопаться в мануале?

Ну например то, что при строительстве данных с погрешностями вам не удастся использовать линии: опция with linespoints не пройдёт и gnuplot будет выдавать ошибки. И это правильно: экспериментальные данные соединять непрерывной линией - моветон. Так что используем только linestyle 1 который определён так: set style line 1 lt 1 pt 7 ps 0.5 Это значит: тип линии 1, стиль точек 7, размер точки на графике 0.5. Крайние точки я просто соединил кривой Безье, о чём честно написал в коде графика: smooth bezier with lines

Ну и наконец нужно было построить квадратичную зависимость по оси Y, что реализовано так: ((300/$1)**2) то есть число 300 делится для каждой точки на значение в первой колонке, результат возводится в квадрат.



Пример 2. Построить график с погрешностями и аппроксимацией в gnuplot
Задачка посложнее: здесь требовалось экспериментальные точки аппроксимировать прямой линией и погрешностями. Из части данных нужно вычесть постоянную составляющую, так что работы для gnuplot хватает. Итак, сеанс чёрной магии с полным её разоблачением:

#! /usr/bin/gnuplot -persist
set terminal postscript 'NimbusSanL-Regu' eps enhanced solid
set yrange [0.1:10000]
set logscale x
set logscale y
set mxtics 10
set mytics 10
set grid xtics ytics mxtics mytics
set format y "10^{%L}"
set format x "10^{%L}"
set mxtics 10
set output "./plots/1RAWMEANtoSaturateLineApproxcomparingLogscale.ps"
set encoding koi8r
set xlabel "Exposure value, rel. units" font "NimbusSanL-Regu,18"
set ylabel "Signal mean value, DN" font "NimbusSanL-Regu,18"
set key bottom right
set bmargin 4
set style line 1 lt 2 pt 7 ps 1
f(x) = (a*x)+b
fit f(x) "./RAWMEANmeasurementresult" using 4:($3-255.22579) every ::4::35 via a,b
plot "./RAWMEANmeasurementresult" using 4:($3-255.22579):7 title "Digital values of photosensor signal" with yerrorbars linestyle 1, f(x) title "linear fitting function" with line


Сейчас маэстро Воланд скромный автор сих строк разоблачит этот опыт. Первое, что надо разоблачить - аппроксимацию прямой. Здесь сначала задаётся функция f(x) = (a*x)+b которая далее подгоняется под данные using 4:($3-255.22579) из которых вычитается постоянная величина (эксперимент такой был). Далее при подгонке я потребовал от gnuplot
использовать только точки с 4 по 35-ю every ::4::35 и, наконец, подогнать коэффициенты a и b под данные via a,b.

Здесь я отмечу то, что сам часто забываю: директиву every можно использовать не только при подгонке, но и для других графиков. Для этого полезно иметь перед глазами таблицу, которую изваял автор not so Frequently Asked Questions:

every I:J:K:L:M:N
I Line increment
J Data block increment
K The first line
L The first data block
M The last line
N The last data block
every 2 plot every 2 line
every ::3 plot from the 3-rd lines
every ::3::5 plot from the 3-rd to 5-th lines
every ::0::0 plot the first line only
every 2::::6 plot the 1,3,5,7-th lines
every :2 plot every 2 data block
every :::5::8 plot from 5-th to 8-th data blocks

Теперь осталось построить два графика на одном:
plot "./RAWMEANmeasurementresult" using 4:($3-255.22579):7 title "Digital values of photosensor signal" with yerrorbars linestyle 1, f(x) title "linear fitting function" with line

То есть строим зависимость колонки 3 от 4 и используем колонку 7 как источник погрешности. При этом накладываем аппроксимационную линию с помощью директивы f(x) title "linear fitting function" with line

Собственно, вот итог моих фокусов:

Красиво и вполне себе презентабельно, хоть в Nature отправляй.
Читать далее

Ребрендеринг блога, Эпизод 2: Новая надежда



29 коммент.
Что, не ждали!? А вот оно как! Даже отчаянные консерваторы и поклонники тезиса "Не сломалось - не чини" иногда делают это... А если серьёзно, то на смену шаблона меня подтолкнул мой старинный товарищ SAV, который однажды на линукс-поинте деликатно мне намекнул на страшные тормоза с отрисовкой шаблона моего блога. Ну, думаю, раз такое дело, надо принимать меры. И я их принял, о чём далее.

Новый шаблон я несколько обточил перед тем, как сломать старый, но блог "Записки дебианщика" (вместе с самим дебианщиком :-)) немного покукожит и поплющит, так как большая часть виджетов слетела и их надо восстанавливать героическим самоотверженным трудом. А в этом нелёгком деле авторский коллектив призывает на помощь благодарных читателей, дабы оные кидали тухлые помидоры в места наибольших скоплений багов.

Обновлено: на удивление, всё прошло довольно быстро и с минимальными потерями. Виджеты я перетащил со старого шаблона, самые занудные виджеты реализованы уже в Блоггере (гугловцы не дремлют).

Новая идея такая: на главной - только один пост, и при том укороченный (с помощью fullpost). Все кнопки, виджеты и гаджеты снесены в подвал (вниз страницы) - это особенность нового одноколоночного шаблона. Так как здесь важен текст, а не навороченное оформление, я выбирал самый простой шаблон при внешней презентабельности и минимализме. Основной шрифт Trebuchet - как и прежде, и по крайней мере в Firefox масштабируется колесом мыши без косяков.
Обращаю внимание пользователей Microsoft Internet Explorer: в коде шаблона о вашем браузере написано много нехороших слов, так что если что-то отображается неправильно, то в этом виноваты не только кривые руки автора блога :-)
Так вот, пост на главной один, а остальное ищется локальным поиском (внизу слева), с помощью облака тегов или непосредственно по архиву блога (стандартный гугловский виджет). Функциональность вроде не пострадала. Предложения по улучшению принимаются (и пока у меня есть время их воплотить).

Немножко истории
Решил выложить предыдущие версии блога - как он выглядел раньше.
Сначала я решил не мудрствовать и просто выбрал стандартный шаблон Sand Dollar, но выглядит он вполне сносно:


Потом был шаблон с листьями, который я нашёл где-то на окраине Интернета и который я установил тогда, когда был Великий Переход Blogger со статических шаблонов на динамические (после этого отпала необходимость делать Republish your blog - ветераны помнят, что это). В шаблон с листьями я со временем напихал столько хаков и джаваскриптов, что со роптать начали даже самые стойкие орлы. Шаблон содержал постоянно регенерируемую градиентную заливку (без неё шаблон не смотрелся вообще) - выглядел красиво:


... но тормозить под нагрузкой джаваскриптов стал безбожно.
И вот, когда в очередной раз мне начали выносить мозг написанием научно-технического отчёта и переоформлением его в Microsoft Word (ну, вы поняли, да?), мне и пришла в голову шальная мысль - а не сменить ли мне шаблон. Полдня поисков, и вот, собственно, результат.

Тормозить здесь просто нечему (в шаблоне только одно внешнее изображение - в заголовке). Код довольно прост и компактен, а большая часть хаков стали не нужны, так как они уже реализованы командой Blogger.

Кстати, с убунтой бежево-коричневая расцветка шаблона не связана никоим образом: просто цветовая гамма спокойная и (как справедливо отмечают другие комментаторы) глаза не режет.
Читать далее

Маршруты и треки с помощью GPS-навигаторов Garmin



6 коммент.
Отслеживание перемещений по GPS (tracking) это довольно интересная и полезная возможность современных навигаторов. Например, вы пошли в поход или просто в парк, и долго блуждали, пока искали правильный путь - со включённым отслеживанием вы потом сможете дома посмотреть, как можно было бы срезать путь. Или, что тоже важно, по этим данным можно найти обратную дорогу.

Собственно, на навигаторе всё довольно просто: в зависимости от модели, трекинг включается одной-двумя кнопками (в Garmin GPSmap 60CSX - главное меню - Track - ON). После этого на экране должны оставаться точки, которые обозначают ваш путь по местности. Эти данные в абсолютных координатах хранятся в самом навигаторе, и скачать их оттуда можно в Linux довольно просто.

Скачиваем треки в гармине под Linux
Для этого нам понадобится консольная утилита gpsbabel. Её исходники нужно скачать с официального сайта (или посмотреть в репозиториях своего любимого дистрибутива) и собрать. Далее в нашем распоряжении появляется собственно gpsbabel, с помощью которого треки и скачиваем. Вот как это происходит (утянуто у тов. jetxee из этого поста):

Можно загрузить трек и точки маршрута с устройства при помощи программы gpsbabel, из командной строки. Если устройство подключено к /dev/ttyUSB0, а нужен трек с точками в формате GPX, то получить его можно так:
$ gpsbabel -t -w -i garmin -f /dev/ttyUSB0 -o gpx -F мойтрек.gpx
Другой способ получить эту информацию — скопировать с устройства GPX-файл в режиме USB Mass Storage, а потом уже его конверировать-преобразовывать… Этот файл с названием вида ГГГГММДД.gpx появляется на карточке памяти только если включена соответствующая функция в приборе.

Ну и зачем это всё надо!?
Ответ на этот вопрос я хочу дать в виде примера. Вот, например, был я не так давно в замечательном парке Покровское-Глебово. Парк этот замечателен в первую очередь тем, что его вовсе не так просто найти, как это может показаться на первый взгляд, а найдя - ориентироваться в нём. Для меня это превратилось в увлекательное путешествие и освежение в памяти навыков спортивного ориентирования на местности, чем я увлекался в горячую пионерскую юность...

Итак, по результатам моих хождений по мукампо парку, появился файл с расширением GPX, который я скачал с помощью gpsbabel (см. немного выше). И что с ним, спрашивается, делать? А вот что. Скачиваем замечательную программу JOSM, которая позволяет редактировать карты OpenStreetMap (OSM). Как легко догадаться, программа на Java, и просит эту саму джаву не древнее версии 1.5. Выглядит сама программа примерно так:


После этого можем скачать карту с OpenStreetMap и загрузить её в JOSM для просмотра. Интерфейс на Java, так что набираемся терпения и ждём, пока отрисуется. Далее можно открыть скачанный трек в формате GPX и он должен стать новым слоем (над картой). Тонкая серая извилистая линия, помеченная на скриншоте красными стрелками, это и есть мой путь по парку.
Собственно, из него я потом узнал, как пройти более коротким путём и что в парке мне не удалось с первого захода посмотреть. Довольно удобно так же использовать трекинг для редактирования OpenStreetMap, особенно если вы хорошо знаете район - с помощью треков можно вносить в карты улицы и дома. Но об этом как-нибудь в следующий раз...
Читать далее

Garmin 60CSx: технические особенности устройства и карты для Garmin



8 коммент.
В этом посте мне хотелось собрать раскиданные там и сям разные технические особенности GPS-навигатора Garmin 60CSx. Кроме того, несколько замечаний о картах для Garmin 60CSx. Собственно, о них далее.

Где скачать карты для Garmin? Собственно, на торрентах или пойти и честно воспользоваться картами OpenStreetMaps.
Уже готовые карты OSM по городам есть здесь. Или можно отправиться на сайт OpenStreetMaps, зарегистрироваться там и скачать карту нужной области честно и бесплатно.

Для этого заходим на http://www.openstreetmap.org/ и регистрируемся. Далее выделяем область карты, которую хотим экспортировать (для последующей закачки в навигатор), жмём на Экспорт и просим карту в OSM формате - через некоторое время получаем файлик map.osm. Теперь скачиваем mkmap отсюда, как завещал ув.тов. jetxee в своей бессмертной статье, оно на джаве и требует сановскую джаву версии старше 1.5. С её помощью компилируем в полученный OSM-файл в img формат. Получившийся файл заливаем в гармин с помощью sendmap.

Однако с картами OpenStreetMap есть одна проблема: не дают скачать сразу большую карту (я с жадности запросил у сервера векторную карту всей Москвы с областью). Если нужны большие карты, например, всей РФ, можно податься на Cloudmade.com и скачать оттуда. Этот сайт содержит уже скачанные карты местностей в формате OSM (которые мы потом перегоняем в img для Гармина) и собственно файл IMG, который можно закачать в навигатор.


Закачивание карт в Garmin 60CSx
По сообщениям разных осведомлённых орлов, во внутренней памяти (internal) может находиться до 3 карт, тогда как на флешке (microSD) - только одна. Хотя, как совершенно справедливо попенял многоуважаемый комментатор diaword, на самом деле, никто не мешает скачать несколько карт и потом собрать из них одну. Это можно сделать с помощью утилиты Mkgmap, а её ключик --gmapsupp позволяет собрать результирующую карту из нескольких отдельных и потом залить в навигатор. Файл gmapsupp.img является архивом из нескольких карт *.img, причем их можно как упаковывать, так и обратно распаковывать с помощью sendmap.

А такой финт, как закачка четырёх файлов карт сразу:
Gmapbmap.img -- базовая карта
Gmapsupp.img -- ваша карта
Gmapsup2.img -- другая карта
Gmapprom.img -- другая карта
на Garmin 60CSx не проходит, к сожалению.

Размер одной карты (img-файл) не может превышать 2Gb, хотя карта может состоять из кусков, число этих кусков не может быть больше 2025.

Комментарий насчёт экрана Garmin 60CSx
В Сети есть много критики по поводу низкого разрешения (160х240 пикселей) трансфлективного экрана у 60CSx. Критика понятна, так как есть другие навигаторы с более высоким разрешением. Но друзья, мы же помним, зачем гарминовцы эту модель выпускали? Правильно, для туристов, рыбоволовов, любителей активного отдыха и прочих экстремалов. Там важно не любоваться на карты, а быстро понять, где ты находишься.

Чтобы дать понять всю прелесть экрана 60CSx в походных условиях, вот фотография face-to-face: мой телефон Motorola 1200AE и 60CSx. На мобильнике подсветка включена на полную катушку, а на Гармине она не включена вообще.

И кто из них продержится дольше - думаю, понятно.


Память и подключение
Подключение происходит через miniUSB кабель как в режиме MassStorage, так и по специльному протоколу. И тот, и другой вариант поддерживаются в Linux.
В комплекте идёт карта microSD на 64Mb, максимальная поддерживаемая ёмкость карты 4GB micro SDHC.

Батареи

Удобнее использовать комплект аккумуляторов: от двух NiMH аккумуляторов ёмкости 2700mA*h устройство будет работать 16-20 часов.
Читать далее

QtOctave - графическая оболочка для Octave



13 коммент.
Хотя MATLAB и правит миром численных математических расчётов, в этом деле ему зреет очень хорошая альтернатива - GNU/Octave. И хотя у Октавы много проблем, таких как слабая документация и в основном консольный режим работы, есть и хорошие новости: проект QtOctave, ставящий своей целью сделать графическую среду разработки для Octave, весьма неплох. О нём и будет этот небольшой пост.

Установка
Для того, чтобы поставить QtOctave, вам потребуется скачать бинарник с сайта авторов и установить пакет octave в вашем дистрибутиве. Собранный и готовый бинарник прямо с сайта qtoctave_binaries_Linux_i386-0.8.1_svn166.binaries.tar.bz2 . Далее устанавливаем QtOctave по инструкции, то есть делаем sudo ./install.sh

В свежих версиях дистрибутивов QtOctave наличествует в репозиториях, и установить её можно просто и легко:
aptitude install qtoctave
По зависимостям потянется и новая версия GNU/Octave, если она ещё не установлена.


Работа
Собственно, открываем графическую консольку и пишем:
qtoctave
Перед вами развернётся графическая благодать, в которой замигает разноцветными огнями вся неимоверная мощь Octave. Разворачиваем одно из окон и открываем там свой скрипт на MATLAB\Octave. Выглядит это так:

По умолчанию можно просматривать переменные, список последних команд и файлов. В общем-то, для работы особенно больше ничего и не нужно. Развернув окно внутренней консоли в QtOctave, можно работать непосредственно с командной строкой Октавы и при этом видеть список активных переменных.


Сразу из замеченных недостатков: в графической консоли внутри QtOctave нельзя использовать подсказку по клавише TAB, при этом оно переходит в режим правки. Так же хотелось бы попенять на то, что QtOctave
не сохраняет расположение окон. Но это в общем не так бросается в глаза: при некотором навыке работы с Октавой или Матлабом работать вы будете не с консолью, а с редактором, как уже описывалось ранее.

Так же в комплекте идёт справка в формате HTML, причём весьма добротная. Конечно, до матлабовской ещё очень и очень далеко, но уже что-то. И главное, что это в комплекте, то есть batteries included.
То есть можно не только работать в Octave, но ещё и получать справку по командам, хотя и весьма базовую.


Заключение

В целом впечатление QtOctave производит очень благоприятное. Хотя Octave можно пользоваться таким же способом, как и MATLAB, о чём уже писалось, просмотр переменных и история команд в графическом виде это очень полезные возможности QtOctave. Хочется пожелать успехов проекту и дальнейшего развития.

Так же можно посмотреть в сторону
Python и SciPy. Как советуют товарищи питонисты, для этого есть следующие инструменты:
  • Python(x,y) готовый дистрибутив питона для научных нужд (batteries included).
  • SPYDER (графическая оболочка, входит также в Python(x,y) в дополнение к Eclipse)
Так же можно посмотреть в сторону IPython.

К сожалению, главный (и единственный!) разработчик QtOctave прекратил работу над проектом. Вот чем стоило бы заняться, КДЕшники, а не пилить свистульки типа фильтров Ланцоша и прочей мишуры...
Читать далее