G21LS


    командная строка для хакера, все равно что латынь для врача:
    не хочешь забыть? -- пользуйся ежедневно.

I. Linux. NSnake
----------------

С сайта

    http://sourceforge.net/projects/nsnake/files/

в хосте качаем Linux исходники (nsnake-3.0.1.tar.gz) на стол. Запускаем виртуальную машину Trusty (Ubuntu, x86-64, 1GB RAM, NAT, пробросить 22 порт 127.0.0.1->10.0.2.15).

Читаем приложение Б, настраиваем Putty, заходим

  user: virtu
  passwd: virtu

  $ mkdir -p /mnt/Desktop
  $ mount -t vboxsf Desktop /mnt/Desktop
  $ cd ~
  $ cp /mnt/Desktop/nsnake-3.0.1.tar.gz .
  $ tar xf nsnake-3.0.1.tar.gz
  $ cd nsnake-3.0.1
  $ make
  $ sudo make install
  $ nsnake


II. FreeBSD. Snake
------------------

    Изменить параметры пользователя просто: chpass username*
    *) michael-borisov.com/2012/11/01/freebsd-change-user-information

Putty настраиваем, как в предыдущем пункте (для Linux).

На http://www.freebsd.org находим диск виртуальной машины

  FreeBSD-10.2-RELEASE-amd64.vmdk.xz

Качаем, распаковываем, собираем виртуальную машину.
Добавляем юзера virtu ставим ему bash и даем возможность сказать "su".
Активирум sshd и получение адреса по dhcp (/etc/rc.conf)

  ifconfig_em0="DHCP"
  sshd_enable="YES"

Танцуем с бубном "рутом" через putty (час или больше)

  pkg
  pkg2ng
  pkg update
  pkg search ncurses
  pkg install ncurses
  pkg install mc
  portsnap fetch
  portsnap extract
  pw usermod -n virtu -L russian
  vi /etc/profile
    ..
    LANG="ru_RU.UTF-8"; export LANG
    LC_CTYPE="ru_RU.UTF-8"; export LC_CTYPE
    LC_COLLATE="POSIX"; export LC_COLLATE
    LC_ALL="ru_RU.UTF-8"; export LC_ALL
  pkg install bash
  chpass virtu
  vi /etc/login.conf
    ..
    russian|Russian Users Accounts:\
            :charset=UTF-8:\
            :lang=ru_RU.UTF-8:\
            :tc=default:
    ..
  cap_mkdb /etc/login.conf
  exit
  pkg install wget
  wget -c ftp://invisible-island.net/ncurses-examples/ncurses-examples.tar.gz
  tar xf ncurses-examples.tar.gz
  cd ncurses-examples-20150808/
  ./configure
  make
  make install
  ./knight
  ./railroad
  ./hanoi
  wget -c http://iweb.dl.sourceforge.net/project/snake-in-curses/snake-in-curses/0.4.4/snake.c
  cc snake.c -o snake -lncurses
  ./snake


III. Заметки о программировании на С
------------------------------------

    Неравный брак.

    Жили-были старик Си (китаец, 1970 года рождения) да
    Ява-прекрасная (кофе в соску, 1995 года) и решили пожениться.
    Родились у них два чада, назвали их Объединение и Пересечение.
    Длинные имена не прижились в народе, потому дали им прозвища:
    C# "Остряк" и Яваскрип "Плакса".

Мощь C в указателях (только ими надо уметь пользоваться). Лиши С указателей -- получишь весьма жалкое и убогое существо. Сила Явы -- ООП (инкапсуляция, наследование, полиморфизм). Шарп может и так (unsafe) и эдак. Скрип, когда чего не умеет, всегда бежит к отцу. Ну а тот всегда поет одну и ту же песню:

  Пишем на C, пилим (компилируем) CLang'ом в байт-код LLVM,
  ну а дальше уже сам(а) понимаешь -- emscripten (LLVM->Javascript+HTML)

На дворе шел 2016-й год, таял снег, терабайтная карта памяти microSD стоила 40$*.

Будем писать код для машины с 32 байтами ОЗУ...

-------

*) Samsung Micro SD 1TB купить в Ямало-Ненецком АО на Avito

  https://www.avito.ru/gubkinskiy
        /tovary_dlya_kompyutera/samsung_micro_sd_1tb_692454824


IV. MORE JAVA SNAKES FOR ANDROID
--------------------------------

Snake. Successfully imported to Android Studio.

  http://android.okhelp.cz/android-games-source-code/

Modified for touch screen

  https://github.com/mefernandez/android-snake-example
  http://www.java2s.com/Open-Source/Android_Free_Code/Example
       /example/mefernandez_android_snake_example.htm

Collection of sources and precompiled snake apk's in ./release

  https://codeload.github.com/neyre/Snake/zip/master

  Snake 1.0.apk
  Snake 1.1.apk
  Snake 1.1.1.apk
  Snake 1.2.apk

  + Smooth import to Android Studio
    Import project (Eclipse ADT, Gradle, etc.)
    Builds and indexing.. This takes for a while..

  + Build -> Select Build Variant.

  + Rebuild Project.

  + Status Bar -> Messages

  + Build APK
      apk is in
        \Users\<User>\StudioProjects\Snake-master2\app\build\outputs\apk

V. GRÜNER FUß UND SCHLANGE AUF DEM BERÜHRUNGSEMPFINDLICHER BILDSCHIRM
---------------------------------------------------------------------

  1. https://github.com/rhildred/droidfoot
  2. http://www.programmierkurs-java.de/droidfoot/download/manual-2.0.pdf
  3. http://www.greenfoot.org/scenarios/4999
  4. Hans Dorsch. Das Android-Smartphone-Buch. O'Reilly Verlag, 2014
  5. http://lenta.ru/news/2016/02/04/stellarator/

------------------------------------------------------------------------

Приложение А. С и Java
----------------------

Сравнительная таблица языков C, Java. First look.
------------------------+------------------------+---------------------
У папы Си*              | У мамы Явы             | Замечания
------------------------+------------------------+---------------------
Комментарии
------------------------+------------------------+---------------------
/* */  //               | //  /**  .. @ .. */    |
------------------------+------------------------+---------------------
Константы
------------------------+------------------------+---------------------
#define GRAVITY = 9.8   | public static final double GRAVITY = 9.8;
#define DECISION        | public static final boolean DECISION = true;
------------------------+------------------------+---------------------
Импорт
------------------------+----------------------------------------------
#include <stdio.h>      | import greenfoot.*;
                        | import java.util.List;
------------------------+----------------------------------------------
Типы
------------------------+------------------------+---------------------
void                    | void                   | When method returns
unsigned char           | byte                   | "nothing" you have
char                    |                        | to specify that by
unsigned short int      |                        | putting the void
short                   | short                  | keyword in its
unsigned int            |                        | signature.
int                     | int                    |
unsigned long int       |                        |
long                    | long                   |
unsigned long long int  |                        |
long long               |                        |
float                   | float                  |
double                  | double                 |
                        | boolean                |
                        | char                   |
------------------------+------------------------+---------------------
Массивы
------------------------+------------------------+---------------------
int x[8]                | int[] x = new int[8]   |
------------------------+------------------------+---------------------
Операторы
------------------------+------------------------+---------------------
с++ с-- ++с --с         | j++ j-- ++j --j        | prefix and postfix
* / % + -               | * / % + -              | infix
                        |                        | + - unary or binary
<< >>                   | << >> >>>              | unsigned right shift
< > <= >=               | < > <= >= instanceof   |
sizeof                  |                        |
== !=                   | == !=                  |
! & ^ | ~ && ||         | ! & ^ | && ||          |
? :                     | ? :                    |
= += -= *= /= %= &= ^=  | = += -= *= /= %= &= ^= |
|= <<= >>=              | |= <<= >>= >>>=        |
------------------------+------------------------+---------------------
Выражения
------------------------+----------------------------------------------
x / (y + 100)           | x / (y + 100)
------------------------+----------------------------------------------
Блоки
------------------------+----------------------------------------------
{ }                     | { }
------------------------+----------------------------------------------
Control flow
------------------------+------------------------+---------------------
if (x) yap() else nop() | if (x == true)         |
                        | {                      | Behave Yourself
                        |     yap();             | (be stylish:
                        | }                      |  white pens --
                        | else                   |  red shues)
                        | {                      |
                        |     nop();             |
                        | }                      |
------------------------+------------------------+---------------------
#include <stdio.h>      | public class SwitchDemo {
int main() {            |   public static void main(String[] args) {
  int m = 8;            |
  char* ms;             |     int month = 8;
  switch (m) {          |     String monthString;
    case 1:             |     switch (month) {
      ms = "January";   |       case 1:  monthString = "January";
      break;            |                break;
    ...                 |       ...
    case 0xc:           |       case 12: monthString = "December";
      ms = "December";  |                break;
      break;            |       default: monthString = "Wrong month";
    default:            |                break;
      ms = "Wrong";     |     }
  }                     |     System.out.println(monthString);
  puts(ms);             |   }
  return 0;             | }
}                       |
------------------------+----------------------------------------------
#include <stdio.h>      | class WhileDemo {
int main() {            |   public static void main(String[] args) {
  int c = 1;            |     int count = 1;
  while (c < 11)        |     while (count < 11) {
    printf(             |       System.out.println("Count: " + count);
      "Count: %d\n",    |       count++;
      c++               |     }
    );                  |   }
  return 0;             | }
}                       |
------------------------+----------------------------------------------
#include <stdio.h>      | class DoWhileDemo {
int main() {            |   public static void main(String[] args){
  int c = 1;            |     int count = 1;
  do {                  |     do {
    printf(             |       System.out.println("Count: " + count);
      "Count: %d\n",    |       count++;
      c++               |     } while (count < 11);
    );                  |   }
  } while (c < 11);     | }
  return 0;             |
}                       |
------------------------+----------------------------------------------
#include <stdio.h>      | class ForDemo {
int main() {            |   public static void main(String[] args) {
  int i;                |     for(int i=1; i<11; i++) {
  for(i=1; i<11; i++)   |       System.out.println("Count: " + i);
    printf(             |     }
      "Count: %d\n", i  |   }
    );                  | }
  return 0;             |
}                       |
------------------------+----------------------------------------------
                        | class EnhancedForDemo {
                        |   public static void main(String[] args){
                        |     int[] numbers =
                        |       {1,2,3,4,5,6,7,8,9,10};
                        |     for (int item : numbers) {
                        |       System.out.println("Count: " + item);
                        |     }
                        |   }
                        | }
------------------------+----------------------------------------------
Функции
------------------------------+----------------------------------------
                              | public private protected
                              | static
int foo( int in, int* out)    | class package
------------------------------+----------------------------------------

*) А еще папа знает про указатели, struct, union, enum, bitfield,
   препроцессор, условную компиляцию, macro,..


Приложение Б. Curses и putty
----------------------------

В Putty неверно отображается псевдографика Midnight Commander
winterheart 17 марта, 2010 - 11:27

  http://gentoo.ru/content
       /v-putty-neverno-otobrazhaetsya-psevdografika-midnight-commander

Если вместо рамок в mc отрисовываются различные символы, то измените настройки putty:

  Terminal > Keyboard > "The Function keys and keypad" = linux
  Window > Translation > Character set - UTF-8
  Connection > Data > "Terminal-type string" пишем linux

Сохраняем сессию, и после подключения mc будет отображать псевдографику корректно

