Artyom's profileDark BrandBlogListsGuestbookMore Tools Help

Blog


    фываывфвыаф

    Привет

    фывафыва фыва

    фыва

    фыва

    фыва

    ыфв а

    фыва

    ыфв

    аыв ф

    фыважлдоф ывалжд офывдлжа

    Отладка веб-сайтов под IIS7

    При отладке веб-сайта, работающего под IIS 7 возникает ошибка:

    Ошибка при отладке веб-сайта под IIS7

    ---------------------------
    Microsoft Visual Studio
    ---------------------------
    The web server process that was being debugged has been terminated by Internet Information Services (IIS).  This can be avoided by configuring Application Pool ping settings in IIS.  See help for further details.
    ---------------------------
    OK   Help  
    ---------------------------

    Суть проблемы состоит в том что IIS периодически пингует рабочие процесы, и если рабочий процес не отвечает, он считает что рабочий процес повис и завершает его.

    Решить это очень просто - достаточно отключить Ping в свойствах пула.

    В Internet Information Services (IIS) Manager в разделе Application Pools нужно выбрать рабочий процес под которым выполняется веб-сайт, в контекстном меню выбрать Advanced Settings.

    В появившемся диалоге установить свойству Ping Enabled значение False, или повысить значение Ping Maximum Response Time.

    imageБлогун - монетизируем блоги

    Включаем жесткую проверку типов для всего веб-сайта

    Давно известна досадная ошибка ASP .NET 2.0. Допустим, в конфигурационном файле мы указываем, что хотим включить опцию Strict (жесткую проверку типов):

            <compilation strict="true" explicit="true">

    К сожалению, эта опция будет работать только в коде который внедрен в ASPX-страницу. Код, который располагается в .vb-классах не подвергается дейсвтию этой опции. И чтоб иметь жесткую проверку типов, приходилось в каждом файле прописывать диррективу

    Option Strict On

    Не было предела моему разочарованию когда я обнаружил, что в Visual Studio 2008 эта ошибка так и не была исправлена smile_cry!

    Но на сей раз мой пытливый разум не дал очередную команду писать в начале файла нужную директиву, а полез в Live Search в поисках решения. И оно нашлось!

    Необходимо внести некоторые изменения в конфигурационный файл. В web.config который идет в шаблоне веб-сайта в Visual Studio 2008 имеется следующий код:

      <system.codedom>
        <compilers>
          <compiler 
            language="c#;cs;csharp" 
            extension=".cs" 
            compilerOptions="/warnaserror-" 
            warningLevel="4" 
            type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
            <providerOption 
              name="CompilerVersion" 
              value="v3.5"/>
          </compiler>
          <compiler 
            language="vb;vbs;visualbasic;vbscript" 
            extension=".vb" 
            compilerOptions="/optioninfer+" 
            type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
            <providerOption 
              name="CompilerVersion" 
              value="v3.5"/>
          </compiler>
        </compilers>
      </system.codedom>

    Необходимо всего лишь добавить еще одну опцию компиляции (отмечено жирным):

      <system.codedom>
        <compilers>
          <compiler 
            language="c#;cs;csharp" 
            extension=".cs" 
            compilerOptions="/warnaserror-" 
            warningLevel="4" 
            type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
            <providerOption 
              name="CompilerVersion" 
              value="v3.5"/>
          </compiler>
          <compiler 
            language="vb;vbs;visualbasic;vbscript" 
            extension=".vb" 
            compilerOptions="/optioninfer+ /optionstrict+" 
            type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
            <providerOption 
              name="CompilerVersion" 
              value="v3.5"/>
          </compiler>
        </compilers>
      </system.codedom>

    Вот и все, теперь во всех .vb-файлах по умолчанию применяется жесткая проверка типов (разумеется кроме тех в которых эта опция отключена директивой Option Strict Off). Также можно отключить опцию неявной типизации, если кому-то сильно мешает, (/optioninfer-) smile_regular

    Даный код проверен на .NET Framework 3.5. Если вы продолжаете использовать .NET Framework 2.0 то скорее всего он будет немного отличаться.

      <system.codedom>
        <compilers>
          <compiler 
            language="c#;cs;csharp" 
            extension=".cs" 
            compilerOptions="/warnaserror-" 
            warningLevel="4" 
            type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
          </compiler>
          <compiler 
            language="vb;vbs;visualbasic;vbscript" 
            extension=".vb" 
            compilerOptions="/optionstrict+" 
            type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
          </compiler>
        </compilers>
      </system.codedom>
    Под 2.0 не проверял, так что используйте на страх и риск :)

    RSS - это просто. С Visual Basic 9.0

    Понадобилось быстренько сделать RSS-фид на сайте. Первая мысль которая пришла в голову - разумеется, взять rss toolkit и с его помощью быстренько все сделать.

    Но тут пришла в голову дерзкая мысль и... получилось это:

                Dim RssContent = <?xml version="1.0" encoding="utf-8"?>
                                 <rss version="2.0">
                                     <channel>
                                         <title>Feed Title</title>
                                         <description>Feed Description</description>
                                         <link>http://mysite.ru/</link>
                                         <pubDate><%= DateTime.Now.ToString("r") %></pubDate>
                                         <lastBuildDate><%= DateTime.Now.ToString("r") %></lastBuildDate>
                                         <generator>BetaCode RSS Generator</generator>
                                         <%= From a In Answers _
                                             Select <item>
                                                        <title><%= a.ShortQuestion %></title>
                                                        <link><%= "http://mysite.ru/Question.aspx?id=" + a.id.ToString %></link>
                                                        <description><%= context.Server.HtmlDecode(a.Question) + " <a href='http://mysite.ru/Question.aspx?id=" + a.id.ToString + "'>читать далее</a>" %></description>
                                                        <category><%= a.Category1.name %></category>
                                                        <guid><%= "http://mysite.ru/Question.aspx?id=" + a.id.ToString %></guid>
                                                        <pubDate><%= If(a.DateCreated, DateTime.Now).ToString("r") %></pubDate>
                                                    </item> %>
                                     </channel>
                                 </rss>
                RssContent.Save(context.Response.Output)
    Не спорю - это не самый правильный и оптимальный метод генерации RSS. Но зато как красиво демонстрирует по сути неограниченые возможности легендарного "Deep XML Support" thumbs_up

    Спецификация Visual Basic 9.0

    Microsoft выложила спецификацию Visual Basic 9.0 - 338 страниц в формате doc. Качаем, читаем.

    Генерация XML в VB 9.0

    В .NET существует немало способов генерации XML-файлов - начиная от доблесной конкатенции строчек и заканчивая использованием навороченой объектной модели XML DOM.

    Предлагаю еще один способ который появился в Visual Basic 9.0:

            Dim Root As New DirectoryInfo("D:\Work\output\sites\")
            Dim X = <Sites>
                        <Groups>
                            <%= From Gr _
                                In Root.GetDirectories _
                                Select <Group name=<%= Gr.Name %>>
                                           <%= From St _
                                               In Gr.GetDirectories _
                                               Select <Site name=<%= St.Name %>/> %>
                                       </Group> %>
                        </Groups>
                    </Sites>
            X.Save("sites.txt")
    Я думаю это однозначно можно назвать кодом дня thumbs_up

    Удаление дублирующихся записей в SSIS

    Иногда при работе с ненормализоваными таблицами возникает необходимость удалить дублирующиеся записи. Рассмотрим пример.

    У нас есть ненормализования таблица типа такой:

    ID Имя Должность
    1 Николай Разработчик
    2 Алексей Веб-мастер
    3 Владимир Разработчик
    4 Геннадий Разработчик
    5 Дмитрий Аналитик
    6 Виталий Веб-мастер

    Требуется сделать таблицу должностей такого вида:

    ID Название должности
    1 Разработчик
    2 Веб-мастер
    3 Аналитик

    Задача решается очень просто, если в качестве источника данных выступает OLE DB Source - можно выполнить DISTINCT-запрос.

    Если в качестве источника данных выступает, скажем, XML-файл, и возможности выполнить такой же запрос нет - прийдется поступить немного по-другому.

    В данном случае источником будет выступать XML-файл:

    image

    Выбираем столбец который нам необходим - в данном случае это название категории

    image

    В моем случае в исходных данных встречаются одинаковые названия группы, написанные в разном регистре, то есть "Интернет" и "интернет" - для корректной работы все строки нужно привести в нижний регистр - разумеется, у вас такой необходимости может не быть. Для этого я использую трансформацию Derrived Column:

    image

    image

    Для удаления дублирующихся записей используем трансформацию Sort с включенной опцией Remove rows with duplicate values.

    image

    image

    И заключительный шаг - это выгрузка данных в приемник - в моем случае это таблица в базе SQL Server.

    image

    image

    Все готово, запускаем SSIS Package:

    image

    Готово :)

    Tracerout

    На днях коллега обратился с вопросом - как в .NET сделать Traceroute?

    Вот, набросал небольшой пример. Конечно, нужно "обработать напильником", но отправной точкой, думаю, может служить.

            Dim Host As String = "88.212.201.1"
            Dim Buffer = New Byte(1023) {}
            Dim HostPing As New NetworkInformation.Ping
            Dim hostResult = HostPing.Send(Host)
            For TTL = 1 To 127 - hostResult.Options.Ttl
                Dim Ping As New System.Net.NetworkInformation.Ping
                Dim Options As New PingOptions(TTL, True)
                Dim Result = Ping.Send(Host, 2000, Buffer, Options)
                Console.WriteLine(Result.Address)
            Next

    Обзор Visual Basic 9.0. Часть 2

    Давно обещал написать продолжение своего обзора, но сначала не было вдохновения, потом желания, потом времени, потом опять времени, но сейчас кажется выпала свободная минутка, и, пока мой компьютер занимается сложными вычислениями, напишу еще про несколько интересных нововведений в Visual Basic 9.0.

    Оператор If

    Все прекрасно знают зачем нужен этот оператор. Для чего же еще его можно использовать в VB 9.0?

    Все помнят давно существующую в языке BASIC функцию IIf. Фукнция хорошая, позволяла экономить немного кода. Но есть с ней 2 небольших проблемы.

    • Функция нетипизирована - возвращает Object
    • IIf является обычной функцией - и поэтому при ее вызове вычисляется оба выражения - и для случая True и для False. То есть, мы не могли написать:
            Console.WriteLine(IIf(User IsNot Nothing, User.Name, "User Unknown"))

    поскольку в том случае, если User - это Nothing, получили бы NullReferenceException. Вобщем, совершенно неприспособленая к .NET фукнция. Поэтому я, например, ее вообще не использовал.

    Теперь вместо IIf можно использовать If как функцию. На самом деле, конечно, это не функция, а синатксическая конструкция.

            Dim CurrentUser As String = If(User IsNot Nothing, User.Name, "User Unknown")

    Данный вызов будет корректно работать в том случае если User - это Nothing. И, как видите, фукнция типизирована, то есть нет необходимости в дополнительных преобразованиях.

    Как это работает? Я так полагаю на этапе компиляции эта конструкция преобразуется в что-то типа:

            If User IsNot Nothing Then
                CurrentUser = User.Name
            Else
                CurrentUser = "User Unknown"
            End If

    Второй вариант использования данной конструкции - с двумя аргументами:

            Dim UserAge As Integer?
            Dim Age = If(UserAge, 0)

    Если первый аргумент не Nothing, он возвращается, если Nothing, то возвращается второй аргумент. Функция также типизирована, и что хотелось бы отметить - если в фукнцию передается Nullable-тип, то возвращается уже обычный, те Nullable.

    Вобщем теперь в VB 9.0 появились аналоги синатксических конструкция ?: и ?? из C#.

    Мое мнение - это полезное нововведение, уже использую smile_tongue

    Еще пара слов о Lambda-выражениях

    Итак, на данный момент в Visual Basic 9.0 (в отличие от C# 3.0) lambda-выражение может состоять только из одного выражения. И я сомневаюсь что это изменится к релизу. Так, для информации smile_sad.

    Еще недавно на MSDN появилась очень интересная статья про lambda-выражения в VB 9.0, советую ознакомиться.

    Анонимные типы

    Возможно, вы уже слышали об этом нововведении.

    В VB 9.0 появилась возможность использовать так называемые анонимные типы - сами типы не нужно объявлять, компилятор сам сгенерирует их декларации. Данная возможность широко используется в LinQ, что я постараюсь рассмотреть чуть позже, а вот пока небольшой пример.

            Dim User = New With {.Name = "Artyom", .Age = 20}
            Dim Country = New With {.Name = "Ukraine", .Population = 48000000}
    
            Console.WriteLine("User {0}, Age: {1}", User.Name, User.Age)
            Console.WriteLine("{0}, Population: {1}", Country.Name, Country.Population)
    
            Console.ReadLine()

    Вот такоое небольшое продолжение, если появится свободная минутка, попробую написать еще smile_regular.

    А пока могу посоветовать почитать очень интересную статью про C# 3.0 на русском языке.

    .NET Micro Framework

    За время своего существования .NET Framework успел проникнуть практически везде - начиная с мобильных устройств и заканчивая высокопроизводительными серверами.

    Но все-таки есть ряд устройств, куда .NET Framework путь пока был закрыт - это встраиваемые устройства smile_sad.

    Но у меня ест хорошая новость - с помощью .NET Micro Framework вы сможете попасть и туда smile_regular.

    Поддерживает процессоры ARM7 и ARM9.

    Разработку можно вести на языке C#, прямо в Visual Studio, тестировать в эмуляторе.

    SDK можно скачать здесь.

    Интерфейс в стиле Office 2007 - в каждую программу!

    Кто уже видел интерфейс Office 2007?

    Microsoft Word 2007 

     image

    Если хотите себе такое же, то вам следует зарегестрировать и скачать набор требований и рекомендаций, которым нужно следовать. Никаких отчислений платить Microsoft не нужно - только следовать рекомендациям и требованиям.

    2007 Office System Document- User Interface Evaluation Design Guidelines

    2007 Office System Document- User Interface Design Guidelines for Licensees

    Вот только саму реализацию Microsoft на данный момент не предоставляет, но сторонние разработчики быстро этим воспользовались, и немного поискав, можно найти реализации на Windows Forms и WPF, правда уже платные smile_devil

    Ноутбучная мышь

    Как по-вашему должна выглядеть ноутбучная компьютерная мышь?

    Так?

    Genius NetScroll 310 Optical

    Так?

    Компьютерная мышь глазами советских инженеров.

    Или так?

    G9 Laser Mouse

    Разумеется, нет.

    Настоящая ноутбучная мышь должна выглядеть так как Microsoft Wireless Notebook Laser Mouse 7000

    Microsoft Wireless Notebook Laser Mouse 7000Microsoft Wireless Notebook Laser Mouse 7000

    Microsoft Wireless Notebook Laser Mouse 7000Microsoft Wireless Notebook Laser Mouse 7000

    Microsoft Wireless Notebook Laser Mouse 7000Microsoft Wireless Notebook Laser Mouse 7000

    Для тех же, кому обычной ноутбучной мышки будет мало, Microsoft сделала "самый продвинутый мобильный инструмент из всех существующих" - Microsoft Mobile Memory Mouse 8000, в ресивер которой встроена флеш-память на 1 гигабайт! С помощью этого же ресивера выполняется и подзарядка мыши.

    Microsoft Mobile Memory Mouse 8000Microsoft Mobile Memory Mouse 8000

    Microsoft Mobile Memory Mouse 8000Microsoft Mobile Memory Mouse 8000

    Microsoft Mobile Memory Mouse 8000Microsoft Mobile Memory Mouse 8000

     

    Microsoft Mobile Memory Mouse 8000Microsoft Mobile Memory Mouse 8000

    Еще один отличный концепт на Silverlight

    Вы знаете как через год мы будем заказывать авиабилеты? Эти ребята знают и показывают:

    Silverlight Airlines

    Примеры гаджетов для Windows Vista

    Microsoft выложила у себя на сайте несколько примеров гаджетов для Windows Vista, иллюстрирующих некоторые приемы при программировании гаджетов. Всем кто хочет разрабатывать гаджеты но не знает с чего начать - рекомендую ознакомиться smile_regular

    Разработка фоновых служб для Windows Vista

    Microsoft опубликовала замечательный документ с рекомендациями по разрабокте фоновых служб для Windwos Vista.

    В документе также описана архитектура Windwos Search Service, рекомендую ознакомиться.

    Microsoft рулит в обработке цифровых фотографий

    Кто-нибудь знал что Microsoft принимает участие в исследованиях, связаных с обработкой цифровых изображений? И уже добилась неплохих успехов.

    Итак, три представленых технологии обрабокти изображений, призваных упростить жизнь.

    1) Повышение качества фотографий, сделаных в неблагоприятных условиях.

    Из двух фотографий, сделаных с разной выдержкой, одного очень размытого, другого очень зашумленого, получается четкая фотография.

    Image Deblurring with Blurred/Noisy Image Pairs describes the process of reconstructing blurry and noisy images into a sharp image.

    2) Упрощение вставки новых объектов на сцену.

    Хотите добавить на фотографию несколько объектов? Нет ничего проще. В глобальной базе данных изображений будет взята вся необходимая информация об этой сцене и ноыве объекты будут вставлены на нее с учетом ориентации и освещения.

    Photo Clip Art presents automatic algorithms for improving object segmentation and blending, estimating true 3D object size and orientation.

    3) Вырезание объектов из сцены.

    С поразительной точностью алгоритм отличает пиксели объекта от фоновых пикселей и позволяет получить результат высокого качества.

    Soft Scissors allows a user to easily remove images from one photograph and insert them into another even if they don’t have clean edges like those of a building.

    Вот такие вот успехи smile_regular

    Microsoft делает... двухсторонний тачскрин!

    Да, вот такой вот интересный концепт, названый LucidTouch, сделала Microsoft вместе с Mitsubishi.

    Microsoft утверждает, что основная проблема традиционных тачскринов состоит в том, что при работе руки закрывают часть изображения, мешая таким образом работать.

    Что же предлагают сделать? Тачскрин, на которой можно нажимать как с лицевой стороны, так и с обратной. Разумеется, если нажимать с обратной стороны, то пальцы не будут заслонять изображение. Устройство имитирует "прозрачность" экрана - то есть пользователь видит где находятся его руки "за экраном" и видит что он нажимает.

    Уже есть рабочий прототип - 7-дюймовый тачскрин. Обратная сторона может обрабатывать несколько нажатия одновременно.

    Но разработчики уже столкнулись с рядом проблем.

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

    Обработкой изображения рук занимается отдельный компьютер.

    1

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

    При тестах устройство показало свое удобство при работе с картой и при перетаскивании по экрану мелких объектов. Но самое, на мой взгляд, интересное предложение - это новая конфигурация классической QWERTY-клавиатуры. Вместо того чтоб набирать текст двумя пальцами, используются сразу 8!

    2 3

    Ну и вот еще небольшой концепт.

    df345cfdsfs43fde2323dfsdf[1]

    А вот устройство в действии.

     

    WCF и стандарты

    Всем известно, что WCF основывается на открытых стандартах.

    Для тех кому интересно ознакомиться с самими стандартами, Microsoft собрала в одном месте все ссылки на спецификации:

    Tags: WCF

    Windows Server 2008 RC0 - на следующей неделе?

    WinBeta утчерждает что обнаружил страницу загрузки Windows Server 2008 RC0. Andy Malone также пишет про RC0. Судя по всему, на следующей неделе RC0 будет официально объявлен.

    Делаем отчеты проще

    Компания 90 Degree Software сделала новый редактор отчетов для SQL Server Reporting Services.

    Используемые технологии - Reporting Services, WPF. Интерфейс в стиле... Office 2007.

    Видео смотрим здесь.