March 2009 Blog Posts

Имперское министерство народного просвещения и пропаганды

25 March 2009 |

Имперское Министе́рство наро́дного просвеще́ния и пропага́нды — центральное государственное учреждение в Третьем рейхе.

Министерство было основано 13 марта 1933 для консолидации действий по ведению пропаганды. Министерство внесло большой вклад в развитие немецкого радио- и телевещания.

25 мая 1933 была выпущена первая партия «народного радиоприёмника» в количестве 100 тысяч экземпляров. К концу года производство приёмников достигло полумиллиона. В этом же году была проведена национализация радиовещания. 22 марта 1935 появилась первая в мире регулярная телевизионная передача.

Министерство возглавляли: Йозеф Геббельс - (1933 - 1945 гг.)
(wikipedia)

С одной стороны: нельзя в одну реку войти дважды, с другой: что было, то и будет; и что делалось, то и будет делаться, и нет ничего нового под солнцем.

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

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

К чему это все, да так ни к чему, песня чукчи: что вижу о том и пою...

Time-Oriented Database Concept

25 March 2009 |

Вопрос о том как отслеживать историю изменений данных и получать сведенья из прошлого возникает с завидной регулярностью. И вот недавно появилась снова, лучшее описание этой задачи и методов ее решения, из того что нашел: Developing Time-Oriented Database Applications in SQL.

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

Введение

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

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

Постановка абстрактной задачи

Предположим что у нас есть следующая модель оперативной базы данных:

Time-Oriented Database_html_1d33b3db

В модели нет ничего сложного, сама база данных используется для учета текущего состояния объектов типа A, B и их взаимосвязей. Время от времени данные изменяют, т.е. добавляются/удаляются сущности A и B или/и изменяют значения и/или взаимосвязи между ними. Вот такая абстрактная простая модель предметной области.

А теперь предположим, что появилось требование: иметь возможность посмотреть набор объектов типа A и B, их значений и взаимосвязей на любой момент прошлого, а так же причины по которым изменялись данные. То есть речь идет об отслеживание хронологии состояния, с фиксацией причин изменения состояний. Такого рода развитее требований достаточно характерно, обычно это связано либо со спецификой предметной области, либо с желанием иметь возможность решать аналитические задачи, к примеру прогнозирование.

Концептуальная модель поддерживающая хронологию

С учетом нового требования концептуальная модель предметной области будет выглядеть следующим образом:

Time-Oriented Database_html_m46b39127

Где дата/время выделена как отдельная сущность с атрибутом значение, а сущности A, B связаны с датой, двумя связями (start и end). Семантика связи start и end - период времени когда существует объект с определенным значением Value и связями FK_R и R, к примеру объект A существовавший с 2009-03-23 по 2009-03-24, связанный с объектами B существовавшими в определенный промежуток времени по связи R и с объектами B существовавшими в определенный промежуток времени по связи FK_R.

Что означает сущность A в промежутке времени от start до end с семантической точки зрения - это объект с определенными значениями атрибутов и связей. У текущего (существующего в настоящее время) объекта связь end не определена. Изменение параметров текущего объекта эквивалентно, определению момента end, до которого существовал объект имеющий конкретные значения, и создание нового текущего объекта с уже новыми значениями. Удаление текущего объекта означает просто установку значения связи end. Создание нового объекта означает создание вне временного объекта и объекта во времени у которого определена связь start и не определена end, создаваемый временной объект становиться текущим.

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

Сущность Event с атрибутом описание - событие произошедшее в некоторый момент времени, которое привело к изменению параметров сущности А, B или их связей. Сделаем допущение, что в конкретному моменту времени может соответствовать только одно событие.

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

  • для конкретного объекта во времени значение значение start должно быть всегда меньше end, если это не текущий объект (end определен)

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

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

  • дата участвующая в связи occur с объектом Event должна обязательно участвовать хотя бы в одной из связей start, end, любой из сущностей

Таким образом мы получили модель которая позволяет отслеживать и хранить изменение значений атрибутов объектов на протяжении всего время существования системы.

Физическая модель с поддержкой хронологии

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

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

В результате этих и других тривиальный преобразований получим следующую физическую модель:

Time-Oriented Database_html_44f915d2

Рассмотрим характерные сценарии обработки изменений данных в таблицах подробно:

Создание нового объекта типа A

Создается новая запись в таблице A_History, которая становится текущей, т.е. EndDate у нее NULL.

Изменение значения Value у объекта типа A

Выбирается текущий объект в таблице A_History с соответствующим идентификатором A_Id, изменять можно только текущие объекты.

У найденной записи изменяется поле EndDate.

Создается текущая новая запись в таблице A_History с новым значением Value.

Если существуют текущие связи с таблице B_History по полю AHistoryId, то необходимо их сохранить для вновь созданной записи в таблице A_History. Для этого у всех соответствующих записей таблицы B_History устанавливается значение поля EndDate. Создаются новые текущие записи - клоны предыдущих по значениям, в который определена связь AHistoryId на созданную запись таблицы A_History. А ведь все эти записи, которые мы изменяли/создавали в таблице B_History тоже могут иметь связи отличные от AHistoryId и они тоже должны сохраниться во вновь созданных записях таблицы B_History, подробно здесь это рассматриваться не будет.

Если для изменяемой записи таблицы A_History существовали записи в таблице R, то для вновь созданной записи таблицы A_History, эти связи должны так же существовать. Ситуация аналогична ситуации со связью с таблицей B_Hisotory по полю AHistoryId, за исключением того что в таблице R нет временной составляющей, поэтому создание в ней новых записи не приведет к каскадным изменениям связанных с ней таблиц.

Удаление объекта типа A

Ищется текущая запись в таблице A_History, у ней определяется поля EndDate. У связанных с ней записей таблицы B_History так же определяется значение EndData - что семантически эквивалентно удалению.

Удаление связи R

Если связь конкретная связь R между объектами A и B перестала существовать, то в таблице R ничего не измениться, но создадутся новые записи клоны в таблицах A_History и B_History которые раньше соответствовали этой связи.

Добавление связи R

Если создана новая связь R для объектов A и B, то в таблице A_History и B_History создаются клоны соответствующих записей и создается запись в таблице R для этих клонов.

Уменьшение сложности и унификация физической модели

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

Time-Oriented Database_html_70ccd90e

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

Начальное состояние:

A

R

B

a1

a1, b1

b1

a2

a2, b1

b2

 

a1, b2

 


Предположим, что изменили значения у a1 и b2, т.е. появились их новые версии, как измениться набор данных:

A

R

B

a1

a1, b1

b1

a2

a2, b1

b2

a1`

a1, b2

b2`

 

a1`, b1

 

 

a1`, b2`

 


Заметьте что не в результате нет пар (a1`, b2) или (a1, b2`) именно потому что изменения в a1 и a2 были одновременными. Эти особенности необходимо учитывать при реализации механизма обработки изменений.

Эффективность

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

Заключение

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

При реализации рекомендуется рассмотреть вариант реализации с помощью триггеров СУБД.

Windows 7 - SPAM

23 March 2009 |

Если вы зарегистрируетесь по этой ссылке:

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

А если серьезно, то можно не напрягая голову почитать полу рекламные материалы Microsoft о Windows 7, вдруг кому нибудь это интересно.

WaterMark TextBox

22 March 2009 |

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

wmTextBox1 wmTextBox2

Разумная и элегантная идея, которую следует использовать в своих приложениях. Соответствующий элемент управления для WinForms нашелся быстро (WaterMark TextBox For Desktop Applications), удивило что для WPF такого элемента управления, должного качества, не нашел, не смотря на то что было лень самому его создавать, другого выхода не было, на основе WPF Search Text Box получился вполне работоспособный элемент управления.

Тем кто заинтересовался WaterMarkTextBox могут воспользоваться исходным кодом и демонстрацией.

IE8 How Fast

21 March 2009 |

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

В свое время я перешел с IE7 на Opera, потому что IE7 кривовато отображал Google Reader, GMail и некоторые другие сайты, тогда меня удивила скорость работы Opera по сравнению с IE7. Сейчас установив IE8 меня еще сильнее удивила скорость работы по сравнению уже с Opera. Замечательный пример конкуренции, если в IE8 не выявится больших недостатков и Opera не выпустит новый браузер, возвращение к IE будет вполне обоснованным...

Wild West Near

18 March 2009 |

Речь пойдет не о перестрелках, пьяных ковбоях их подружках и других завлекательный вещах. Суть дикого запада, когда работает один всеобъемлющий и древнейший закон: "Кто сильней тот и прав". Называя вещи своими именами, когда нет законов.

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

«Я тогда предложил применять силу государственного принуждения: хотите, законодательство меняйте, хотите, в индивидуальном порядке работайте. Но мы не можем жертвовать судьбой целых предприятий, работой многотысячных коллективов для удовлетворения амбиций отдельных кредитных учреждений», — подчеркнул Д.Медведев.

(Д.Медведев потребовал от «некоторых банков» прекратить корпоративный эгоизм)

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

...аналитик ИК «Финам» Владислав Кочетков: «Государство может обязать госбанки не банкротить реальный сектор»

«Также госбанки могли бы реструктурировать долги предприятиям реального сектора», — полагает главный экономист Deutsche Bank в России Ярослав Лисоволик. Владислав Кочетков опасается, что при запрете на банкротство должника банки будут закладывать этот риск в ставку по кредиту. «Если сейчас получить кредит можно под 30% годовых, то ставка может вырасти до 50%, — говорит г-н Кочетков. — Кредитоваться под такие проценты имеет смысл, если только компания не собирается возвращать кредит».

Прекратить корпоративный эгоизм

Трудно предположить, что под всем этим нет конкретной ситуации. Проще говоря: К чему бы все это? Если верить различным источникам, то показательным стало требования "Альфа Банка" расплатится по кредитам "РУСАЛ" - контролируется Дерипаска - очень богатый человек.

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

Непонятно почему надо помогать холдингам, оставляя при этом их в собственности богатейших людей. Если Дерипаске так уж нужен РУСАЛ, то пусть платит из своих денег, если нет, то пусть РУСАЛ переходит другому собственнику.

Пока в стране можно положить на правомерные требования, она так и останется страной: Водки, Матрешки и Медведей...

МКС разминулась с мусором

13 March 2009 |

3045273765_e40bf4267b_b 361px-Police_man_ganson.svg

«Мы смотрели, затаив дыхание. И не знали, что случится», – рассказал Марк Мэтни (Mark Matney), специалист по орбитальному мусору, работающий в НАСА с 1992 г. Он также рассказал, что это было самое близкое прохождение мусора от станции на его памяти. Обычно НАСА старается убрать станцию с пути космического мусора, как это было уже 8 раз за историю станции, однако в этот раз к тому времени, как мусор был замечен, менять что-то было уже поздно.
(МКС разминулась с мусором)

Мусор... да ещё космический только подумать, нигде и никому от него не спрятаться.

Religion In Russia

10 March 2009 |

Для большинства опрошенных (39%) религия является национальной традицией, 26% видят ее смысл в следовании моральным нормам, для 21% – это часть мировой культуры и истории, для 10% – соблюдение обрядов. Все десять христианских заповедей смогли вспомнить только 2% россиян, которые прочнее всего усвоили «не убий» (назвали 56% опрошенных), «не укради» (52%) и «не прелюбодействуй» (25%). Но самым парадоксальным моментом является то, что аборт назвали смертным грехом только 2% опрошенных.
Атеистов стало больше

Universe != World ?

09 March 2009 |

На жюри также лежит ответственность выбора представительницы нашей страны на международных конкурсах красоты - "Мисс Вселенная" и "Мисс Мира".
(Мисс Россия 2009)

Если на конкурсе мисс мира участвуют победительницы стран, то кто участвуют на конкурсе мисс вселенная...

EEE PC Windows Web Server 2008

03 March 2009 |

Я узнал главное — чтобы стать счастливым,
надо пережить состояние ужасной несчастливости.
(Фредерик Бегбедер)

Четыре месяца назад у меня появился ноутбук ASUS EEE 901 с ОС Linux. Первыми впечатлениями от Linux уже делился: Linux After 10 Year. Спасибо Microsoft спасло, участникам TechDays бесплатно давали Windows Web Server 2008.

Были сомнения установиться ли на такое слабое железо, будет ли приемлемая скорость, потянет ли он хостинг Web сервисов, которые я собирался на него перенести. В итоге установилось, но на скоростной SSD (4ГБ) не поместилось, пришлось устанавливать на дополнительный, немного настроек, отключение файла подкачки и теперь получаю огромное удовольствие.

- Если бить молоком по пальцу, то можно получать кайф.
- А в чем кайф?
- Кайф когда промахиваешься...

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