• Усиливаем контроль типов: где в типичном C#-проекте присутствует непрошеный элемент слабой типизации?

      Проблема


      Мы привыкли говорить о языках вроде C# как строго и статически типизированных. Это, конечно, правда, и во многих случаях тип, указываемый нами для некоторой языковой сущности хорошо выражает наше представление о ее типе. Но есть широко распространенные примеры, когда мы по привычке («и все так делают») миримся с не совсем верным выражением «желаемого типа» в «объявленном типе». Самый яркий — ссылочные типы, безальтернативно оснащенные значением «null».
      В моем текущем проекте за год активной разработки не было ни одного NullReferenceException. Могу не без оснований полагать, что это следствие применения описанных ниже техник.

      Рассмотрим фрагмент кода:

      public interface IUserRepo 
      {
      	User Get(int id);
      	User Find(int id);
      }
      

      Этот интерфейс требует дополнительного комментария: «Get возвращает всегда не null, но кидает Exception в случае ненахождения объекта; а Find, не найдя, возвращает null». «Желаемые», подразумеваемые автором типы возврата у этих методов разные: «Обязательно User» и «Может быть, User». А «объявленный» тип — один и тот же. Если язык не заставляет нас явно выражать эту разницу, то это не означает, что мы не можем и не должны делать это по собственной инициативе.
      Maybe в C#: какие есть варианты
    • Распараллеливание задач. Случай «идеальной параллельности». Часть 2

        Предлагаемые решения в .NET 4


        Это вторая часть статьи, посвященной распараллеливанию идеальных циклов. В первой части были рассмотрены проблемы, возникающие при этом, и общие подходы к их решению. В этой мы поговорим о конкретных библиотечных компонентах, предоставляемых .NET 4.0 для поддержки этих задач.

        Для распараллеливания «идеальных» циклов предоставляются следующие варианты:
        • класс System.Threading.Tasks.Parallel с методами For (), ForEach ()
        • Parallel LINQ с методом расширения AsParallel ().


        Читать дальше
        • +25
        • 11.5k
        • 8
      • Распараллеливание задач. Случай «идеальной параллельности». Часть 1

          Распараллеливание кода без зависимостей


          Введение

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

          Читать дальше →
        • Анти-Сервисный центр Сервисфон

            Хочу предупредить людей, дабы не наткнулись на сию организацию.

            Что случилось


            Мой HTC Desire в один прекрасный день словил обновление на версию ОС Android 2.2, которое (обновление) привело к неработоспособности телефона. В интернете эта проблема уже обсуждалась, и связана была, видимо, с некорректной версией обновления, попавшей на некоторые телефоны. Конкретно — он перестал видеть WiFi, сотовую сеть и SD-карту, и перезагружался каждые 3 минуты.
            Читать дальше →
          • Компиляция страниц ASP.NET: генерация кода

              Сейчас пришла пора разобраться с тем, что происходит с кодом от момента написания ASPX/ASCX- разметки и CS-кода до момента их физического выполнения в виде некоторого скомпилированного кода на сервере.
              Читать дальше →
            • Генерация скрипта базы данных по модели данных Entity Framework

                В будущей версии редактора моделей Entity Framework в Visual Studio ожидается такая полезная функциональность, как обратная генерация базы данных по модели данных (SSDL — Storage Schema Definition Language). Но пока её нет, можно воспользоваться XSLT-преобразованием, которое поможет получить из XML-описания модели хранилища SQL-DDL код для создания таблиц и связей в БД.

                Читать дальше →
              • Сервис Вопросы-Ответы: как правильно дать ответить на вопрос?

                  Доброго времени суток, уважаемые Хабрапользователи!



                  Некоторое время назад мы начали разрабатывать систему вопросов-ответов (две малоизвестные компании уже создали по аналогу: ответы mail.ru или ответы Google). И мы, кроме прочего, поставили задачу избавиться от всех недочётов и проблем, которые мы выявили в существующих подобных системах.
                  Итак, ...
                • Навигация на AJAX-сайтах: Extender Control для ajaxtoolkit: TabContainer

                    Этот пост будет интересен прежде всего ASP.NET-разработчикам, которые осваивают «продвинутый» функционал AjaxControlToolkit, в частности, расширение стандартного TabControl — контрола, обеспечивающего клиентские вкладки («табы») на странице.

                    Впрочем, так как задача по сути сводится к клиентскому программированию, общие принципы окажутся полезными не только ASP.NET-разработчикам, поэтому, думаю, место ей в блоге «Веб-разработка».

                    Постановка проблемы: обеспечить при использовании TabControl соответствие текущей выбранной вкладки содержимому адресной строки браузера. То есть,
                    1. чтобы при переходе между вкладками соответствующим образом изменялся адрес,
                    2. можно было в любой момент скопировать ссылку, и открыв её после, попасть на ту же вкладку, откуда была скопирована ссылка,
                    3. обеспечить корректную работоспособность кнопок «Назад» и «Вперёд» браузера для навигации по вкладкам.
                    Решил разобраться с AJAX Extender Controls и реализовать эту полезную штуку именно в виде Extender-контрола.
                    погружаемся
                  • Сервис: Видеособеседования

                      Сам работаю с фрилансерами и большинство из них — жители небольших городов России и Украины. Часто сталкивался с тем, что многие из фрилансеров готовы выйти на постоянную работу, если их устроят условия работа и зарплата, которые в их родных городах просто никакие, но ехать наобум в другой город, еще не получив гарантию, что возьмут на работу, желающих нет. А гарантии такой без собеседования никто давать не будет.

                      Думаю, такие фрилансеры и на Хабре есть, потому стоит пропиарить вот такую вот штуку — может, кому-нибудь пригодится.

                      смотрим: удалённые видеособеседования
                    • ASP.NET: расширяем механизм путей SiteMapPath

                        При разработке на ASP.NET мы привыкли для стандартных задач использовать стандартные компоненты. Одной из таких стандартных задач является вывод на каждой странице сайта пути к ней от главной страницы — фрагмента карты сайта (sitemap path). Для этого используется контрол SiteMapPath, берущий данные о карте сайта от провайдера карты сайта (SiteMapProvider) по умолчанию, который, в свою очередь, берет их из конфигурационного файла Web.siteMap.

                        Поместив этот контрол на мастер-страницу сайта, и описав в конфигурационном файле карту сайта, мы тем самым обеспечиваем вывод пути на всех страницах.

                        Но ASP.NET — расширяемая среда, и позволяет замещать почти все стандартные модули, и провайдер карт сайта — не исключение. Мы рассмотрим, как создать свой провайдер для получения расширенной функциональности для карты сайта.

                        Читать про SiteMapPath с динамическим содержимым