вторник, марта 30, 2010

Главное соблюдать режим

В процессе разработки я столкнулся с весьма интересной проблемой: как в WinForms приложении определить в каком режиме сейчас находится контрол? То есть, понятно, что внутри контрола есть свойство DesignMode, которое и призвано ответить на этот вопрос. Но только когда разрабатываемый контрол помещается на форму, то он из режима редактирования быстренько перескакивал в рантайм, то есть это возвращало нам false. Столкнувшись с этим непонятным поведением я подумал, что, кто-то на эти грабли уже наступал, и простой запрос гуглу вернул мне кучу обсуждений, где во всю горланили, что это баг такой, что свойство это некорректно, что надо обходными путями проверять. В большинстве мест глобальный разум подсказывал простое решение: спросить текущий процесс, а не процесс ли он среди разработки:
System.Diagnostics.Process.GetCurrentProcess().ProcessName.Equals("devenv")
Но такое решение показалось мне не очень понравилось, потому как разрабатывать приложения можно не только в Visual Studio, а, следовательно, в другом редакторе такой способ не поможет.
В общем начал я исследовать это свойство DesignMode и выяснил очень приятный момент! Если, например, его проверять в конструкторе контрола, то нам возвращается false, а если в OnLoad или в InitLayout, то он, вуаля, всё работает правильно! Если мы находимся в редакторе, проверка свойства DesignMode внутри всех методов и свойств контрола, кроме конструктора, возвращает true, а если же приложение запущено, то нам приходит false. В общем свойство это работает так, как ему и следует. Удивляет одно - я нигде не увидел корректного совета о том, что проверять это поле надо не в конструкторе, а позднее.

вторник, марта 23, 2010

Колхоз стайл

"Эх, какая же снежная выдалась зима" - думали мы зимой, радуясь обилию сугробов и отличному сноубордингу! Но вот пришла весна, стало тепло и весь этот снег начала таять. Зимой снег никто не чистил, сугробы были с человеческий рост, и сейчас всё это белое царство вдруг стало вдруг коричневым от грязи, мокрым и постоянно куда-то текущим!
В связи со всем этим, одним из самых популярных видов обуви стали резиновые сапоги! И дети, и взрослые, и девушки, и бабушки... В общем очень много представительниц прекрасного пола надели эту влагозащищённую обувь и наслаждаются сухостью ног. Но если с женской резиновой обувью дела обстоят хорошо - в продаже есть много разных моделей разных цветов и даже фасонов, то с мужской обувью ситуация гораздо хуже. Из мужских в продаже есть чёрные, чёрные высокие, зелёные и зелёные высокие сапоги. Очень редко в магазинах для охотников встречаются сапоги камышовой раскраски или пятнисто-защитные, что несколько разбавляет картину. Не знаю с чем связано, быть может с отсутствием разнообразия, но мужская часть населения, исключая детей, неохотно надевает резиновые сапоги. А я вот купил себе, как раз камышовые. Очень доволен - шлёпаю по лужам и хожу с сухими ногами! )

понедельник, марта 22, 2010

Кинодень

Решил забросить на один день всякие напрягающие мозг задачки и посмотреть пару фильмов. И так, по-порядку.
Первым под руку попал Кандагар - свеженький фильм с довольно громкой рекламной кампанией. В основу фильма легли реальные события. На сколько я понимаю, показанная история очень близка к реальности, хотя и несколько смягчена. Фильм предназначен для широких масс, он не держит в напряжении, но игра звёздного состава (Балуев, Машков, Панин) не даёт отвлечься. Вот так сидишь и смотришь весь фильм. И я сидел и смотрел и не жалею о потраченном времени - фильм мне понравился и тем, кто не видел, очень рекомендую.
Далее мой выбор пал на Адреналин 2. Понятно, что какого-то смысла от этого фильма ожидать не следует, просто хотелось экшна. Помнится в первом Адреналине его было предостаточно. Но как-то прямо с самого начала фильм не понравился. И динамика какая-то неправильная, и съёмки (или монтаж?) как-то разочаровали. В общем, 15 минут просмотра и фильм отправляется на помойку.
Дабы жажда зрелищ была не утолена, следующим кандидатом на просмотр был выбран немецкий фильм Die Welle (Волна), который почему-то переводчиком был назван "Эксперимент 2". Ну да, фильм про социальный эксперимент, проведённый в одной из немецкий школ. Кстати тоже основан на реальных событиях. Вкратце там повествуют о том, как отдельно взятый учитель, в отдельно взятой школе, в рамках отдельно взятого курса "Автократия" опроверг утверждение о том, что в Германии невозможно создать диктатуру, потому как она (Германия) уже имеет такой отрицательный опыт. Как выяснилось, у современного общества даже такой развитой и наученной горьким опытом страны нет иммунитета к культу личности. Фильм захватывает с самого начала и смотрится с удовольствием на одном дыхании. История интересная и во-многом поучительная. Этот фильм я так же рекомендую к просмотру.

понедельник, марта 15, 2010

Так значимые или ссылочные?

Пишу я тут одну библиотеку, которая должна связывать 2 приложения, ничего друг о друге не знающих. Задачка не сложная, у библиотечки есть API, на вход методам которого подаются объекты, наследующие определённые интерфейсы, из этих объектов берутся нужные поля и данные передаются одному из приложений. Но суть не в этом. Внутри библиотеки я использую структуры, уповая на то, что значимые типы размещаются в стеке, а следовательно работать с ними быстрее, чем со сылочными, которые в куче. Вот и подумалось тут мне, есть метод, который возвращает проинициализированный некими значениями объект типа IInterface. Какая реализация метода отработает быстрее: в которой создаётся новый значимый тип или же ссылочный? Вроде как при значимом будет производиться боксинг, что довольно дорогое удовольствие, но в то же время для ссылочного компилятор генерирует callvirt вместо call, который тоже добавляет тормозов. В общем для проверки написал маленький тест.
Собственно, объявление типов:
  1. interface IInterface
  2. {
  3.   string field { get; }
  4. }
  5. struct Struct : IInterface
  6. {
  7.   public string field { get; set; }
  8. }
  9. class Class : IInterface
  10. {
  11.   public string field { get; set; }
  12. }
  13. static IInterface method1()
  14. {
  15.   return new Struct() { field = "0" };
  16. }
  17. static IInterface method2()
  18. {
  19.   return new Class() { field = "0" };
  20. }
* This source code was highlighted with Source Code Highlighter.
Ну и сам вызов:
  1. Stopwatch sw = new Stopwatch();
  2. sw.Start();
  3. for (int i = 0; i < 100000; i++)
  4. {
  5.   IInterface I = method1();
  6. }
  7. sw.Stop();
  8. Console.WriteLine("Test1: On struct elapsed: " + sw.Elapsed.ToString());
  9. sw.Reset();
  10. sw.Start();
  11. for (int i = 0; i < 100000; i++)
  12. {
  13.   IInterface I = method2();
  14. }
  15. sw.Stop();
  16. Console.WriteLine("Test1: On class elapsed: " + sw.Elapsed.ToString());
  17. Console.ReadLine();
* This source code was highlighted with Source Code Highlighter.
В результате получилось:
Test1: On struct elapsed: 00:00:00.0110243
Test1: On class elapsed: 00:00:00.0075070

В общем получилось, что боксинг медленнее виртуального вызова, но учитывая, что на 100 000 экземпляров разница составила 4 миллисекунды (это максимальная увиденная мной разница), с этим вполне себе можно жить.
Если же всётаки методы 1 и 2 будут возвращать не интерфейс, а структуру и класс соотвественно, то метод со структурой выполнится быстрее своего собрата.
Test1_1: On struct elapsed: 00:00:00.0042494
Test1_1: On class elapsed: 00:00:00.0067243

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

суббота, марта 13, 2010

Жоп-слайд и другие трюки

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

 Единственная девушка участник
Больше фоток на пикасе.



четверг, марта 11, 2010

Алиса порадовала

Посмотрел "Алису в Стране Чудес" Тима Бёртона, и не просто так плоское кинцо, а в самом что ни на есть 3D. Остался очень-преочень доволен увиденным. Вот у меня друзья говорят, кто этот фильм месяц ждал, кто неделю, а я совсем не ждал. Ну фильм и фильм. Ну Алиса. Но ничего экстраординарного я не ожидал. А зря!
Круче всех кот! Чеширский кот с просто непередаваемой улыбкой и полным ртом зубов! На втором месте Шляпник - Дэпп. Ну да, он не переплюнул рисованного кота, но за-то какие у него потрясающие глазища! Ну а игра Дэппа опять на высоте, хотя походочку такую мы уже где-то видели :) Ну а дальше все по списку :) Ещё порадовала озвучка! Чего только стоит "Голову с плеч!" красной королевы!

В общем, очень рекомендую и именно в 3D - очень много этого 3D там и очень качественно сделано. Смотрите и не пожалеете!

суббота, марта 06, 2010

Сократ был прав

Осенью прошлого года я решил, что надо бы мне подтянуть свои знания, потому как что-то засиделся я на одном месте, разжирел и расслабился, а вперёд двигаться надо. На тот момент я считал себя неплохим программистом не претендующим на какие-то награды, но хорошо выполняющим свою работу с достаточным багажом знаний и опыта за плечами, позволяющем решить многие возникающие задачи в кратчайшее время. Даже почти безукоризненно выполняющим свою работу, всегда укладывающимся в сроки и почти не допускающим ошибок. По случаю отпуска, в надежде утолить жажду знаний, было собрано немного материала по новым технологиям и некоторое количество фундаментальных книг, дабы освежить забытое и заполнить пробелы в знаниях. И началось... С тех пор список прочитанных книг и статей, прослушанных лекций и просмотренных презентаций расширился в несколько раз и постоянно растёт и множится. Это всё хорошо, а вот плохо то, что чем больше я читаю и узнаю нового, тем сильнее понимаю, что знания мои скудны и ничтожны :) Я с ужасом думаю, где де же взять столько времени и сил, чтобы узнать всё, что интересно, но буквально с каждой прочитанной страницей этот список интересного и мною ещё не изученного пополняется новыми пунктами!
Конечно же не все вещи имеется возможность применить, но когда удаётся внедрить что-то, что только недавно узнал, как-то радостно что ли становится. Приятно в общем. А ещё приятно осознавать, что за последние пол года разобрался в куче всего и желание учиться не пропало, а наоборот всё острее и острее!

Хочу всё знать! :)

пятница, марта 05, 2010

Постапокалиптическое...

Что-то в городе произошло в последнее время - после возвращения из Хвалынска. Точнее даже в тот день, когда мы уезжали в Хвалынск.
Тот день нас встретил дождём при температуре чуть ниже нуля. Понятное дело, что долетая до земли капли тут же застывали и дорога превращалась в зеркальную ледяную поверхность. Ехать было страшно, но ещё больше пугала картина, которая разворачивалась вокруг: вдоль всей объездной дороги стояли фуры, порой в два ряда, плюс к этому серое небо с капающими с него каплями, почти полное отсутствие людей и движения в целом. В общем картина напоминала те страшные кадры, которые рисуют нам голливудские режиссёры, изображая последствия нападения инопланетян или же вирусного заражения.
К слову сказать, через 100 км от Саратова это закончилось и дождь превратился в снег, но дальше стало хуже - метель такая, что не было видно краёв дороги и иногда не было понятно куда мы едем. Стоит ли говорить, что впереди идущие автомобили тоже были неразличимы за стеной снега. Но в целом, конечно, откатались нормально и довольные двинулись обратно.
Обратная дорога пролегала в тумане, что тоже не очень хорошо отражалось на видимости, которая достигала метров 5 в меньшую сторону. Въехав в город мы встретились с всё тем же ледяным покрытием дороги, которое так же не прибавляло оптимизма.
А после этого начались проблемы с транспортом, увеличилось число аварий и заторов на дорогах. Сегодня вот добираться с работы пришлось очень долго и больше половины дороги пешком потому что весь общественные транспорт просто встал в пробках. Собственно, простояв на одном месте около 40 минут я вышел из автобуса и пошёл в сторону дома. И в этом я был не одинок - наиболее нетерпеливые вышли минут через 10 стояния, а наиболее оптимистичные остались сидеть. Минут через 30 своего пешего пути я встретил "причину засора" - автобус и десятка не поделили проезжую часть и перегородили почти половину дороги, а оставшаяся половина была перегорожена фурами, которые не могли въехать в горку.
В общем пока я шёл, меня не обогнал ни один автобус. Вот такой неожиданный выдался вечер.
 
Скоро что-то будет или же это паранойя?