пятница, 19 ноября 2010 г.

Материалы в своей библиотеке

Часто приходится сохранять информацию различного плана. Это могут быть интересные статьи, научные публикации, отрывки из книг и обсуждений. И для всех их я выделил несколько способов сохранения.

Сохранение оригинала как есть в виде страницы

В онлайн-ресурсе страница сохраняется как есть (пример).

  • + Такое сохранение удобно модифицировать, поэтому оно необходимо для развивающихся идей/проектов.
  • + Информация не потеряется.
  • - Но представить в таком виде можно не любой материал (например набор исполняемых файлов не пойдет, а также онлайн ограничен емкостью — например pbworks фриварный: 2 Гб на workspace).

Использую для любых развивающихся проектов и идей.

Сохранение материала в виде архивного файла в онлайне

Файл сохраняется как есть, а на ресурсе есть ссылка на архив.

  • - Такой файл не просмотришь сходу, надо скачивать.
  • - Работать с файлом только там, где есть разархиватор.
  • - Дополнительные действия на архивацию-разархивацию.
  • - Кроме того, в отличие от страницы, хуже дела обстоят с версионностью.
  • + Сохранять можно информацию любого вида.
  • + Сохранять можно сразу каталог файлов, т.е. произвольное файлово-каталоговое множество.
  • + Информация не потеряется.

Если нельзя сохранить в виде страницы, то удобнее так. Это касается набора файлов и информации, не представляемой в виде страницы.

Сохранение у себя на диске

На HDD/DVD/.. создается специальный каталог, где хранится материал.

  • + Сохранение практически любого объема информации.
  • + Сохранение информации любой структуры.
  • + Информацию сложнее и дольше найти при необходимости.
  • - Отсутствие онлайна.

Данный способ использую только в исключительных случаях. Например есть книга Бейбера на "Error Free Sowtware" на буржуйском, которую в свое время с трудом нашел и занимает она 50 Мб PDF-a. Соответственно такие тяжелые вещи в онлайне хранить нецелесообразно. Или например хранение видео для просмотра. Но в большей части храню ссылки на видео, а на диске находятся только то, что ожидает просмотра или актуально.

Сохранение ссылки

Линк и название, больше ничего.

  • + Сохранение как ссылки на динамический ресурс.
  • + Информацию можно не найти, если ссылка станет дырявой.

Использую только для ресурсов — например ссылка на блог, инструмент, сайт, …

Сохранение слов контекстного поиска

Это то, из-за чего появился этот пост.

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

  • + Повышение надежности .
  • + Информация найдется в таком виде, как есть. Её не нужно переформитировать.
  • - Нет 100%-тной надежности.
  • - Используется только для статических ресурсов.

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

На удивление набор достаточно простых слов часто оказывается весьма уникальным в интернете. Но, конечно, лучше использовать какие-либо редкие слова, фамилии и имена, числа, а также отсутствие знаков препинания.

Может у кого-нибудь найдется особенный способ сохранения?


вторник, 16 ноября 2010 г.

Ковариантность и контравиантность

Понятия достаточно широкие, и соответственно могут использоваться как в математике, так и в физике, так и в computer science, так и при математическом доказательстве правильности программ (см. вики и wiki).

Обозначение

Если A ковариантен B, то это будем записывать как A cov B.

Если A контравариантен B, то это будем записывать как A contrav B.

Если A инвариантен B, то это будем записывать как A inv B.

Общее определение

A cov B тогда true, когда все что есть в B есть в A. Или более точно: условие A всегда захватывает B.

A contrav B тогда true, когда все что есть в A есть в B. Или более точно: условие B всегда захватывает A.

A inv B тогда true, когда все что есть в А есть в В, а также все что есть в B есть в A; или A cov B и при этом B cov A.

Примеры

Множества

{x,y,z} cov {x, y} = true

{x,y,z} cov {x, y, z} = true

{x,z} cov {x, y} = false

{x} cov {x, y} = false

{x} cov {} = true

{x} cov {x, y} = false

Типы

Пусть имеется иерархия наследования:

Здесь:

{инструмент} cov {отвертка} = true

{инструмент} cov {крестовая отвертка} = true

{инструмент} cov {отвертка; молоток} = true

{отвертка} cov {молоток} = false

{отвертка} cov {инструмент} = false

{отвертка;молоток} cov {инструмент} = false

Условия

{x > 0} cov {x > 1} = true

{x > 0} cov {false} = true

{x > 0} cov {true} = false

{x > 0} cov {x > 0 and y > 0} = true

{x > 0} cov {x > 0 or y > 0} = false

{x > 0 and y > 0} cov {x > 0} = false

{x > 0 and y > 0} cov {x > 1} = false

Применение

LSP

См. LSP

Пусть имеется базовый тип A и его подтип B.

Для них необходимо, чтобы для любой функции

type1
func( type2 value );

выполнялось:

A::type1 cov B::type1

A::type2 contrav B::type2

Т.е. например можно так:

class A {
    float
    func( double x );
};
 
class B: public A {
    double
    func( float x );
};

Но нельзя так:

class A {
    float
    func( double x );
};
 
class B: public A {
    double
    func( float x );
};

Если для функции существует любое предусловие pred и любое постусловие post, то необходимо, чтобы выполнялось 

A::pred contrav B::pred

A::post cov B::post

Например:

  1. Имеется предусловие перед созданием объекта A о необходимости открытого файла f. Тогда в предусловии создания объекта B этот файл может быть как открыт, так и нет.
  2. Имеется постусловие после выхода из полиморфной функции объекта A - внутренняя функция Release() должна быть вызвана. Соответственно, в этой же функции в объекте B внутренняя функция Release() также должна быть вызвана.

Изменение условий вывода при доказательстве правильности

Если рассматривается программа в виде троек Хоара

{P} C {Q}

то при движении в прямом направлении можно усиливать условия. Т.е. должно выполнятся Qold cov Qnew.

Соответственно при движении в обратном направлении должно выполняться  Pold contrav Pnew.

Например имеем программу и предусловие:

{x > 0}
x = x + 1;

Для неё постусловие есть {x > 1}. Но чтобы сказать, что {x > 0} возможно будет достаточно доказательства что {x > 2}.

И для постусловия:

x = x + 1;
{x > 0}

Здесь предусловием будет {x > -1}. Но данное предусловие можно усилить. Т.е. если мы докажем, что {x > 0}, то это также будет доказывать, что {x > 0} после инкремента.

Рафинирование


понедельник, 15 ноября 2010 г.

PBWorks трансформация

Изначально PBWorks планировался как тотальное хранилище информации и центр разработки документов. Но в течением времени он превратился в настоящий экзокортекс. Т.е. большое кол-во информации, которая далеко не всегда закончена, не всегда обработана, и по сути, представляет собой единый развивающийся контент для человека. По-моему, это очень хороший прообраз для "подумай чужой головой" для случая, когда кто-то лазит по такому ресурсу.

Сейчас же внутри ресурса находится много материала самого различного вида — только мне понятные идеи (ППС), контейнеры информации для обработки (Софистика), конспекты других вещей (GTD), разрабатываемые проекты (Молекулярная память мозга) и т.д..

После такой трансформации появилась мысль и необходимость создания отдельной сущности, которая бы выполняла роль хранения и представления структурированной и потенциально полезной информации для пользователей. По которой уже можно полазить нормальному (в нашем времени) человеку (; Чтобы например на нем были выложены в удобном виде такие собранные статьи, как Методы восстановления зрения, Leaky Abstraction, Поиск потерянных вещей и т.п. — что удобоваримо и воспринимаемо.

Сейчас кандидатами на такие ресурсы являются:

  • Публикации в блоге.
  • Отдельная структура в pbworks.
  • Некий сайтовый ресурс (например сайты гугла).

Блог не имеет целостности таких документов и предназначен он для другой цели, и при этом автоматически не обновляется в случае рафинирования. Структура в pbworks является неким дублем. А сайтовый ресурс имеет трудности в переносе контента, отсутствии автоматического рафинирования и является дополнительной сущностью.

Наиболее рабочим вариантом представляется страница pbworks в виде набора ссылок на разработываемые или законченные проекты.


GTD

Приблизительно месяц назад начал для себя разбор GTD. В то время шел очередной виток самоорганизации и GTD попал под раздачу (не без влияния РТД). И я так думаю, что достаточно удачно (;

Различные формы самоорганизации у меня присутствовали очень давно. Например ещё в средних классах школы присутствовала записная книжка с прорафинированным материалом различного рода. Далее были другие системы хранения, попытка сборки своего движка хранения в инете, сборка принципов/закономерностей, использование различного софта и железа (Evernote, PocketPC) и др.. Сейчас же после GTD она приобрела некую целостность и формализованность.

Что это такое и с чем его едят либо знают, либо могут ознакомится сами. У меня же были некоторые интересные моменты.

Разбор входящих

Прежде всего достаточно большое число вещей были приравнены к источникам (входящим). Примерный и неполный список:

  • Data каталоги на HDD (массы информации, которые приравнены к данным и неким образом каталогизированы).
  • SVN-архивы. В свое время развивающиеся информационные ресурсы были поставлены под SVN.
  • FIDO-фильтрованные массы информации.
  • Google Remarks.
  • Данные на сброшенных CD-DVD дисках.
  • Письма e-mail'ов — все ящики.
  • Temp'ы и Incoming'и всех машин.
  • Записные книжки.
  • Стопки бумаг и папок.
  • Все неупорядоченные вещи дома и в офисе.
  • SMS.
  • Каталоги Downloads.
  • Minder — собственноручно написанная софтина, живущая в трее, в которую можно в любой момент что-либо записать или сохранить.

Посылка была такова, что вся неупорядоченная информация должна быть упорядочена. Что является справочным должно отправится в соответствующее хранилище (pbworks). Те задачи, которые не были выполнены или хотят чтобы были выполнены — превращены в задачи. Кроме того, ставилась задача, согласно которой вся информация должна храниться в минимуме приемников.

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

В конце было особенно смотреть на чистые e-mail'ы, всегда обработанные RSS. А также отсутствующие гигабайты разбросанной по разным типам приемников информации. Необычно и по-своему приятно (;

Объединение под общее всего

Вроде об этом говорил Д. Аллен, а может и нет, но при прочтении книги GTD было принято решение объединения всего под одним основанием и в одной системе. Т.е. все дела, которые являются офисными, житейскими, личными, … объединились в одно — список дел общий, ежедневник один, хранилище одно и т.п.. Это дало свой эффект как результат освобождения оперативки сознания от лишних сущностей.

Выполнение быстрых дел

В GTD есть одно из правил — это выполнение без фиксации в системе дел, которые требуют быстрого выполнения. Это правило немного трансформировалось в выполнение всего и всегда, на что требуется малое количество времени. Сначала таких дел было много, но само их выполнение дает ощущение движения, а после полного выполнения и поддержания отсутствия быстрых дел методом их выполнения — чувство завершенности и большего порядка.

Тотальная фиксация идей

Реализация принципа GTD, согласно которому всегда под рукой должны быть инструменты для фиксации идей и задач привела к тому, что во многих ситуациях начали всплывать идеи, о которых вспомнить в обычной обстановке было практически невозможно. И после их фиксации за первую неделю их оказалось реально и неожиданно много. Настолько, что их пришлось разгребать и структурировать, и значительную часть отправить в отложенные.

Впечатление

Новая самоорганизация дала следующие очучения:

  • Ничего не теряется. Все, что появляется в поле зрения — либо фиксируется, либо делается.
  • Ответственность за выполнение задачи. Если себе или кому-то говоришь, что «сделаю», и это попадает в систему, то от него уже не отмажешься. И теперь перед тем, как сказать «сделаю» нужно отдавать себе и другим отчет.
  • Присутствие общего порядка. Порядка на рабочем и жилом месте, в ходе выполнения дел, в хранении информации, …
  • Всегда есть чем заняться. И данный список достаточно большой, чтобы можно было заняться различными типами деятельности.
  • Уменьшение нервозности «что-то забыл». Т.е. если идем куда-то, то уже есть готовый список того, что нужно. Нет мыслей «а вдруг чего забыл», на месте нет мыслей «а чего бы ещё такого сделать», при обсуждении нет мыслей «о чем мы ещё не поговорили» и т.д.. Соответственно это дает больший контроль и уверенность.
  • Пустые источники — никто тебя не ждет, все под контролем.

Самоорганизация как собственная система

Также как и Д.Аллен считаю, что самоорганизация должна быть продуктом собственной разработки для каждого. Можно брать какие-то принципы у других людей, вычитывать в книгах (GTD, Тайм-драйв, …), проводить собственные разработки). Но в конечном итоге это должна быть собственная система, которую нужно понимать, развивать и затачивать под свои реалии. Поэтому я например не понимаю конспектов-руководств такого рода и думаю что тезисный разбор утверждений более необходим. Может для людей с отсутствием какой-либо организации можно и полезно делать копи-паст, но для самоорганизованных, творческих и развивающихся личностей — ну никак нельзя.


четверг, 11 ноября 2010 г.

Коллективный интеллект

Интересная статья о сабже, на которую обратил внимание и соответственно можно сделать нижеследующие выводы.

Под коллективным интеллектом подразумевается способность решать различные интеллектуальные задачи группой человек. Чем больше задач и быстрее способна решить группа, тем она обладает большим интеллектом.

На основании статьи можно сделать следующие выводы:

  • Если коллектив хорошо решает задачу одного типа, то он скорее всего и справится с задачей другого типа (типы задач совершенно разные - творчество, игра в шашки, печать текста, логика, транспортная задача).
  • Среднее значение IQ команды и максимальный IQ команды слабо влияет на результат выполнения.
  • Наиболее определяющими факторами успеха являются: социальная восприимчивость, число женщин и стремление к доминированию у членов группы. Первые два — это фактически способность понимать друг друга. Соответственно третий — чем выше склонность к доминированию у отдельных участников, тем ниже успешность выполнения задач (и полагаю, что склонность к отсутствию инициативы тоже).

Так что, если работаете в одиночку, то нужно хорошо прокачивать интеллектуальные способности. Если уже команда — то психология имеет важное или решающее значение.


среда, 3 ноября 2010 г.

Авторские олимпиадные задачи по программированию

Когда-то, лет 10 (плюс минус 3) назад, занимались мы олимпиадным программированием с ориентацией на ACM. И в это время мною было собрано несколько интересных, для кого-то сложных, а для кого-то веселых, задач. Почти все из них пошли в серию и были выставлены на соревнованиях.

Сейчас найденные собраны в одном месте на всеобщем обозрении.