Архив блогов типа 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 - в данном посте не рассмотрены возможности создания и слияния веток, но в качестве быстрого введения должно хватить. Больше есть в переведённом на русский исчерпывающем мануале тут.
Читать далее