Блог

Исходные коды моих проектов

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

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

Ну ладно, люди любят поливать других грязью, чтобы поднять себя, но так откровенно врать... Я даже друзьям никогда не показываю личных исходных кодов, таких проектов как например на www.cydsoft.com. Никто не видел этих исходных кодов и наверно не увидит, по крайней мере бесплатно :) даже по мега великому знакомству.

Инсталляция программ

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

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

Задолбала разница в браузерах

Реально задолбала разница в браузерах. Сегодня выяснил, что IE не передает referer, если изменять текущую страницу с помощью JavaScript (document.location = 'http://www.funniestworld.com' - не передаст ). Какого уродства он это делает, я понятия не имею. Выход банален, устанавливаем a тег с id и с name, ищем его по имени или id, изменяем href на нужный и программно кликаем. Долбанутый хак, но что делать:

<a id="redirecturl" style="display:none;" />

<script>
 document.getElementById('redirecturl').href= нужный url; 
 document.getElementById('redirecturl').click();
</script>

Теперь ie передает referer, но счастье длиться не долго. Падла FF не содержит функции click у тега a.

Web программирование или класика

Недавно задали вопрос, что для меня лучше, Web программирование или программирование на C#. На самом деле для меня лучше программирование на C#. Но ведь для Web тоже можно писать на C#, по крайней мере логику, которая спрятана за кулисами сайта. А вот передний план приходится оформлять другими технологиями, такими как HTML, JavaScript, Silverlight, Flash и т.д.

Если сравнивать C# программирование для Web и классические десктоп приложения, то десктоп приложения мне нравятся конечно же больше. Там руки более развязаны и я могу делать все, что угодно. Когда делаешь сайт, то сильно ограничен браузером и его технологиями и системой безопасности. Когда пишешь простые вещи, то это еще нормально, но когда пишешь что-то серьезное и крупное, то это бесит.

Непредсказуемый IIS

За год плотной работы с IIS (а я работаю с ним в среднем по 10 часов в день) я натерпелся его непредсказуемости, что уже ничему не удивляюсь. Сначала я понял, что iisreset фигня и практически не помогает в случаях с обновлением кода. Остановка и запуск процесса не помогает еще реже. Я начал сначала убивать процесс. Сервис построен так, что он автоматически стартует. Его убъешь, а он падла тут как тут и уже 3 мегабайта памяти.

Убийство aspnet_wp.exe реально спасает в 99,9 процентов случаев. Но был у меня тут случай, когда примитивный запрос из под IIS не работал. Мистическим образом, мой сценарий постоянно говорил, что индекс испорчен и не давал вставить запись в базу данных. Хотя тут же беру этот запрос и выполняю из под SQL Server Management Studio и он работает прекрасно.

Мы с тестером пробились два часа и ничего не помогало. Мы пошли к своему компьютеру и пнул тот же сценарий со своей машины и он сработал прекрасно. Вернулись обратно, не работает. Я просто для прикола решил предложить выполнить iisreset, и помогло.

Будущее Java

Я говорил, что для развития какого-то продукта, ему нужен хозяин. У 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 ")
         {
           Действия
         }
      }
    }
  }
}

Как узнать настройки Proxy

Мне понадобилось определить текущие настройки сети, и параметры прокси соединения, если они есть. Лезу в 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, и тут же перезаписывать ее не имеет смысла. Но это мелочи жизни, я решил попробовать его.

О блоге

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

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

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

Пишите мне