Правец 16.

Сегодня на просторах Интернета встретил фотографию компьютера «Правец 16» и вспомнил, что в далеком 1992 году начинал писать на нем свою первую коммерческую программу.

Фото Правец 16
Правец 16

Персональный компьютер «Правец 16»  — программный и аппаратный аналог IBM PC производился с 1984 по 1988 год в болгарском городе Правец. Сейчас я понимаю, что это был компьютер снятый с производства 4 года назад, но тогда для меня это был вполне нормальный компьютер не хуже тех, что стояли в университете для обучения студентов.

Интересный факт. Город Правец — это родина первого секретаря болгарской компартии Тодора Живкова, который при выборе места для завода по производству компьютеров выбрал своё родное село.  Впоследствии село стало городом. Так, что можно считать, что эти компьютеры производились в деревне.

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

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

Конвертация строки из 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 все же не мой «родной язык».