<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-17856637</id><updated>2012-02-17T00:17:06.632+06:00</updated><category term='софт'/><category term='Syringe'/><category term='.NET'/><title type='text'>Мысли Старосты</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>45</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-17856637.post-2965738882134036887</id><published>2010-04-13T23:29:00.000+06:00</published><updated>2010-04-13T23:30:11.381+06:00</updated><title type='text'>Эксперимент с комментами</title><content type='html'>Интереса ради подключил сюда &lt;a href="http://disqus.com"&gt;Disqus&lt;/a&gt;. Посмотрим, с чем его едят.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-2965738882134036887?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/2965738882134036887/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=2965738882134036887' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/2965738882134036887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/2965738882134036887'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2010/04/blog-post.html' title='Эксперимент с комментами'/><author><name>Юрий</name><uri>http://www.blogger.com/profile/15910217651901175618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-1712531763434667286</id><published>2009-12-29T23:35:00.006+05:00</published><updated>2010-09-21T22:16:04.654+06:00</updated><title type='text'>google prettify</title><content type='html'>Оказывается, существует subj - библиотека для подсветки синтаксиса кода (используется, например, Google Code). Поддерживает кучу языков.&lt;br /&gt;&lt;br /&gt;Например, C#:&lt;br /&gt;&lt;code class="prettyprint lang-cs"&gt;&lt;br /&gt; class A&lt;br /&gt; {&lt;br /&gt;     public abstract void Foo();&lt;br /&gt; }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;или Python:&lt;br /&gt;&lt;br /&gt;&lt;code class="prettyprint"&gt;&lt;br /&gt;   def select_odd(list):&lt;br /&gt;       return [n for n in list if n % 2 == 0]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Сама либа &lt;a href="http://code.google.com/p/google-code-prettify/"&gt;здесь&lt;/a&gt;. Я &lt;strike&gt;бомжара без хостинга&lt;/strike&gt;читер, поэтому прицепил экземпляры, выложенные на gstatic.com экземпляры. Буду надеяться, что их в ближайшее время не поудаляют (да и меня заодно с ним %))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-1712531763434667286?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/1712531763434667286/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=1712531763434667286' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/1712531763434667286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/1712531763434667286'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2009/12/google-prettifyd.html' title='google prettify'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-3947488087975392872</id><published>2009-11-10T21:06:00.002+05:00</published><updated>2009-12-30T12:01:27.079+05:00</updated><title type='text'>Доступ к классам С++ из C#</title><content type='html'>&lt;p&gt;Иногда есть желание использовать из C# код на плюсах (т.е. построенный на классах). Традиционно варианта три:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;использовать С++/CLI, чтобы завернуть native классы в классы CLR.&lt;/li&gt;    &lt;li&gt;Сделать (вручную или с помощью SWIG) обертку вокруг классов, и использовать P/Invoke для доступа к ним.&lt;/li&gt;    &lt;li&gt;оформить классы в виде COM-объектов.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Первый вариант напряжен тем, что требует наличия компилятора Visual C++ (реализации для mono, например, нет). Кроме того, C++/CLI – язык специфичный, ему нужно учиться (я как-то огреб утечку памяти, не разобравшись в разнице между !Class() и ~Class()).&lt;/p&gt;  &lt;p&gt;Второй проблемен уже тем, что на выходе вы получите библиотеку с процедурами, оперирующими хендлами объектов, и, скорее всего, вам придется заново строить объектную модель вокруг всего этого. Удовольствие то еще.&lt;/p&gt;  &lt;p&gt;Недостаток третьего подхода в том, что COM, вообще говоря, штука тяжелая, со своими требованиями к оформлению кода, вдобавок, обычно требующая регистрации в реестре (хотя это можно обойти). Достоинство – прямое отображение COM-интерфейсов на интерфейсы .NET.&lt;/p&gt;  &lt;p&gt;Вот &lt;a href="http://blog.worldofcoding.com/2009/08/binding-c-apis.html"&gt;тут&lt;/a&gt; я прочитал про интересный подход, “скрещивающий” второй и третий варианты взаимодействия. Принцип следующий - С++ объект допиливается так, чтобы реализовывать IUnknown (т.е. иметь в начале vtable методы QueryInterface, AddRef, Release), но создается посредством фабричной функции, экспортированной из DLL. &lt;/p&gt;  &lt;p&gt;Выглядит это примерно &lt;a href="http://pastie.org/691780"&gt;так&lt;/a&gt; (я разбил код на два класса, один из которых инкапсулирует работу COM, а другой – полезную логику). Обратите внимание, что мы накручиваем счетчик ссылок каждый раз, когда QueryInterface срабатывает успешно, а когда счетчик ссылок уменьшается до нуля, мы освобождаем память.&lt;/p&gt;  &lt;p&gt;Также обратите внимание, что сигнатура метода ComputePi() имеет привычный вид, а не безобразие типа &lt;/p&gt;  &lt;code class="prettyprint"&gt;HRESULT __stdcall ComputePi(float* pResult);&lt;/code&gt;  &lt;p&gt;Клиентский код выглядит &lt;a href="http://pastie.org/691792"&gt;ещё проще&lt;/a&gt;. Обратите внимание, что для поддержки не-COM-овской сигнатуры на методе выставлен атрибут [PreserveSig]. Значение атрибута [Guid] должно совпадать с GUID-ом, обрабатываемым в QueryInterface.&lt;/p&gt;  &lt;p&gt;При загрузке .NET создаст прокси, называемый RCW (runtime callable wrapper), вызовет QueryInterface для заданного GUID’а, после чего станет возможным работать RCW как с обычным объектом.&lt;/p&gt;  &lt;p&gt;Достоинства: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;минимум кода пишется с обоих сторон&lt;/li&gt;    &lt;li&gt;никакого реестра, регистрации и пр.&lt;/li&gt;    &lt;li&gt;кроссплафтоменно (работает и в MS.NET и в mono). Максимум – придется описать самому GUID для IUnknown.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Недостатки: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Обычный С++ класс (не содержащий в начале vtable методы IUnknown) так использовать нельзя – система тупо рассчитывает на то, что vtable имеет заявленную структуру. На крайний случай, вы можете делегировать вызовы своему объекту.&lt;/li&gt;    &lt;li&gt;В стандартном COM-е коды HRESULT используются для сообщений об ошибках. При interop-е по ним строятся исключения .NET. Здесь такая схема не работает, нужно использовать свой механизм сигнализации об ошибках. Исключения С++, по крайней мере, в случае MinGW, приводят к завершению работы программы (думаю, в случае VC++ они могут сработать, но не тестил).&lt;/li&gt;    &lt;li&gt;Сложное межобъектное взаимодействие (передачу объектов в виде параметров) делать таким образом можно задолбаться. Но это общее место любого interop-а.&lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-3947488087975392872?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/3947488087975392872/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=3947488087975392872' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/3947488087975392872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/3947488087975392872'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2009/11/c.html' title='Доступ к классам С++ из C#'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-8294003782927033045</id><published>2009-08-20T10:54:00.001+06:00</published><updated>2009-08-20T11:15:25.243+06:00</updated><title type='text'>Про google Guice</title><content type='html'>&lt;p&gt;Оказывается, guice умеет разрешать циклы в зависимостях.&lt;/p&gt;  &lt;p&gt;Т.е. если есть острое желание, например, построить связку Presenter и View, в которой оба класса зависят друг от друга, он это разрулит, построив прокси для того, кого ему не получается построить.&lt;/p&gt;  &lt;p&gt;Забавно, Castle.Windsor, например, этого не делает принципиально. А Ninject вообще зависает на циклических зависимостях.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-8294003782927033045?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/8294003782927033045/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=8294003782927033045' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/8294003782927033045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/8294003782927033045'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2009/08/google-guice.html' title='Про google Guice'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-5040906658815973493</id><published>2009-08-13T11:20:00.001+06:00</published><updated>2009-08-13T11:20:54.776+06:00</updated><title type='text'>Реализация закладки для элемента управления PropertyGrid</title><content type='html'>&lt;p&gt;Одной из важных фич Syringe является возможность перехватывать события, порождаемые тестируемым элементом управления.&lt;/p&gt;  &lt;p&gt;Я решил реализовать настройку перехватчиков средствами того же &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.propertygrid.aspx"&gt;PropertyGrid’а&lt;/a&gt;, что и используется для редактирования свойств. Тогда интерфейс оказывается максимально похож на VisualStudio и, следовательно, не вызывает удивления.&lt;/p&gt;  &lt;p&gt;Логично было вынести список событий на отдельную закладку.&lt;/p&gt;  &lt;p&gt;Я попробовал использовать стандартную закладку &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.design.eventstab.aspx"&gt;EventsTab&lt;/a&gt;, но не осилил. Для своей инициализации она требует слишком много зависимостей, запрашиваемых неявно через родительский контейнер. Даже если бы я уже приделал DI-контейнер (зря я это откладываю, ох, зря) и отследил все обращения, все равно я оказался бы перед необходимостью реализовывать целую кучу интерфейсов типа &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.design.idesignerhost.aspx"&gt;IDesignerHost&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.design.ieventbindingservice.aspx"&gt;IEventsBindingService&lt;/a&gt; и пр., функциональность которых мне не очень-то нужна.&lt;/p&gt;  &lt;p&gt;Поэтому я решил реализовать свою закладку с нуля. Ну, не совсем =) На самом деле, у &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.design.propertytab.aspx"&gt;родительского класса&lt;/a&gt; абстрактными являются только свойство TabName и метод GetProperties.&lt;/p&gt;  &lt;p&gt;Я реализовал GetProperties так, чтобы он возвращал по PropertyDescriptor’у для каждого события в тестируемом объекте (а список событий получил через &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.typedescriptor.aspx"&gt;TypeDescriptor&lt;/a&gt;), причем для этих дескрипторов указал в качестве редактора использовать список доступных логгеров (я их реализовал два – пишущий в лог и показывающий MessageBox). Адаптацию логгеров к разным типам событий была сделана еще раньше.&lt;/p&gt;  &lt;p&gt;Я добавил свою закладку в PropertyGrid, и, о чудо… она не появилась. Выяснилось (при просмотре в Reflector’е), что, кроме реализации абстрактных методов, есть еще одно неочевидное условие: закладка должна что-то возвращать по запросу свойства Bitmap, которое используется для выбора иконки закладки! OMFG! Перекрыв это свойство я таки достиг успеха.&lt;/p&gt;  &lt;p&gt;Так что теперь Syringe может перехватывать события (правда, пока не умеет нормально форматировать их аргументы), а пользователь может удобно выбрать тип перехватчика. Это первая (и очень полезная, ИМХО) фича, которой принципиально нет в &lt;a href="http://msdn.microsoft.com/en-us/library/ms171738.aspx"&gt;UserControlTestContainer&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Моя доволен =)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-5040906658815973493?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/5040906658815973493/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=5040906658815973493' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/5040906658815973493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/5040906658815973493'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2009/08/propertygrid.html' title='Реализация закладки для элемента управления PropertyGrid'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-3831132342170016824</id><published>2009-08-11T20:31:00.001+06:00</published><updated>2009-08-11T20:31:30.945+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Syringe'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='софт'/><title type='text'>Упрощение реализации INotifyPropertyChanged</title><content type='html'>&lt;p&gt;Объект, корректно реализующий интерфейс INotifyPropertyChanged оказывается “наблюдаемым” (observable), т.е. изменения его состояния могут легко отслеживаться подписчиками и, например, отображаться на визуальных компонентах в актуальной форме. &lt;/p&gt;  &lt;p&gt;Однако при реализации этого интерфейса следует явным образом указывать строку - имя свойства, которое было модифицировано. Это чревато ошибками.&lt;/p&gt;  &lt;p&gt;Опять же, довольно много кода приходится писать по нескольку раз.&lt;/p&gt;  &lt;p&gt;Общественность =) неоднократно предлагала различные решения этой проблемы – от &lt;a href="http://ayende.com/Blog/archive/2009/08/07/nhibernate-amp-inotifypropertychanged.aspx"&gt;построения прокси-INotifyPropertyChanged&lt;/a&gt; вокруг POCO-объекта и &lt;a href="http://code.google.com/p/propfu/"&gt;патча бинарников с помощью PostSharp-а&lt;/a&gt; до &lt;a href="http://obtics.codeplex.com/"&gt;различных&lt;/a&gt; &lt;a href="http://ayende.com/Blog/archive/2009/08/08/an-easier-way-to-manage-inotifypropertychanged.aspx"&gt;структур&lt;/a&gt;, &lt;a href="http://www.google.com/search?client=opera&amp;amp;rls=ru&amp;amp;q=dependencyProperty&amp;amp;sourceid=opera&amp;amp;ie=utf-8&amp;amp;oe=utf-8"&gt;упрощающих привязку&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Я, естественно, пошел своим путем, т.к. во всех вариантах меня что-то не устраивало =)&lt;/p&gt;  &lt;p&gt;В итоге остановился на том, что создал интерфейс и пару реализаций (для отдельного свойства и для списка), которые можно увидеть &lt;a href="http://code.google.com/p/syringe-control/source/browse/SyringeControl/WinForms/INotifyingProperty.cs"&gt;здесь&lt;/a&gt;, &lt;a href="http://code.google.com/p/syringe-control/source/browse/SyringeControl/WinForms/SimpleProperty.cs"&gt;здесь&lt;/a&gt; и &lt;a href="http://code.google.com/p/syringe-control/source/browse/SyringeControl/WinForms/ListProperty.cs"&gt;здесь&lt;/a&gt;. Пример использования можно увидеть &lt;a href="http://code.google.com/p/syringe-control/source/browse/SyringeControl/ViewControlModel.cs"&gt;здесь&lt;/a&gt;. Как видно, boilerplate-а поубавилось.&lt;/p&gt;  &lt;p&gt;Недостатки: текущим реализациям &lt;em&gt;надо&lt;/em&gt; передать имя свойства и их события надо перенаправить классу-модели. &lt;/p&gt;  &lt;p&gt;Первое можно забороть с помощью Reflection-а (смотреть, какое свойство вызвало метод Set()), второе – сделать класс ModelBase, а в нем метод, настраивающий подписку для всех свойств разом.&lt;/p&gt;  &lt;p&gt;Но я пока не решил, надо ли мне это =)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-3831132342170016824?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/3831132342170016824/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=3831132342170016824' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/3831132342170016824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/3831132342170016824'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2009/08/inotifypropertychanged.html' title='Упрощение реализации INotifyPropertyChanged'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-5283956310742745946</id><published>2009-08-11T19:59:00.001+06:00</published><updated>2009-08-11T19:59:52.586+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Syringe'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='софт'/><title type='text'>Fluent data binding</title><content type='html'>&lt;p&gt;В .NET есть возможность привязывать свойства графических элементов к свойствам некоторого объекта-модели.&lt;/p&gt;  &lt;p&gt;В результате привязки изменения в одном месте отражаются в другом. Например, редактирование текста в TextBox-е может автоматически обновлять поле Text в модели. Или изменение в модели флага , привязанного к свойству Enabled может блокировать элемент управления.&lt;/p&gt;  &lt;p&gt;Сампл можно посмотреть &lt;a href="http://pastebin.com/m1aeef556"&gt;здесь&lt;/a&gt; (показана только т.н. “простая привязка”, “сложная” делается ), хотя, уверен, ни для кого ничего фундаментально нового в этом нет.&lt;/p&gt;  &lt;p&gt;Чем это хорошо? Хорошо это тем, что существенно уменьшается объем кода, связанного с отображением данных. &lt;/p&gt;  &lt;p&gt;Чем это плохо? Плохо это тем, что свойства как модели, так и представления кодируются строками. Со всеми вытекающими отсюда следствиями, от которых и велемудрый R# не всегда защитит. Пытается защищать от этого графический редактор в VS,&amp;#160; но, опять же, только частично (к тому же, я лично предпочитаю писать код, а не тыкать мышкой).&lt;/p&gt;  &lt;p&gt;Работая над Syringe, я решил защититься от возможных проблем со строками и набросал небольшой набор классов и методов-расширений, обеспечивающих устойчивую к опечаткам и типобезопасную привязку.&lt;/p&gt;  &lt;p&gt;Для получения получения информации о свойствах я решил использовать деревья выражений. Они контролируют типы объекта-аргумента и результирующего значения на этапе компиляции, однако не позволяют автоматически проверить, действительно ли в теле выражения указано свойство аргумента. Это приходится делать мне. Однако уже налицо прогресс, по сравнению с привязкой по строкам.&lt;/p&gt;  &lt;p&gt;Пример можно увидеть &lt;a href="http://pastebin.com/m545a111a"&gt;здесь&lt;/a&gt;. Как видно, код стал компактней, при его написании сложнее ошибиться. &lt;/p&gt;  &lt;p&gt;Реализацию можно посмотреть &lt;a href="http://code.google.com/p/syringe-control/source/browse/SyringeControl/WinForms/BindingExtensions.cs"&gt;в исходниках&lt;/a&gt; проекта на &lt;a href="http://code.google.com/p/syringe-control/"&gt;google.code&lt;/a&gt;. Там же можно посмотреть и пример привязки к спискам данных.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-5283956310742745946?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/5283956310742745946/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=5283956310742745946' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/5283956310742745946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/5283956310742745946'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2009/08/fluent-data-binding.html' title='Fluent data binding'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-4821131326798166660</id><published>2009-07-30T11:37:00.001+06:00</published><updated>2009-08-11T20:00:09.778+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Syringe'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='софт'/><title type='text'>Syringe UserControl testing container</title><content type='html'>&lt;p&gt;Это такая утилита для тестирования и отладки элементов управления (UserControl’ов) WindowsForms (возможно, потом и WPF).&lt;/p&gt;  &lt;p&gt;Похожа на поставляемый с VS &lt;a href="http://msdn.microsoft.com/en-us/library/ms171738.aspx"&gt;UserControlTestContainer&lt;/a&gt;. То есть пользователь может выбрать тип контрола, контрол будет создан на форме и пользователь имеет возможность всячески глумиться над ним, в том числе напрямую редактировать его публичные свойства.&lt;/p&gt;  &lt;p&gt;Основное отличие – возможность “подсовывать” контролу его зависимости с помощью механизма &lt;a href="http://en.wikipedia.org/wiki/Dependency_injection"&gt;Dependency Injection&lt;/a&gt; (поэтому проект и называется “шприц” =)). Предусмотрено два способа:&lt;/p&gt;  &lt;p&gt;- регистрация зависимости в контейнере для контролов, получающих их через стандартный механизм Component.GetService();&lt;/p&gt;  &lt;p&gt;- инъекция зависимостей при конструировании контрола (в конструктор и в свойства).&lt;/p&gt;  &lt;p&gt;В результате появится возможность тестировать гораздо более самодостаточные компоненты. &lt;/p&gt;  &lt;p&gt;Текущая версия 0.1 (наваянная вчера часа за два =)) почти точно соответствует UserControlTestContainer (если не считать багов =))&lt;/p&gt;  &lt;p&gt;Проект живет &lt;a href="http://code.google.com/p/syringe-control/"&gt;здесь&lt;/a&gt;. Буду рад комментариям.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-4821131326798166660?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/4821131326798166660/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=4821131326798166660' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/4821131326798166660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/4821131326798166660'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2009/07/syringe-usercontrol-testing-container.html' title='Syringe UserControl testing container'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-8582000145692738913</id><published>2009-06-22T18:03:00.002+06:00</published><updated>2009-06-22T18:06:00.916+06:00</updated><title type='text'>Про генерацию кода</title><content type='html'>Вводная: для служб WCF можно запросить метаданные (в виде WSDL, MEX и чего-то там ещё) и сгенерировать по ним прокси-класс. А можно взять сборочку с метаданными службы (интерфейсами и прочими DTO) - если разработчик ее даст, конечно.&lt;br /&gt;Лично мне второй вариант кажется предпочтительней, особенно, если разработчик я. Как следствие, клиент и сервер работают с одними и теми же (а не с похожими) типами, проще делать mock-и для клиента, а вся PITA, связанная с установкой и поддержанием соединения &lt;a href=http://www.castleproject.org/container/facilities/trunk/wcf/index.html&gt;решается с помощью Castle&lt;/a&gt; (там, конечно, тоже будет прокси, но с заявленными интерфейсом).А вот MS, как будто бы, поощряет первый подход. А что предпочитаете вы, коллеги (необязательно для случая WCF, я так понимаю, что подходы похожи для разных технологий RPC)?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-8582000145692738913?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/8582000145692738913/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=8582000145692738913' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/8582000145692738913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/8582000145692738913'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2009/06/blog-post.html' title='Про генерацию кода'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-5076072455735609544</id><published>2009-04-01T09:51:00.003+06:00</published><updated>2009-04-01T10:59:04.872+06:00</updated><title type='text'></title><content type='html'>После громких сообщений, касающихся возможной продажи компаний &lt;a href=http://www.bloomberg.com/apps/news?pid=20601087&amp;sid=a_0CHRWCFx4w&amp;refer=home&gt;Sun Microsystems&lt;/a&gt; и &lt;a href=http://www.hoznews.com/hoz-life-style/yahoo-open-to-sale-partnership-for-search-business&gt;Yahoo&lt;/a&gt;, теперь появилась &lt;a href=http://tinyurl.com/cf3kkr&gt;информация о покупке корпорации Apple Гуглом&lt;/a&gt;.&lt;br /&gt;В частности, как утверждают, председатель Гугл Эрик Шмидт заявил, что объединение с &lt;a href=http://en.wikipedia.org/wiki/Apple_Inc.#cite_note-7&gt;одной из самых уважаемых компаний США&lt;/a&gt; пойдет на пользу его компании. В частности, их привлекают &lt;a href=http://arstechnica.com/apple/news/2009/03/last-years-pwn2own-winner-says-safari-will-be-first-to-fall.ars&gt;возможности ОС по удаленному администрированию&lt;/a&gt;.&lt;br /&gt;В рамках слияния ряд продуктов получит новые названия. Примерами могут служить новый &lt;a href=http://code.google.com/appengine/&gt;Google Apple Engine&lt;/a&gt; и &lt;a href=http://code.google.com/p/google-guice/&gt;Google Apple Juice&lt;/a&gt;.&lt;br /&gt;Также общественности предъявлен новый логотип объединенной компании:&lt;br /&gt;&lt;a href="http://www.imagecross.com/"&gt;&lt;img src="http://hosting02.imagecross.com/image-hosting-06/47128px-Apple-logo-new.jpg"&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.imagecross.com/"&gt;Image Hosting&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-5076072455735609544?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/5076072455735609544/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=5076072455735609544' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/5076072455735609544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/5076072455735609544'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2009/04/sun-microsystems-yahoo-apple.html' title=''/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-6401893159673189689</id><published>2008-10-16T21:49:00.007+06:00</published><updated>2008-10-16T22:26:47.996+06:00</updated><title type='text'></title><content type='html'>Между тем, MS, похоже, наваяла свой собственный клон Erlang'а, обозвав его 'Concurrency and Coordination Runtime', но запрятала его так, что заметил один &lt;a href=http://msdn.microsoft.com/en-us/magazine/cc163556.aspx&gt;Рихтер&lt;/a&gt;. Конкретно, в Microsoft Robotics Studio.&lt;br /&gt;Наличествующие сущности:&lt;br /&gt;- Dispatcher - набор потоков, в которых исполняется код.&lt;br /&gt;- DispatcherQueue - очередь заданий, исполняемых потоками диспетчера в режиме round-robin.&lt;br /&gt;- Port - типизированный вход для отправки сообщений на обработку. Порты могут группироваться в PortSet'ы (например, для связывания с операциями, результатом которых может быть значениие либо exception). &lt;br /&gt;- Arbiter - собственно, обработчик сообщений, помещающий при срабатывании соответствующую задачу в очередь. Т.е. Арбитры напоминают оператор receive в erlang'е, но обладают большим разнообразием: есть арбитры для получения одного/нескольких сообщений с одного порта, обработки событий с любого или со всех портов из набора (т.е. объединение событий по ИЛИ/по И).&lt;br /&gt;Что особенно приятно, все это довольно очевидным связывается с более традиционной Asynchronous Programming Model (которая "BeginXXX/EndXXX").&lt;br /&gt;Надо будет эту штуку попробовать, создается впечатление, что с ее помощью удобно реализовывать многопоточные сервисы... =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-6401893159673189689?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/6401893159673189689/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=6401893159673189689' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/6401893159673189689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/6401893159673189689'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2008/10/ms-erlang-concurrency-and-coordination.html' title=''/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-1092785589871157101</id><published>2008-09-04T21:38:00.000+06:00</published><updated>2008-09-04T21:39:20.185+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='софт'/><title type='text'></title><content type='html'>Все уже написали, один я остался.&lt;br /&gt;Исправляюсь.&lt;br /&gt;Пользовательские впечатления:&lt;br /&gt;- красивенько (и интерфейс, и особенности рендеринга, типа подсветки активного элемента HTML);&lt;br /&gt;- шустренько;&lt;br /&gt;- маловато функциональности для меня (я привык к RSS-агрегатору, почтовому клиенту и детальным настройкам в Опере), но jedem das seine (&lt;lj user="senaris"&gt;, например, доволен). Опять же, предполагается, что почту и RSS люди будут юзать гугловские =);&lt;br /&gt;- пока глючно (чего стоит падение от сочетания символов %:);&lt;br /&gt;- не проникся идеей ресайза одних только шрифтов;&lt;br /&gt;- проверка орфографии для русского языка отстойна (или "отстой на", как она сама предложила =))&lt;br /&gt;&lt;br /&gt;Технические впечатления:&lt;br /&gt;- Необычен (но достоин уважения) подход по выделению закладок в отдельные процессы-sandbox'ы (хотя от вышеупомянутой баги не защищает ;));&lt;br /&gt;- памяти кушает больше, чем Опера&lt;br /&gt;- напрягает периодический ломёж браузера на гугловские сайты (видимо, с сообщениями о перемещениях пользователя, пока не понял);&lt;br /&gt;- напряг пункт в EULA насчет передачи всего сформированного контента в длинные руки гугла, но &lt;a href=http://en.wikipedia.org/wiki/Google_Chrome#Terms_of_service&gt;говорят&lt;/a&gt;, что этот пункт отменен;&lt;br /&gt;&lt;br /&gt;Мнение:&lt;br /&gt;Цель создания этой программы, скорее всего, все-таки не создание еще одного FLOSS-браузера, а построение клиентской части гугловской платформы разработки Web-приложений (в особенности, работающих на Google App Engine). Т.о., Chrome конкурирует не с IE/Firefox/Safari/Opera, а с Silverlight/JavaFX/AIR. Об этом говорит наличие встроенного отладчика JavaScript и инспектора HTML, использование Gears, упор на быстродействие движка JS.&lt;br /&gt;Такое вот ИМХО.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-1092785589871157101?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/1092785589871157101/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=1092785589871157101' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/1092785589871157101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/1092785589871157101'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2008/09/blog-post.html' title=''/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-5323571726591403363</id><published>2008-08-28T10:44:00.006+06:00</published><updated>2009-12-30T00:08:55.008+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>работа с C# Expression trees</title><content type='html'>&lt;span&gt;Иногда стопроцентно известна сигнатура конструктора класса (соглашение такое, скажем), но сам класс неизвестен.&lt;br /&gt;Например, потому что этот класс - параметр дженерик-метода. А у дженериков в качестве ограничения типа можно задать только конструктор без параметров, что не гуд.&lt;br /&gt;Тогда приходится использовать reflection.&lt;br /&gt;Например, через класс Activator.&lt;br /&gt;Но использование reflection'а имеет некоторый (хотя и обычно терпимый) оверхед, плюс, оно просто не интересно =), поэтому можно попробовать иначе.&lt;br /&gt;Воспользоваться так называемыми деревьями выражений, появившимися в .NET BCL 3.5. Они позволяют динамически строить и анализировать (как это делают провайдеры LINQ) AST выражений (в том числе, соответствующих делегатам). А потом выражения для делегатов можно откомпилировать в CIL (который затем JIT откомпилирует в native-код). &lt;br /&gt;Самое лучшее - когда типы, используемые в выражении известны. &lt;br /&gt;Тогда построения дерева выражения можно возложить на компилятор, написав что-то вроде:&lt;/span&gt;&lt;br /&gt;&lt;code class="prettyprint"&gt;Expression&amp;lt;Func&amp;lt;char[],string&amp;gt;&amp;gt; e = chars =&gt; new string(chars);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Но если бы типы были известны, вообще делать было бы нечего. Поэтому нам придется строить дерево вручную. Что, в общем-то, тоже несложно.&lt;br /&gt;Легко увидеть, что дерево выражения для данного конструктора имеет вид (в псевдокоде)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;code class="prettyprint"&gt;(lambda (chars)(new (get-constructor (typeof string) (typeof chars[])) chars)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span&gt;В реальном коде на C# это будет выглядеть как:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;code class="prettyprint"&gt;var p = Expression.Parameter(typeof(char[]), "chars");&lt;br /&gt;var lambda = Expression.Lambda&amp;lt;Func&amp;lt;string&amp;gt;&amp;gt;(&lt;br /&gt;    Expression.New(typeof(string).GetConstructor(typeof(char[]), p);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span&gt;аналогично и для других конструкторов: &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;new T(params) -&amp;gt;&lt;br /&gt;&lt;code class="prettyprint"&gt;(lambda (params) (new&lt;br /&gt;  (get-constructor (typeof T) (map (lambda (p) (typeof p)) params)&lt;br /&gt;  params)&lt;/code&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;и дерево будет выглядеть как&lt;br /&gt;&lt;code class="prettyprint"&gt;var parameters = (from t in argTypes&lt;br /&gt;                  select Expression.Parameter(t, "@"+t))&lt;br /&gt;                  .ToArray();&lt;br /&gt;Expression.Lambda(&lt;br /&gt;  Expression.New(targetType.GetConstructor(argTypes), parameters),&lt;br /&gt;  parameters);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;N.B.: ВАЖНО, чтобы параметры в теле лямбда-функции совпадали с ее параметрами, т.к. компилятор ищет их именно по совпадению, а не по имени.&lt;br /&gt;Как видно, реальный код хотя и отличается, но не очень значительно.&lt;br /&gt;Я наваял небольшой класс, кэширующий скомпилированные конструкторы. Замеры показали, что однократная компиляция+извлечение из словаря обгоняют чистый рефлекшен  где-то с 16 тыс. созданий объектов, скэшированный же явным образом результат вообще вне конкуренции, т.к. это просто вызов конструктора.&lt;br /&gt;В общем, expression trees могут оказаться хорошей заменой System.Reflection.Emit или System.CodeDom.Compiler там, где надо сгенерировать код на лету, но до порождения CIL  или генерации кода в виде текста напрямую спускаться не хочется.&lt;br /&gt;При этом, возможности expression trees ограничены - в них сложно обеспечить последовательное выполнение команд (разве что используя для этого AndAlso) и обработку исключений, нельзя породить класс (не для этого они созданы) и пр.&lt;br /&gt;Опять же - не для того они были сделаны =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-5323571726591403363?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/5323571726591403363/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=5323571726591403363' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/5323571726591403363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/5323571726591403363'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2008/08/c-expression-trees.html' title='работа с C# Expression trees'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-8196008066935039702</id><published>2007-01-29T11:11:00.000+05:00</published><updated>2007-01-29T13:28:46.628+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>сериализация сериализовалась-cериализовалась да и десериализовалась</title><content type='html'>Ситуация: есть некоторые объекты, которые надо долговременно хранить (в БД/на диске).&lt;br/&gt;Платформа: .NET&lt;br/&gt;Очевидное решение: десериализация.&lt;br/&gt;&lt;br/&gt;Неочевидная проблема: если у сборки, где определен сериализованный тип меняется строгое имя (strong name), десериализация объета невозможна.&lt;br/&gt;Пояснение: Любой тип в .NET характеризуется именем, структурой И &lt;i&gt;сборкой, в которой он определен&lt;/i&gt;. Это сделано целенаправленно, чтобы избежать глюков/дыр в связи с наличием нескольких типов, имеющих одинаковые имена. &lt;br/&gt;Для идентификации сборки используется ее строгое имя, т.е. совокупность имени, версии и &lt;br/&gt;публичного ключа автора/издателя. &lt;br/&gt;Если у сборки изменить строгое имя, то при десериализации ранее сериализованного объекта окажется, что система просто не знает, где определен тип, к которому он принадлежит.&lt;br/&gt;Решения:&lt;br/&gt;а) подписывать сборки проекта как можно раньше и не менять публичный ключ.&lt;br/&gt;б) не использовать стандартный механизм сериализации для хранения данных, если есть вероятность, что публичный ключ может быть изменен впоследствии.&lt;br/&gt;&lt;br/&gt; Первый вариант, безусловно, наиболее предпочтительный. Но не всегда реальный. Увы.&lt;br/&gt; Второй хорош для RealProgrammer'а, который считает злом использование готовых решений. Можно, скажем, ручками писать поля объектов в поток. Но при необходимости сериализовать объекты разных классов издержки оказываются слишком велики. Еще один вариант - XML-сериализация - может оказаться неприемлемым по всем тем причинам, по которым XML &lt;br/&gt;оказывается менее предпочтительным, нежели бинарный формат.&lt;br/&gt;Остается последний вариант &lt;br/&gt;в) найти способ ручного управления выбором типов.&lt;br/&gt; Оказалось, что третий путь (как обычно ;)) наиболее простой и эффективный (с т.зр. расширяемости). Для этого достаточно создать свою реализацию класса &lt;a href="http://msdn2.microsoft.com/en-us/library/system.runtime.serialization.serializationbinder.aspx"&gt;System.Runtime.Serialization.SerializationBinder&lt;/a&gt;.&lt;br/&gt; Конкретно - перекрыть в нем метод BindToType.&lt;br/&gt;&lt;pre&gt;class MyBinder: SerializationBinder{&lt;br/&gt;      public override Type BindToType(string assemblyName, string TypeName){&lt;br/&gt;              // логика выбора типа на основе имени сборки, версии и пр. &lt;br/&gt;              else return null;&lt;br/&gt;      }&lt;br/&gt;}&lt;/pre&gt;&lt;br/&gt;А затем задать экземпляр своего класса в качестве значения свойства Binder.&lt;br/&gt;&lt;pre&gt;BinaryFormatter bf = new BinaryFormatter();&lt;br/&gt;bf.Binder = new MyBinder();&lt;/pre&gt;&lt;br/&gt;Bingo! Привязка осуществляется корректно.&lt;br/&gt;Причем, насколько я понимаю, даже не обязательно реализовывать в привязываемом типе ISerializable, достаточно атрибута &lt;br/&gt;[Serializable]. &lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-8196008066935039702?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/8196008066935039702/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=8196008066935039702' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/8196008066935039702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/8196008066935039702'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2007/01/c.html' title='сериализация сериализовалась-cериализовалась да и десериализовалась'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-1778322555940449107</id><published>2007-01-21T18:27:00.000+05:00</published><updated>2007-01-21T18:37:56.834+05:00</updated><title type='text'></title><content type='html'>Я вот подумал, и решил использовать этот блог для технических постов, ранее публиковавшихся в моем &lt;a href =" http://elder_george.livejournal.com"&gt;ЖЖ&lt;/a&gt; под тегом &lt;a href ="http://elder-george.livejournal.com/tag/мой+Вавилон"&gt; "мой Вавилон"&lt;/a&gt;.&lt;br/&gt;Потому как ЖЖ - он по сути своей всё-таки вещь для более гуманных проявлений жизнедеятельности, нежели сравнение кода, порождаемого компиляторам Хаскелля, Немерля и Волта...&lt;br/&gt;Ну, вы поняли =)&lt;br/&gt;Посему там будут только краткие отрывки из описания моих программных эскапад, а здесь - более развернутые рассказы.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-1778322555940449107?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/1778322555940449107/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=1778322555940449107' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/1778322555940449107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/1778322555940449107'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2007/01/blog-post.html' title=''/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-392450799738923297</id><published>2006-09-17T14:22:00.000+06:00</published><updated>2007-01-21T20:02:34.788+05:00</updated><title type='text'>По итогам вчерашних полночных бдений за связкой FarEditor-csc</title><content type='html'>1) Функции высшего порядка и ленивые списки (в т.ч. реализованные через итераторы .NET) рулят;&lt;br/&gt;2) Использование вышеперечисленного и generic-ов вообще в языке, не поддерживающем type-inference - акт мазохизма;&lt;br/&gt;3) отсутствие механизма макросов в Шарпе начинает напрягать... избаловался, блин! &lt;br/&gt;&lt;br/&gt;Юзаю Nemerle и жду третьего шарпа. Хотя зачем?&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-392450799738923297?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/392450799738923297/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=392450799738923297' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/392450799738923297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/392450799738923297'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2006/09/fareditor-csc.html' title='По итогам вчерашних полночных бдений за связкой FarEditor-csc'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-6422458224437714430</id><published>2006-08-27T00:23:00.000+06:00</published><updated>2007-01-21T19:34:03.815+05:00</updated><title type='text'>Продолжая тему языков ;)</title><content type='html'>Изучаю внутренности такого замечательного языка, как &lt;a href="http://kahu.zoot.net.nz/mondrian/doc/index.html"&gt;Mondrian&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;Краткая характерстика:&lt;br/&gt;&lt;br/&gt;- "чистый" (без побочных эффектов) функциональный язык;&lt;br/&gt;&lt;br/&gt;- по синтаксису - смесь урезанного Haskell'а с Java;&lt;br/&gt;&lt;br/&gt;- как и Хаскелл, реализует &lt;b&gt;очень&lt;/b&gt; своеобразный ООП;&lt;br/&gt;&lt;br/&gt;- компилится под .NET 1.1 (под 2.0, ес-сно, тоже);&lt;br/&gt;&lt;br/&gt;- предполагаемая ниша - ASP.NET-программирование;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Также в пакет входит и компилятор для Haskell под .NET (для работы требуется наличие компилятора GHC, точнее, видимо, его либ), правда, скорее препроцессор Haskell-&gt;Mondrian.&lt;br/&gt;&lt;br/&gt;Впрочем, сам компилятор Mondrian порождает код на C#, так что компиляция с Haskell представляет собой компиляцию Haskell-&gt;Mondrian-&gt;C#-&gt;.NET. Что само по себе забавно :)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Впрочем, это еще детский сад.&lt;br/&gt;&lt;br/&gt;Дело в том, что, насколько мой рассудок смог определить, программа на Mondrian выполняется в собственной виртуальной машине(!), реализованной в .NET(!!!). &lt;br/&gt;&lt;br/&gt;По кр.м. программка HelloWorld трансформировалась в 50 шарповых строк, программка с двумя версиями вычисления факториала (рекурсивной и оконечно-рекурсивной) - в 300 с лишним (что утешает, т.к. заметно, что объем генерируемого кода растет нелинейно ;)).&lt;br/&gt;&lt;br/&gt;Самый шок наступил, когда я заглянул в их ран-тайм библиотечку (исходники качать было в лом, посему заюзал мегаинструмент Reflector, декомпилирующий .NET-код в CIL, C#, VB, Delphi, MC++ и Chrome).&lt;br/&gt;&lt;br/&gt;Так вот, эти извращенцы мало того, что наваяли свою ВМ, так они еще и написали, скажем, своb класс ы Vector, Stack и т.п. (что назыается, для внутреннего пользования), причем всякие разные перечисления элементов они смело реализовали сами, отлично от подхода, реализуемого в .NET, так как видимо, решили, что при переборе содержимого коллекции гораздо лучше написать&lt;br/&gt;&lt;br/&gt;while (enumerator.hasMoreElements())&lt;br/&gt;&lt;br/&gt;{&lt;br/&gt;&lt;br/&gt; doStuffOn(enumerator.nextElement());&lt;br/&gt;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;нежели &lt;br/&gt;&lt;br/&gt;foreach(object in collection)&lt;br/&gt;&lt;br/&gt;{&lt;br/&gt;&lt;br/&gt;  doStuffOn(object);&lt;br/&gt;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;притом, что при нормальной реализации доступны будут оба варианта.&lt;br/&gt;&lt;br/&gt;Ну и по мелочам: разницы между Int32 и Int64 компилятор видит с трудом (если видит), большое количество ошибок оставляет на откуп компилятору Шарпа. &lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Но есть и плюсы:&lt;br/&gt;&lt;br/&gt;1) компилятор шустр (шустрее, чем, скажем, Nemerle; впрочем, учитывая интеллектуальность последнего, сравнивать некорректно)&lt;br/&gt;&lt;br/&gt;2) синтаксис в чем-то привычнее, чем у Haskell'а;&lt;br/&gt;&lt;br/&gt;и 3) проект закрыт!!!!!! Вот это не может не радовать!&lt;br/&gt;&lt;br/&gt;на этой оптимистической ноте автор откланивается, предчувствуя, каким невыспанным он будет с утра.&lt;br/&gt;&lt;br/&gt;Adieu!&lt;br/&gt;&lt;br/&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-6422458224437714430?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/6422458224437714430/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=6422458224437714430' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/6422458224437714430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/6422458224437714430'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2006/08/blog-post_27.html' title='Продолжая тему языков ;)'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-4692040792514672095</id><published>2006-08-17T15:59:00.000+06:00</published><updated>2007-01-21T19:28:09.538+05:00</updated><title type='text'>А я молодец!..</title><content type='html'>Наваял-таки мегакласс, который отбирает из компонентов лежащих на форме только имеющие нужный тип и позволяет выбрать из них нужный для установки property в другом компоненте/контроле.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Причем, после написания проверил, нет ли чего-то такого уже готового ;) во фреймворке. Как ни странно, нет! Даже велосипеда не получилось :)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Теперь устанавливать связи между компонентами можно в режиме визуальной разработки. Приятно!&lt;br/&gt;&lt;br/&gt;Причем для подключения мегадевайсины надо всего лишь установить атрибут. Правда, достаточно корявый, так что тут есть над чем работать.&lt;br/&gt;&lt;br/&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-4692040792514672095?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/4692040792514672095/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=4692040792514672095' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/4692040792514672095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/4692040792514672095'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2006/08/blog-post.html' title='А я молодец!..'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-7918430692993377286</id><published>2006-07-13T14:56:00.000+06:00</published><updated>2007-01-21T19:16:44.105+05:00</updated><title type='text'>Загадки дизайна .NET Base Class Library</title><content type='html'>В целом архитектура .NET мне нравится. Но есть некоторые загадки, в частности, в BCL...&lt;br/&gt;&lt;br/&gt;Простой пример: пытаюсь (в N-ый раз) построить что-то вроде конвейера, чтобы можно было параллельно обрабатывать поток изображений.&lt;br/&gt;&lt;br/&gt;Ну и мне влом описывать классы для этих самых наборов промежуточных результатов. А так как я последнее время загоняюсь по ФП, сразу захотелось поюзать кортежи, ведь это стандартная фича всех ФЯП. Однако пишется проект на Шарпе, а не на Nemerle ;), соответственно, встроенной поддержки кортежей нет :( Стал искать нечто подобное в библиотеке .NET.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Не поверите, но нашел. Но отнюдь не в System.Collections.Generic, не в System.Collections и не в System.Collections.Specialized.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Знаете, где?&lt;br/&gt;&lt;br/&gt;В System.Web.UI! %)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Причем, увы, использование требует явного приведения типов (ибо хранятся там System.Object'ы), и имеются в наличии только пары (Pair) и триплеты (Triplet). Чего мне, в принципе, могло бы и хватить, но добавлять ссылки на System.Web меня не радует, так что лучше напишу сам ;)&lt;br/&gt;&lt;br/&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-7918430692993377286?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/7918430692993377286/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=7918430692993377286' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/7918430692993377286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/7918430692993377286'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2007/05/blog-post.html' title='Загадки дизайна .NET Base Class Library'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-1261565366939053403</id><published>2006-05-23T00:24:00.000+06:00</published><updated>2007-01-21T19:04:26.758+05:00</updated><title type='text'>Третий путь ведет к просветлению...</title><content type='html'>Ага, я порадовался, конечно, что надыбал набор COM-объектов (и документацию достал!), котороые очень удобно использовать в .NET, достаточно только поутюжить dll-ку tlbimp-ом. &lt;br/&gt;&lt;br/&gt;Только вот маленькая незадача: TlbImp не всегда корректно распознает типы. Т.е., если в COM-овской библиотеке типов был в качестве параметра &lt;b&gt;unsigned char*&lt;/b&gt; (т.е., как правило, С-шный массив), то наивная утилита его представит как &lt;b&gt;ref byte&lt;/b&gt;, а не как &lt;b&gt;byte[]&lt;/b&gt;. Что, в общем-то, логично. Информацию о том, что сие есть, ей взять неоткуда. Или, скажем, вместо всенародно любимого винапишного &lt;b&gt;HANDLE&lt;/b&gt; (который суть &lt;b&gt;void*&lt;/b&gt; и которому в .NET соответстует IntPtr) везде оказался &lt;b&gt;int&lt;/b&gt;.&lt;br/&gt;&lt;br/&gt;Проблема №2: как известно, все COM-объекты реализуют интерфейс &lt;b&gt;IUnknown&lt;/b&gt;. А посему стандартной является ситуация, при которой во все методы передается как раз &lt;b&gt;IUnknown&lt;/b&gt;, а там представляемый им объект проверяется на прочие интерфейсы. Я вот лично считаю, что сие в общем случае есть антипаттерн. Ибо: 1) ликвидирует остатки типобезопасности; 2) код ни хрена не самодокументируемый (блин, я вот догадался, что &lt;b&gt;IUnknown* pDibImage&lt;/b&gt; - это &lt;b&gt;IDibImage pDibImage&lt;/b&gt;; а вот tlbimp - нет); 3) снижает расширяемость кода.&lt;br/&gt;&lt;br/&gt;Но вернемся к нашим &lt;strike&gt;баранам&lt;/strike&gt;объектам. Как уж сказано, TlbImp не одарен ИИ (что вы хотите от утилиты весом 56K?) и венгерскую нотацию читать не умеет (я вот тоже не силен). Посему он тупо поставил в соответствие всем &lt;b&gt;IUnknown*&lt;/b&gt; по Object'у и &lt;strike&gt;немедленно выпил&lt;/strike&gt; сказал, что преобразование закончено. Меня эта ситуация не устроила, бо я уже воевал с подобными обертками и больше как-то не хочется.&lt;br/&gt;&lt;br/&gt;Короче, задача звучит так: прикрутить либы к программе.&lt;br/&gt;&lt;br/&gt;Варианты: 1) использовать "как есть". Отметен, как отстойный. Во-первых, придется постоянно делать приведение типов от Object к реальным типам объектов. А это суть кака. Во-вторых, если все методы, работающие, скажем, с хендлом окна будут требовать &lt;b&gt;int&lt;/b&gt;, то я задолбаюсь писать &lt;b&gt;MyWin.Handle.ToInt32()&lt;/b&gt;. И, что самое существенное, мне не хочется даже думать о том, как передать &lt;b&gt;byte[]&lt;/b&gt; вместо &lt;b&gt;ref byte&lt;/b&gt;. Скорее всего, это требует грязных извратов.&lt;br/&gt;&lt;br/&gt;2) Написать обертку самому. Десяток классов (методов по 20), плюс реализуемые ими интерфейсы, которые, кажись, тоже придется описывать... Извиняйте, ломает.&lt;br/&gt;&lt;br/&gt;3) Путь воина. ОтILDASMить сборку, поправить нужные места, сассемблировать ILASM'ом. Вот оно!!! Править нужно далеко не все, причем, в связи с регулярной структурой сборки, можно все это автоматизировать.&lt;br/&gt;&lt;br/&gt;Попробовал. Понравилось. Особенно грело душу, когда после компиляции тестовая прога продолжала работать правильно. А ObjectBrowser в Студии показывал результаты моих трудов =)&lt;br/&gt;&lt;br/&gt;Восторг - непередаваемый! Видно, что не совсем ишо тупой. Мелочь, а приятно...&lt;br/&gt;&lt;br/&gt;Теперь осталось сочинить прожку, которая будет делать такую конверсию автоматически, на основании имен в венгерской записи. Должна же быть от этого израта хоть какая-то польза!! Главное - не забить ;)&lt;br/&gt;&lt;br/&gt;З.Ы.: Все-таки я не хакер. Меня не заставишь лезть куда-то на нижний уровень, пока не припрет производственная необходимость. :)))&lt;br/&gt;&lt;br/&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-1261565366939053403?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/1261565366939053403/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=1261565366939053403' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/1261565366939053403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/1261565366939053403'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2006/05/blog-post_23.html' title='Третий путь ведет к просветлению...'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-7545583385910681889</id><published>2006-05-21T12:12:00.000+06:00</published><updated>2007-01-21T18:57:13.502+05:00</updated><title type='text'>В Шаолинь, животное!!!!</title><content type='html'>Я вот не знаю занятия, более воспитывающего силу воли и помогающего осознать глубинную сущность программирования, чем reverse-engineering. &lt;br/&gt;&lt;br/&gt;Берем библиотечку объемом ~30-40 метров. Загружаем IDA. Медитируем...&lt;br/&gt;&lt;br/&gt;До полного просветления/схождения с ума (обычно это равноценные понятия)&lt;br/&gt;&lt;br/&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-7545583385910681889?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/7545583385910681889/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=7545583385910681889' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/7545583385910681889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/7545583385910681889'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2006/05/blog-post.html' title='В Шаолинь, животное!!!!'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-3080748923005559167</id><published>2006-05-20T14:43:00.000+06:00</published><updated>2007-01-21T19:18:53.669+05:00</updated><title type='text'>Учите матчасть, бойцы!..</title><content type='html'>Блин, месяца два мы воевали, завертывая одну библиотечку (вернее, набор оных) до вида, более-менее удобного для использования (и просто удобного, и приемлемого в .NET-е). Ухху...&lt;br/&gt;&lt;br/&gt;Сегодня попробовал обработать ее tlbimp-ом, о котором совсем недавно прочел (кто не знает - это утилитка из .NET SDK, которая по библиотеке типов COM создает сборку .NET). Обработал. Посмотрел ей внутре. Возматерился. &lt;br/&gt;&lt;br/&gt;Ибо половину работы это с нас бы сняло. Там почти все (как я и предполагал) оформлено COM-объектами. Которые вполне приживаются в .NET.&lt;br/&gt;&lt;br/&gt;Единственный минус - что эти объекты документированы еще хуже чем в скрывающей их библиотеке. Ибо в документации к той хотя бы по 4 строчки к каждой функции (из сотни) написано. А к объектам - вообще ничего.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Но все равно - инструментарий надо знать!!!&lt;br/&gt;&lt;br/&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-3080748923005559167?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/3080748923005559167/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=3080748923005559167' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/3080748923005559167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/3080748923005559167'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2006/05/blog-post_20.html' title='Учите матчасть, бойцы!..'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-7067098636507754716</id><published>2006-04-28T23:31:00.000+06:00</published><updated>2007-01-21T18:54:45.263+05:00</updated><title type='text'></title><content type='html'>&lt;i&gt;1961 - I "barely saw" the idea several times ca. 1961... The first was on the Burroughs 220 in the form of a style for transporting files from one Air Training Command installation to another. There were no standard operating systems or file formats back then, so some (t this day unknown) designer decided to finesse the problem by taking each file and dividing it into three parts. The third part was all of the actual data records of arbitrary size and format. The second part contained the B220 procedures that knew how to get at records and fields to copy and update the third part. And the first part was an array or relative pointers into entry points of the procedures in the second part (the initial pointers were in a standard order representing standard meanings).&lt;br/&gt;&lt;br/&gt;&lt;/i&gt;&lt;br/&gt;  К слову сказать, файлы тогда на перфолентах были... В лучшем случае...&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;i&gt;1966 - The title was "Sketchpad: A man-machine graphical communication system" [Sutherland, 1963]. What it could do was quite remarkable, and completely foreign to any use of a computer I had ever encountered. The three big ideas that were easiest to grapple with were: it was the invention of modern interactive computer graphics; things were described by making a "master drawing" that could produce "instance drawings"; control and dynamics were supplied by "constraints," also in graphical form, that could be applied to the masters to shape an inter-related parts. Its data structures were hard to understand--the only vaguely familiar construct was the embedding of pointers to procedures and using a process called reverse indexing to jump through them to routines, like the 22- file system [Ross, 1961]. It was the first to have clipping and zooming windows...&lt;/i&gt;&lt;br/&gt;&lt;br/&gt;  так, вот уже и окошки показались...&lt;br/&gt;&lt;br/&gt;Soon Dan had bootstrapped Smalltalk across , and for many months it was the sole software sytem to run on the Interim dynabook. Appendix I has an "acknowledgements" dodcument I wrote from this time that is interesting it its allocation of credits and the various priorities associated with them. My $230K was enough to get 15 of the original projected 30 machines (over the years some 2000 Interim Dynabooks were actually built. True to Schopenhauer's observation, Executive "X" now decided that the Interim Dynabook was a good idea and he wanted all but two for his lab (I was in the other lab). I had to go to considerable lengths to get our machines back, but finally succeeded.&lt;br/&gt;&lt;br/&gt;  Создание машин специально для ОО-систем...&lt;br/&gt;&lt;br/&gt;  И просто золотые слова:&lt;br/&gt;&lt;i&gt;&lt;br/&gt;Another way to think of all this is: though the late-binding of automatic storage allocations doesn't do anything a programmer can't do, its presence leads both to simpler and more powerful code. OOP is a late binding strategy for many things and all of them together hold off fragility and size explosion much longer than the older methodologies. In other words, human programmers aren't Turing machines--and the lesss their programming systems require Turing machine techniques the better.&lt;/i&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Взято из &lt;a href =" http://gagne.homedns.org/~tgagne/contrib/EarlyHistoryST.html"&gt;"Early History of SmallTalk"&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-7067098636507754716?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/7067098636507754716/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=7067098636507754716' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/7067098636507754716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/7067098636507754716'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2006/04/1961-i-barely-saw-idea-several-times-ca.html' title=''/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-7430864744102980664</id><published>2006-04-06T23:14:00.000+06:00</published><updated>2007-01-21T18:49:23.404+05:00</updated><title type='text'>И эти люди запрещают мне ковыряться в носу!..</title><content type='html'>Я &lt;strike&gt;хре&lt;/strike&gt; фигею с того, чем занимается Microsoft Research!&lt;br/&gt;&lt;br/&gt;Им мало F# (клона OCaml под .NET), им мало С-omega (C# с элементами SQL; он, правда, как отдельный продукт не выйдет). У них есть еще и &lt;a href="http://research.microsoft.com/vault/"&gt;Vault&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;Вкратце - это почти С (т.е. императивный "curly brackets" язык), но:&lt;br/&gt;&lt;br/&gt;- со строгой типизацией;&lt;br/&gt;&lt;br/&gt;- с модульностью;&lt;br/&gt;&lt;br/&gt;- с generic функциями (например, передача параметра по ссылке реализуется именно с их помощью);&lt;br/&gt;&lt;br/&gt;- с многочисленными реверансами в сторону ФП, как-то произвольное место объявления функций, передача их как параметры, кложуры, currying (!) и т.п.&lt;br/&gt;&lt;br/&gt;- с непривычными для императивных языков типами, вроде кортежей (tuple) и вариантов (замена для enum'ов и union'ов), тоже явно перекочевавшими из Haskell и ML;&lt;br/&gt;&lt;br/&gt;- с pattern-matching'ом (правда, только для switch'ей) оттуда же;&lt;br/&gt;&lt;br/&gt;- с дополнительными атрибутами для типов (сам плохо понял и нервно курю, но похоже, что-то вроде DesignByContract на этапе компиляции - например для контроля того, что файл был открыт перед обращением 8-/);&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Ужос!!! Если бы сюда еще и ООП, я бы возлюбил это всем сердцем (может быть)... Но где стал бы на этом писать - не знаю..&lt;br/&gt;&lt;br/&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-7430864744102980664?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/7430864744102980664/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=7430864744102980664' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/7430864744102980664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/7430864744102980664'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2007/01/blog-post_21.html' title='И эти люди запрещают мне ковыряться в носу!..'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-7885085554124702269</id><published>2005-12-21T18:39:00.000+05:00</published><updated>2007-01-21T20:16:12.160+05:00</updated><title type='text'>PDP-11 как колыбель современного программирования и могила рассудка</title><content type='html'>Кое-кто слышал, вероятно, про линейку миникомпьютеров &lt;b&gt;PDP&lt;/b&gt; от компании &lt;b&gt;DEC,&lt;/b&gt; весьма популярную в 70-е годы.&lt;br/&gt;"Мини" не должно вводить в заблуждение. Эти миникомпьютеры были размером со средних размеров секретер. Однако уже и такие размеры были большим достижением. Что более существенно, рабочее время этих машин было дешевле чем время мэйнфреймов. Да и сами они были относительно недороги...&lt;br/&gt;&lt;b&gt;PDP&lt;/b&gt; внесли существенный вклад в развитие IT. В частности, первые версии &lt;b&gt;UNIX&lt;/b&gt; и &lt;b&gt;C&lt;/b&gt; создавались вначале на &lt;b&gt;PDP-7,&lt;/b&gt; а затем на &lt;b&gt;PDP-11.&lt;/b&gt; Хвалебные оды PDP-11 как отправной точке множества хакеров (в широком смысле этого слова) возносит небезызвестный Крис Касперски... Клонировали машины все, кому было не лень. В частности, широкое распространение машины с процессором &lt;b&gt;PDP-11&lt;/b&gt; (это была не микросхема, а плата с набором микросхем) получили в СССР под названием &lt;b&gt;"Электроника-60"&lt;/b&gt; (впрочем, у нас тогда все передирали у янки)&lt;br/&gt;А причина популярности была в развитой системе команд. Для каждого из операндов (всего их могло быть 2) имелось 8 способов адресации через каждый из регистров (в том числе и через R7 - счетчик команд!). В результате можно был делать очень интересные вещи.&lt;br/&gt;Например, вызов функции&lt;br/&gt; &lt;b&gt; myFunc(1, 2) &lt;/b&gt;&lt;br/&gt;мог быть странслирован в следующий процуссорный код:&lt;br/&gt;&lt;b&gt;  JSR R0, myFunc  &lt;/b&gt;   &lt;i&gt;;  переход на myFunc с сохранением адреса возрата в R0&lt;/i&gt;&lt;br/&gt;  &lt;b&gt;1&lt;/b&gt;                              &lt;i&gt;; op1&lt;/i&gt;&lt;br/&gt;  &lt;b&gt;2&lt;/b&gt;                              &lt;i&gt;; op2&lt;/i&gt;&lt;br/&gt;  &lt;b&gt;MOV R1, C&lt;/b&gt;. &lt;i&gt;; сюда будет осуществлен возврат&lt;/i&gt;&lt;br/&gt;&lt;br/&gt;&lt;b&gt;myFunc:&lt;br/&gt;  MOV (R0)+, R1&lt;/b&gt;    &lt;i&gt;; R1 = *R0++&lt;/i&gt;&lt;br/&gt;  &lt;b&gt;ADD (R0)+, R1&lt;/b&gt;   &lt;i&gt;; R1 += *R0++&lt;/i&gt;&lt;br/&gt;  &lt;b&gt;RTS R0&lt;/b&gt;                      &lt;i&gt;; возврат по адресу в R0&lt;/i&gt;&lt;br/&gt;Как видно, компилятор для такой системы команд писать одно удовольствие.&lt;br/&gt;Машину на ее основе собрать тоже несложно. Причем в ней даже не обязательно обеспечивать стек. Как видно, вызов подпрограмм и так работать будет.&lt;br/&gt;Надо сказать, что эта система команд и поныне широко используется, например, в контроллерах станков и т.п.. Естественно, теперь процессор реализуется интегрально.&lt;br/&gt;Так я это к чему? А к тому, что у нас курсач - "Проектирование процессора с сокращенным набором команд на основе системы команд PDP-11". &lt;b&gt;И мне эта система команд уже вот где!!!!&lt;/b&gt; Млин, им хорошо было придумывать, а мы сношайся!&lt;br/&gt;Как прикажете трактовать команду &lt;b&gt;JMP @(R7)+&lt;/b&gt; ?&lt;br/&gt; - как &lt;b&gt;addr = *R7, R7 = *addr, R7++&lt;/b&gt;&lt;br/&gt; - как &lt;b&gt;addr = *R7, R7++, R7 = *addr&lt;/b&gt;&lt;br/&gt; - или еще как-то?&lt;br/&gt;А как быть с двухадресными командами? Например, с &lt;b&gt;BIT @Array(R7), @(R7)+&lt;/b&gt; (команда BIT вычисляет логическое И аргументов без записи результата)? Это же полный бульбец!!!&lt;br/&gt;Нет, понятно, что здоровый человек так не напишет, но есть у меня знакомые, которые могли бы (да, Лёша, я говорю о тебе!)&lt;br/&gt;А еще бесит реализация конвейера. Потому что любое изменение значения счетчика команд или же использование данных лежащих после кода команды херит к чертовой матери весь конвейер (а он всего-то 3 уровня; что бы было при большей глубине - страшно подумать!).&lt;br/&gt;Охренеть!!!&lt;br/&gt;Слава Богу, мне еще не надо результаты записывать в память. А то я бы уже отъехал в район АМЗ&lt;br/&gt;Да здравствует архитектура RISC!!!!!!!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-7885085554124702269?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/7885085554124702269/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=7885085554124702269' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/7885085554124702269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/7885085554124702269'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2006/12/pdp-11.html' title='PDP-11 как колыбель современного программирования и могила рассудка'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-113258733451760931</id><published>2005-11-21T20:30:00.000+05:00</published><updated>2005-11-21T20:35:34.543+05:00</updated><title type='text'></title><content type='html'>&lt;table border=0 cellspacing=0 cellpadding=4&gt;&lt;br /&gt;&lt;tr&gt;&lt;td bgcolor="#EEEEEE"&gt;&lt;b&gt;&lt;big&gt;Я - хард&lt;/big&gt;&lt;/b&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;Иначе говоря, винчестер. Хранитель информации. А кто владеет информацией, тот владеет миром, важно помнить. Не смотря на возможную молчаливсть, вы являетесь сутью и содержанием, если так можно выразиться, компьютера. Но по жизни помните, что в принципе под лежачий камень вода затекает редко, и если дело совсем плохо, то надо срочно искать того, кто станет процессором и "мозгом". А там уж и до целой машины недалеко.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;br /&gt;&lt;td bgcolor="#EEEEEE"&gt;&lt;br /&gt;&lt;br&gt;&lt;a href="http://sibarit.ru/psytest?id=111"&gt;Пройти тест 'Какая ты деталь компьютера?'&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-113258733451760931?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/113258733451760931/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=113258733451760931' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113258733451760931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113258733451760931'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/11/blog-post_21.html' title=''/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-113095376177824165</id><published>2005-11-02T22:46:00.000+05:00</published><updated>2005-11-02T22:49:21.796+05:00</updated><title type='text'>С. Трофимов - Распутица</title><content type='html'>Боже мой, как она надоела, осенняя эта распутица!&lt;br /&gt;Целый день по колено грязи еле тащишься по верстовой.&lt;br /&gt;Может, встать и дождаться ночного мороза, чтоб больше не мучиться,&lt;br /&gt;И по первому насту придти, смертельно усталый, домой...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Возвращаюсь. Земля белым снегом укрыта от сглаза небесного,&lt;br /&gt;Небо к осени, видно, устало проповедовать свет и тепло.&lt;br /&gt;Плачет ветер, вселенскую смерть поминая унылою песнею.&lt;br /&gt;Только я по колено в грязи все пытаюсь идти этой смерти назло.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Возвращаюсь. Нагие деревья стыдливо скрываются в сумерках.&lt;br /&gt;Не признали меня, устыдились, а ведь я их когда-то растил.&lt;br /&gt;Даже месяц, мой спутник унылый, испуганно прячется в облака,&lt;br /&gt;Только грубою лаской мороз, как и прежде, меня приютил.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Путь неблизкий. Седая пурга до весны заметает мои следы.&lt;br /&gt;Я последний, кто шел по дороге до Покрова, что в ночь начался.&lt;br /&gt;Утром мир будет девственно чистым, не знающим ни счастия, ни беды.&lt;br /&gt;Значит, грязь это только преддверие счастья нового и красоты бытия&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-113095376177824165?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/113095376177824165/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=113095376177824165' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113095376177824165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113095376177824165'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/11/blog-post.html' title='С. Трофимов - Распутица'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-113084360212607799</id><published>2005-11-01T16:09:00.000+05:00</published><updated>2005-11-01T16:13:22.140+05:00</updated><title type='text'>Google как искусственный интеллект</title><content type='html'>Поисковые машины, похоже, уже сейчас обладают искусственным интеллектом. Я об этом говорил в комменте к посту &lt;a href=http://www.livejournal.com/users/grandmag&gt;grandmag'а&lt;/a&gt; о &lt;a href=http://www.livejournal.com/users/grandmag/42779.html&gt;необычных услугах yandex'а&lt;/a&gt; и сегодня снова в этом убедился.&lt;br /&gt;Просто посмотрите на верхнюю строчку результатов поиска в Google'е по слову 'failure'....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-113084360212607799?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/113084360212607799/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=113084360212607799' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113084360212607799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113084360212607799'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/11/google.html' title='Google как искусственный интеллект'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-113067759420633272</id><published>2005-10-30T18:06:00.000+05:00</published><updated>2005-10-30T18:06:34.206+05:00</updated><title type='text'>Дык, опаньки...</title><content type='html'>Что ж, мимо "ботанинки" я блaгополучно пролетел. Такие дела (с) К. Воннегут. Жаль, конечно, но ничего - "мы себя еще в постели покажем" (с) Е.И.В. гусарского полка поручик Ржевский.&lt;br /&gt;Главное, что само по себе данное событие принесло мне массу экспы. А я еще по "Героям" знаю, что зачастую и деньги, и экспу получить нельзя. Можно только что-то одно. Да. Именно так.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-113067759420633272?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/113067759420633272/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=113067759420633272' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113067759420633272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113067759420633272'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/10/blog-post_113067759420633272.html' title='Дык, опаньки...'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-113067752695422776</id><published>2005-10-30T18:03:00.000+05:00</published><updated>2005-10-30T18:11:01.113+05:00</updated><title type='text'>Ботанинская стипендия</title><content type='html'>Как известно, г-н Потанин в "общак" платит исправно, почему и олигарх до сих пор. А еще он платит стипендию. Я знаю, мне рассказывали. Сам я получил возможность попытать счастья только в этм году.&lt;br /&gt;Вот сегодня был второй отборочный день. Впечатлений масса, и не только у меня. Можете, например, обратиться в ЖЖ &lt;a href="http://www.livejournal/users/grandmag"&gt;grandmag'а &lt;/a&gt; и узнать, через что ему пришлось пройти.&lt;br /&gt;А вообще, прикольно. Ребята выделенные им килобаксы отрабатывают по полной. Давно так не развлекался, не рвал глотку, не организовывал широкие масы населения :)).&lt;br /&gt;Но устал вусмерть. Будто мешки таскал (хотя я не знаю, каково это; ладно, будто столы таскал ;D)&lt;br /&gt;Теперь остается только надеяться, что моя неординарная деятельность заслужила олинархического бабла. Для меня оно лишним не будет ;)&lt;br /&gt;Вот.&lt;br /&gt;А еще завтра моя мама приезжает с "незалэжной батькiвщiни". Ура!!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-113067752695422776?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/113067752695422776/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=113067752695422776' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113067752695422776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113067752695422776'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/10/blog-post_113067752695422776.html' title='Ботанинская стипендия'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-113067736833914977</id><published>2005-10-30T18:01:00.000+05:00</published><updated>2005-10-30T18:02:48.340+05:00</updated><title type='text'>Снова снег..., снова обострение графомании</title><content type='html'>Вообще, это было написано по поводу прошлого снегопада, но к моменту написания снег уже растаял. :( Поэтому постю (посщу?) сейчас.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align = center&gt;Флаги&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Время флагов Ямайки, похоже, надолго прошло,&lt;br /&gt;Каждый шаг по накату - как па диковатого танца.&lt;br /&gt;Но зеленый, оранжевый, красный еще прорезают сугроб - &lt;br /&gt;Нынче время знамен ирландцев и итальянцев.&lt;br /&gt;&lt;br /&gt;Ярко-красное солнце горит в облаках по утрам;&lt;br /&gt;Порываюсь склониться в почтении пред мудрою нацией.&lt;br /&gt;Но к полудню оно растворится во мгле, и тогда&lt;br /&gt;Грязно-белые небо и снег напомнят о капитуляции.&lt;br /&gt;&lt;br /&gt;Злиться глупо, я знаю, но все же бессмысленно злюсь:&lt;br /&gt;День становится кратким, а ночь - до нелепости длинной.&lt;br /&gt;Но, назло всем снегам, непременно дождусь&lt;br /&gt;Бесконечного неба цветов Аргентины и Украины.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-113067736833914977?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/113067736833914977/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=113067736833914977' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113067736833914977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113067736833914977'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/10/blog-post_113067736833914977.html' title='Снова снег..., снова обострение графомании'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-113067727488654303</id><published>2005-10-30T17:59:00.000+05:00</published><updated>2005-10-30T18:13:04.406+05:00</updated><title type='text'>Неожиданный эффект</title><content type='html'>На выходных я открыл для себя сайт &lt;a href="http://vladimir.vladimirovich.ru"&gt;Владимир Владимирович(tm) &lt;/a&gt;.&lt;br /&gt;И вот что странно. Я отнюдь не фанат "кровавого путинского режима", как любят выражаться иные мои соотечественники. Как всякий русский человек я обожаю покритиковать власть и пр. и пр. Но по прочтении всех историй про Владимира Владимировича(tm) Путина мне стало его жаль. Просто по-человечески. Вот. Каково ему с андроидами-то....&lt;br /&gt;То ли психотронная пушка действует, то ли что...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-113067727488654303?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/113067727488654303/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=113067727488654303' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113067727488654303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113067727488654303'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/10/blog-post_30.html' title='Неожиданный эффект'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-113042390173189770</id><published>2005-10-23T20:37:00.000+06:00</published><updated>2005-10-27T20:38:21.783+06:00</updated><title type='text'>Откуда берутся эльфы?</title><content type='html'>Господа, ответьте честно: доводилось ли вам из благоприобретенного чувства приличия употреблять слова "млин" и "мля" вместо вертящихся на языке слов, неприемлемых для "parlour room conversation"?&lt;br /&gt;Вероятно, доводилось... Это почти стандартные эвфемизмы на просторах Рунета.&lt;br /&gt;Так вот: замена звука "b" на "m" - наиболее характерное отличие Квэнья (языка Эльдаров, эльфов, живших в Валиноре) от Синдарина (языка эльфов, оставшихся в Средиземье). Сравните скажем синдариское "angband" и соответствуюшее ему квэнийское "angomando".&lt;br /&gt;Я не лингвист, а то бы еще "падонковский" лексикон проанализировал на толкиенутость....&lt;br /&gt;Делайте выводы, господа. Кстати, проверьте уши - вдруг стали, как у меня :-))))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-113042390173189770?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/113042390173189770/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=113042390173189770' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113042390173189770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113042390173189770'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/10/blog-post_113042390173189770.html' title='Откуда берутся эльфы?'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-113042382975797261</id><published>2005-10-23T20:35:00.000+06:00</published><updated>2005-10-30T18:11:57.056+05:00</updated><title type='text'>Надо что-то делать</title><content type='html'>Сегодня играли очередной тур Открытого Всероссийского Синхронного Чемпионата (ОВСЧ) по Ч?Г?К?.&lt;br /&gt;Как и на прошлом туре - ПОЗОР НАМ, УБОГИМ!!!!!!! Просто ужас!!!! Ваааще!!!!&lt;br /&gt;Единственным утешением оказались пельмени принесенные нашей команде доброй &lt;a href="http://www.livejournal.com/users/kefirka" &gt;"белкой" Олей &lt;/a&gt; в благодарность за орешки. Спа - си - бо!!!!&lt;br /&gt;Но надо что-то делать с игрой, ибо ехать с такими успехами куда бы то ни было несерьезно.... Решили перестроить план тренировок - посмотрим, что получится... Бог даст, таких позоров больше не будет!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-113042382975797261?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/113042382975797261/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=113042382975797261' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113042382975797261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113042382975797261'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/10/blog-post_23.html' title='Надо что-то делать'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-113042308439948138</id><published>2005-10-22T20:21:00.001+06:00</published><updated>2005-10-27T20:24:44.413+06:00</updated><title type='text'>Заклинание</title><content type='html'>А.С.Ц&lt;br /&gt;Я возьму в руку мел, обведу себя кругом,&lt;br /&gt;Хватит. Точка. Не стоит мотать больше нервы.&lt;br /&gt;Для тебя я не буду ни жертвой, ни другом.&lt;br /&gt;ты сама так решила, но я сказал первым.&lt;br /&gt;&lt;br /&gt;Стану вновь рисовать, не бояться насмешек,&lt;br /&gt;Ты заметишь: я весел, ни капли не ною.&lt;br /&gt;Говорю афоризмами, в меру успешен.&lt;br /&gt;Ибо нет больше власти твоей надо мною.&lt;br /&gt;&lt;br /&gt;Я не стану искать у девушек встречных&lt;br /&gt;Твои пышные волосы, густые ресницы.&lt;br /&gt;Они тоже красивы, и даже не меньше.&lt;br /&gt;И однажды лицо мне твое не приснится.&lt;br /&gt;&lt;br /&gt;И я снова влюблюсь, и возможно, что скоро,&lt;br /&gt;В симпатичную Олю, или, может быть, Настю,&lt;br /&gt;И мое alter ego не посмотрит с укором,&lt;br /&gt;Ибо нет у тебя надо мной больше власти.&lt;br /&gt;&lt;br /&gt;Я все реже уже и сейчас тебя вижу&lt;br /&gt;И почти научился не искать с тобой встречи.&lt;br /&gt;И почти не ломает от желанья быть ближе,&lt;br /&gt;И к врагу-телефону не тянусь каждый вечер.&lt;br /&gt;&lt;br /&gt;Если я не сломаюсь, не сдамся, не струшу,&lt;br /&gt;Я совсем позабуду все твои телефоны,&lt;br /&gt;И тогда спячку духа ничто не нарушит.&lt;br /&gt;Ибо нет надо мной твоей власти, ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-113042308439948138?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/113042308439948138/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=113042308439948138' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113042308439948138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/113042308439948138'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/10/blog-post_113042308439948138.html' title='Заклинание'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-112997859825738582</id><published>2005-10-22T16:53:00.000+06:00</published><updated>2005-10-22T16:56:38.263+06:00</updated><title type='text'>Вот как надобно принимать зачеты...</title><content type='html'>Мне тут стало известно (из источников конфиденциальных и, вместе с тем, достойных доверия) о том, как некий молодой преопдаватель ЮУрГУ принимал зачет у своих подопечных.&lt;br /&gt;Вместо того, чтобы задавать им вопросы по абсолютно неинтересующему их предмету, сей достойный муж исполнил им несколько песен собственного сочинения, аккомпанируя себе на гитаре (причем, согласно тому же источнику, музыкальные данные у молодого человека неплохие), затем собрал со студентов по 30 р. за билеты на только что прослушанный концерт и отпустил их с миром.&lt;br /&gt;Отрадно, отрадно, господа, что в государстве Российском не перевелись еще такие самородки!!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-112997859825738582?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/112997859825738582/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=112997859825738582' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112997859825738582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112997859825738582'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/10/blog-post_22.html' title='Вот как надобно принимать зачеты...'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-112981064848982366</id><published>2005-10-20T18:12:00.000+06:00</published><updated>2005-10-20T18:17:28.500+06:00</updated><title type='text'></title><content type='html'>Вчера мне принесли диск &lt;b&gt;"Зимовьев Зверей"&lt;/b&gt;. До этого я слышал одну-единственную песню - &lt;b&gt;"Джин и Тоник"&lt;/b&gt;. Что ж, могу сказать, что это было большим упущением, которое ныне я рассчитываю исправить (хотя это потребует ~6.5 часов). &lt;b&gt;К. Арбенин&lt;/b&gt;, ИМХО, один из лучших современных отечественных поэтов (именно поэтов, а не авторов песен). Даже не знаю, с кем можно было бы сравнить... Впрочем, это и не нужно. Рекомендую всем, предпочитающим стихи, над которыми &lt;b&gt;стоит&lt;/b&gt; подумать. &lt;br /&gt;&lt;br /&gt;Идите с богом и живите долго, долго, долго, долго, долго,&lt;br /&gt;Так долго, чтоб я там не встретил вас&lt;br /&gt;Коль смерти нет, в забвенье мало толка&lt;br /&gt;Забудешь профиль, вспомнится анфас.&lt;br /&gt;&lt;br /&gt;Hо все, что я оставлю вам в наследство&lt;br /&gt;Hе стоит двух изломанных грошей&lt;br /&gt;Я ваша цель, вы для меня лишь средство&lt;br /&gt;Для достижения изящных миражей !&lt;br /&gt;(с) &lt;b&gt;"Зимовье Зверей"&lt;/b&gt;, &lt;b&gt;"Романс"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;З.Ы.: Еще раз спасибо за диск, Наташа!!!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-112981064848982366?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/112981064848982366/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=112981064848982366' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112981064848982366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112981064848982366'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/10/blog-post_20.html' title=''/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-112964163624575926</id><published>2005-10-18T19:16:00.000+06:00</published><updated>2005-10-18T19:20:36.250+06:00</updated><title type='text'>Эти милые люди из МС</title><content type='html'>Сегодня мне посчастливилось пообщаться с людьми из Майкрософта.&lt;br /&gt;Дело в том, что в конторе, где я работаю стоят лицензионные Винда и Офис. По несчастному стечению обстоятельств недавно комп, где все это стоит, в агонии скончался (точнее, сдохла мать). В связи со всем этим тачку проапгрейдили (догадайтесь, куда делись лишние запчасти }:-]). А как известно, WinXP и Office2003 весьма чувствительны к смене железа. С Виндой-то проблем не возникло, а вот Оффис активироваться повторно отказался.&lt;br /&gt;Вот я сегодня и общался в течение минут сорока с людьми из МС (Мировой Скверны :))) ) по этому поводу.&lt;br /&gt;Что характерно, они отнеслись к моей предъяве с полным пониманием. Видимо, проблему эту им решать приходится частенько.&lt;br /&gt;З.Ы.: а голоса у сотрудниц там очень эротичные....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-112964163624575926?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/112964163624575926/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=112964163624575926' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112964163624575926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112964163624575926'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/10/blog-post_112964163624575926.html' title='Эти милые люди из МС'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-112957353145600607</id><published>2005-10-18T00:09:00.000+06:00</published><updated>2005-10-18T00:25:31.470+06:00</updated><title type='text'>Альтернативный журнал</title><content type='html'>Все-таки я преодолел маразм LiveJournal и зарегил ЖЖ еще и там.&lt;br /&gt;Милости прошу на http://www.livejournal.com/users/elder_george/&lt;br /&gt;Я постараюсь дублировать сообщения в обоих журналах.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-112957353145600607?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/112957353145600607/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=112957353145600607' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112957353145600607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112957353145600607'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/10/blog-post_18.html' title='Альтернативный журнал'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-112947440074891411</id><published>2005-10-16T20:36:00.000+06:00</published><updated>2005-10-16T22:09:42.660+06:00</updated><title type='text'>Впечатления от MUDачества...</title><content type='html'>Прошу заметить - слово MUDачество имеет здесь совершенно цезурный смысл (если у Вас нет предвзятого отношения к многопользовательским ролевым играм, лишенным графического интерфейса :) )&lt;br /&gt;Просто на днях один добрый друг подбил меня поиграть в MUD (Multi-User Dungeon) Solace (solace.msm.ru, порт 4000). Как закоренелый толкиенюга (правда, как выражается другой товарищ, пассивный, т.е. с деревянным мечом в лес не хожу ;) пока) я не мог отказаться.&lt;br /&gt;Что я скажу... Занятно. Ассоциации две: книги-игры за авторством тов. Браславского (весчь!!! обожал в детстве!!!) и ранние QuestForGlory (I и II) от Sierra (там тоже команды надо было ручками вводить; но GUI был). И то, и другое я глубоко чту... Так что...&lt;br /&gt;Ах да, есть еще третья ассоциация - Linux. Поелику без хелпа ни хрена не поймешь. Зато хелп огроменный! Порой я даже порывался набирать в консоли вместо &lt;help foobar&gt;&lt;br /&gt;&lt;man foobar&gt; :D &lt;br /&gt;К сожалению, я не настолько гуру (может быть, пока?), чтобы писать скрипты, автоматизирующие базовые действия (напр. реролл статов до оптимального значения), как еще один мой добрый товарищ ;)... читер!!!!) Вот освоюсь, тогда посмотрим. :)&lt;br /&gt;К минусам могу отнести то, что я, как человек, испорченный CRPG, все-таки ожидал несколько большей интерактивности NPC. Но, увы, нет в мире совершенства...&lt;br /&gt;Кто-то скажет (могу навскидку человек 10 назвать из числа знакомых): люди, вы психи!!! Для вас надрываются гиганты софта и харда, делают больше реализма, а вы.... Плюс каким надо быть психом, чтобы воспринимать всерьез мир, описанный текстом (или нарисованный ASCII-графикой, как в случае с roguelike-RPG, которые я тоже люблю).&lt;br /&gt;Я скажу одно: учите албанский и развивайте воображение!&lt;br /&gt;А еще почитайте "Лабиринт отражений" г-на Лукьяненко. Там, кстати, герой попадает в MUD будущего.... Хе..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-112947440074891411?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/112947440074891411/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=112947440074891411' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112947440074891411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112947440074891411'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/10/mud.html' title='Впечатления от MUDачества...'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-112946901566564795</id><published>2005-10-16T19:12:00.001+06:00</published><updated>2005-10-16T19:34:42.506+06:00</updated><title type='text'>Сплошные разочарования</title><content type='html'>Меня тут товарищи просветили, что, "строго говоря" ((с) С.С.Ершов), weblog на блоггере ЖЖой назвать нельзя... Млин... А, собственно, не пофиг ли?&lt;br /&gt;&lt;br /&gt;Играли сегодня "Кубок Провинции" (это такой ежегодный турнир по "Ч?Г?К?"). Авторы вопросов жестоко накололи всех участников. Дело в том, что в предыдущие разы ответ  на первый вопрос был "провинция" (или, в прошлом году, "Прованс", что тоже самое).&lt;br /&gt;Соответственно, многие из "стариков" повелись на это дело. Дык, ёлы-палы! На этот раз их ожидания не подтвердились... Мы ответили иначе, но также не верно... Бывают в жизни огорчения.... ;)&lt;br /&gt;Вообще, несколько странный был пакет вопросов. Вроде бы и интересные, но пока поймешь психологию автора, его манеру делать подсказки - турнир уже закончится...&lt;br /&gt;Такие дела.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-112946901566564795?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/112946901566564795/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=112946901566564795' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112946901566564795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112946901566564795'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/10/blog-post_112946901566564795.html' title='Сплошные разочарования'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-112930965372862742</id><published>2005-10-14T23:07:00.000+06:00</published><updated>2005-10-14T23:07:33.733+06:00</updated><title type='text'></title><content type='html'>&lt;a href='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'&gt;&lt;img border='0' style='border:1px solid #000000; margin:2px' src='http://photos1.blogger.com/img/6/8319/320/Picture20050830_145911.jpg'&gt;&lt;/a&gt;&lt;br /&gt;Portrait3&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-112930965372862742?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/112930965372862742/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=112930965372862742' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112930965372862742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112930965372862742'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/10/portrait3.html' title=''/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-112930951052657240</id><published>2005-10-14T23:05:00.000+06:00</published><updated>2005-10-14T23:05:10.530+06:00</updated><title type='text'></title><content type='html'>&lt;a href='http://photos1.blogger.com/img/6/8319/640/Picture20050825_152631.jpg'&gt;&lt;img border='0' style='border:1px solid #000000; margin:2px' src='http://photos1.blogger.com/img/6/8319/320/Picture20050825_152631.jpg'&gt;&lt;/a&gt;&lt;br /&gt;Portrait2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-112930951052657240?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/112930951052657240/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=112930951052657240' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112930951052657240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112930951052657240'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/10/portrait2.html' title=''/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-112930910942373275</id><published>2005-10-14T22:58:00.000+06:00</published><updated>2005-10-14T22:58:29.440+06:00</updated><title type='text'></title><content type='html'>Portrait1&amp;nbsp;&lt;a href='http://picasa.google.com/blogger/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbp.gif' alt='Posted by Picasa' border='0' style='border:0px;padding:0px;background:transparent;' align='absmiddle'&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-112930910942373275?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/112930910942373275/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=112930910942373275' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112930910942373275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112930910942373275'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/10/portrait1.html' title=''/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17856637.post-112930679777148366</id><published>2005-10-14T22:15:00.000+06:00</published><updated>2005-10-14T22:19:57.776+06:00</updated><title type='text'>Можно начинать ЖЖечь</title><content type='html'>Стало быть, друзья мои, я тоже обзавелся ЖЖой.&lt;br /&gt;Докатился.&lt;br /&gt;Ну что ж, надо с этим жить :)&lt;br /&gt;А то давеча мне кое-кто сказал, что писать свои умные мысли в файлик - все равно, что в /dev/null :))&lt;br /&gt;А что потомкам/подонкам останется?&lt;br /&gt;Так что добро пожаловать всем, интересующимся мыслями старосты!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17856637-112930679777148366?l=georgeelder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://georgeelder.blogspot.com/feeds/112930679777148366/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17856637&amp;postID=112930679777148366' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112930679777148366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17856637/posts/default/112930679777148366'/><link rel='alternate' type='text/html' href='http://georgeelder.blogspot.com/2005/10/blog-post.html' title='Можно начинать ЖЖечь'/><author><name>George the Elder</name><uri>http://www.blogger.com/profile/14318832953282788153</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/6/8319/640/Picture20050830_145911.jpg'/></author><thr:total>0</thr:total></entry></feed>
