вторник, 30 декабря 2008 г.

Парадоксы...

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

Уход вниз - это всегда одновременно и подъём вверх, потому что нет низа и верха, есть глубина и широта.
А "восшел" что означает, как не то, что Он и нисходил прежде в преисподние места земли?
Нисшедший, Он же есть и восшедший превыше всех небес, дабы наполнить все.
(Еф. 4.9-10)

пятница, 26 декабря 2008 г.

Открыл для себя совершенно потрясающий лёгкий аудиопригрыватель lossless форматов foobar2000. И как я раньше мог слушать этот тяжеловесный Winamp...
Доменные объекты - это такие объекты, которые выражают в программе сущности из предметной области. Например, "сотрудник", "заказ", "рабочая группа", "здание", доменные объекты могут быть и более абстрактными - "тип материала", "единица измерения". Программисты, используя парадигму ООП (объектно-ориентированного программирования), стараются сводить написание кода к таким вот доменным объектам, абстрагируясь от более подробного уровня детализации, обусловленного самим языком. Доменные объекты могут обслуживаться обычными объектами, т.е. не имеющими представления в предметной области, но необходимыми для реализации программы, такими объектами могут быть, например, адаптеры базы данных.

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

По причине того, что формы существования объекта отличаются, программисту необходимо иметь инструменты для их двустороннего преобразования: из программной формы в фиксированную и обратно. Одним из механизмов такого преобразования является ORM (object relational mapping - "объектно-ориентированная проекция"), т.е. такая структура объектов, которая позволяет программисту абстрагироваться и от базы данных тоже. С точки зрения программы, объекты всегда остаются объектами.

Доменный объект хранит какие-то атрибуты, определяемые его классом. Эти атрибуты могут быть типизированы, хранить информацию о том, как их надо извлекать из внешнего хранилища и т.п. В плохих реализациях ORM информация об атрибуте "таскается" вместе со значением атрибута (описание и значение сливается в один объект во время инстанцирования). Это неблаготворно сказывается на объёме занимаемой оперативной памяти, потому что информация об атрибуте может быть весьма обширной, а экземпляров объекта может быть много сотен, а то и тысяч.

К сожалению, в языке PHP очень плохо продумана работа со статическими методами (эту проблему частично обещают исправить в версии 6.0), поэтому крепить информацию об атрибутах к классу неудобно (разве что создавать гигантский ассоциативный массив у самого главного родительского класса), значительно приятнее было бы иметь карту данных (совокупность описаний атрибутов) всегда под рукой у любого экземпляра доменного объекта, но при этом не хранить её в нём.

И тут нам на помощь приходит такая вещь, как статическая переменная внутри метода. Методом владеет каждый экземпляр класса, а вот статическая переменная в нём хранится одна на весь класс. Почти тем же приёмом пользуются, когда проектируют класс по паттерну Singleton.


abstract class DomainObject {
#...
public function get_map() {
static $map;
if (! $map) {
$map = $this->config();
self::check_map($map);
}
return $map;
}

abstract protected function config();
#...
}

Потомок такого класса может выглядеть как-нибудь так:

require_once 'class.DomainObject.php';
class DomainObjectRack extends DomainObject {

protected function config() {
$map = self::create_map();
$map->add(new APrototype('id', 'ID', 'fixnum'));
$map->add(new APrototype('name', 'NAME', 'string'));
$map->add(new APrototype('is_active', 'ACTIVE', 'bool'));
return $map;
}

}

Сразу после инстанцирования экземпляра объекта DomainObjectRack, мы всегда как извне, так и изнутри можем обратиться к описанию его внутренней структуры.

class TestDomainObjectRack extends UnitTestCase {
public function test_same_map() {
$rack = new DomainObjectRack();
$other_rack = new DomainObjectRack();
$this->assertReference($rack->get_map(), $other_rack->get_map());
// это один и тот же объект, но внутри экземпляра его нет
$this->dump($rack);
// дамп объекта не покажет нам карты данных, поскольку она доступна
// только из метода
}
}

понедельник, 22 декабря 2008 г.

Машины на тротуарах

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

Что делают автомобилисты? Ставят свои авто на любое свободное место: на тротуары, на газоны, на въезды в переулки (а на дороге - на остановки, на пешеходные переходы). Это, разумеется, противозаконно и бесчеловечно по отношению к пешеходам.

Ведь, допустим мама с ребёнком идёт вдоль дома. Где им идти, если машины заняли весь тротуар? По дороге. А по дороге едут автомобили, даже не притормаживая, когда проезжают мимо людей. Ребёнок может рвануться и попасть под колёса, мать может сделать шаг в сторону, не услышав машины, и оказаться сбитой. Машины на тротуарах - это всё равно, как если бы дороги строили без тротуаров вовсе. Это очень опасно (особенно зимой, когда можно поскользнуться и уехать ногами под проезжающий мимо автомобиль).

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

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

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

А какова, как правило, причина покупки машины? Так ли нам нужно столько машин? И каких? Легковой автомобиль обычно расчитан на 4 посадочных места, из которых ежедневно используется только одно--два. Всё остальное пространство, как на парковочных местах, так и на дорогах занимается впустую. А как обычно используются машины? Обычно, считается, что на машине ездят на работу (в условиях Москвы это ничуть не быстрее общественного транспорта, зато дороже и иногда дольше). Но обычно покупка машины является только способом скрыться от какой-то внутренней проблемы.

пятница, 19 декабря 2008 г.

Не могу понять страсть некоторых программистов помечать приватные и защищённые переменные и методы класса ведущим нижним подчёркиванием ($_data, $_createMap() и т.п.). Это может сказаться на проекте так же отрицательно, как использование префиксации для обозначения типов данных (arItems, intPrice, strBeginDate и т.п.), поскольку название переменной содержит дополнительную информацию, которая может поменяться во время разработки проекта. В этом случае придётся менять название переменной всюду, где она встречается.

четверг, 18 декабря 2008 г.

На сайте Элементы появилась статья про эксперимент нидерландских учёных, который выявил следующее: нарушение чистоты и порядка приводит к нарастанию нарушения общественных норм.

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

Понравился комментарий одного из посетителей сайта:

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

среда, 17 декабря 2008 г.

Программировал пользовательский интерфейс STB IPTV для телевизоров, подключённых к интернету. Очень забавное занятие.

воскресенье, 14 декабря 2008 г.

Эвенкийский язык



Кому понадобится. Сайт эвенкийского языка: http://tung.by.ru/index.htm

понедельник, 8 декабря 2008 г.

В беседе "Созерцание как молитва" митрополит Сурожский Антоний прекрасно говорит:
И еще нам нужно научиться созерцательно, то есть именно вдумчиво, внимательно прислушиваясь, приглядываясь, относиться к жизни. Часто жизнь нам представляется, как незаконченная ткань, и мы смотрим на нее с изнанки, словно мышка, которая бежит, смотрит наверх и видит: натянута ткань и какая-то нелепость; рисунка нет, все какие-то нитки висят в беспорядке. Мы порой смотрим на жизнь так, и она нам кажется бессмысленной; мы с изнанки на нее глядим: нет узора, нет цели, нет движения, только какие-то монотонные линии, которые прерываются узлами, откуда висят неотрезанные нитки. Это мы делаем просто потому, что жизнь видим на разных уровнях. Есть Божий уровень, есть очень простой человеческий уровень, и есть какой-то средний уровень, скажем, газетный. Жизнь по газете - это выборка из всего, что может поразить человека. Если взять газету и посмотреть, на что похож сегодняшний день в мире, то он состоит из конфликтов разного рода. Личных конфликтов (украл, убил), общественных конфликтов, военных конфликтов, конфликтов природы (землетрясение, пожар и.т.д.). И все конфликты, - и без всякого разрешения. Это в каком-то смысле видение ткани со стороны мыши. Это видение, которое недостаточно большое и недостаточно маленькое. Оно недостаточно большое, потому что нет ключа, который давал бы, указывал бы перспективу и пропорцию вещей; все равно важно, лишь бы было довольно жутко или поражало; и недостаточно мелко, потому что это больше человеческого размера, но не на человеческий масштаб.

Есть другой подход; Библия, Священное Писание - это видение той же истории человечества, но с совершенно странной точки зрения: с Божией. Вот читаете Священное Писание. Царь такой-то правил сорок шесть лет. “А! - думает историк, - ну, тут-то можно что-нибудь узнать, сорок шесть лет правил - что-нибудь да случилось”. Библия нам говорит: в его время стали строить капища на верхушках гор, и напали на Израиль соседи. И добрый историк пожимает плечами: какой интерес в том, что строили капища на верхушках гор? Неужели сорок шесть лет царствования сводились к тому, что это случилось? - Именно, сводится к тому, ибо вся сущность его царствования в том, что при нем люди отвернулись от Бога и начали строить капища. А все остальное - совершенно безразлично, потому что ничего не осталось ни от царя, ни от его народа, ни от его городов, ни от того, что было создано руками человеческими. Бог посмотрел - и это действительно ужасно в каком-то отношении: сорок шесть лет жизни - просто пустота. Лишь эти капища нам говорят: вот изменник; отвернулся - и погиб. Тут совсем другое видение истории, пророческое, священное видение истории. И в этом отношении Библия не может заменить учебник истории, но она колоссально интересна, потому что если взять параллельно это царствование в учебнике истории и по Библии, вы видите: суд человеческий - и суд Божий, масштаб человеческий - и Божий масштаб; что важно - что неважно, что значительно - что незначительно. И это иногда заставляет остановиться и крепко задуматься; потому что если вместо того, чтобы сказать “царь такой-то”, вы скажете: “Иван прожил шесть лет, и все что в его жизни имеет какое-то значение, это то, что он построил капище где-то у себя в душе”, - это совершенно другое дело. Создал себе идола: сводка целой человеческой жизни.

Есть и еще один масштаб, который нам очень хорошо известен, но на который мы не обращаем достаточно внимания. Как бы мы ни смотрели на историю, в самой широкой перспективе или в средней мышино -газетной перспективе, есть еще более мелкая перспектива, где вещи снова делаются реальными. Мне вспоминается эпизод из времен войны. Ну, кто-то в нас стрелял, и мы как можно площе лежали - это естественное дело. Сначала было неприятно, что стреляют, но нельзя постоянно напрягаться, постепенно само напряжение заставляет расслабиться. Я лежал на животе, был месяц май, стреляли над головой, я делался как можно более плоским и смотрел перед собой на единственное, что было: трава была. И вдруг меня поразило: какая сочная, зеленая трава, и два муравья ползли в ней, тащили какое-то зернышко. И я загляделся; и вот на этом уровне вдруг, оказывается, есть жизнь, нормальная, цельная жизнь. Для муравьев не было ни пулеметов, ни стрельбы, ни войны, ни немцев - ничего; была крупица чего-то, что составляло всю жизнь этих двух муравьев и их семейств. И вот если бы мы умели быть более внимательными, то заметили бы, что при самых тяжелых обстоятельствах можно сойти на уровень - даже не мыши, а муравья, посмотреть и увидеть, что жизнь все равно есть. Да, все трудности есть, но я дышу, я живу, и тысячи вещей происходят, которые как бы вне досягаемости среднего уровня жизни. Такое видение истории или моей личной жизни, или семейной, или коллективной жизни на уровне Божием, либо наоборот, на таком простом, скромном, человеческом уровне, куда не достигает многое, - это тоже начало созерцательного настроения; потому что это заставляет нас оторваться (или предполагает, что мы оторвались) от напряжения и от суеты, от взволнованности, от того, что вся проблема сводится ко мне: я - в центре. Вокруг целый мир, бесконечно расширяющаяся вселенная, а я в центре - крупица, малюсенькая крупица, но все-таки центр. В момент, когда мы оторвались, мы можем смотреть и видеть сначала муравьев и мураву, а потом можно увидеть, что все-таки и небо есть, и не все время стреляют, и стреляли-то полчаса - и не попали; масса вещей вдруг, оказывается, есть, живых, простых, - потому что мы не каждую минуту умираем. И вот в этой созерцательной настроенности слушания, видения, чувствования себя, вдумчивости все сводится к тому, чтобы научиться смотреть на ткань жизни, всматриваться в жизнь: свою, чужую, нашу коллективную. И учиться действовать только вовремя.

четверг, 4 декабря 2008 г.

Первые впечатления от варгана

Это было в Карелии, на берегу озера Глубокое, во время военно-исторической игры по Скандинавии IX в. в 2001 году. Был вечер, народ отдыхал у костров, раздавались звуки различных инструментов.

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

На этой фотографии не видно индийского морчанга.

Немного игры на морчанге (файл WMA, на Народе).

среда, 3 декабря 2008 г.

Дочитал "Солярис"

Дочитал "Солярис" Станислава Лема. Хороший рассказ. Но фильм Тарковского значительно глубже и интереснее. Хотя для меня теперь существует два вполне равноправных "Соляриса", один одухотворённый, другой обезбоженный.

Примечательны две цитаты, найденные в Википедии:
Андрей Тарковский

Главный смысл… фильма я вижу в его нравственной проблематике. Проникновение в сокровенные тайны природы должно находиться в неразрывной связи с прогрессом нравственным. Сделав шаг на новую ступень познания, необходимо другую ногу поставить на новую нравственную ступень. Я хотел доказать своей картиной, что проблема нравственной стойкости, нравственной чистоты пронизывает все наше существование, проявляясь даже в таких областях, которые на первый взгляд не связаны с моралью, например, таких как проникновение в космос, изучение объективного мира и так далее.
Станислав Лем

«Солярис» — это книга, из-за которой мы здорово поругались с Тарковским. Я просидел шесть недель в Москве, пока мы спорили о том, как делать фильм, потом обозвал его дураком и уехал домой… Тарковский в фильме хотел показать, что космос очень противен и неприятен, а вот на Земле — прекрасно. Я-то писал и думал совсем наоборот.
Мне кажется, что Лем не понял Тарковского. Ведь о разном, о разном они говорят. И главная идея Лема вовсе не в "наоборот", это он, видимо, на эмоциях сказал.

Подмена понятия дружбы в социальных сетях

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

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

Также для современного человека кажется неочевидным, что название непосредственно и очень сильно влияет на называемое. И хотя он нередко сталкивается с отдельными поучительными случаями такой связи, всё-таки старается в неё не верить.

Однако человеческое сознание не имеет дело непосредственно с объектами окружающего его мира, их воспринимают органы чувств, а сознание воспринимает уже образы, т.е. целые понятия, взаимосвязанные и наделённые контекстом. Для человека очень важно название, потому что оно включает в нём определённые связи. Если постоянно использовать вместо одного слова другое, то происходит подмена одного понятия на другое, даже если в реальности они не связаны, а человек может продолжать оперировать в своём сознании уже изменённой структурой. Справедливо и обратное. Можно повторением научить связывать такие понятия, которые связаны непосредственно, но удалены друг от друга причинно-следственно, т.е. их связь сложно закрепить только через ощущения.

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

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

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

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

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

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

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

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