За год плотной работы с IIS (а я работаю с ним в среднем по 10 часов в день) я натерпелся его непредсказуемости, что уже ничему не удивляюсь. Сначала я понял, что iisreset фигня и практически не помогает в случаях с обновлением кода. Остановка и запуск процесса не помогает еще реже. Я начал сначала убивать процесс. Сервис построен так, что он автоматически стартует. Его убъешь, а он падла тут как тут и уже 3 мегабайта памяти.
Убийство aspnet_wp.exe реально спасает в 99,9 процентов случаев. Но был у меня тут случай, когда примитивный запрос из под IIS не работал. Мистическим образом, мой сценарий постоянно говорил, что индекс испорчен и не давал вставить запись в базу данных. Хотя тут же беру этот запрос и выполняю из под SQL Server Management Studio и он работает прекрасно.
Мы с тестером пробились два часа и ничего не помогало. Мы пошли к своему компьютеру и пнул тот же сценарий со своей машины и он сработал прекрасно. Вернулись обратно, не работает. Я просто для прикола решил предложить выполнить iisreset, и помогло.
Я говорил, что для развития какого-то продукта, ему нужен хозяин. У Java вновь появился хозяин и судя по агрессивным действиям Oracle (подали в суд на Google), они заинтересованы в java, и хотят зарабатывать на ней. Вот это как раз и страшно - они хотят зарабатывать на Java. Oracle зарабатывает на всем и им не интересны убыточные проекты. Так что я уже давно сказал, что Java - это труп и данное событие только доказывает, что это труп разлогающийся очень быстро.
После этого суда компании будут боятся использовать Java, потому что Oracle слишком влиятельная компания и очень богатая, чтобы судиться с ней. Да, Oracle не будет судиться с мелкими производителями, но как только она почувствует запах денег (как она сделала это в случае с Google), Oracle тут же будет зарабатывать их, даже через суд. Когда я узнал, что покупателем будет именно Oracle, я понял, что у Java нет шансов. Только IBM могли стать спасительной ниточкой, на которой еще можно было повисеть.
Те, кто программирует на C подобных языках больше склонны к тому, чтобы разделять представление модель и контроллер и это дает свои плоды при программировании больших проектов. Я видел достаточно много проектов и хочу показать одну ошибку, которую делают программисты ASP.NET. У ASP.NET есть громадное преимущество, потому что даже в языке по умолчанию контроллер уже отделен от представления. Контроллеры располагаются в cs файлах, а представления в aspx. Да, MVC круче, но сейчас остановимся на том, что есть по умолчанию и рассмотрим только этот вариант.
Однажды я видел проект, в котором было представление в виде aspx файлов, контроллеры в виде cs файлов, а так же отдельная библиотека контроллера и отдельная библиотека модели. Я не знаю зачем, но был создан промежуточный уровень контроллера, который выполнял роль передаста. В большинстве случаев, он банально представлял из себя ту же структуру, что и библиотека модели, с теми же классами, но при этом не обращался реально к данным. Все методы в классах библиотеки контроллера занимались передастизмом, а именно, просто получали на вход данные и банально передавали их модели.
Имеет ли смысл создавать библиотеки передасты без особого смысла? Я смысла не понял.
Когда я увидел новость о том, что тысячи приложений для андроида опасны, я сначала просто улыбнулся. Ну и что? Для этой платформы существует наверно миллионы приложений, она открыта и писать может кто угодно. Глупо представлять себе, что на этой платформе не будет мусора. И даже линуксовые корни не помогут, особенно против приложений, которые крадут информацию и прослушивают наши действия.
Но когда я начала читать новость полностью, я задумался (бывает такое иногда) над цифрами. Оказывается, анализировалось всего около 48 тысяч приложений. Просмотреть 50 тысяч программ и найти даже 1 вредоностных, это около 2 процентов и это наверно много.
Качество приложений для адроида пугает. Я уже не первый раз читаю нарекания различных исследовательских компаний, которые анализировали софт для гугл. Но с другой стороны, если взять шароварные программы, то там будет та же песня. Мне кажется, что качество мелких программ падает.
Сегодня видел исходник, в котором присутствовала постоянная болезнь вкладывать скобочки друг в друга. Это просто ужасно. Мало того, что текст кода получился размашистым, так наглядность и читабельность ухудшилась. Может это я просто не привык читать такой код, но мне пришлось поднапрячься, чтобы сообразить, что там происходит.
Вот я образно накидал фигню, которую я видел:
foreach (MyMegaObject o in objects) { if (o != null) { foreach (Object1 n in o.GetNames()) { if (s != null) { if (s != " Something ") { Действия } } } } }
Мне понадобилось определить текущие настройки сети, и параметры прокси соединения, если они есть. Лезу в MSDN и вижу такой прекрасный пример:
// Create a new request to the mentioned URL. WebRequest myWebRequest=WebRequest.Create("http://www.contoso.com"); WebProxy myProxy=new WebProxy(); // Obtain the Proxy Prperty of the Default browser. myProxy=(WebProxy)myWebRequest.Proxy;
У меня сразу же вкралось серьезное подозрение на счет работоспособности примера и компилировали ли его в Microsoft. Дело в том, что инициализировать переменную myProxy, и тут же перезаписывать ее не имеет смысла. Но это мелочи жизни, я решил попробовать его.
Вот интересно, нафига Microsoft придумала (а самое страшное - везде использует) такую фишку, как прятать выделение при потере фокуса. Вот например, если у тебя что-то выделено в компоненте ListView и ты переключаешся на другое окно, это выделение исчезает. Оно есть, но его не видно. Нахрена это, может мне кто-нибудь объяснить? Какую микстуру принимал тот проектировщик, который придумал этот бред?
Вот я сижу сейчас перед двумя мониторами и на одном мониторе у меня открыт документ Excel, в котором список из 20 учетных записей нашей базы, а на другом мониторе у меня SQL Management Studio. Я иду по списку и проверяю с помощью SQL базу, что там случилось с этими учетными записями, что они немного некорретно отображают баланс. Когда я проверял первые три записи, все было нормально, но когда ты спускашеся в середину, то при переходе взгляда с SQL Management Studio на Excel я должен каждый раз искать нужную мне строку глазами, потому что какой-то кретин придумал прятать выделение.
Сейчас занимаюсь тем, что пишу код загрузки файлов из банка. Они прислали спецификацию, в которой написано, что файл должен быть в ASCII формате и разделителем колонок должен быть символ под номером 307. Если мне не изменяет память (а в данном случае она не должна изменять мне), то ASCII файлы байтовые и каждый символ может измеряться от полного нуля до 255. Я долго ломал голову, что же тогда может быть за символ под номером 307. Я попробовал ввести с клавиатуры код символа, но как бы не крутил, у меня получалась число 3, но ведь при вводе с клавы я получаю Unicode символ.
Нашел в спецификации пример файла и увидел, что этот символ должен выглядеть как С, но с загогулиной внизу - Ç. Полез на сайт с таблицей ASCII символов и нашел его там, но оказалось, что у него код 199. Непонятки капитальные. Нашел другую таблицу, там та же самая песня. И только в третей таблице, которую я нашел, я понял, что имел ввиду банк - 307 - это код в 8-ми ричной системе исчисления. Впервые вижу, чтобы в официальных документах коды символы обозначали 8-миричной системой. В основном 10 или 16.
На мой взгляд, одна из самых мощнейших технологий, .NET - это WPF. Это реальная весчь, которая должна была появиться раньше. Именно так должны строиться современные интерфейсы приложений. Реализация так же на высоком уровне и за эту технологию я готов пожать разработчикам и дружескую руку. Если WPF не плучит распространения и умрет вместе с Windows, то будет другая технология на этой же основе для других платформ. Интересно, а для Linux и андроида уже такое есть? Mono пока не поддерживает эту технологию, а о других я не слышал.
Если это мощная платформа, то какое же будущее ждет .NET и WPF в частности на других платформах. Да практически никакое. Вероятность того, что кто-то будет развивать их без Microsoft на данный момент стремится к нулю. Без WPF вся платформа .NET превращается всего лишь в очередную технологию, которая не на много лучше Java. Лично я не вижу смысла в ее поддержки на Linux или на MacOS. Без Microsoft или любого другого богатого и влиятельного покровителя все это дело загнеться и будет гнить, как сейчас это происходит с Java.
Что-то я часто стал писать про SQL. Наверно потому, что очень много интересных вещей с ним замечаю. Недавно наткнулся на модуль на работе, где любая операция округлялась в явную транзакцию. Не понял, нафига это нужно, когда любая модификация данных итак автоматически запихивается в неявную транзакцию. От явности в банальных операциях UPDATE кажется толку нету. Даже если ты не написал begin transaction, операция все равно в случая ошибки откатывается полностью, а не с того места, где запрос закончил обновление.
Явные транзакции реально необходимы только там, где выполняется несколько операций изменения данных, и эти несколько операций должны быть единым целым. Второе условие очень важно и создавать лишние блокировки на сервере не стоит, потому что каждая транзакция не бесплатна для базы данных и кушает достаточно ресурсов, особенно на MS SQL Server. В этом отношении Oracle намного более щедрый к ресурсам, о чем я уже писал.