December 2007 Blog Posts

Репутация

28 December 2007 |

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

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

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

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

Поэтому в обществе стали часто использоваться косвенные механизмы определения репутации человека: принадлежность к профессии, внешнему виду, достатку, образованию, сообщениям от 3-их лиц и СМИ в том числе. К примеру ваше отношение к работнику ГАИ,  программисту и президенту страны будет различным, именно потому что репутация профессии проецируется на репутацию ее обладателя.

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

Не надо никаких законов общество само будет наказывать презрением соответствующих людей. Вот такая утопия и идея для нового интернет-сервиса.

Think about future

27 December 2007 |

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

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

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

Перейти от слов к делу можно очень просто, для этого достаточно пойти в сберегательный банк и купить драгоценный метал. Конечно есть тонкости, к примеру при покупке вы вынуждены заплатить НДС 18%, эта плата фактически за то, что вы получаете в свое распоряжение драгоценный металл, те кто нами управляет тоже понимают, что так просто людям в собственность нельзя отдавать физические деньги.

Кстати а вот так они выглядят:Ingot

WCF New Opportunity For Architecture

25 December 2007 |

Как выглядит типовая архитектура информационной системы уровня предприятия. Это сервер/а баз данных, сервер приложений и клиенты. Взаимодействие между клиентом и сервером приложений происходит обычно в режиме SingleCall. Это обусловлено двумя факторами, существующие технологии (WebService, EnterpriseSerivces/COM+) способствуют этому и требования к масштабируемости, чтобы клиенту было все равно к какому физическому серверу обращаться.

Что может измениться с приходом технологии WCF. В общем то с концептуальной точки зрения в архитектуре приложения не так много изменений должно произойти. Требования к масштабируемости останутся, режим SingleCall по прежнему будет доминировать. Проще будет поддерживать транзакционность, безопасность, надежность, да конечно, но это детали. Единственно что может и должно повлиять на архитектуру приложений это доступность Duplex каналов. Грубо говоря, таки каналы позволяют серверу выступать в качестве инициатора действий. Не то чтобы раньше такого нельзя было сделать, можно конечно, но это было трудоемко.

Если задуматься где может пригодится такая модель, то ответ найдется сразу и ответ очевидный. Сервер может оповещать клиента об изменениях в данных произошедших на сервере. Проще говоря это серверные события. Воображение сразу начинает рисовать замечательные картины. Пользователь работает с данными а приложение ему и говорит: Вот это строчка изменилась, вот тут добавилось, а это уже удалилось, Петров только что добавил новый заказ... Чувствуете, все эти битвы вокруг конкурентного доступа становятся не такими важными, кнопочки Refresh благополучно исчезают с формочек, пользователь видит практически актуальные данные. И вот все это действительно сильное концептуальное изменение архитектуры.

Очевидно, что одно дело теория другое практика. Горизонтальная масштабируемость сервера событий это не так просто, возможно правда и не так нужно. Ограничения на использование привязок: wsDualHttpBinding или netTcpBinding. Причем в случае с wsDualHttpBinding необходимо учитывать ограничение, на то что callbackChanal может быть зарегистрирован только единожды, так что без специальных мер, 2 экземпляра приложения запустить не получиться или просто два клиента работающих с одним и тем же сервером событий.

А что вы хотели, на халяву сменить парадигму клиент - серверного взаимодействия не получиться. Вопрос здесь в другом окажутся ли плюсы больше минусов. Раньше был однозначный ответ НЕТ, с приходом WCF ответ может быть пересмотрен. Практика показывает, что с технической точки зрения такое взаимодействия сделать просто, но как изменится логика приложения...

Google курсы валют

21 December 2007 |

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

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

Современная сказка

20 December 2007 |

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

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

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

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

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

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

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

LINQ Sample

13 December 2007 |

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

В случае с LINQ наилучшем ресурсом содержащим эти примеры является, идущие в поставке с VS2008, примеры: C:\Program Files\Microsoft Visual Studio 9.0\Samples\1033\CSharpSamples.zip. Все что надо сделать, это распаковать файл, открыть решение LinqSamples.sln и выполнить проект SampleQueries. Именно выполнить, исходные коды всего этого смотреть совсем не обязательно.

WCF Async Call and Proxy Lifetime

11 December 2007 |

Microsoft утверждает, что WCF это просто, легко и удобно. Оно конечно так, только всегда надо помнить по сравнению с чем, с WS-* да конечно. На сам по себе это большой и сложный framework, понимание которого не есть легко и просто.

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

Сервер
Серверная часть состоит из одного сервиса, с одним методом, который возвращает строку. Метод выполняется эмулирует долгую операцию (выполняется 10 секунд). Настройки поведения сервиса по умолчанию при создании проекта "WCF Service Labrary" в VS2008.
NoteService.cs
    [ServiceBehavior(
        ConcurrencyMode = ConcurrencyMode.Single,
        InstanceContextMode = InstanceContextMode.PerCall
    )]
    public class NoteService :
INoteService
    {
        private int getCount;
        public string GetNote()
        {        
            System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
            return " Note: " + ++getCount;
        }
    }
INoteService.cs
    [ServiceContract]
    public interface
INoteService
    {
        [OperationContract]
        string GetNote();
    }

Клиент
Клиентом является приложение типа WinForm, сотоящее из одно формы на которой расположены два элемента: TextBox и кнопка Get. При нажатии кнопки Get вызывается сервис, результата записывается в TextBox. Вызов сервиса/запись результата приоизводиться в асинхронном режиме. Для работы с сервисом используются классы - Proxy сгенерированные стандартными средствами VS2008. Будут рассмотренны две реализации клиента, отличающиеся временем жизни proxy объекта.
Proxy живет столько же сколько форма:
private int count = 0;
private delegate void FakeDelegate();
private NoteServiceClient proxy = new NoteServiceClient();
private void getButton_Click(object sender, EventArgs e)
{
    proxy.BeginGetNote(new AsyncCallback(onEndGetNote), null);
}
private void onEndGetNote(IAsyncResult asyncResult)
{
    string note = proxy.EndGetNote(asyncResult);
    this.textBox.Invoke( new FakeDelegate(
        () => { this.textBox.Text = note + " " + ++count; } )
   );
}

Proxy создается для каждого вызова отдельно:
private delegate void FakeDelegate();
private int count = 0;
private void getButton_Click(object sender, EventArgs e)
{
    NoteServiceClient proxy = new NoteServiceClient();
    proxy.BeginGetNote(new AsyncCallback(onEndGetNote), proxy);
}
private void onEndGetNote(IAsyncResult asyncResult)
{
    using (NoteServiceClient proxy =
        (NoteServiceClient)asyncResult.AsyncState)
    {
        string note = proxy.EndGetNote(asyncResult);
        this.textBox.Invoke(new FakeDelegate(
            () => { this.textBox.Text = note + " " + ++count; } )
        );
    }
}

Вопросы
Исходные данные должны быть более менее понятны. Теперь вопросы для размышления:

  • Если на кнопку "быстро" нажать 25 раз подряд, для обоих вариантов использования proxy:
    Как будет меняться текст в textbox-е, по времени?
    Будут ли обработаны все запросы или произойдет ошибка?
  • Те же вопросы, но если изменить поведения сервиса на ConcurrencyMode = ConcurrencyMode.Reentrant или ConcurrencyMode = ConcurrencyMode.Multiple.

Факты
"На все вопросы не будет ответа..."
Здесь изложим факты без интерпретации, "иногда лучше молчать чем говорить". В конце концов, вы сами можете дать интерпретацию, навряд ли наше мнение вам тут поможет. Итак ответы, они же факты:

  • Быстро нажать 25 раз подряд
    Если используется proxy один для всех запросов то: значение в textBox будет обновляться каждые 10 сек, после минуты работы возникнет ошибка "Во время запроса HTTP в "http://.../...Service/" было превышено выделенное время ожидания для 00:01:00. Время, выделенное для выполнения этой операции, может быть частью более длительного тайм-аута.".

    Если использовать на каждый запрос отдельный экземпляр proxy то:
    значение в textBox будет обновляться, примерно как - каждые 10 минут 10 обновлений. Количество обновление обусловлено минимальным значением из <serviceThrottling maxConcurrentCalls="16" maxConcurrentSessions="10" />. Во время работы ошибок не возникнет, если суммарное время работы не превысить 1 минуты, для этого надо сделать примерно 60-70 вызовов.
  • Изменено значение ConcurrencyMode
    Если используется proxy один для всех запросов то:
    значение в textBox будет обновляться, примерно как - каждые 10 минут 16 обновлений. Количество обновление обусловлено значением maxConcurrentCalls="16". Ошибок не возникнет, если время работы не превысить 1 минуты.

    Если используется на каждый запрос отдельный экземпляр proxy, то значение ConcurrencyMode не оказывает влияние на поведение приложения.

Для полноты ощущений можно еще поэкспериментировать с [ServiceContract(SessionMode = SessionMode.NotAllowed )].

Вывод
WCF это не просто, и не легко. Относитесь к времени жизни proxy внимательно. Прежде, чем начать использовать WCF не помешает хорошая теоретическая подготовка.

Исходный код, VS 2008

Стабилизационный фонд РФ

09 December 2007 |

Возник такой интересный вопрос. На сайте министерства финансов есть такая статистика. Внимание надо обратить на последние две строки. Вопрос заключается в следующем: "Какая причина уменьшения стабилизационного фонда за август-сентябрь 2006 года, на 27%?". Вообще сам факт уменьшения стабилизационного фонда является интересным, а в таком объеме особенно.

Поразмышляв на эту тему выдвинул два предположения:

  • в это время происходила массовая выплата внешнего долга РФ
  • судя по времени август-сентябрь, выплаты производились с целью сдержать инфляцию (поддержать рубль)
  • другое

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

В этом году уменьшение стабилизационного фонда пришлось на ноябрь-декабрь. Особенно хочеться выделить операцию "Внесение имущественного взноса Российской Федерации в уставный капитал государственной корпорации “Банк развития и внешнеэкономической деятельности (Внешэкономбанк)” и в государственную корпорацию “Российская корпорация нанотехнологий”.", по которой списано 300 000 000 000,00 руб.

Результаты опроса

07 December 2007 |

Настало время подвести результаты опроса. Удивительно, но большинство 3 из 4-х участников, решили не лишать жизни невинного человека. Это по, всей видимости, говорит о том, что моральные принципы у них сильнее рациональных. Тем более удивительно, что основная масса участников - люди с техническим образованием. Как вы помните речь в опросе речь шла как раз о 4-х людях жизни 3-х из которых противопоставлялись 1 жизни, и в опросе приняло участие 4 человека мнение которых разделилось как 3 к 1-ому... магия цифр.

Мне было приятно видеть такие результаты, потому как мое мнение совпадает со мнением большинства.

Жаль только, что далеко не все читатели приняли участие в опросе.

GhostDoc 2008

06 December 2007 |

В связи с выходом VisualStudio 2008, необходимо обновить addon-ы. Одним из немногих которыми я пользуюсь это GhostDoc, предназначен для генерации XML комментариев кода на C#, приятно смотреть как оно за тебя думает.

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

TreeNode and BoldFont

06 December 2007 |

"Шаг вправо, шаг влево"

Наткнулся на баг в .NET WinForm. Элементарная казалось бы задача: "Есть TreeView в нем есть узлы, шрифт некоторых узлов надо сделать жирным". Так ведь нет, не работают стандартные средства, не то чтобы совсем не работают, ровно на столько чтобы ими не пользоваться. Шрифт конечно становиться жирным, только вот не весь текст после этого виден.

Видео - демонстрация бага

Массаракш

03 December 2007 |

У братьев Стругацких есть такое произведение: "Обитаемый остров". Ситуация в нашей стране и в мире, как мне кажется, там представленна достаточно полно. И прошедшие выборы нисколько не выбиваются из описанной модели. Всем кому интересно советую прочитать/перечитать.

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

2007-12-02 Vibory

Одним словом в "Багдаде все спокойно...", выборы прошли по плану, и все идет по плану, сами занете кого.

InfoWindows on .NET Framework 3.5

02 December 2007 |

В связи с выходом .NET Framework 3.5, обновил программу InfoWindows. Дистрибутив содержит файл "StringRepository.xml" с фразами, который можно подключить к программе.

PS При переводе всех решений на VS 2008 никаких проблем не возникло.