Monday, September 20, 2010

Ушёл из жизни Андрей Леонович Микаэлян

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

UPD: Нашел у себя фотку 2004 года. Академик и юные падаваны. Как же жалко :(

IEnumerable.Exclude (Remove) extension

   Sometimes it can be useful to exclude one or more elements from a collection basing on a defined rule. I have written simple extension method for these purposes. Just specify the rule as an input parameter and receive resulting collection on the output.

The method:
         public static IEnumerable Exclude(this IEnumerable enumerable, 
            Func func)
        {
            if (func == null)
                throw new ArgumentNullException("func");

            var inputArray = enumerable.ToArray();
            var list = new List(enumerable);
            for (var i = 0; i < inputArray.Count(); i++)
            {
                if (func(inputArray[i]))
                    list.Remove(inputArray[i]);
            }
            return list;
        }
Unit tests:
        [Test]
        public void IEnumerable_Exclude_Works_For_Integers()
        {
            var a = new [] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
            var b = a.Exclude(i => i % 2 == 0);
            Assert.AreEqual(new[] {1, 3, 5, 7, 9}, b);
        }

        [Test]
        public void IEnumerable_Exclude_Works_For_DateTime()
        {
            var a = new[]
                        {
                            new DateTime(1900, 01, 01),
                            new DateTime(2000, 12, 31),
                            new DateTime(2035, 10, 01)
                        };
            var b = a.Exclude(d => d.Year >= 2000);
            Assert.AreEqual(new[] { new DateTime(1900, 01, 01) }, b);
        }

        [Test]
        public void IEnumerable_Exclude_Works_For_String()
        {
            var a = new[]
                        {
                            "The", "quick", "brown", "fox", 
                            "jumps", "over", "the", "lazy", "dog"
                        };
            var b = a.Exclude(s => s.Length > 4);
            Assert.AreEqual(new[] {"The", "fox", "over", "the", "lazy", "dog"}, b);
        }

        [Test]
        [ExpectedException(typeof(ArgumentNullException))]
        public void IEnumerable_Exclude_ThrowsException_If_FuncDelegate_IsNull()
        {
            var a = new[] { "ooo", "OOO", "ooo"};
            a.Exclude(null);
        }
Test results:

Wednesday, September 15, 2010

How to clear transaction log in a database (MS SQL 2005, 2008)

The solution is straight forward, but it took some time to find it. Just use the following code:
Dump tran <Database name> with truncate_only

Thursday, September 09, 2010

Event Routing в WPF

     Когда я создавал пользовательские контролы в WinForms, и пытался их наделить обработкой какого-либо события – реакцией на внешний раздражитель, я вынужден был обрабатывать это событие во всех видимых дочерних контролах и пробрасывать его (или его модификацию) родителю. Особенно весело было при нескольких уровнях вложенности контролов или когда таких событий было больше двух.
     Оказывается, теперь, WPF делает все это за меня с помощью Event Routing, что очень хорошо. Мне положительно начинает это нравиться. :)

Tuesday, September 07, 2010

The Forever War

     Американский писатель-фантаст Джо Холдеман, получил кучу премий за свой роман «Бесконечная война», и совсем не зря. Книга написана в 74 году прошлого века, и описанные в ней события начинаются примерно в наше время (2003 год).
     Человечество (8 миллиардов), страдающее от голода и прочих радостей неравномерного распределения материальных благ, начинает успешно осваивать космос, в чем ему помогает открытие коллапсаров – черных дыр специфической конфигурации. Если со всей дури на околосветовой скорости нырнуть в такой коллапсар, то вынырнешь опять-таки из коллапсара, но уже где-то в другом месте (обычно в пределах Млечного пути, но иногда заносит в другие галактики). В общем, посредством коллапсаров, к 2010 году уже есть парочка колонизированных планет земного типа.
     Неприятный момент заключается в том, что до коллапсара еще надо добраться. Делается это потихонечку, на атомной тяге и за то время, пока доблестные колонисты разгоняются до субсветовых скоростей, а потом и тормозят (в общей сложности около года), на Земле проходит лет 30 :).
     Как-то раз в окрестностях Альдебарана, в созвездии Тельца, на людей нападают. Вернувшийся (через 20 лет) автоматический зонд, передает картинку корабля «тельцианцев» разносящего в дребезги корыто колонистов. Ну и начинается «бесконечная война».
     События в книге описываются с точки зрения простого солдата (тем не менее имеющего степень магистра по физике), который прошел всю войну, начиная рядовым и заканчивая майором и потратил на это, в общей сложности, 10 лет субъективного и 1000 лет земного времени.
     Всякий раз возвращаясь из очередного рейда, солдат Мандела замечал, насколько сильно меняется (читай деградирует) человеческое общество. Например, через 150 лет, все люди были как зомби, их давили пропагандой с самой колыбели, любое инакомыслие искоренялось гуманными методами психо-коррекции. Через 300 лет, гетеросексуальность приравняли к психическому отклонению и стали от нее лечить! Через 500, людей стала рожать искусственная плацента, а через 700 их вообще стали клонировать.
     Книга не столько о космических битвах на далеких планетах, сколько о людях, внезапно оказавшимися чужими среди своих.

Sunday, September 05, 2010

Работа над ошибками

В связи с принципиальным ступором в понимании основ WPF, по наводке Плотника, читаю книгу "Pro WPF in C# 2010. Windows Presentation Foundation in .NET 4.0" Matthew MacDonald-а. Книга хорошая, хотя довольно нудная местами, а временами недостаточно глубоко освещающая тему, так что приходится лезть в гугл. В общем, понимание потихоньку приходит, в свете чего надо рефакторить свою периодическую таблицу элементов. Надо еще освоить MVVM, как будет время. И будет мне щасте :)

Wednesday, September 01, 2010

Эмиль Золя. «Ругон – Маккары». 7. «Западня».

Седьмая книга из серии «Ругон-Маккары» Эмиля Золя, продолжает повествование об одном отдельно взятом семействе. На сей раз главная героиня - Жервеза Маккар - молодая прачка, приехавшая из Плассана в Париж со своим любовником Огюстом Лантье.
Лантье – редкостная скотина, промотав все деньги и заложенные в ломбард ценности, бросает Жервезу с двумя малышами в какой-то дыре в Париже (а все начиналось красиво – гостиница Монмартр, на бульваре Монмартр).
Жервеза на грани отчаянья, находит в себе силы, и честным и упорным трудом, обеспечивает себе и своим детям кусок хлеба и крышу над головой. В ту пору она с надеждой смотрит в будущее и четко знает, чего хочет от жизни:
«Моя мечта - спокойно работать, иметь постоянно кусок хлеба и жить в своей комнатушке, чтоб было чисто. Ну, стол, кровать, два стула, не больше... Ах! Еще хотелось бы мне воспитать как следует ребят, сделать из них настоящих людей, если только это возможно. Есть еще одна мечта: чтобы меня больше не били, если уж мне суждено выйти когда-нибудь замуж. Да, я не хочу, чтоб меня били... И это все. Понимаете? Все... - Она подумала, отыскивая, чего бы ей еще хотелось, и не находила больше никаких серьезных желаний. Потом, поколебавшись, добавила: - Можно еще, пожалуй, пожелать умереть на своей кровати...»
Через некоторое время Жервеза выходит замуж за хорошего, работящего, не пьющего парня – Купо, парижского кровельщика, рожает от него дочь и они потихоньку, шаг за шагом выстраивают свое счастье – копят деньги на собственную прачечную.
Все удивляются и завидуют их семейному счастью, ну сами посудите – муж не пьет, все деньги приносит домой, жену не бьет, она же всегда до сыта его кормит, тепло и чисто одевает. Виданное ли это дело, когда вокруг все мужья беспробудно бухают и колотят своих жен, а жены стараются от них не отставать?
А выпить в Париже есть где; у тетушки Баке всегда нальют рюмочку если есть два су. К вашим услугам «Бабочка», «Кашляющий Карапузик» и дюжина других питейных заведений, которые всегда открыты для дорогих гостей. Но самое главное и излюбленное место местных синяков это «Западня» дядюшки Коломба, с огромным самогонным аппаратом прямо на стойке бара.
Это Золя, и у него хорошо не бывает, у него бывает как в жизни. Кровельщик Купо падает с крыши, чуть не умирает, еле приходит в себя и оправляется только через 3 месяца, окруженный заботой и любовью Жервезы. Но вместе с 3-х месячным ничего не деланием, им овладевает скука, которую он гонит проводя время в компании своих друзей Сапога и Шкварки-би-би – знатных алкоголиков. Ну и начинает сначала выпивать, а потом и пить, а потом и не просыхать.
Жервеза к тому времени открывает свою прачечную, которую муж-бездельник начинает потихоньку пропивать. Через некоторое время объявляется Лантье, с которым у всего семейства завязываются непростые отношения. Жервеза, привыкшая за несколько лет благополучной жизни, хорошо есть, и баловать себя сладостями – раздается во все стороны. Видя, что муж пьет и не приносит домой ни единого су, она и сама начинает работать спустя рукава. День за днем, месяц за месяцем, лучшая прачечная в округе, потихоньку занижает планку и теряет своих клиентов, а потом и вовсе разоряется.
Жервезе все это дается с трудом, ведь вокруг злые и завистливые соседи, которые только рады ее падению, кроме того ее с Купо дочь – Нана, выросла и не отличается добродетелью, прямо скажем, дрянная, распутная девчонка. Ну и бедная прачка тоже потихонечку начинает квасить.
До занавеса еще далеко - Золя еще успеет протащить своих героев через такие помои, от которых кровь в жилах стынет. Мечты юной Жервезы воплотятся в полном объеме, только с точностью наоборот.
В общем, тема о пользе алкоголя, его значении и месте в среде рабочего пролетариата полностью раскрыта.