Программирование

FreePascal / Lazarus

Тестировал FreePascal / Lazarus на предмет пригодности к профессиональной разработке. В качестве теста взял простенькое приложение из 3 компонентов (1 исполняемый модуль и 2 DLL-ки по принципу плагинов) с несложной обработкой XML внутри. Выводы.

Тесты для программистов

Лет 10 назад я составил небольшой сборник тестов по Delphi и Transact SQL для соискателей вакансии инженера-программиста. Время от времени пользовался. Частенько люди, не сумевшие ответить на большинство вопросов, просили тесты забрать с собой. Забирайте, на здоровье.

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

Посему решил свести дело к одному тесту: "Напишите программу, которая выводит свой собственный текст". На Delphi и SQL. Или на любом другом языке, который знаете.

C# typedef

Хочется дать по мозгам проектировщикам C#, не предусмотревшим элегантного решения создания псевдонима для типов.

В Delphi:

interface
type
  TEntityId = integer;

В C++ (заголовочный файл):

typedef int TEntityId;
#include "AppTypes.h"

В C# три варианта и все плохие:

using TEntityId = System.Int32 // видимость только в текушем файле
public class TEntityId : System.Int32  // не работает для простых типов и sealed-классов
public class TEntityId  // громоздкая конструкция, лишний код манипуляции значением
{
  private int еntityId;
  public int Value { get... set... }
}

то же, но с параметризацией:

public class TEntityId<ТTypeOfId>
{
  private ТTypeOfId еntityId;
  public ТTypeOfId Value { get... set... }
}

Зачем это надо? Представьте, что мне надо вместо TEntityId = int использовать Guid или Int64...

Коза кричала или Ревизия кода

Когда провожу ревизию программного кода, всякий раз вспоминаю эпизод из "Осеннего марафона". Бузыкин сидит у Варвары, помогая ей с переводом. Время - половина первого ночи. Происходит примерно такой диалог.
- Скажи, Бузыкин, может я бездарная?
- Неее...
- Но ты же всё повычеркивал!
- Не всё... Но вот это, например, я не мог оставить: "Коза кричала нечеловеческим голосом"

И еще пару вестей из полей...

Вести с софтостроительных площадок

Давненько я не брал в руки шашек, посему пришла пора написать немного текста на тему практического софтостроения, немного затронув «любимую» тему наживульки (agile).

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

Итак, судьба на короткое время забросила меня в качестве консультанта в лоно одной софтостроительной фирмы, разработавшей и поддерживающей систему документооборота для специализированных нужд (управление жизненным циклом товаров). Система относительно небольшая по функционалу, а вот клиенты хоть и малочисленны, но крупные. То есть способны танцевать девушку.

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

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

ASP.NET

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

Пока, как оно и положено веб-интерфейсу, сценарии использования просты, то с неадекватной задаче сложностью кода можно как-то мириться. Дальнейшее усложнение сценария приводит к нарастанию кода по экспоненте. AJAX еще более усугубляет положение.

Сценарий, требующий десяток-другой строк кода для обычного оконного клиента, оборачивается сотнями строк спагетти из HTML, Javascript и Code behind. Событийная модель на порядок беднее не то чтобы VCL/WinForms, а даже FoxPro 2.0 для DOS образца 1992 года. 5 клиентских событий у PageRequestManager, из которых 4 отрабатывают только при асинхронном вызове, оказываются пределом мечтаний.

Существующая подсистема пользовательского интерфейса у клиента из трех-четырех десятков экранных форм реализована примерно сотней тысяч строк, при том, что создатели четко отделили слой представлений от бизнес-логики, а общие элементы выделены в controls разного уровня: от custom до композитных user...

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

Массив байтов в строку шестнадцатеричных значений

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

Упорядоченный список с повторяющимися значениями (Sorted multilist)

При разработке пользовательских интерфейсов периодически требуется к элементу управления (control) типа списка/выпадающего списка (ListBox, DropDownList) пристыковать (data bind) коллекцию (список) объектов в качестве источника данных. Дружественный интерфейс предполагает, что данные в списке отсортированы. Но если в списке имеются повторяющиеся значения, то использование стандартных классов типа SortedList или Dictionary становится невозможным.

Дождёмся?

...Можно сказать много грустных слов о тенденциозности современной околотехнической литературы, о переориентации отечественных программистов и разработчиков с исследовательских и новаторских на чисто коммерческие работы, о складывающемся монополизме отнюдь не лучших (зато более хватких) производителей компьютеров и программного обеспечения и т.д. И все же, несмотря на эти признаки нарастающего вырождения в нашем, да и мировом компьютерном деле, я надеюсь, что подъем наступит, и мы будем его свидетелями и реализаторами.

С.Н. Дмитренко, 8 апреля 1993 г.
Из предисловия к переводу книги Leo Brodie "Thinking FORTH. A Language and Philosophy for Solving Problems"

RSS-материал