Табуляционные машины Германа Холлерита — вольная реконструкция

Перфокартные табуляционные автоматы Германа Холлерита решали задачи обработки больших объемов данных (десятки миллионов записей) в 19-м веке, сэкономили несколько лет труда при подсчете результатов переписи США 1890-го года, быстро проникли во всевозможные организации от стальных фабрик до страховых контор, обеспечили их автору (Герману Холлериту) инженерное признание и коммерческий успех, послужили фундаментом для появления и развития компании IBM.

Здесь остановимся подробнее на технической стороне вопроса. Каким образом устройство в конце 19-го века могло решать задачи, которые принято ассоциировать с 21-м веком. Ведь в те времена люди не имели в распоряжении библиотеки Pandas и платформы Python, не было реляционных субд с языком SQL, и даже электронных компьютеров, которые могли запускать такое программное обеспечение, еще не придумали (не то, что транзисторы, электронные лампы еще не изобрели, а реле хотя уже были в ходу, никто еще не говорил о том, чтобы строить из них универсальные вычислители).

Отдельный повод сделать это именно сегодня: Герман Холлерит родился в 1860-м году 29 февраля.

В общих чертах технологии проведения и обработки результатов переписи населения США 1890-го описаны в журнале «Scientific American», 30 августа 1890 (полный скан доступен онлайн).

На обложке изображены основные этапы:

bico4ezxsfojkpxfcnrzpz-4q3u.png

Пачки с заполненными анкетами — «сырые» данные с «полей» переписи:

ux75yeoytern03skvn-pfsmdssq.png

Данные анкет «оцифровываются» — кодируются на перфокарты при помощи специального устройства — пантографа (пробойника). В таком виде с ними сможет работать специальное счетное устройство. Одна анкета — одна перфокарта:

xoppuwycwadurua4uqoyi1vjerc.png

Основная процедура счета — счетное устройство: стол, множество циферблатов, устройство ввода данных. Оператор пропускает через него счетные данные, записанные на перфокартах, в конце цикла смотрит результат на соответствующих циферблатах, каждый из которых отражает тот или иной статистический показатель. Результаты сводят в итоговые таблицы.

ejvl9tolgl9qu9qyi2u8pkndpes.png


Дырокол (пантограф)

фото почетче:
shlucl9nw2zilwapsheu_8tflom.jpeg


Устройство ввода данных с перфокарты — «расческа-пресс»

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

acto3pwuzw3i6xybdijrkb89wci.png

mlxyxxoxet5fxvvembaudiryy3w.jpeg

tnwepmetkjtiotycnk-cc64uibg.png
http://www.columbia.edu/cu/computinghistory/census-tabulator.html

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

Таким образом, оператор вручную обрабатывает по одной перфокарте за раз. В следующих версиях автомата ручной «пресс» был заменен на устройство автоматической подачи карточек из стопки.

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


Счетчик-циферблат

Электромеханический счетчик. Табло со стрелкой и рисками от 0 до 100.

dgg5bdrxjmnmuriunyqwqlhybrw.jpeg

Счетчик подключается к электрической цепи и в том случае, если цепь замыкается, стрелка смещается на одно деление и остается в этом положении. Если цепь разомкнуть и замкнуть снова, стрелка сдвинется еще на одно деление и т. п. Таким образом, один счетчик выполняет арифметическую операцию сложения своего предыдущего значения с единицей, при этом накапливает результат. Таким образом, один счетчик мог копить значения от 0 до 100 максимально. В том случае, если нужно было получить большее число, два счетчика могли соединить последовательно так, что при переполнении младшего счетчика, старший счетчик сдвигался на единицу. Таким образом, пара счетчиков могла представить своеобразное двуразрядное «сторичное» число.

Всего на автомате было размещено 40 таких счетчиков. Каждый счетчик отвечал за некоторый статистический показатель. Роли для каждого из счетчиков выбирались и определялись заранее в процессе предварительной настройки автомата. Таким образом, один автомат мог быть настроен так, чтобы посчитать максимум 40 статистических показателей. Т. к. в рамках переписи требовалось посчитать большее количество показателей, автоматы имели несколько (судя по всему, всего две) типовых конфигураций, а весь набор перфокарт (64 млн.) пропускали заново на каждой из них.

i9xxtxcujqmxzzcc_9zdarqthzu.jpeg


Перфокарта

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

9bavm5cvp4xbkhz3g4ye0yhacak.png

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

Анкета содержала следующие вопросы:
address
number of families in house
number of persons in house
names
whether a soldier, sailor or marine (Union or Confederate) during the American Civil War, or a widow of such person
relationship to head of family
race, described as white, black, mulatto, quadroon, octoroon, Chinese, Japanese, or Indian
sex
age
marital status
married within the year
mother of how many children, and number now living
place of birth of person, and their father and mother
if foreign-born, number of years in US
whether naturalized
whether naturalization papers have been taken out
profession, trade or occupation
months unemployed during census year
ability to read and write
ability to speak English, and, if unable, language or dialect spoken
whether suffering from acute or chronic disease, with name of disease and length of time afflicted
whether defective in mind, sight, hearing or speech, or whether crippled, maimed or deformed, with name of defect
whether a prisoner, convict, homeless child, or pauper
home rented, or owned by head or member of family, and, if owned, whether free from mortgage
if farmer, whether farm is rented, or owned by head or member of family; if owned, whether free from mortgage; if rented, post office box of owner

На первый взгляд карта выглядит как нагромождение одно- и двубуквенных и численных кодов. Но если присмотреться к некоторым группам, то даже по сокращенным вариантам ответа можно понять, о чем речь. К примеру, самый маленький сегмент с двумя вариантами ответа «M» и «F», очевидно, представляет вопрос анкеты пол («sex»: M — male, мужчина; F — female, женщина). Сегмент рядом побольше содержит коды «B», «W», «Ch», «Jp» и т. п. — это, очевидно, выбор расы (B — black, черный; W — white, белый; Ch — China, китаец и т. п.). В правом нижнем углу два одинаковых сегмента с двубуквенными кодами стран. Один из этих сегментов скорее всего представляет ответ на вопрос «место рождения».

f87xahyusu1xkmjbifsd6v_yxec.png

Опытный оператор мог «прочитать» данные с перфокарты — по положению отверстия можно понять, какой выбран ответ на тот или иной вопрос анкеты.

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

4credbeewfwp22hramrjybsjf5w.png

Из всей перфокарты оставим только три сегмента — вопросы «раса», «место рождения» и «пол»:

n8j_egwlhdqlc0fcvbjdhkusfky.png

На рассматриваемый участок перфокарты попали варианты ответов — отверстия: «M» (пол=«мужчина»), «F» (пол=«женщина»), «Ch» (раса=«китаец»), «W» (раса=«белый») и «Fr» (место рождения=«Франция»)

mf4echznbklwjillr_bzcvbr1du.png


Конфиг-1

Допустим, мы хотим посчитать, сколько в стопке перфокарт анкет: мужчин, женщин, людей белой расы любого пола

Поля на перфокарте:


  • Пол: мужчина (M)
  • Пол: женщина (F)
  • Раса: белый (W)

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

Крайний правый счетчик будет считать мужчин — поле «M»:

ykmwoht0jaa9gjlv-4_d-r3wrqu.png

Остальные два — белых («W») и женщин («F»):

5fnxtjfilgv13_gsjfmgqllcres.png

Оператор берет стопку перфокарт и начинает вкладывать их в аппарат одну за одной.

На первой перфокарте пробиты отверстия «M», «W», «Fr» — значит это белый мужчина, родился во Франции:

s5dzgvjgccp7vvg1plupgf1rpxg.png

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

Иголка прошла сквозь отверстие в позиции «M» — цепь замкнула крайний правый счетчик, считающий мужчин, он увеличился на 1 (M=1). Иголка над позицией «F» уперлась в картон, поэтому средний счетчик женщин остался без изменений (F=0). Иголка над позицией «W» также прошла сквозь отверстие и замкнула цепь для счетчика белых, увеличила его на 1 (W=1). Иголка над позицией «Fr» тоже прошла в отверстие и попала в чашку с ртутью, но т. к. она не подключена ни к одному счетчику (в этой конфигурации количество людей, родившихся во Франции, мы не считаем), никакая цепь не замкнулась, состояние счетчиков осталось без изменений.

gmjiwij93etj6bvp5lif1-wdf1g.png

Следующая карта: белая (W) женщина (F), родилась в Ирландии (Ir)

tf6_am38gifzggradeljhkwrgdy.png

На этот раз щуп «M» уперся в картон (счетчик мужчин сохранил старое значение M=1). Иголка «F» прошла сквозь отверстие и замкнула цепь счетчика (F=1). Иголка «W» повторно замкнула цепь соответствующего счетчика, его значение увеличилось еще на 1 (W=2). Отверстия для поля «Ir» у нас на картинке нет, тем более, оно не подключено ни к какому из счетчиков, поэтому этот вариант ответа ни на что не влияет.

7v_t7zcbhx0x8l_7-is-raathey.png

Смотрим результат на счетчиках, в стопке из 2-х перфокарт:


  • мужчин: 1
  • женщин: 1
  • белых (независимо от пола): 2

Переписываем результат в сводную таблицу (табулируем)

ameaitvmkxjomfhgmnbk8hpfjzu.png


Конфиг-2

Теперь хотим посчитать


  • Страна рождения: Франция (Fr)
  • Раса: китаец (Ch)
  • Пол: мужчина (M)

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

qleltlztvlcv10a5jcun-fgu73e.png

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

Мужчина (M) японец (Jp), родился во Франции (Fr):

1pm6jrfjnzkcpmtpb8jyit1qofm.png

Счетчик мужчин увеличился на 1 (M=1), как и в прошлый раз. Иголка «Fr», пройдя сквозь отверстие, замкнула цепь и в этот раз это повлияло на подключенный к иколке счетчик (Fr=1).

tlr0f1hrgrmuna6ljhmqx3q3r1a.png

Женщина (F) китаянка (Ch), родилась во Франции (Fr):

9pya3x06qltsm1o65tgy3ie0fei.png

Щуп «F» прошел сквозь отверстие, но на этот раз он не подключен ни к одному из счетчиков, поэтому ни на что не повлиял. Щуп «Ch» увеличил счетчик китайцев на 1 (Ch=1). Щуп «Fr» увеличил число родившихся во Франции еще на 1 (Fr=2)

2cdyamva8anebjvxw88abd2ff44.png

Мужчина (M) китаец, родился во Франции (Fr)

7bbquaih9a3mmhe2f0aj6pmbtmk.png

ldoksnctmjucwmwty1qliuwwl8i.png

Смотрим результат на счетчиках, в стопке из 3-х перфокарт:


  • мужчин: 2
  • китайцев (по расе): 2
  • родившихся во Франции: 3

Переписываем результат в сводную таблицу (табулируем)

ameaitvmkxjomfhgmnbk8hpfjzu.png


Конфиг-3: составные условия

Итак, с простыми счетчиками ответов разобрались. Теперь хотим посчитать показатель похитрее.


  • Мужчины китайской расы: (M+Ch) — увеличивать счетчик только тогда, когда на карте пробиты оба поля одновременно

По старой схеме:


  • Страна рождения: Франция (Fr)
  • Раса: белый (W)

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

Счетчики Fr и W подключены к соответствующим щупам напрямую как обычно. А в схеме подключения счетчика «M+Ch» появился новый элемент: счетчик больше не подключается напрямую ни к одному из щупов, вместо этого свободный контакт подключается к противоположному полюсу батареи. Но в этом контуре в двух местах производим разрывы и вставляем в прерванные участки специальное устройство, которое называется реле. Первое реле управляется сигналом со щупа «M», второе реле — сигналом со щупа «Ch»:

j7zbgfgozt-he9i6qhtpgqwetn0.png

Кто не в курсе, что такое реле и как оно работает, в двух словах про него расскажу.


Реле

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

В варианте реализации реле на картинке управляющий контур разорван (электрическая катушка-магнит отключена), пружина притягивает подвижную перемычку на управляемом участке цепи, управляемая цепь разорвана:

t7py7rdshqp5vaunnlnp1qc34l0.png

Замыкаем управляющий контур, ток попадает на катушку, она начинает притягивать к себе перемычку силой электромагнетизма:

edxhlttsft6vvxjljzqqxcfdeo4.png

Перемычка замыкает управляемый участок цепи и удерживает в таком состоянии до тех пор, пока ток течет через катушку (управляющий участок цепи замкнут):

zhfmmt7hxbsa22q2tde0p908qn4.png

Отключаем катушку от тока, сила электромагнетизма исчезает, пружина тянет перемычку обратно:

kafh6lvzcp7iwpri7nrodjyon_0.png

Пружина сделала свое дело, управляемый участок цепи снова разорван:

uf0peffjonvl-rdbuukpyqq9bow.png

возвращаемся к составному условию для статистического автомата

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

Считаем

Мужчина (M) японец (Jp), родился во Франции (Fr)
bfkmgcecxk6ijupmrwmtmzlfmig.png

Щуп «M» проваливается в отверстие и замыкает свой локальный контур, управляющий реле. Реле M замыкает свой участок управляемой цепи, ведущей к счетчику «M+Ch». Щуп «Ch» упирается в картон, электромагнит не включен, реле остается в разомкнутом состоянии, соответствующий участок цепи «M+Ch» остаётся разомкнут. Таким образом, контур счетчика «M+Ch» остается разомкнут, счетчик не увеличивает значение («M+Ch»=0).

a1dyu6rjhffp9dn9k0ohafxky2k.png

Женщина (F) китаянка (Ch), родилась во Франции:

jle0g3zgfl56quugspp8zxhwnxa.png

На этот раз щуп «Ch» замыкает контур своего реле и замыкает соответствующий участок цепи «M+Ch». Но щуп «M» оставляет своё реле разомкнутым, в итоге контур «M+Ch» всё равно остаётся разомкнут, счетчик без изменений («M+Ch»=0).

xjkspaqmrrrlaubf0zw8-hojhdq.png

Наконец, мужчина (M) китает, родился во Франции:

emloajo9jqkzyxhwsnxka4ig0v8.png

Щуп «M» проваливается в отверстие, реле «M» замыкает свой участок контура. Щуп «Ch» проваливается в отверстие, реле «Ch» замыкает свой участок контура. В итоге общик контур «M+Ch» оказывается замкнут, счетчик «M+Ch» увеличивается на 1 («M+Ch»=1)

th9imuwri-0cfrymy3ogqwc7ore.png

Последовательное подключение двух и более реле в цепь является аппаратной реализацией оператора двоичной булевой логики «И» («AND»).

Результат на счетчиках в стопке из 3-х перфокарт:


  • мужчин китайской расы: 1
  • белых: 0
  • родившихся во Франции: 3

Табулируем

ameaitvmkxjomfhgmnbk8hpfjzu.png

Логику работы автомата для каждой из конфигураций можно точно описать на языке с ООП в стиле Java или С++

Конфигурация-1

int whites = 0;
int females = 0;
int males = 0;
for(PunchCard pc in punchCards) {
    if(pc.white) whites++;
    if(pc.female) females++;
    if(pc.male) male++;
}
print(whites, females, males);

Конфигурация-2

int birthFrance = 0;
int chinese = 0;
int males = 0;
for(PunchCard pc in punchCards) {
    if(pc.birthFrance) birthFrance++;
    if(pc.chinese) chinese++;
    if(pc.male) males++;
}
print(birthFrance, chinese, males);

Конфигурация-3

int birthFrance = 0;
int whites = 0;
int maleChinese = 0;
for(PunchCard pc in punchCards) {
    if(pc.birthFrance) birthFrance++;
    if(pc.white) whites++;
    if(pc.male && pc.chinese) maleChinese++;
}
print(birthFrance, chinese, males);

Ручное переподключение проводов (или смена более сложного распаянного блока с жесткой логикой) позволило выполнить на одном устройстве три разных «программы».

В автомате Холлерита конструкционные блоки этой программы реализованы следующим образом:


  • Логика (булева алгебра в условных блоках if): электрические схемы с реле
  • Арифметика (сложение с единицей — инкремент целочисленных счетчиков): накапливаемая сумма счетчика с переносом разряда
  • Последовательное выполнение — организация цикла (подача карт): в первых версиях вручную мускульной силой человека-оператора, в поздних версиях появилась автоматическая подача последовательности карт из стопки

Таким образом, перфокартные табуляционные (статистические) машины Германа Холлерита — это цифровые логико-арифметические счетные автоматы специального назначения.

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

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

С учетом того, что перфокартные машины продолжили развитие до компьютерной эпохи и еще какое-то время существовали параллельно с ранними версиями компьютеров современных архитектур, а также того, что концепция реляционных субд и языка SQL появилась в 1970/1974 в компании IBM, эти параллели могут быть не простым совпадением.

https://patents.google.com > «herman hollerith» > внизу страницы ссылка «Assignees = Herman Hollerith»
Или вбить запрос: «inventor:(Herman Hollerith)»
Результаты поиска отсортировать по «Oldest» (сначала самые старые)
https://patents.google.com/? q=hollerith&assignee=Herman+Hollerith&sort=old
Примерно 64 результата

Самые первые патенты:
№ 395782: Art of compiling statistics, заполнен в 1884, выдан в 1889
https://patents.google.com/patent/US395782A/
https://patentimages.storage.googleapis.com/92/a9/6b/f6aa3e4e27a35b/US395782.pdf
№ 395783: Apparatus for compiling statistics, заполнен в 1884, выдан в 1889
https://patents.google.com/patent/US395783A/
https://patentimages.storage.googleapis.com/64/74/b5/45e0673f2762da/US395783.pdf
№ 395781: Art of compiling statistics, заполнен в 1887, выдан в 1889
https://patents.google.com/patent/US395781A/
https://patentimages.storage.googleapis.com/29/55/e8/f6653128b2aebf/US395781.pdf

Первые патенты выданы в 1889-м году
При этом заполнены в разные годы
Патент, заполненный в 1887-м, выдан раньше (и идёт по номеру раньше), чем те, которые заполнены в 1884
Первые версии машины использовали перфорированную ленту, а не перфокарты

5zza1absz9doeeahwr48r-mepc4.png

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

q_gnrlmlwas73v8txi6upasvgim.png

ax0vtcolmfgtwhhoij-gzyhl0-8.png

Схема для одной из конфигураций:

scc3n0aidsuqwylbu0qbbac1acq.png

Еще одна схема. Здесь видно катушки и подвижный контакт (перемычку) на реле, при этом несколько реле включены в последовательные и параллельные участки цепи:

vbgdmmnj41p6gxue2a6utsh_svo.png

jlomkqa7tvnto2u7kt6al3ner0i.png

achu2mbhfausanfi7b9lgy97ikg.png

3412lynr2csbw99bq6u4quv3j_e.png

w5mfypgzsmrfpkgq7injvt2ali4.png


В 1895 году Холлерит выступал с лекциями о своих машинах в Европе. В Берне он был представлен собравшимся как »статистический инженер».
«Я вовсе не удивлюсь, если это определение не станет общепринятым, — писал Холлерит жене. — Но если все же в будущем это случится, я буду счастлив от того, что был первым статистическим инженером».

От абака до компьютера, Р.С. Гутер, Ю.Л. Полунов, 1981

День рождения Германа Холлерита — 29 февраля 1860. В день рождения изобретателя первого автомата, перемалывающего массивы данных значительных размеров (64 млн. анкет — это настоящая бигдата без скидок на 19-й век), отмечаем Международный день статистического инженера! (дата-саентисты, дата-инженеры и прочие специалисты, использующие вычислительную технику для обработки и анализа больших объемов статистических данных, — все причастны).

© Habrahabr.ru