Постижение рекурсии.

К третьему курсу университета, я как и положено студенту, считал, что знаю о программировании все и любую программу могу написать без проблем. Так вот на третьем курсе у нас появился предмет «Архитектура ЭВМ». Все лекции я обычно пропускал (не знаю как сейчас, а тогда была лафа в виде свободного посещения лекций), а с этим предметом обстоятельства сложились так, что мне пришлось сидеть на лекциях по независящим от меня причинам. К моему удивлению я обнаружил, что знаю о программировании далеко не все. Особенно поразил меня пример рекурсии.
Как написать программу для подсчета факториала числа n. Классический способ заключается в использовании цикла. Получается вот такая программка на языке Pascal.


function Fact( n : Integer) : Integer ;
var
  i : Integer ;
  f : Integer ;
begin
  f:=1 ;
  for i:=1 to n do  f:=f*i ;
  Fact:=f ;
end ;

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


function Fact( n : Integer) : Integer ;
begin
  if n=0 then Fact:=1
         else Fact:=n*Fact(n-1) ;
end ;

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

Microsoft раздает Visual Studio 2010 почти даром.

Сегодня пришло письмо о том, что с 11 октября  Microsoft начнет раздавать Visual Studio 2010 почти даром. Почти даром заключается в скидке 60% на профессиональную версию. Получается цена в районе шести с половиной тысяч рублей, что в общем то адекватно нашим реалиям. Подробности можно прочитать на их  сайте http://www.microsoft.com/visualstudio/ru-ru/offers/. Вот бы другие разработчики (читай Embarcadero) последовали примеру Microsoft.

Вперед к интероперабельности в WCF.

Сегодня столкнулся с необходимостью создать заготовку кода для сервера WCF по имеющемуся WSDL файлу. Оказалась такая задача не решается при помощи встроенных средств Visual Studio. Я был очень расстроен этим фактом. Дальше оказалось, что найти в интернете решение данной проблемы не так просто, как кажется на первый взгляд. Большинство авторов рассматривают вопрос генерации клиента по WSDL файлу, а мне нужно было сделать заготовку для сервера. В итоге двух часов поиска я наконец нашел решение проблемы. Это специальный аддон к Visual Studio — WSCF.blue. Это небольшое и бесплатное дополнение делает заготовку кода для сервера Web-службы за несколько секунд.

Сегодня День программиста ! Ура ! Ура ! Ура !

Сегодня 13 сентября День программиста !

11 сентября 2009 года президент России Дмитрий Анатольевич Медведев подписал Указ, который устанавливает в России новый официальный профессиональный праздник – День программиста.

Согласно этому документу, День программиста будет праздноваться в России на 256-й день года — 13 сентября, а если год високосный — 12 сентября. Число 256 выбрано потому, что  это максимальная степень числа 2, которая меньше количества дней в году — 365.

Лично сейчас праздную День программиста пивом. Ура ! Ура ! Ура !

Конвертация строки из Windows-1251 в UTF-8

Пример функции на VB.NET для конвертация строки из Windows-1251 в UTF-8 .
Лично я потратил на составление этой функции часа два. Надеюсь тому кто ее найдет повезет больше.


' Конвертация строки из Windows-1251 в UTF-8
Protected Function Conv(ByVal s As String) As String
Dim utf8 As Encoding = Encoding.GetEncoding("utf-8")
Dim win1251 As Encoding = Encoding.GetEncoding("windows-1251")
' строка в массив
Dim a1 As Byte() = win1251.GetBytes(s)
' конвертация массива
Dim a2 As Byte() = Encoding.Convert(win1251, utf8, a1)
' массив в строку
Dim Result As String = utf8.GetString(a2)
' возвращаем результат
Return Result
End Function

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

За два часа прошу не судить меня строго, VB все же не мой «родной язык».