Блог

Стоит ли использовать LINQ

Еще когда появился Linq, я назвал эту технологию прикольной, но не рекомендовал к использованию. И я сам не использовал его вплоть до ноября прошлого года. В ноябре на работе дали небольшой проект, в котором мы не могли использовать внутренние наработки, потому что весь исходный код мы должны были передать клиенту и сайт хостится на стороне клиента.

Перед началом работы над сайтом я спросил парня, с которым мы делали сайт, что он хочет использовать и он предложил Entity Framework в связке с Linq, потому что он уже имел опыт работы с этими технологиями. Ну и фиг с ним, я учусь мега быстро, поэтому согласился. Ну что я могу сказать. . . , Microsoft уже придумало дофига различных технологий и фреймворков доступа к данным и поверьте мне, Entity Framework – не последний, потому что ничего особенного там нет, только неудобства.

Я с громадным шоком узнал, что операция .OrderBy(string) возможна далеко не всегда. У нас есть правило, что если мы строим какую-то таблицу данных на странице, то таблица должна сортироваться по любой колонке, которую захочет пользователь. Во внутренне корпоративном фреймворке это решается банально:

Запрос умирает при сравнении двух дат

Писал запрос для банковской базы с классическими транзакциями кредита – дебита. Прибыл кредит, его можно потратить. Дебитовая транзакция связывается с кредитовой, чтобы было видно, какая кредитовая транзакция была потрачена. Запрос выглядит примерно так:

select credit.TxnID, credit.Expiry, debit.Transacted, debit.Amount
from credit
   inner join creditdebit on . . .
   inner join debit on . . .
where debit.Transacred > '2012.01.01' 
   and debit.Transacted < ''2012.01.02

Предупреждения warning после компиляции

Меня просто невероятно бесят предупреждения во время компиляции. Я на работе задолбался уже подчищать предупреждения и просить не оставлять их в коде. Один парень регулярно объявляет неиспользуемые переменные и оставляет их, особенно в блоках try:

try {
 . . .
 . . .
}
catch (Exception e) {
}

Странное сообщение об ошибке

Сегодня написал метод, который выглядел примерно так:

public methodName(int id) {
  int i = id + 1;
  ...
  ...
}

Убить процесс в MacOS X

У меня программы зависают не так часто, и в большинстве случаев падаем ModoDevelop, XCode, MAMP или Word. Как видишь большинство из этого относится к программированию. О зависании Microsoft Word я уже писал, у него есть прямо болезнь какая-то при вставке текста. Я в Word очень часто пишу тексты для заметок, а потом с помощью Command+V расставляю теги типа <p>. Проблема в том, что при выполнении Command+V иногда Word зависает. Его убивать достаточно просто, достаточно нажать Option+Command+Esc (почти аналог Ctrl+Alt+Del), появляется окно выбора программы, выбираем Word и нажимаем Force Quit.

Среды разработки – ModoDevelop и XCode, просто падают. Они не зависают, а вылетают с ошибкой. Так что их убивать не приходится. Ну а MAMP иногда зависает при перезагрузке компьютера. Это бесит, потому что это останавливает процесс перезагрузки и никаких предупреждений. Просто перезагрузка не идет. В первый раз я начал методом тыка убивать программы и после того, как убил MAMP, перезагрузка пошла без проблем.

Как изменить параметр в Request в C#?

Как изменить параметр в Request в C#? Проблема в том, что MS сделала этот параметр только для чтения.

Интересно, а нафига Microsoft сделала параметры Request только для чтения. Вот реально не вижу смысла защищать их от изменения пользователям. В PHP перед выполнением сценария я могу пройтись по всем значениям $_GET, $_POST и $_COOKIES и экранировать их так, чтобы никакая зараза не проникла в мои сценарии.

У меня в каждом сценарии вызывается функции подключения к базе данных. В этой же функции я экранирую все, что может вызывать опасность. Например, $_GET параметры экранируются так:

 foreach ($_GET as $inx => $val) {
 $_GET[$inx] = htmlspecialchars($_GET[$inx]);
 $_GET[$inx] = ini_get(magic_quotes_gpc)?$_GET[$inx]:addslashes($_GET[$inx]); 
}
 

Две директории Bin на Windows сервере

Сейчас переделываю свои Windows сайты на Microsoft MVC и первым под раздачу попал www.canada-area.com. Вчера быстренько произвел миграцию кода под новый вид и немного изменил дизайн. Хотя нет, дизайн я изменил капитально. Сейчас сайт бегает и большинство работает, но над сайтом еще работаю. В ближайшие время придется заняться рефакторингом, потому что на данный момент в принципе у сайта код все тот же Web Forms, просто все это крутится на движке MVC. В общем работы еще дофига.

Но я не об этом хотел сегодня рассказать. Не знаю когда это произошло, но у меня сейчас на сервере две директории bin. У одно из них первая буква большая, а у другой маленькая, вот и вся разница. Самое интересное, удалить не могу ни одну из них. Хотя нет, директорию Bin удаляю, если остановить сайт, но сайт перестает работать, а вот bin (с маленькой b) удалить не могу даже тогда, когда сайт остановлен.

Содержимое директорий удаляется без проблем. Но самое интересное, что сайт работает корректно, только если в обе директории я закачаю файл Canada.dll – скомпилированный код сайта. Если я удалю этот файл хотя бы из одной из директорий, сайт падает. По ходу сервер использует обе из них. Кто-нибудь встречался с подобной фигней?

Сессии в Safari

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

В Safari для воспроизведения звука используется QuickTime и именно это чудо природы отправляет запрос на сервер. Причем он создает свою собственную сессию, поэтому сохраненные в сессии браузера данные прочитать не удается. Если уж создается отдельное приложение, то сессию могли бы хотя бы разделить, ведь QuickTime получается работает в контексте браузера.

Хакерский язык программирования

Только что в комментариях к заметке Актуальный язык программирования увидел следующую кучку вопросов: А как насчёт Питона?? Разве не хакерский язык?? Или у тебя на него идиосинкразия?? Почему?? . Решил вынести в отдельную тему, потому что тут есть что сказать, и возможно кому-то пообсуждать. Этот комментарий был к заметке про актуальный язык программирования и видимо его автор не понял меня или я плохо высказывался в заметке.

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

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне