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

| рубрика: Программирование | автор: st
Метки: ,

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

Задача 1. Табло бегущей справа налево строки вмещает до 20 символов. Сама …

Таблицы имен при рекурсивном спуске с возвратами

| рубрика: Программирование | автор: st
Метки:

В заметке "Пишем транслятор" я сетовал на ситуации, когда грамматику не впихнуть в LL(n). В частности, это оборачивается необходимостью поддерживать транзакционность (!) добавления имен в таблицы имен.

Например, есть правило типа

p1 -> condition ; statement1
p1 -> condition ; statement11 statement2

statement1 -> statement EOL
statement11 -> statement ;
statement2 -> statement EOL

где EOL - конец строки …

Пишем транслятор или немного о Фортране

| рубрика: Программирование | автор: st
Метки:

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

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

Про интерфейсы или как не надо делать программы

| рубрика: Программирование | автор: st
Метки:

В первую голову проблема касается продуктовых софтостроителей, хотя и в проектном тоже не все гладко.

Начнем с недавней истории. Технология COM (позднее, другие, но суть та же) дала возможность разработчикам компонентов отделить интерфейсы от реализаций. Для прикладных разработчиков это означало, например, что при обновлении компонентов старые интерфейсы продолжали бы работать …

"Test drive" FreePascal/Lazarus

| рубрика: Программирование | автор: st
Метки: , ,

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

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

Сколько места занимают таблицы?

| рубрика: Программирование | автор: st
Метки:

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

DECLARE @TableInfo TABLE (
    table_name sysname,
    row_count int,
    reserved_size_kb nvarchar(50),
    data_size_kb nvarchar(50),
    index_size_kb nvarchar(50),
    unused_size_kb nvarchar(50)
)

INSERT INTO @TableInfo
EXEC sp_MSforeachtable 'sp_spaceused ''?'''

UPDATE @TableInfo
SET
    data_size_kb     = replace(data_size_kb, 'KB', ''),
    reserved_size_kb = replace(reserved_size_kb, 'KB', ''),
    index_size_kb    = replace(index_size_kb, 'KB', ''),
    unused_size_kb …

SPM (SQL Programming Macroprocessor): создайте свой предметный язык

| рубрика: Программирование | автор: st
Метки: ,

Пример использования технологии представлен в статье "SQL и модульное тестирование".

Назначение

Разработка серверного кода на процедурном расширении SQL имеет свои особенности. Во-первых, SQL - декларативный язык, и потому обычная для традиционного программирования функциональная декомпозиция зачастую является неэффективной. Во-вторых, SQL - специализированный язык манипуляции данными, и достичь наглядности и читаемости прикладного кода бывает …

Работа с датами. SQL Server 2005

| рубрика: Программирование | автор: st
Метки:

Сюда складываю полезные функции и тонкие моменты при работе с датами на MS SQL Server.

BETWEEN - закрытый интервал

BETWEEN - закрытый интервал, но будьте вимательны со временем в датах...

SELECT *
FROM (
   SELECT '2008-02-03' AS d1
   UNION
   SELECT '2008-02-03 23:59:59' AS d1
   UNION
   SELECT '2008-02-04' AS d1
   UNION
   SELECT '2008-02-04 …

Случайная строка из таблицы. SQL Server 2005.

| рубрика: Программирование | автор: st
Метки:

Воспользуемся псевдослучайной последовательностью на основе механизма проекций (view) для выборки случайной строки из таблицы.

Проекция rand2 выдает новое случайное число в поле rand_value. Для выборки строки создадим еще одну проекцию:

CREATE VIEW random_row
AS
WITH t1_rows AS (
    SELECT id, row_number() OVER (order by id) as num FROM T1
)
SELECT id …