2009-10-11

Сортируем без повторений в Emacs.

Только для сортировки строк в Emacs имеется встроенная функция: M-x sort-lines.

Для сортировки без повторений выполняем:

  • выделить область
  • C-u M-| sort -u RET

С включенными режимами transient-mark-mode и delete-selection-mode можно сразу заменить выделенную область отсортированными без повторения строками:

  • выделить область
  • M-| sort -u RET

mit.edu в помощь!

Кто не помнит название Массачусетского технологического института? Это имя помнят все и можно знания обратить в пользу!

Это я набираю по памяти:

$ sudo ntpdate time.mit.edu
и
$ gpg --keyserver pgp.mit.edu --search
Раньше приходилось гуглить NTP и PGP сервера каждый раз когда понадобятся ))

2009-10-09

TiddlyWiki.

Оффлайн wiki-движок одним html файлом - такое бывает?
Проект TiddlyWiki предлагает полноценный wiki одной html страницей.

Работает в Firefox, Explorer, Safari и Opera.

Движок wiki активно использует JavaScript. Движок и данные размещаются в одном и том же html файле.

Компактность движка (~340 KiB) и использование одного файла в качестве хранилища позволяют с легкостью переносить статьи с компьютера на компьютер, хранить wiki на внешнем носителе (например USB stick).

Проект выпущен на условиях BSD лицензии (делай что хочешь - только авторов и лицензионное соглашение из исходного текста не выбрасывай).

Ссылки:

2009-10-04

Резервное копирование, основные правила.

Ниже рассмотрены "общие" правила, которые следует соблюдать при создании и хранении резервных данных.
  • Создавайте резервные копии. Ваша данные имеют стоимость, вы же не хотите их потерять! В зависимости от важности данных и их объема определитесь с местом размещения резервных копий, сроком хранения резервных копий, какие данные требуют резервирования и как часто резервное копирование будет выполнятся.
  • Максимально автоматизируйте процесс создания резервных копий. Что бы самодокументировать процесс резервирования и вы ничего не забыли при создании копии в следующий раз.
  • Изредка проверяйте возможность восстановления из резервных копий. Вы же хотите быть уверенны в сохранности своих данных!
  • Опишите процесс создания и восстановления данных. Любой уполномоченный сотрудник должен мочь проконтролировать правильность создания резервной копии и восстановить данные из резервной копии.
  • Используйте различные хранилища для данных и их резервных копий. Используйте различные носители информации, физически разносите данные и резервные копии (храните копии в другом здании или другом городе). RAID массивы не являются способом организации резервного копирования, некоторые конфигурации RAID массивов (с избыточностью данных) лишь улучшают параметр непрерывности обслуживания!
  • Храните множество копий. Даже когда данные не утеряны может быть нарушена их целостность и вам придется покопаться в истории!

2009-09-02

Новый формат репозиториев Mercurial (fncache)

fncache - новый формат репозиториев для Mercurial, который изменяет правила формирования имен файлов revlog. Впервые введен в Mercurial версии 1.1 и становится форматом по умолчанию для новосоздаваемых репозиториев.

Причиной введения нового формата является улучшение способа именования файлов (из за ограничений некоторых операционных систем и файловых систем). Так зарезервированные имена файлов 'con', 'prn', 'aux', 'nul', 'com1'..'com9', 'lpt1'..'lpt9' ОС MS Windows теперь специальным образом декорируются. Также декорируются пути, длина которых превышает 120 символов (байт?), путем фиксации длины (обрезанием части пути) и добавления SHA1 хэша от оригинального имени.

Вспомним что с подобными проблемами некоторых ОС разработчики Mercurial ранее сталкивались. Только с переходом к версии 0.9.4 Mercurial смог одновременно хранить файлы и каталоги, имена которых различаются только регистром (что невозможно например в файловой системе FAT16/FAT32)!

Новый формат никоим образом не изменил протокол работы Mercurial через http[s] и bundle.

Но локально работать используя старую версию Mercurial (вплоть до 1.0.x) с репозиториями нового формата нельзя. Если Вы попробуете, то получите предупреждение:

abort: requirement 'fncache' not supported!
Эта проверка реализована посредством просмотра содержимого файла "requires":
$ cat repo/.hg/requires revlogv1 store fncache
Ключевое слово "fncache" говорит о необходимости поддержки нового формата утилитой hg.

Если у Вас имеется репозиторий нового формата, но приходится работать с CMS старой версии - можно конвертировать репозиторий в старый формат (правда при этом используя новую версию Mercurial, начиная с 1.1):

$ hg --config format.usefncache=0 clone --pull fncache-repo non-fncache-repo
Использование по умолчанию формата fncache репозиториев может быть отключено в hgrc(5):
[format] usefncache = False
или опцией командной строки "--config format.usefncache=0".

Одной из причин использования мною репозиториев старого формата - наличие в релизе Debian Lenny только версии Mercurial 1.0.1 (когда в Windows я использую версию 1.3.1).

За подробной информацией обращайтесь сюда http://mercurial.selenic.com/wiki/fncacheRepoFormat

2009-08-20

Переход на GNU Emacs 23.1 в Windows.

Переход с версий 22.x на недавно вышедший релиз GNU Emacs 23.1 прошел гладко за исколючением двух моментов.

Первое с чем пришлось столкнутся это сообщение об ошибке при выполнении функции (server-start):

error: The directory e:/home/.emacs.d/server is unsafe
Проблема расположена в функции server-ensure-safe-dir:
(unless (and (eq t (car attrs)) (eql (nth 2 attrs) (user-uid)) (or (eq system-type 'windows-nt) (zerop (logand ?\077 (file-modes dir))))) (error "The directory %s is unsafe" dir))))
На stackoverflow.com описано решение проблемы. Cледует удалить выделенный участок кода и обновить байткод (Emacs сначала ищет .elc файла и только затем .el, редактируем файл emacs-23.1/lisp/server.el, C-x byte-compile-file <Down> <Ret>).

Вторая проблема состояла в том что функция codepage-setup устарела и ее определение исключили из дистрибутива. Теперь нет необходимости предварительно перед использованием кодовой страницы IBM cpXXX ее создавать! Для совместимости со старыми версиями Emacs воспользуйтесь следующим кодом:

(when (<= emacs-major-version 22) (codepage-setup 866) (codepage-setup 1251) )

Новость о релизе GNU Emacs 23.1: groups.google.com

Update: 2010-03-17.

2009-09-19 был исправлен баг #4197 касающийся server-ensure-safe-dir. Из ChangeLog:

This fixes bug#4197 (merged to bug#865, though not identical). * server.el (server-auth-dir): Add docstring note about FAT32. (server-ensure-safe-dir): Accept FAT32 directories as "safe", but warn against using them.
Также я нашел другой способ обойти эту проблему:
(require 'server) (when (and (= emacs-major-version 23) (= emacs-minor-version 1) (equal window-system 'w32)) (defun server-ensure-safe-dir (dir) "Noop" t)) ; Suppress error directory ~/.emacs.d/server is unsafe on windows. (server-start)

2009-07-14

Коллективное ведение блога.

При использовании блогов blogger (www.blogger.com) доступна возможность вести блог одновременно несколькими персонами.

Модель совместного ведения блога на blogger.

  • Имеются два вида полномочий: администраторы блога и не администраторы.
  • Не администраторы могут создавать новые статьи и редактировать только свои статьи.
  • Администраторы могут все.
Официальная справка о совместном ведении блога: http://www.google.com/support/blogger/bin/topic.py?hl=en&topic=12454

Ограничения совместного ведения блога на blogger.

  • Обиженный участник с правами администратора может удалить учетные записи других участников без возможности как либо предупредить это.

Какие плюсы дает совместное ведение блога?

  • Создается сообщество.
  • Статьи могут улучшаться различными участниками.
  • Различия интересов и знаний участников делает содержимое блога более богатым и разнообразным.
  • Больше ответов (feedback) для читателей, комментарии модерируются несколькими участниками.
  • Каждый участник получает дополнительную ауру почета/уважения, как если бы он сам написал все эти умные статьи блога.
  • Коллективный блог более живуч, в блог могут привлекаться новые активные участники.

Как присоединиться к соавторству этого блога?

  • Очное знакомство, географическая приближенность и доверие к будущему автору, т.к. все участники будут иметь права администратора (все равны, никто не работает на дядю).
  • Будущий автор должен внести вклад в содержимое блога, потому с него спрашивается материал будущих статей (иначе зачем тогда он нужен?).
  • Будущий автор согласен с положением лицензии Creative Commons Attribution 3.0 Unported License.
  • Качество и профессиональный уровень статей нового автора, а следственно и навыки самого автора, должны соответствовать уровню участников блога (что б не пиарился без внесения вклада в блог).

Включение исходных текстов программ в блоги blogger.

Для включения исходных текстов программ наиболее просто воспользоваться тегом <pre>. Но таким образом обрамленный текст будет сложно различим среди основного текста статьи, к тому же длинные строки будут перекрываться с содержимым sidebar (правой колонки блога) или вылазить за границы окна браузера.

Предлагается способ решения указанных проблем с использованием таблиц стиля (CSS).

Ниже приведен пример как выглядит текст в тегах <pre> на странице blogger:
#include <stdlib>

int main()
{
    puts("hello world!");

    return 0;
}

После добавления стиля:

div#code { border: dotted 1px $bordercolor; background: $codebgcolor; width: 95%; overflow: auto; line-height: 1em; margin: 5px; padding: 5px; white-space: pre; font-family: monospace; }
и добавления определения переменной codebgcolor:
<Variable name="codebgcolor" description="Code Background Color" type="color" default="#fff" value="#fffff0">
исходный текст программы стал виден как:
#include <stdlib> int main() { puts("hello world!"); return 0; }
Небольшое пояснение назначения элементов стиля:
border: dotted 1px $bordercolor;
граница области <div> в точечку, тоненькая, цвета, определенного в шаблоне
background: $codebgcolor;
используем специально определенный цвет фона
width: 95%; overflow: auto;
делаем ширину области фиксированной, при наличии длинных строк появится горизонтальная полоса прокрутки
line-height: 1em;
междустрочный отступ определен в верхнеуровневых тегах и выглядит ужасно для текста программы, определяем явно "хороший" отступ
margin: 5px; padding: 5px;
лучше выглядит когда рамка не сливается с текстом
white-space: pre; font-family: monospace;
позволяет тегу <div id="code"> вести себя как тег <pre>

Цвета фона я подбирал в Layout ==> Fonts and Color для новоопределенной переменной codebgcolor (здесь доступен вид блога сразу, on fly). Остановился на светло светло желтом.

Используется стиль следующим образом:

<div id="code">line-1 line-2 ... line-(n-1) line-n</div>
Первая строка текста должна находится на той же строке что и открывающийся тег <div id="code">, последняя строка текста должна находится на той же строке что и закрывающийся тег </div>. Иначе в начале или в конце могут появится одна пустая строка.

2009-04-05

Приветик на Brain Break!

Данный блог - просто русская версия http://brain-break.blogspot.com/.

Статьи блога должны быть сугубо технические:

  • только факты
  • KISS (в нашем случае Keep It Short), нет болтологии и пустословию
  • нет личным впечатлениям и переживаниям
  • долой рассказы как хорошо провел время в путешествии/покупал машину/выгнали с роботы
  • не переводим чужие статьи
  • не бросаемся ссылками
  • не касаемся политики/религии