J4AJK

                  /* The end of code */
                  what thats mean for us

                  by Cade Metz, 2016

                  Jason Tanz: Soon We Won't Program
                  Computers.  We'll Train Them Like Dogs

                  Edward C. Monaghan: Just as Newtonian
                  physics wasn't obviated by quantum
                  mechanics, code will remain a powerful
                  tool set to explore the world.

                  https://www.wired.com/2016/05/the-end-of-code/

### БУТСТРЯП (BOOTSTRAP) В ОДИНОЧКУ.

ВНИМАНИЕ! Все шаги выполняем на виртуальной машине Centos-7.
          О том, как установить и настроить виртуальную машину
          сказано в приложении А.

  VirtualBox: Linux Fedora (64 bit) 4096MB, 4 Cores, Display 128MB

I. Электричество:

Релейная схема (батарейка, провод, ключ, реле, заземление).

Для этого вполне подойдет CircuitMaker Student v.6 (1998). Здесь нужно знать про клавишу икс 'x', меню Simulation -> Digital Mode и кнопочку "бегущий человечек" на тулбаре. Пререквизиты -- Английский и арифметика (smath.info). Думаю, "It's logical.." (mr. Spock, Star Trek TOS, 1966).

Собрать схемы для 4-х унарных и 16 бинарных схем двоичной логики а также схему защелки (асинхронного RS триггера).

ВНИМАНИЕ! Прошел 1 час. Заветная цель будет достигнута через 31536000000000 секунд.

II. Перейти на следующий уровень абстракции "Итальянский логисим"

  http://www.logisim.altervista.org/

Построить схемы

  +  RS, JK, D, T триггеров (синхронных и асинхронных)
  +  шифраторов, дешифраторов, мультиплексоров и демультиплексоров
  +  сумматора (полусумматора и четвертьсумматора)
  +  схему вычисления дополнительного кода.

Перейти к восьмибитным схемам. Создать АЛУ, ОЗУ на 256 байт, ПЗУ на 256 байт, счетчик команд (схемы выборки, исполнения команды). Построить компьютер с единственной командой

  COPY SRC_ADDR DST_ADDR

Подсказка: регистр счетчика команд, память, все элементы АЛУ и ввод-вывод размещаем в адресном пространстве.

Формат команды

  MSB (most significant bit)
    Код команды: 0 бит
    Копировать откуда: 8 бит
    Копировать куда:   8 бит
  LSB (least significant bit)

III. ВНИМАНИЕ! Прошло 10 часов. Заветная цель будет достигнута через 31535999964000 секунд.

Перейти на следующий уровень абстракции -- Flat Assembler

  https://flatassembler.net/

С помощью макроопределений создать набор из 20..30 полезных команд, например

  MOV, IN, OUT, NOT, AND, OR, XOR, ADD, SUB, MUL, DIV..

В машинных кодах написать простой ассемблер.

ВНИМАНИЕ! Прошло 100 часов. Заветная цель будет достигнута через 31535999604000 секунд.

На свежеиспеченном ассемблере написать редактор и монитор. С помощью созданных средств написать компилятор простого Си-подобного языка.

ВНИМАНИЕ! Прошло 1000 часов. Заветная цель будет достигнута через 31535996004000 секунд.

..

Сделано уже много, а конца не видно. Тем не менее, эта дорожка не тупиковая. Во-первых, удовлетворено любопытство на тему "а как там было в начале?", и оно уже не мешает занятся "делом". Во-вторых, после третьего шага нас вывели на дорогу, по которой уже пройдена значительная часть пути. Если все население планеты будет скоординированно заниматься информатикой, то осталось.. меньше суток. (шутка):

  $ python3
  Python 3.6.7 (default, Oct 22 2018, 11:32:17)
  [GCC 8.2.0] on linux
  Type "help", "copyright", "credits" or "license" for more information.
  >>> 31535996004000. / \
          7696687865  / \
                3600  / 24

Говорят, есть и другая дорожка, для ленивых, но она скользкая. Это полностью уверовать Рею Курцвейлу, дождаться "вечной жизни" (кажется, 2047, если мне не изменяет память)*, и лишь затем начать строить, но уже не так, как это сделали люди.
------
*) http://www.marieclaire.ru/krasota
     /7-shagov-na-puti-k-vechnoy-jizni-ot-reya-kurtsveyla/
------

..

ВНИМАНИЕ! Прошло 8759998889 часов. Заветная цель будет достигнута через 600 секунд.

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


## Приложение А. CENTOS 7. FIRST STEPS

#  STEP 0. Install minimal Desktop
----------------------------------

  https://www.centos.org/forums/viewtopic.php?t=47088

  1. Install CentOS-7 - Minimal (First entry point in ISO menu list).
     Invite your user into sudo.
  2. yum groupinstall -y "X Window System"
  3. yum install -y gnome-classic-session gnome-terminal \
       nautilus-open-terminal control-center liberation-mono-fonts
  4. unlink /etc/systemd/system/default.target
  5. ln -sf /lib/systemd/system/graphical.target \
       /etc/systemd/system/default.target
  6. reboot

# STEP 1. Guest Additions
-------------------------

  https://linuxconfig.org/how-to-install-virtualbox-guest-
    additions-on-centos-7-linux

  URL="https://dl.fedoraproject.org/pub/epel"
  URL+="/epel-release-latest-7.noarch.rpm"
  sudo rpm -Uvh $URL
  sudo yum install -y perl gcc dkms kernel-devel
  sudo yum install -y kernel-headers make bzip2

Confirm that kernel-headers installed are matching your currently running kernel:

  # ls -l /usr/src/kernels/
  # uname -r

Install Guest Additions

  sh /run/media/it/VBox_GAs_6.0.4/VBoxLinuxAdditions.run

Install Browser

  sudo yum install -y firefox

Change Hostname

  https://www.tecmint.com/set-change-hostname-in-centos-7/

  # hostnamectl set-hostname ufo.mars.nat

Disable NetworkManager

  https://documentation.cpanel.net/display/CKB
    /How+to+Disable+Network+Manager

  systemctl stop NetworkManager.service
  systemctl disable NetworkManager.service
  cd /etc/sysconfig/network-scripts
  cat ifcfg-enp0s3 | grep NM_CONTROLLED
  NM_CONTROLLED=no
  cat ifcfg-lo | grep NM_CONTROLLED
  NM_CONTROLLED=no
  systemctl enable network.service
  systemctl start network.service

# STEP 2. Apache install
------------------------

  yum upgrade
  yum clean all
  yum install -y httpd
  systemctl status httpd.service
  systemctl start httpd.service
  systemctl enable httpd.service
  systemctl status httpd.service
  firewall-cmd --list-all
  sudo firewall-cmd --add-service=http --permanent
  sudo firewall-cmd --reload
  sudo firewall-cmd --list-all

test with (analog world, almost by Terry Pratchett):

Note: Problems with Chrome (use Edge, Firefox, Opera)

  cd /var/www/html
  sudo git clone https://github.com/zupolgec/circuit-simulator

STEP 3. install latest Mono
---------------------------

Where is mono-complete in Centos?

  http://www.sysadminshare.com/2012/08
    /public-key-for-rpm-is-not-installed-how.html

  yum-config-manager --add-repo \
    http://download.mono-project.com/repo/centos-beta/

  http://www.sysadminshare.com/2012/08
   /public-key-for-rpm-is-not-installed-how.html

  # find / -name "*.repo" -type f -exec grep -Hn \
      http://download.mono-project.com/repo/centos-beta/ {} \;

  # cat /etc/yum.repos.d/<repo-we-just-found> | grep -Hn gpgcheck
  gpgcheck=0

  # yum install -y mono-complete

Check with SMath studio:

Visit smath.info, download "SMath Studio Desktop for Mono"

  cd ~
  mkdir SMath
  cd SMath
  tar xf ../Downloads/SMathStudioDesktop.0_99_7030.Mono.tar.gz
  ./smathstudio_desktop_mono

# STEP 4. Install Java
----------------------

  https://linuxize.com/post/install-java-on-centos-7/

  $ sudo yum install java-1.8.0-openjdk

# STEP 5. Install latest wine ( > 1hr )
---------------------------------------

  Follow this:

    https://www.systutorials.com/239913
      /install-32-bit-wine-1-8-centos-7/

  Take the latest version (4.5 as of April 11, 2019)

    wget http://dl.winehq.org/wine/source/4.x/wine-4.5.tar.xz
    tar xf wine-4.5.tar.xz
    cd wine-4.5
    mkdir -p wine32 wine64
    cd wine64
    ../configure --enable-win64
    make -j 4
    cd ../wine32
    PKG_CONFIG_PATH=/usr/lib/pkgconfig ../configure --with-wine64=../wine64
    make -j 4

The trick is to install 32-bit version first and then the 64-bit version*.

------
*) https://www.systutorials.com/239913/install-32-bit-wine-1-8-centos-7
------

  $ pwd

  /home/it/wine-4.5/wine32

  $ sudo make install
  $ cd ../wine64
  $ sudo make install

  $ file `which wine`
  $ file `which wine64`

Note the "ELF 32-bit" and "ELF 64-bit" in the file type strings.

Install winrar

  $ wget https://rarlab.com/rar/rarlinux-x64-5.7.1b1.tar.gz
  $ tar xf rarlinux-x64-5.7.1b1.tar.gz
  $ cd rar
  $ sudo make install

Check with CircuitMaker Student 6.0

  $ wget http://nelus.tpt.edu.ee/big/CM60S.rar
  $ rar x CM60S.rar
  $ cd CM60S
  $ wine CIRMAKER.EXE
