Pull to refresh
29
0
Хитман @DangerT

Архитектор программных систем

Send message
Каждый раз читая такие посты удивляюсь тому, как непохож потребитель российский на потребителя западного. Дело в том, что наш потребитель категорически не умеет ТРЕБОВАТЬ того, что ЕМУ ПРИЧИТАЕТСЯ и за что он ЗАПЛАТИЛ СВОИ ДЕНЬГИ. Ведь это же элементарно. Еще больше поражают люди, которые плачутся в своих уютненьких(тм) или в блогах. Нужно не плакаться и размазывая сопли, тыкать в провайдера пальцем. Нужно начинать статью так: «После рассмотрения моего судебного иска, поданного против компании Имя_компании, суд признал компанию виновной и вынес решение о возмещении мне материального и морального ущерба на сумму ХХХХХ». А такие вот посты только демотивируют остальных бороться с борзотой любых услугодателей.
Есть такое понятие «гражданская сознательность». Так вот у большинства наших граждан оно отсутствует напрочь и они не могут не то чтобы свои права отстоять перед какой-либо компанией, но зачастую очень просто мирятся с тем, что их кидают на бабки, предоставляют отвратительное качество сервиса и прочее, прочее, прочее…
Тут выше кто-то правильно заметил: пока просветления в мозгах не наступит, и у людей не разовьется чувство Личности — будет прессовать. Будут опускать на бабки. Потому что можно. Потому что никто не возразит. Потому что людям насрать на самих себя и растереть.
Это не вы? Тогда прошу прощения за необоснованное обвинение. Проехали, ок?
Гуглят обычно российские программисты, так как привыкли полагаться на себя. Американским же разработчикам, насколько я заметил, проще получить информацию в доступной форме — в виде презентации, в личном общении с разработчиками какого-либо фреймворка на конференции. И, да — они готовы за это платить большие деньги. Потому что в их случае профит от полученных знаний очевиднее.
Когда человек в результате констуктивной критики бросается минусовать посты критикующих — это говорит о его неуравновешенности. Зачем вам это было нужно? Это же просто смешно.
Прошу прощения за опечатку, уточню уж, раз оказия вышла :)
public delegate void Action(T obj)
public delegate void Action<T1, T2>(T1 arg1, T2 arg2)
public delegate void Action<T1, T2, T3>(T1 arg1, T2 arg2, T3 arg3)
public delegate void Action<T1, T2, T3, T4>(T1 arg1, T2 arg2, T3 arg3, T4 arg4)

Ну и напоследок еще два момента
1) Не совсем понял UseCase вот этого кода: bResult = anyOperationWithNetwork();… Зачем нужно bResult? Где оно потом используется?
2) Зачем вы объявили свой делегат ExceptionHandlerDelegate когда есть готовый public delegate void Action(), а также public delegate void Action(T obj) и масса других с разным количеством параметров?
Хотел сказать замораживаете UI на период от 1 до 5 секунд :)
Да и КСТАТИ! :) У вас что это выполняется в основном потоке? Т.е. вы на одну секунду замораживаете UI вот этим вызовом new ExceptionHandler(5, 1000);?
Будут конечно. Любая ситуация, выходом из которой становиться такой, простите, велоспед, нуждается в тщательном анализе. Возможно вы неверно использовали API другиха разработчиков/компаний/продуктов. В любом случае код, в котором такое встречается, выглядит, как минимум непрофессионально. Примеров такого — масса. К сожалению даже такие гиганты как Майкрософт постоянно что-нибудь этакое да штампанут. Нарпример CodeLook для Visual Studio. Там в главном окне обновление происходит не по событию выделения элемента в списке а по таймеру. Причем повезло если в его такт попал — иначе жди следующего Timer_Tick 10 секунд ;)
Небольшая опечаточка. Класс EditEntityWithNameViewModel: ViewModelBase {… } конечно же.
Антипаттерн «Переусложнение». Встречается у начинающих программистов у которых руки горят все попробовать — Reflection, WCF, WPF. Причем при этом начисто забывают об основных принципах проектировании, не говоря уже о паттернах. Пример: у нас работает новичок. Ему поручили вывести в заголовке формы имя текущего редактируемого объекта. Это вылилось в:
1) Абстрактный параметризованный класс модели представления, который принимал тип редкатируемого объекта:
public class EditEntityWithNameViewModel: ViewModelBase {… }
2) В этом классе был добавлен метод protected string GetEntityName(T model, string propertyName), который с помощью механизмов отражения лез в model и получал значение свойства с именем propertyName.
3) Затем классы Entity1ViewModel и Entity2ViewModel были унаследованы от закрытых дженерик-классов EditEntityWithNameViewModel и EditEntityWithNameViewModel соответственно и в них перегружены свойства Description примерно таким образом:
public override string Description // Entity1ViewModel
{
get { return GetEntityName(this.Model, «GroupName»)}
}

public override string Description // Entity2ViewModel
{
get { return GetEntityName(this.Model, «ObjectName»)}
}

На вопрос зачем эти свистопляски с отражением и промежуточным бесполезным дженерик-классом с одним методом GetEntityName он затруднился ответить :) Сказал что-то вроде «так ведь рефлекшн это круто его советуют использовать». Правда кто советут, он опять-таки затруднился ответить.
На самом деле решение было очень простым и укладывалось в две строчки кода, которые надо было добавить в конструкторы обоих классов:

public Entity1ViewModel(Entity1 model)
{
this.Description = model.GroupName;
}

public Entity2ViewModel(Entity2 model)
{
this.Description = model.ObjectName;
}
Мда… Хуже может быть только простой цикл
while (i++ < 5)
{
try
{
// Do something
bool result =…

if (result)
{
break;
}
}
catch
{
}
Thread.Sleep(2000);
}
> Теперь на гребне волны сидим мы

Меня всегда занимал вопрос — а сколько мы там продержимся? :)
Никто не восхищается сейчас компьютерами. Постепенно они вошли в нашу жизнь и прочто заняли в ней определенное место — и стали привычными. Ведь сейчас даже у «старшего» поколения, для которого появление ПК было «технологической революцией» — компьютеры не вызывают былого восхищения. Мы постепенно привыкаем — как привыкли в свое время к автомобилю, микроволновке, мобильному телефону… Поэтому предсказуемо было что дети, «живущие» в эпоху развитой сети Интернет вообще не будут ей удивлятся и уж тем более «зависать онлайн круглыми сутками». Это скорее присуще великовозрастным «вьюношам» лет этак 30-40, спускающим честно заработанные деньги на очередную онлайн-зомбятину, типа WoW. И вот эти люди должны настораживать психологов и вызывать их пристальное внимание, а не дети, не удивляющиеся Интернету.
Хм… А настоящий купить не судьба? :)
А какова мощность данного устройства? Ну, грубо говоря, насколько градусов удается сбить температуру в помещении? Сдается мне что мощность невысокая — от силы градусов 7-10. Да и использование в качестве хладогента обычной воды — сомнительная затея, те кто живут со счетчиками холодной воды, вряд ли оценят ;) Хотя, что уж там, весь этот «кондей» — сомнительная затея :)))

А за идею и за то, что удалось себя заставить поработать рукаи в такую жару — конечно респект :) Я вот даже утром на рыбалку в эти выходные поленился выбраться, памятуя о том, что со мной сделало солнце в прошлые выходные на водоеме :)
Не соглашусь. 50/50 в ситуации когда антивирус выпускается в нескольких редакциях — от бесплатной до максимальной платной, как например avast!.. Ядро у всех версий общее — просто сверху еще оборачиваются дополнительные функции. И это дает надежду что компания будет стараться хотя бы для платных юзеров.
Вы прямо как Мастер Йода: «С нахождением вирусов блестяще справляется этот пакет» :)

Хорошая статья.
Да, вы правы. Забыл про этот сугубо бюрократический аттрибут — «мокрая» печать…
Рад вас видеть здесь. Я работаю на Майкрософт в компании-вендоре ScrumLogic над продуктом Securiy Compliance Management Authority Tool. При случае добавлю вас в Office Live Communicator. Не против?

Information

Rating
Does not participate
Location
Россия
Registered
Activity