вторник, 1 января 2013 г.

Threading in C#. Joseph Albahari

Закончил читать "Threading in C#". Хорошая обзорная книга. Дает представление об определенных тамах, в которые при необходимости можно углубиться используя другой ресурс. Как вариант, может быть очень полезна при подготовке к собеседованию.

PS. Не забыть о термине "Примитивы синхронизации" :)

четверг, 15 ноября 2012 г.

Создание экземпляра интерфейса.

Немного шокирует, что эта штука будет работать :)
using System;
using System.Runtime.InteropServices;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // ухты !!!
            IFoo i = new IFoo("Hello");
            i.Print();

            Console.WriteLine(i.GetType());

            Console.ReadLine();
        }

        [Guid("40DCF1C3-C39D-4BB0-B967-1391C56E2852")]
        [CoClass(typeof(Foo))]
        [ComImport]
        interface IFoo
        {
            void Print();
        }

        class Foo : IFoo
        {
            private string _message;

            public Foo(string message)
            {
                _message = message;
            }

            public void Print()
            {
                Console.WriteLine(_message);
            }
        }
    }
}

К интерфейсу (во время компиляции!) "подвязывается" экземпляр дефолтового класса (что-то типа Activator.CreateInstance(Type.GetTypeFromClsid(GUID OF COCLASSTYPE)), и дальше все работает так, будто бы мы явно создавали экземпляр конкретного класса. Вникать историю развития COM особого желания нету, но пример забавный. К сожалению, трудно представить реальное применение этой фичи.

суббота, 1 сентября 2012 г.

IT Jam 2012

Сходил на IT Jam 2012. Если верить организаторам, то пришло более 3000 человек. Бедный "Олимпийский", просто не выдержал такого наплыва посетителей:) Из докладов был на: 1. "Value Driven - The Future of software development". Cristopher Marsh. Если честно - чуть не уснул... 2. "Deja vu". Greg Young. Было бы неплохо, если бы названия докладов небыли настолько размытыми. Местами было интересно, но мы решили пойти общаться с .NET-чиками, в итоге думаю, что выиграли. Вообще, формат IT Jam в этом году подразумевал живое общение. Ребята вешали на шею таблички с ключевыми словами (к примеру многопоточность, или NoSQL), по поводу которых с энтузиазмом отвечали на вопросы всех желающих. Как по мне, было гораздо полезнее и интереснее, чем слушать официальных докладчиков у проекторов. Грег, с нашим парнем (не знаю имени) нарисовали "страшную" диаграмму, и бурно обсуждали какие-то очереди. Вникнуть не вышло, так как вокруг собралось куча народа, и было плохо слышно. Пообщался с парнем из команды Resharper'a - умен:) Как я понял, вопросом по поводу оптимизации производительности Resharper его немного замучали. На автапати можно было пойти в "Lucky pub", но туда пришло очень много людей, нормально поесть было просто невозможно. Поэтому, сделав круг мы вернулись к олимпийскому, и сели в "Баварском доме пива". Программисты очень часто говорят о работе, но если честно, то от такого количества умных слов (или от шума, который подняли человек 20 голодных программеров:) ) - у меня разболелась голова. Было бы круто, если бы у нас было побольше мероприятий с более технологическими докладами. Например, в стиле Роя Ошерове (Roy Osherove) про TDD, но можно без песен:) Сходить что-ли в клуб анонимных разработчиков ?

понедельник, 9 июля 2012 г.

Scrum and XP from the Trenches

Прочитал Scrum and XP from the Trenches. Пожалуй, для быстрого знакомства самое оно. Книга очень легко читается, и примеры из книги близки к жизни. К сожалению, скрам вовсе не является панацеей, и как любую методологию его можно довести до абсурда. Но, как минимум это лучше чем ничего. Интересно, что многие команды, даже практически не зная ничего о скраме, интуитивно к чему-то подобному приходят. Могу сказать, что скрам точно не будет работать в украинской говно шарашкиной конторе, где владелец бизнеса (не надо мне расказывать о волшебных стартапах) находится слишком близко к разработчикам. Человек просто не захочет мириться с тем, что у команды есть голос, и воспримет стендапы, ретроспективы и планнинги как бесполезную трату времени и его денег. В теории, конечно, можно кому-то что-то объяснить (доказать), но на практике, рядовой сотрудник (а еще больше тимлид) просто бесцельно подорвет свое здоровье.

суббота, 16 июня 2012 г.

PATTERNS OF PARALLEL PROGRAMMING

Читаю Шаблоны паралельного программирования. Очень хорошо объясняется как различные проблемы решались без новых фич 4-ого фреймворка, и как элегантно они решаются с ним. Ну а этот пример, вообще шедеврален:)
int data1 = 42;
string data2 = "The Answer to the Ultimate Question of " +
               "Life, the Universe, and Everything";
Task.Factory.StartNew(()=>
{
    Console.WriteLine(data2 + ": " + data1);
});

пятница, 13 апреля 2012 г.

понедельник, 19 сентября 2011 г.

Утечка памяти в BlockingCollection

В .NET 4.0 появился класс BlockingCollection. С его помошью, к примеру, очень элегантно реализуется паттерн Producer-consumer.

Однако, как оказывается, в нем есть утечка памяти....

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

С помощью данного класса я в многопоточном режиме парсил csv файлы объемом в несколько гигабайт, с последующей записью в БД. Два дня убил на дебаг... После реализации workaround'a, у меня получилось загрузить файл объемом в 1GB, но на 13GB, я снова поймал Out of memory:(

понедельник, 12 сентября 2011 г.

OFF: О футболе

Рейтинг ФИФА:

40 Burkina Faso 646 -1 Down -15
41 Belarus 645 1 Up 9
42 Czech Republic 635 -4 Down -35
43 Jamaica 623 1 Up -9
44 Venezuela 615 -4 Down -33
45 Hungary 613 2 Up 10
46 Algeria 612 6 Up 37
47 South Africa 602 2 Up 5
48 Ukraine 598 -3 Down -22
49 Senegal 591 -3 Down -28
50 Honduras 589 1 Up -3

Дожились... Нас обошла Белоруссия и Буркина-Фасо, а в спину дышит Гондурас. ЕВРО будет нашим:)

понедельник, 4 июля 2011 г.

Книга Inside Microsoft® SQL Server® 2008: T-SQL Querying

Закончил читать книгу inside microsoft sql server 2008: t sql querying. Процесс тюнинга очень хорошо и подробно расписан. Много качественных примеров.
Нужно будет еще как-нибудь прочитать книгу этих же авторов Inside Microsoft® SQL Server® 2008: T-SQL Programming

четверг, 30 июня 2011 г.

DBFExporter

Задача: Сохранить файл с данными в формате dbf.

Есть разные способы решения данной задачи. Очень часто люди используют пакет MS Office. Excel или Access умеют работать с данным форматом.
Это несколько суровый способ:
1) требует наличия онных на машине у пользователя.
2) COM - со всем вытекающим гемором.

В принципе, в коорпоративной среде пункт 1 не проблема. Пункт 2, если по десять раз в день пользователям не переустанавливают офис - в целом, можно смириться с тупыми глюками, которые похоже и не собираются фиксить, а также необходимостью вызывать методы с 20-ю параметрами, половина из которых ни на что не влияет, и оставлена Майкрософтом для обратной совместимости.

Так как мы в своем приложении используем Excel для определенных целей, идея использовать Excel для экспорта в dbf показалась мне заманчивой, тем более, что он поддерживает все версии формата.

Какого же было мое разочарование, когда выяснилось, что по причинам судовой тягомотины Майкрософт удалила возможность сохранять файлы dbf в MS Excel 2007. Читать он умеет, а вот сохранять фиг. Учитывая, что у доброй половины пользователей именно Excel 2007 - делать под 2003, а потом доказывать, что он должен обязательно быть у пользователя, как то не хочеться.

И тут на помощь приходит гугл. Утилит и библиотек, которые бы могли конвертировать csv в dbf не меряно, но большинство из них стоит примерно по 20$.

Единственное бесплатное и вроде бы работающее решение было найдено на соурсфордже

Экспорт осуществляется в dbf 3. По умолчанию файл сохраняется в кодировке ASCII. Имея исходники, нужно поменять код в двух местах, чтобы экспортировать в любой кодировке.

P.S. Если сгенерированный мной сегодня файл, завтра не получиться загрузить в банковскую АБС - будет не хорошо. Верим в лучшее

вторник, 31 мая 2011 г.

Впечатления от чтения спецификации языка C#

Тоска жуткая. Как в справочник заглядывать можно, как книгу читать очень тяжело. Куда приятнее читать MSDN.

понедельник, 7 марта 2011 г.

OFF: Отпуск в Праге

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

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

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

Далее трансфер в отель. 3-х звездночный ABE, на Легерова 22. Минут 5 пешком от метро И.П. Павлова. Там в округе куча отелей. В целом небольшой отельчик, наверное от 3-х звезд ожидать большего не стоит. Типа евро ремонт, вроде не очень грязно, вода горячая есть, тапочек и холодильника нету (в Украине в "нормальных" - с евро ремонтом отелях мне всегда попадались тапочки). Шведский стол на завтрак с неочень большим выбором блюд (колбаса, сыр, мясная нарезка, орехи, хлопья, чай, кофе, молоко). Ресторанчик при отеле начинал работать в 8 утра. Что не очень удобно, если тебе к примеру в 7:00 уже нужно ехать смотреть другой город. Для тахих случаев заранее нужно просить сухпаек, который с утра можно забрать на ресепшене. В сухпаек входило пару бутербродов, кусочек плавленого сыра, помидор и сок. В общем желательно перед таким днем затарится в ближайшем магазине.

Практически весь персонал (с которым приходилось общаться на ресепшене) знает русский. Была девушка лет 25-30 (судя по всему носитель), тетка лет 45-50 (заметно что не носитель, но говорит не плохо), мужик лет 40 (говорит с трудом, но понимает нормально), и парень лет 20-25 (сказал что по-русски не говорит и мы общались на английском).
Вообще как у меня сложилось впечатление, то люди работающие в местах скопления туристов практически все владеют русским. Если не владеют русским, то вполне сносно владеют английским.
Если поприставать к прохожим на улице (а Вы не подскажете как пройти в библиотеку?), то в местах где туристов не видно (специально заезжал, чтобы посмотреть на обыденую жизнь города), то молодежь говорит по-английски (я уж совсем быдловатых не спрашивал, хотя особо таких и не видел). Спрашивал двоих человек лет 50-60, они не по-русски не по-английски не говорили. После чего я решил, что лучше прямо влоб без "Sorry, do you speak English?" подходить к молодеже, и мне ни разу не попадались такие, которые бы не разговаривали на сносном по моим меркам английском.

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

Чешский язык это нечто :) Я почему то думал, что смогу понимать говорящих между собой чехов, так как понимал польский, когда смотрел польский канал (почти все понимаешь, но через полчаса начинает с непривычки ехать крыша). Оказалось не так просто. Некоторые слова улавливаешь, но они могут означать вовсе не то, что ты думаешь. Например слово "Pozor", перевонится не как "позор", а как "внимание". Если говорить медлено, и они говорят медлено, то впринципе зная русский, украинский и используя язык жестов можно объясниться на уровне совершения покупки в магазине:). Некоторые ихние слова для нас могут быть интуитивно понятными, например "возидла" - машина, "летадла" - самолет :) "дікую" - спасибо, почти как украинское "дякую".

Если сравнивать цены, то цены на продукты питания в магазинах примерно соответсвуют нашим украинским. Одежда, наверное тоже, по крайней мере я заходил в некий Sportisimo, который и по ценам, и по асортимену мало чем отличается от Спортмастера.
Цены в ресторанах, примерно такие же как в Киеве. Стейк обходится примерно в 150-200 крон (делим на два получаем гривны), бокал пива (я пил только местное чешское) 30-50 крон, если не заводское, а из собственной пивоварни, то немного дороже. Порции большие:) Я например, заказал свинное колено весом 1800 грамм (большая часть пожалуй кость, но и мяса тоже много) и осилил его с огромным трудом. Пиво, в целом, как пиво. Бутылочное чешское в Чехии ни чем не отличается от бутылочного чешского в Украине. Стоит пробовать пиво в маленьких пивоварнях, например в Страговском монастыре или в пивоварне в Дитинице. Даже не по тому, что оно какое-то особенное по вкусовым качествам, а потому, что варится в ограниченных количествах, может хранится лишь несколько дней, и его больше нигде не попробуешь. Козел и Старопрамен, который делают в Чехии, по вкусу мало чем отличается от тех, которые делают у нас. В общем пиво - это дело вкуса. Моим любимым пивом как было, так и осталось темное Крушовице. Еще нормальное Крушовице Мушкетер (у нас не встречал). Не понравился Златопрамен и Пилснер Уркуел, реклама которого на каждом шагу.

В среднем на хорошо покушать выходило 10-15 евро с человека. До этого ездил в Прагу коллега, и расказывал о 30-и евро. Мне аж интересно, это что такого можно съесть за такие деньги? Найти бюджетный вариант типа Пузатой Хаты у меня не вышло (правде не особо искал). Есть куча Макдональдстов, но это для гурманов :) Проезд дороговат. Билетик на полчаса или 5-станций метро - 18 крон. На 75-минут - 26 крон. На день - 100 крон. Годовой проездной на год что-то в районе 4600 крон.

Качество общественного транспотра на порядок выше чем в Киеве, на половине станций в метро есть лифты для инвалидов. И люди на инвалидных калясках ездят в метро. Нету этих долбанных маршруток (я не видел). Покупаешь билетик, компосируй и едь на метро, пересаживайся на трамвайчик, автобус. Никаких: "Пасажиры, передаем за проезд. Одной рукой курит, другой считает деньги, ногой рулит и подрезает другого такого же. Так, я бл#дь не понял кто не передал ...". Турникеты чисто символические. Просто стоят аппараты, в которые вставляешь билет и тебе на нем отпечатывается время и станция на которой ты сел. Если билет уже пробит, и еще действует спокойно проходи не останавливаясь и не прикрывая ничего в страхе рукой, чтобы не прищимило. Контролеров не видел. Местные расказывали, что они есть, и штрафы очень не хилые. Дороги не идеальные, но гораздо лучше чем у нас. Ездил в метро в часпик. Такой давки как в Киеве вроде нету. Может повезло, а может пражская инфраструктура больше соответсвует реальному количеству жителей. Официально в Праге живет 1 200 000 человек. Понаехавших, вроде меня ведь тоже хватает (?) + толпы туристов в центре (это был еще не сезон).

В первый день было полдня свободного времени.
Поменял деньги. С одной стороны пожалел, что в Украине купил евро, а затем менял на кроны. Во многих обмениках в центре принимают гривны. Единтсвенное что нужно быть внимательным, так как в обменике могут взять комиссию. Нужно менять у арабов, или там где написано комиссия 0%.

Решил побродить по городу (исторический центр - старый город, новый город). Куча коротких узеньких улочек. Не имея карты очень легко заблудится.
Хотя стоит отдать должное чехам, везде куча указателей на разных языках.
На центральных улицах куча туристов (итальянцы такие шумные). В целом не идеально, но гораздо чище чем в Киеве. Засранее улицы, чем Крещатик в Киеве, я в жизни не видел. Архитектура красивая, в целом похоже на исторический центр Львова, но только побольше. Каждый дом выглядит как-то по особому, куча статуй. Потом ходили уже с экскурсоводом - у каждого домика своя легенда. В целом довольно интересно получается.

Второй день была поездка в Вену. Выездные экскурсии на день - отстой. Час-два едешь. Три часа тебя водят по историческому центру города, потом есть два-три часа свободного времени. Которого хватает на то, чтобы покущать, сходить в какой-нибудь музей и зайти в пару магазинов. В отличии от Чехии, в Австрии и Германии по-русски не особо говорят (и слава богу). Чтобы заказать покушать или что-то купить английский знать желательно. Можно, конечно, как многие наши мычать и тыкать пальцами, но это довольно тяжело как по мне. В Вене красивый императорский дворец, куча статуй мужика на коне (император Вацлав). По сравнению с Прагой - лучше дороги и куча велосипедных дорожек для велосипедистов. На велосипедах ездят девушки в юбках. Так и представил гламурных фиф, типа Маши Ефросининой (а хто це?), на таком вот велосипеде, с корзинкой для продуктов:) Ничего против данной дамы не имею (мне вообще по барабану на украинский шоубизнес), просто привел как собирательный образ для примера.

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

Ездил в Карловы Вары. Городок небольшой. Если не ехать с целью лечиться, то как мне - там особо занятся нечем. Ходят на раслабоне в основном пожилые люди, пьют водичку (не вкусная, слишком минерализирована, как будто в воду соды насыпали, похожа на Боржоми, только поядренее). Чистый воздух, уточки и благодать. Количество русскоговорящих просто зашкаливает. Город разделен на две части, в одной части курортная зона, в другой живет обслуживающий персонал. Кроме сферы обслуживания есть завод по производству стекла, и завод по производству бехеровки. В общем мне не особо понравилось.

Ездили в замок в Детинице. Замком это можно назвать с трудом. Небольшой двухэтажный домик в стиле барокко (или рококо, простите за невежество). Походили по домику, пофоткали интерьер. Затем пошли ужинать в ресторан. Оригинальная задумка. Закос под средневековье. Освещается только свечами, на полу сено. Принесли полную тарелку мяса. Развлекательная программа. Песни, танцующая девушка на столе, постановка сценки, выстрелы из мушкетов, мужик со змеей, которую можно погладить, огненное шоу. Местное пиво, впринципе, нормальное.

Много бродил по Праге сам. Куча музеев. К примеру, возле Карлового моста есть музей Франца Кафки. Говорят, что очень хороший. Жалею, что не попал. В полностью свободный день съездил в зоопарк и кукольный театр на Дон Жуана (понравилось, рекомендую, хотя дороже чем в Киеве - я заплатил 450 крон). Если сравнивать, к примеру с Киевом, то как мне показалось - все немного удобнее, чище и человечние. К примеру, у входа в парк есть специальные пакетики для собачек. Собачка покакала, хозяин собирает это дело специальным совком, ложит в пакетик, и выкидывает в урну. Полиция (а ее там довольно много), наверное также продажная, местные расказывают, что с ними впринципе за 200 крон можно договориться. После 10 вечера, между станциями метро Музеум и Мустек буквально через каждые 20-30 метров стоит по негру (простите, по афрочеху). Незнаю, наверное, они проводят экскурсии по ночной Праге :) и делятся за это с полицией, раз я турист на них обратил внимание, а полицейские на экскурсию сходить не хотят (или уже были?)

Ничего такого сверхестетвенного в Чехии я не увидел. Уровень жизни, как я понимаю, там не очень высокий. Естественно выше чем в Украине:( Пенсия 500 евро против 100 - это все же разница. Если двигаться в нужном направлении, догнать чехов было бы более чем реально. Но только не в том направлении движемся.

Гуляя с группой по Страгоместкому монастырю, наблюдали картину, как к монастырю подъехали три черные ауди. Из одной вышел президент чешской республики, они с делигацией пошли возлагать венок (умер какой-то чешский писатель). Я стоял от президента Чехии метрах в 20 (есть его фотка). Кто может подобное представить в Украине? У нас бы омон оцепил все в радиусе километра, президент прилетел на вертолете, а меня если бы я попытался приблизится, с крыши бы пристрелил снайпер. На обратной дороге, мы опять встретили мышину с президентом (уже одну). За рулем водитель, на заднем сиденье президент, и аж один охраник. Никаких тебе кортежей, мигалок, перекрываний дороги, машин скорой помощи, которые на скорости за 100 км в час по городу создают ДТП. Ведь если сократить чрезмерные затраты на охрану нашего уважаемого президента и служебные авто для депутатов, можно ведь закупить пакетики для собачьих какашек? Причем большинство людей ведь у нас абсолютно нормальные, и если показать как это делается и поставить побольше урн, многие люди ведь будут убирать за своими питомцами.

В предпоследний день поехал в Нюрнберг. В городе сохранилась городская стена (довольно толстая), которая окружает всю историческую часть города. Куча средневековых башен. В общем с точки зрения туриста, очень круто. Далее я получил настоящий шок. Это известно, что в Германии очень высокий уровень жизни, но пока я этого не видел, я не представлял как это, когда пенсия в стране порядка 2000-3000 евро. В центре города ресторанчики, все желающие не помещаются в середине. На улицу выставлены столы, просто в огромных количествах. Льется море пива, официанты носят горы еды. Сидят немцы различных возрастов. Те что помоложе, одеты кто во что. Многие из тех, кто постарше в пальто и шляпах. Сложно представить, чтобы украинский пенсионер пошел попить пивка в центр города, да? На центральных улицах дорогие модные магазины (Gucci, Marc&Spencer и т.д.). В них, как в продуктовый магазин заходит куча старушек. Стоит припаркованный Порше Кайен, в него садится дедушка. В Украине, конечно, тоже есть дедушки на порше, но их еще нужно поискать. А там это все в таких количествах, что психически неподготовленому человеку вроде меня бросается в глаза. Еще бросается в глаза куча арабов или турков, но это другая история :)
Обедали мы в большом баре, не помню названия.Он немного отдален от центра, и цены там пониже. За порцию из 6 Нюрнберских сосисок с гарниром из капусты 6 евро (вполне сносно). Неплохое свое пиво. Кругом куча болельщиков футбольного клуба Нюрнберг. Не знаю, выиграл ли Нюрнберг, проиграл, или они просто собрались попить пива, но поющие песни немцы это очень калоритно:) Все спокойно и мирно. Никаких беспорядков и кучи этих гребанных семечек, как на наших стадионах. Было бы время, обязательно бы сходил в Германии на футбол.

В целом скажу, что поездкой остался доволен. Конечно, у них тоже не все идеально. На улицах чище чем у нас, но чистота не идеальная, в общественном туалете может быть сломано сиденье и плохо пахнуть, но в целом лучше чем у нас.
Если есть кто-то такой же темный как я - нужно обязательно съездить в Европу. По деньгам у меня вышло за неделю 300 евро самолет + 300 евро проживание в отеле + дополнительные экскурсии (в среднем 50 евро) и питание в ресторанах (в среднем 10-15 евро с человека за раз) + сувениры 400 евро. Итого на все про все около 1000 евро. Могу сказать, что для первого раза в качестве просвящения оно того стоит. Хотелось бы еще побольше посмотреть Германию, чехи нас может и не на много опережают в плане экономики, но ощущение в целом, что у них гораздо больше людей пытаются быть людьми. По крайней мере, власти стараются, чтобы люди себя людьми чувствовали, а не быдлом как у нас. Ведь реально, не так много нужно сделать, чтобы хотя бы попытаться сделать улицы чище, чтобы запретить маршрутчикам ездить без кондукторов, чтобы повесить в центре города указатели, на разных языках, чтобы турист мог сам без гида найти Михайловскую площадь, к примеру.

P.S. Вернулся в Украину. Не хочу выходить на улицу, чтобы не видеть все то быдло с семечками и пивом Десант.

среда, 9 февраля 2011 г.

Resign Patterns Ailments of Unsuitable Project-Disoriented Software

Закончил читать Gang Of Four - Design Patterns, Elements Of Reusable Object Oriented Software.
Жаль, что по жизни чаще приходится сталкиваться с чем-то вроде этого. Поржал с себя на тему Absolver. Вообще интересная штука, если в наследство к тебе переходит хороший код, то подсознательно своим ты его признаешь очень быстро, даже если твоего кода там минимум. Если же плохой, отвергаешь его даже тогда, когда твоего кода там станосится не меньше, чем начального.

PS. Самое печальное, что проклиная своего предшественника - осознаешь, что твоему последователю, будет за что проклинать тебя:(

вторник, 18 января 2011 г.

Сдача MS 70-431

Сегодя сдал майкрософтовский экзамен "Microsoft SQL Server 2005--Implementation and Maintenance".
Конечно, было бы актуальнее сдавать 2008 сервер, но у меня нету практического опыта его применения, так что я попросту побоялся.

Готовился 2.5 месяца, используя преимущественно трейнинг кит и MSDN. В конце, решил попробовать дампы, коих полно в сети. По правде говоря, очень много вопросов на экзамене было как в дампах.
Не понимаю людей, которые выкладывают подобную информацию в сеть. Чем легче сдать экзамен, тем меньше он ценится (или это недоброжелатели MS делают? :)). Какой смысл снижать собственный вес, при этом позволяя другим "на шару" сдать экзамен? Я не считаю, что сдал "на шару", ведь готовился нормально, а мог бы просто зазубрить вопросы из дампов. Хотя это, как и использование любой "шпаргалки" - риск. Ведь нельзя быть уверенным, что вопросы из дампов совпадут на 100% с вопросами на экзамене.

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

В самом экзамене, не понравилися один момент в симуляциях. Идея симулировать рабочую среду, где тестируемый может выполнить определенные действия, с целью проверки его практических навыков - реально хорошая. Не понравилось то, что функционал Managment Studio реализован в минимальном объеме необходимом для текущего задания. К примеру, было задание, в котором обваливалась вставка в таблицу из-за коряво написаного триггера. Проблему нужно как-то решить. Просмотреть код тригера и перекомпилировать - нельзя, сделать триггер не активным - тоже нельзя. Остается только удалить. Очень разумное решение для реальной жизни:)

Из-за того, что это первый базовый экзамен, в нем охвачена довольно большая часть функционала SQL Server. Пришлось подтягивать вопросы, которые мне как разработчику, в реальной жизни решать не приходится. К примеру, заниматься бекапами - не есть задача разработчика, точно также как разработчику вовсе не обязательно знать, что SQL Server 2005 Standard Edition не будет работать на Windows XP Professional с SP1.

Понравился сам по себе трейнинг кит, как книга. Узнал для себя кое-что новое. Некоторые вопросы описаны довольно таки нормально. К примеру, не во всех книгах по MS SQL Server для разработчиков, нормально описана причина фрагментации индексов, и когда индекс лучше REORGANIZE, а когда REBUILD.

Думаю, что в обозримом будущем буду готовится к сдачи других экзаменов. Только, пока еще не определися каких. Что лучше, готовится к экзамену по SQL Server для разработчиков, или же покачать скилы по .NET?

PS. Так вопрос, исключительно на проверку собственной памяти. Вспомню ли я через полгода, чем отличаются RAID0, RAID1 и RAID5?

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

Жесткий хедхантинг

Последнее время активизировались рекрутеры (что по большому счету есть хорошо). Лично меня, за последние две недели, приглашали пособеседоваться 4 раза. Обычно пишут через linkedin, почту, скайп или аську. Реже звонят по мобильному. Как по мне, так контакт с целью заинтересовать человека, через интернет более эффективен. Почту человек прочитает в любом случае, и ответит в спокойной обстановке. А вот мобильный в течении рабочего дня может и не взять. Ну да ладно, кому как удобнее.
Но сегодня случилась история, которая меня несколько шокировала. Звонит корпоративный телефон по нашему внутреннему номеру. Беру трубку: "Мол, Андрей, тут звонят тебе из конторы такой-то (не помню названия) и хотят с тобой поговорить". Я переспрашиваю: "А точно со мной, а не с тем-то менеджером? Я ведь всего лишь программист".

После уточнений выяснилось, что говорят хотят именно со мной. Думаю: "Может мы делали что-то для них?". Не могу вспомнить... Переключают внешний номер на меня. Представляется женщина с явно не русским акцентом. Говорит: "Я знаю, что Вы на работе. Можете ли сейчас говорить?". Ну думаю, что какое то странное начало для делового разговора, ведь по работе звонят, а не на лыжах кататься зовут. Логично было бы спросить: "Звоню по такому-то вопросу. Не сильно ли Вы сейчас заняты?", или "У Вас есть пара свободных минут?". Отвечаю, что могу говорить. Она резко начинает говорить по-английски, причем довольно быстро. Я знаю, что когда человеку тяжело говорить на одном языке, он может перейти на другой. Не люблю когда такой переход происходит так мгновенно. Почему бы не сказать: "Мне тяжело говорить по-русски. Вы говорите по-английски?". Не знаю, может это я не достаточно крут, и хоть могу общаться с англоязычными товарищами, но мне в мозгу надо переключить некую перемычку. Если бы она с самого начала говорила на английском. Типа: "Hello. My name is...". Было бы лучше, так как я бы сразу понял в какое положение эту перемычку переключить. Ну да ладно. Дело не в том, что я не въехал в первые несколько фраз после перехода на английский (или это такая проверка на знание языка?). А в том, что она мне говорила потом: "У нас есть много различных проектов и т.д. Выслать Вам описание вакансий?"

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

PS. Надеюсь, что ничего особо важного в начале разговора на английском не было. А то вдруг, она мне сказала что-то типа: "Мы набираем команду для постоянной работы в Лондоне, и готовы помочь со всеми вопросами связанными с переездом..." :)

понедельник, 11 октября 2010 г.

Книга Refactoring Databases: Evolutionary Database Design

Закончил читать книгу Refactoring Databases: Evolutionary Database Design (By Scott W. Ambler, Pramod J. Sadalage). У авторов получился некий структурированный справочник.
Некоторые примеры из книги знакомы до боли. К примеру, таблицы имеющие огромное количество колонок - перед глазами так и стоит некая Statlogic.PCS.Application, в которой более 100 колонок. Есть кто в теме? :)
Можно было бы побольше описать работу, когда происходит работа с несколькими базами одновременно, способы ухода от подобной необходимости (без построения мега DWH в котором есть абсолютно все), а также возможные проблемы (не знаю как в Oracle, но к примеру, MS SQL 2005 не позволяет создавать индексированные представления обращающиеся к разным базам, чего мне в свое время очень хотелось)

Несколько смущает длина переходного (transition) перода, о котором упоминалось в книге. Мне интересно, кто как реализует удаление старой схемы? Кто там через полгода вспомнит, что нужно накатить какой-то там скрипт? Даже не смотря на то, что этот процесс можно автоматизировать, все равно цифра 6-12 месяцев довольно велика.

среда, 25 августа 2010 г.

Intel bought McAfee:)

Intel CEO: «We need antivirus, can someone buy me McAfee?» Few hours later: «Done.» «Great, which version?» «Version… ?»

суббота, 1 мая 2010 г.

MS-2784: Tuning and optimizing database queries using Microsoft SQL Server 2005

Довелось проходить данный тренинг (3 дня), в компании Softline. Ожидал несколько большего.

Из полезного для себя узнал как совмещать статистику Windows Perfomance Monitor и SQL Server Profiler.Стали после тренинга с коллегами подумывать о партицировании некоторых исторических таблиц.

Не понравились задания с рефакторингом курсоров. Сами рекомендации полезные, но примеры явно надуманные. Если после рефакторинга курсор может превратиться в банальный SELECT, то как вообще могла в голову прийти идея использовать курсор?

Последнее задание, где нужно было проанализировать базу на предмет блокировок, и переписать код, чтобы их уменьшить. Решение предлагаемое в книжке я так не понял. Какой может быть выигрыш, если перед стартом транзакции явно указывать  READ COMMITED (уровень изоляции по умолчанию), и вместо автокомита транзакций, стартовать и подтверждать их явно? Нет ну может небольшой выигрыш и будет, но врядли он будет существенным.

вторник, 20 апреля 2010 г.

Кремниевая долина

Занятная картинка.


Хорошо нашему брату там небось живеться. Скучно работать в Oracle? Иди в Google:)
PS. Не знал, что Aricent в кремниевой долине есть.

суббота, 3 апреля 2010 г.

Code Contracts

Есть такое понятие, как самотестируемый код(не путать с тестами). Общая суть в том, что в дебажную сборку программы добавляются проверки необходимых для успешной работы условий, и если условие не выполняется - значит что-то пошло не так.
К примеру, в неком методе необходимо проверить входные параметры, а не null ли передался вместо полноценного объекта? Затем проверить результат работы метода.

static void SomeMethod(object param)
{
    // проверяем входные параметры
    Debug.Assert(param != null);
    
    // делаем что-то важное...
    DoSomethingImportant();    

    // проверяем результат работы
    Debug.Assert(somethingImportant != somethingUnimportant); 
}

Хорошо. Но не слишком удобно, так как предусловия и постусловия проверяются в разных 
местах. 

Ну а теперь перейдем к самому интересному. С относительно недавних пор (начало 2009 
года) у Microsoft есть такой продукт как Code Contracts (в Java как мне сказали 
аналог есть давно). Данная библиотека пока не является ни частью .NET, ни частью 
Visual Studio. По крайней мере с VS2010 Beta 2, она не ставилась. А так у меня 
поставилась на VS2008 и интегрируется с msbuild.

Малюсенький примерчик. Допустим мы хотим иметь метод, который заполняет список 
int'ов только четными числами, суммарное количество элементов списка не должно 
превышать 6, и мы хотим быть уверены, что в нашем методе добавляется только один 
элемент в список: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics.Contracts;

namespace CodeContractsTest
{
    class Program
    {

        static void Main(string[] args)
        {
            List listEven = new List() { 2, 4, 6, 8};
            AddItem(listEven, 10);

            // последующий вызов вызовет исключение
            //AddItem(listEven, 11);


            foreach (var item in listEven)
            {
                Console.WriteLine(item);
            }

            Console.ReadKey();
        }

        static void AddItem(List list, int item)
        {
            Contract.Requires(item % 2 == 0);
            Contract.Ensures(list.Count <= 6);
            Contract.Ensures(list.Count == Contract.OldValue(list.Count) + 1);

            list.Add(item);
            //последующий вызов вызовет исключение
            //list.Add(item);
        }

    }
}

Как видим в нашем распоряжении есть два наглядных метода для проверки пре- (Requires)
и постусловий Ensures. Это гораздо нагляднее чем использовать Debug.Assert, хотя
Contract.Assert тоже есть:) Есть еще атрибуты [ContractClass] и [ContractClassFor].
Можно объявить интерфейс, обозначить его [ContractClass], затем создать класс,
реализующий этот интерфейс, обозначить его как [ContractClassFor] и реализовать в
нем контракт. И все классы, которые будут реализовывать наш интерфейс по умолчанию
будут проверяться на соответствие контракту.

Ссылка на Code Contracts: http://research.microsoft.com/en-us/projects/contracts/

PS. Точнее в VS210 Beta 2. По умолчанию можно подключить сборку
System.Diagnostics.Contracts, и даже писать ее методы (компилироваться будет, но
работать нет). И только после того, как библиотеку установить, в свойствах проекта
появиться Code Contracts и с ними можно будет работать.