RSS
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
[>] Re: MS Linux
linux.14
vit01(mira, 1) — Difrex
2015-09-18 10:39:15


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

Сама ситуация забавная, да =)

[>] Танком по кокаину
linux.14
Difrex(mira, 14) — All
2015-10-13 14:01:20


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

Приложения изолируются друг от друга. Путей изоляции несколько: proccess spawning, cgroups, docker.

И так, посмотрим на продакшен:
$ cocaine-tool info
{
    "apps": {
        "site_web-1.0": {
            "load-median": 0,
            "profile": "spawn",
            "sessions": {
                "pending": 0
            },
            "queue": {
                "depth": 0,
                "capacity": 100
            },
            "state": "running",
            "slaves": {
                "active": 0,
                "idle": 1,
                "capacity": 10
            }
        },
        "test_site_web-1.1": {
            "load-median": 0,
            "profile": "spawn",
            "sessions": {
                "pending": 0
            },
            "queue": {
                "depth": 0,
                "capacity": 100
            },
            "state": "running",
            "slaves": {
                "active": 0,
                "idle": 0,
                "capacity": 10
            }
        }
    }
}
У нас запущенно два приложения: продакшен, в который смотрит интернет и тест в который смотрит локальная сеть. Нагрузка в данный момент минимальна.

Попробуем пустить нагрузку. Я буду использовать yandex-tank. С линейным возрастанием количества запросов в секунду, а потом с постоянным RPS в течении 5 минут. Будем нагружать тестовое приложение :). Пульки заряжаем:
line(1,1000,1m) const(1, 800, 5m)

Пулим и смотрим, что происходит с кокаином:
ps aux | grep cocaine | wc -l
134

Кокс сам пустил дофигища своих форков, чтобы нормально отрабатывать запросы.

Довольно слов! А графики вот:
* http://storage1.static.itmages.ru/i/15/1013/h_1444741070_8277061_cc04f720d3.png
* http://storage5.static.itmages.ru/i/15/1013/h_1444741087_2241184_6546648048.png
* http://storage8.static.itmages.ru/i/15/1013/h_1444741106_8000667_4fdb5b0c2e.png
* http://storage9.static.itmages.ru/i/15/1013/h_1444741121_4574491_424dfe3a4b.png
* http://storage1.static.itmages.ru/i/15/1013/h_1444741138_7778052_204ac4dc16.png

Выглядит неплохо? Нагрузка, конечно небольшая и синтетическая.

А если вдруг нам станет не хватать этого сервера, то мы сходим на другой и зупустим приложение и там
cocaine-tool -h another.cox.node.example.com app start --name uber-app-0.1 --profile spawn --timeout 20000

И локатор найдет его там, и нагрузку пустит как надо, и будет хорошо, да.

[>] Первая проба Android NDK или лень против костылей :)
linux.14
vit01(mira, 1) — All
2015-10-19 04:05:58


Решил не так давно написать что-то родное для своего андроида. Но проблема в том, что на Java я программировать не умею, да и не хочу.
Вспомнил, что существует набор компиляторов Android NDK, который, со слов Гугла, позволяет писать приложения на C/С++ или даже на других языках. На самом деле это немного не так, но об этом позже. Обрадовался и решил написать небольшой скрипт на своём любимом Си + скомпилировать некоторые полезности.

Скачал этот NDK (а он в 7zip SFX, фу и весит гига 2 в распакованном виде), попробовал что-то скомпилировать под arm.

Готовый скрипт для тех, кому надо быстро что-нибудь собрать. Можно адаптировать под Makefile для сборки всяких свободных библиотек.
#!/bin/bash
NDK_DIR=/mnt/android-ndk-r10e/
CC_PATH=$NDK_DIR/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86/bin/ # для GCC 4.9, доступен также 4.8 и clang
CC=$CC_PATH/arm-linux-androideabi-gcc # есть и другие утилиты из списка
SYSROOT=$NDK_DIR/platforms/android-21/arch-arm/ # android-21 - это версия 5.0, есть и более старые

$CC -I $SYSROOT/usr/include/ --sysroot=$SYSROOT ваша_прога.c -o output

Собрал lua, свой клиент для ii вместе с libcurl (писал об этом в ii.14), ещё один небольшой скрипт под 200 строк.

Захотелось большего =) Решил сделать apk, чтобы можно было просто тыкнуть пальцем и запускать свои скрипты, а не заходить в терминал.

Тут и начались проблемы. Документация у Гугла по NDK слишком скудная, поэтому разбираться пришлось самому.
GUI андроид-приложения называется Activity. В каталоге samples из NDK нашёл пример native-activity.

Компилируется оно уже по всем правилам и стандартам. Сначала надо зайти в сам каталог проекта, а потом уже запустить $NDK_DIR/ndk-build. Данный скрипт сам найдёт нужные параметры и соберёт библиотеку для всех архитектур.
Для того, чтобы упаковать программу в apk-файл, потребуется Android SDK и apache-ant. SDK в распакованном виде тоже весит несколько гигабайт, к сожалению.

Самой упаковкой apk и прочими рутинными вещами занимается ant. Но просто так он работать не может, ему нужен специальный файл под названием build.xml. И чтобы не мучаться с его ручным составлением, можно прибегнуть к небольшой хитрости с использованием SDK.

#!/bin/bash
SDK_DIR=/mnt/android-sdk-linux
TOOLS=$SDK_DIR/tools

$TOOLS/android create project --activity APP_Name --path ./каталог_проекта -n HelloWorld -t android-21 -k vit01.helloworld # в -k должно быть внутреннее системное имя пакета; точка в названии обязательна

Вот мы создали обычный java-проект. Теперь копируем файлы build.xml, local.properties и project.properties в каталог с проектом ndk.

Содержимое build.xml у меня оказалось вот такое:

<?xml version="1.0" encoding="UTF-8"?>
<project name="HelloWorld" default="help">
    <property file="local.properties" />
    <property environment="env" />
    <condition property="sdk.dir" value="${env.ANDROID_HOME}">
        <isset property="env.ANDROID_HOME" />
    </condition>

    <loadproperties srcFile="project.properties" />

    <fail
            message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
            unless="sdk.dir"
    />
    <import file="custom_rules.xml" optional="true" />
    <import file="${sdk.dir}/tools/ant/build.xml" />
</project>

Теперь идём в нужный каталог, набираем ant debug, ждём сборки пакета и находим apk в bin/
Устанавливаем, запускаем, радуемся.

А, стоп, надо посмотреть исходники (в jni/main.c)! Нет, не радуемся. Приложение почти полностью построено на EGL. Значит оно работает с видеокартой на низком уровне, а activity в хэдерах NDK - это единственная небольшая обёртка для него.

Если посмотреть в заголовочные файлы NDK, то видно, что для него есть только та самая обёртка, поддержка сенсоров, карты памяти, TTS, логов и прочее незначительное. A GUI-контролов нет!

Без Java, увы, здесь не обойтись. И это главный минус NDK. Пробуем пойти длинным путём. Идём в каталог java-проекта того самого хеллоуворлда, создаём там каталог jni, внутрь jni суём наш сишных хеллоуворлд и файл Android.mk с вот таким содержанием:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := modulename
LOCAL_SRC_FILES := helloworld.c

LOCAL_LDLIBS    := -llog -landroid
LOCAL_STATIC_LIBRARIES := android_native_app_glue

include $(BUILD_SHARED_LIBRARY)

$(call import-module,android/native_app_glue)

Ещё не помешает Application.mk с подобным:
APP_ABI := all
APP_PLATFORM := android-21

И что же нам написать на этот раз, чтобы хоть что-то получилось?
Для связывания Java кода и Си используется вещь под названием Java Native Interface, или JNI. Она позволяет пробрасывать сишные функции, чтобы их можно было вызывать из java-кода. И наоборот, но так гораздо сложнее. Проще говоря, это такой костыль.

Для демонстрации его работы напишем в java файл (а находится он в каталоге src/vit01/helloworld/APP_Name.java для моего проекта) вот такой код:

package vit01.helloworld;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class APP_Name extends Activity
{
    native public String return_helloworld(); // объявляем функцию, находящуюся в сишной библиотеке; ключевое слово native обязательно
    String mytext;
	
	static {
		System.loadLibrary("modulename"); // загружаем наше скомпилированное
	}
	
	TextView textView;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		textView = new TextView(this);

		mytext=return_helloworld(); // вызываем сишную функцию

		textView.setText(mytext);
		setContentView(textView);
    }
}

В jni/helloworld.c пишем

#include <jni.h>

JNIEXPORT jstring JNICALL Java_vit01_helloworld_APP_1Name_return_1helloworld(JNIEnv * env, jobject jObj) {
	// много букв, да? И не говорите. Название для этой функции jni ищет по особым правилам, и если в джаве она называется return_helloworld(), то здесь вот такой ужас
	// приходится нагромождать в сишном коде кучу костылей и обёрток
	char str[]="Hello World 123456!";
	return (*env)->NewStringUTF(env, str);
}

Потом в каталоге проекта запускаем $NDK_DIR/ndk-build и ant debug, на выходе получаем готовый apk в bin/, который при запуске выдаст наш хеллоуворлд. Кстати, material design из коробки я в нём так и не увидел. Видимо, надо ещё стилевые библиотеки подключать.

Вывод: программирование на Андроид без IDE и джавы довольно сложно, много минусов у NDK, но так или иначе приноровиться можно. Через любимую консоль будет довольно тяжело писать под эту платформу.

[>] Re: Первая проба Android NDK или лень против костылей :)
linux.14
Difrex(mira, 14) — vit01
2015-10-19 12:54:30


А IDE не пробовал?
Может, в нем проще будет NDK пользовать

[>] Re: Первая проба Android NDK или лень против костылей :)
linux.14
vit01(mira, 1) — Difrex
2015-10-19 13:38:33


> А IDE не пробовал?
Не, ни одну не пробовал. Они все такие жирные :[
Предпочитаю писать код в vim.

> Может, в нем проще будет NDK пользовать
NDK и там, и там одинаково используется, я же писал, в чём главные минусы этой штуки =)

Неудобно сборку пакета воедино делать, отлаживать и на джаве писать.

Думаю, что IDE всё-таки придётся ставить.

[>] Re: Первая проба Android NDK или лень против костылей :)
linux.14
vit01(mira, 1) — vit01
2015-10-20 04:01:49


>Думаю, что IDE всё-таки придётся ставить.
Попробовал android studio, так она виснет и вылетает через 5 минут работы. Ещё и терминал, в котором запущена, в сегфолт загоняет.

[>] Re: Первая проба Android NDK или лень против костылей :)
linux.14
Andrew Lobanov(station13, 1) — vit01
2015-10-20 05:50:09


>>Думаю, что IDE всё-таки придётся ставить.
>Попробовал android studio, так она виснет и вылетает через 5 минут работы. Ещё и терминал, в котором запущена, в сегфолт загоняет.

У нас таки будет андроид-клиент?

Оффтопик: у меня, скорее всего, остались последние дни сессии. В iing чего договорились то? Оставляем 20 знаков в msgid и обязательную точку в имене эхи, но без обязательного числа в конце (ii.talk)?

[>] Re: Первая проба Android NDK или лень против костылей :)
linux.14
vit01(mira, 1) — Andrew Lobanov
2015-10-20 11:16:46


> У нас таки будет андроид-клиент?
А разве его до сих пор нет? =)
Java-клиент от ntkrnlmp.exe и так вполне работает. Сишный клиент тоже работает (с доустановкой терминала и рута).

Пока "андроид-клиента от vit01" в планах не намечалось, но в перспективе хотел бы и на андроид свои грязные^W руки просунуть ;)

Пробовал ещё на Qt что-то сделать опять же на сабж, но ничего не вышло. И снова из-за ужасной IDE =(

[>] Re: Первая проба Android NDK или лень против костылей :)
linux.14
vit01(mira, 1) — Andrew Lobanov
2015-10-20 11:16:46


> В iing чего договорились то? Оставляем 20 знаков в msgid и обязательную точку в имене эхи, но без обязательного числа в конце (ii.talk)?
Пока ещё не договорились, но готов остановиться на этом варианте. msgid пока оставляем.

[>] Re: Первая проба Android NDK или лень против костылей :)
linux.14
Difrex(mira, 14) — vit01
2015-10-20 11:54:06


>Оставляем 20 знаков в msgid и обязательную точку в имене эхи, но без обязательного числа в конце (ii.talk)

Я за такой вариант

[>] Re: написание софта под Андроид
linux.14
vit01(mira, 1) — vit01
2015-10-28 11:52:48


IDE мне всё-таки завести удалось. Но жрать гигабайт с чем-то ОЗУ, извините, просто нагло с её стороны.
Здесь завести NDK пришлось немного по-другому: тут используется система сборки gradle вместо чего-то более простого. Для начала в файле gradle.properties надо прописать: android.useDeprecatedNdk=true
Затем в local.properties указываем: ndk.dir=/путь/к/ndk
Потом либо создаём в проекте каталог jni и туда сишные исходники, либо делаем симлинк для libs/, сгенерированного ndk-build на jniLibs/ и собираем библиотеки вручную через консоль, чтобы IDE их подхватывала.

А так скажу, что со средой разработки гораздо проще, чем без неё. Настолько просто, что даже интерес особый пропадает в ней писать.

[>] VirtualBox on amd64
linux.14
jmaks(station13, 12) — All
2015-11-09 20:22:31


Собственно сабж.
http://www.tecmint.com/wp-content/uploads/2013/10/Install-VirtualBox-5-in-Linux-620x297.jpeg

Каким образом можно заинсталлить vb на систему x86_64. Кто делал, что делал,
как делал?

Попробовал \актуально для slackware 14.1 x86_64 ядро 3.10.17\:
% установка из готовых пакетов txz из репа packages.slackonly.com
# установка из сконвертированных rpm от RHEL6
! попытки запуска сборки-уставовки из бинарника
VirtualBox-$version-$build-linux_amd64.run с оффсайта.

Ничего не дает правильного результата. Кто чем может помочь? Курение ман
вредит уже здоровью. Гугление не дает положительных и полезных результатов.

[>] Re: VirtualBox on amd64
linux.14
Difrex(mira, 14) — jmaks
2015-11-10 10:02:33


>slackware
Оу...

А так в немаргинальных дистрах:
apt install virtualbox
dnf install virtualbox
pacman -S virtualbox
emerge -av virtualbox

>Ничего не дает правильного результата. Кто чем может помочь?
Попробуй qemu-kvm+virt-manager. Понравится.

[>] Re: VirtualBox on amd64
linux.14
Andrew Lobanov(station13, 1) — jmaks
2015-11-10 15:45:29


jmaks> Каким образом можно заинсталлить vb на систему x86_64. Кто делал, что делал,
jmaks> как делал?

Я сейчас глупость скажу, но можно попробовать поставить мультилиб и собрать под 32 бита или подыскать версию vbox работающую на старом ядре.

ps Я так понимаю, попытка запустить ядро из current-ветки результатов не дала?

[>] Re: VirtualBox on amd64
linux.14
jmaks(station13, 12) — Andrew Lobanov
2015-11-10 17:21:56


jmaks>> Каким образом можно заинсталлить vb на систему x86_64. Кто делал, что делал,
jmaks>> как делал?

AL> Я сейчас глупость скажу, но можно попробовать поставить мультилиб и собрать под 32 бита или подыскать версию vbox работающую на старом ядре.
мультилиб стоит. Не могу найти нигде толком рабочих инструкций, где можно было бы
прочитать, как все делается с успехом, версий vb очень много и все они не
понять как будут или нет работать с текущим установленным ведром. При
попытке запуска, ругается, мол пересобери меня хозяин под свое ведро...

AL> ps Я так понимаю, попытка запустить ядро из current-ветки результатов не дала?
Не ведро не запускал. Пробовал различные комбинации и различные версии уже
приготовленных пакетов, а так же пробовал пересобрать под свое железко.

[>] Re: VirtualBox on amd64
linux.14
jmaks(station13, 12) — Difrex
2015-11-10 17:21:56


Difrex> А так в немаргинальных дистрах:
да ладно, прям таки сразу и маргинальный дистрыб. слакварь он один и самый
тру, все остальное подделка.

>> Ничего не дает правильного результата. Кто чем может помочь?
Difrex> Попробуй qemu-kvm+virt-manager. Понравится.
чем хорош qemu? и будет ли он работать на x86_64 архитектуре?

[>] Re: VirtualBox on amd64
linux.14
jmaks(station13, 12) — All
2015-11-10 21:24:13


jmaks> http://www.tecmint.com/wp-content/uploads/2013/10/Install-VirtualBox-5-in-Linux-620x297.jpeg
Шли вторые сутки. Читаю мануалы. Попробовал собрать пакет qemu из скрипта от
slackbuilds.org, и получил непонятный вылет на моменте копирования файлов
*.html

// все ещё в поиске, нужна среда виртулизации, но простых путей почему-то
// нет, а те которые есть не взлетают.

[>] Re: VirtualBox on amd64
linux.14
Difrex(mira, 14) — jmaks
2015-11-12 08:57:34


>чем хорош qemu? и будет ли он работать на x86_64 архитектуре?
*qemu-kvm*. kvm в ванильном ядре. Будет работать, конечно. У нас облако на kvm(как бэкенд к openstack, конечно же) построено, а это примерно 400 виртуалок amd64.

[>] Re: VirtualBox on amd64
linux.14
Difrex(mira, 14) — jmaks
2015-11-12 08:58:43


Да, попробуй этот мануал http://docs.slackware.com/howtos:general_admin:kvm_libvirt

[>] Re: VirtualBox on amd64
linux.14
jmaks(station13, 12) — Difrex
2015-11-12 17:40:29


Difrex> Да, попробуй этот мануал http://docs.slackware.com/howtos:general_admin:kvm_libvirt
Низкий поклон тебе, добрый человек, поисковые системы постоянно чудят со
мной и на полезные и понятные маны в одном месте не выдают никаких ответов
на запросы.
Читаю и просвещаюсь. Вообще у слаки вроде такая богатая история, а с поиском
манов в сети -- постоянно проблемы.

[>] Re: VirtualBox on amd64
linux.14
Andrew Lobanov(station13, 1) — jmaks
2015-11-12 18:40:59


Difrex>> Да, попробуй этот мануал http://docs.slackware.com/howtos:general_admin:kvm_libvirt
jmaks> Низкий поклон тебе, добрый человек, поисковые системы постоянно чудят со
jmaks> мной и на полезные и понятные маны в одном месте не выдают никаких ответов
jmaks> на запросы.
jmaks> Читаю и просвещаюсь. Вообще у слаки вроде такая богатая история, а с поиском
jmaks> манов в сети -- постоянно проблемы.
Вобще, это официальный сайт слаки. Как бы не такая уж и проблема =)

PS Но гугл действительно выдаёт муру по слаке часто. Просто потому что он так устроен.

[>] localhost
linux.14
jmaks(station13, 12) — All
2015-11-15 05:14:29


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

Что планируется запилить:
+ go git server
^ wisemapping server
~ ftp server
- nginx server
* dokuwiki или mediawiki
{ какой-нибудь простой just another бложик
[ instead-games mirror
= torrent server

Какие есть у кого предложения, что можно еще вкорячить на железку?

[>] Re: localhost
linux.14
jmaks(station13, 12) — jmaks
2015-11-15 05:15:40


jmaks> Какие есть у кого предложения, что можно еще вкорячить на железку?
Ну и собственно железка в процессе наколенной сборки лежит вот тут
https://yadi.sk/i/iQt3x-e6kTiSy

[>] localhost
linux.14
jmaks(station13, 12) — All
2015-11-15 05:40:38


И да, забыл же я о ТТХ, вот сколько раз себе говорил, не забудь, не
забудь...

mb ASUS P5GC-MX/1333
cpu Intel Celeron CoreDuo @1.60GHz
agp GT220 512Mb
ram 2048Mb
pci 1 - card SIL3512 (2ch sata, 1ch e-sata)
Ну и вагон различных хардов, что в принципе очевидно.

[>] Re: localhost
linux.14
Andrew Lobanov(station13, 1) — jmaks
2015-11-15 05:42:16


jmaks> Какие есть у кого предложения, что можно еще вкорячить на железку?
ii-ноду же ну =)

[>] Re: localhost
linux.14
jmaks(station13, 12) — Andrew Lobanov
2015-11-15 06:33:47


jmaks>> Какие есть у кого предложения, что можно еще вкорячить на железку?
AL> ii-ноду же ну =)
Отлично, добавил в схему todo https://yadi.sk/d/Luk3GG63kTk7V

[>] Странное рождение и долгая жизнь UNIX
linux.14
Andrew Lobanov(station13, 1) — All
2015-11-17 07:49:22


Когда хотят утешить, то говорят, когда для вас закрывается одна дверь, открывается другая. Так и вышло для Кена Томпсона (Ken Thompson) и Дениса Ритчи (Dennis Ritchie), когда они создавали операционную систему UNIX - одну из самых вдохновляющих и влиятельных программ за всю историю компьютерной техники.


Что было до UNIX: Эпоха Динозавров

Для Томпсона и Ритчи дверь закрылась в марте 1969 года, когда их работодатель, American Telephone & Telegraph Co. (AT&T), вышел из совместного с Массачусетским Институтом Технологий (MIT) и General Electric проекта по созданию интерактивных систем с разделением времени под названием Multics. Метод разделения времени (time-sharing), позволяющий нескольким людям использовать один компьютер одновременно, был изобретен всего десять лет назад и использовался в системе Compatible Timesharing System (CTSS).

Совместимая система с разделением времени, Compatible Timesharing System (CTSS), была одной из первых операционных систем такого типа. Разработанная в Вычислительном центре MIT командой, возглавляемой Fernando J. Corbató, система была продемонстрирована в 1961 на компьютере IBM 709. Усовершенствованная система CTSS запускалась на машине IBM 7094 и позволяла обслуживать до 30 пользователей одновременно через модемы.

Есть сохранившееся видео тех времён, где Fernando J. Corbató доступно объясняет принцип работы системы с разделением времени: https://youtu.be/Q07PhW5sCEk

Multics объединяла режим разделения времени с другими техническими достижениями той эпохи, позволяя соединяться с компьютером через удалённые терминалы для чтения почты, редактирования документов, запуска вычислений, и много другого. Это должно было стать огромным шагом вперёд по сравнению с тем, как компьютеры использовались ранее. А до этого была утомительная подготовка и ввод пакетных заданий на перфокартах, запускаемых последовательно одно за другим.

Компания AT&T более пяти лет инвестировала миллионы долларов в проект Multics, закупая мэйнфрэймы GE-645 и координируя усилия многих ведущих исследователей в Bell Telephone Laboratories (Bell Labs), в том числе Ken Thompson, Dennis Ritchie, Joseph F. Ossanna, Stuart Feldman, M. Douglas McIlroy, и Robert Morris. Но новая операционная система была слишком амбициозна, и оттого её разработка серьёзно отставала от графика. В конце концов, корпоративные слизняки из AT&T решили ударить по тапкам и выйти из проекта.

После этого менеджеры Bell Labs сильно охладели к проекту разработки Multics. Такой поворот событий не мог не огорчать многих исследователей. Хотя операционная система Multics не достигла многих своих целей, она, по воспоминаниям Ритчи, предоставляла "удобный интерактивный сервис для вычисления, хорошую среду разработки, и систему, вокруг которой могло бы образоваться сообщество". Но беда пришла, и её совсем не ждали.

Справедливости ради, нужно отметить, что Multics ещё долгое время служила верой и правдой в разных академических и оборонных учреждениях. Некоторые машины с Multics составили части ARPAnet - то, что мы сейчас знаем как Internet, а тогда серьёзная сеть суровых американских вояк на случай ядерной войны. MIT's Multics был одним из первых сайтов в той сети.

Огорчённые этим событием, исследователи вернулись к использованию старой пакетной системы. В этот неблагоприятный момент, когда руководство было категорически против новых идей, казалось безрассудным продолжать разработку компьютерных операционных систем. Но это именно то, что Томпсон, Ритчи, и многие из их коллег по Bell Labs, отважились сделать. Теперь, 40 лет спустя, нам стоит поблагодарить этих исследователей за то, что они проигнорировали своих шефов и продолжили своё любимое дело, подарившее миру UNIX - одну из величайших компьютерных операционных систем всех времён и народов.

Томпсон, Ритчи, и Rudd Canaday из Bell Labs, начали делать наброски дизайна для файловой системы. Томпсон написал основы новой операционной системы для мэйнфрейма GE-645, установленного в лаборатории. Но конец проекта Multics означал и конец GE-645. Томпсон понял, что дальнейшее программирование под GE-645 это путь в никуда.


С чего начался UNIX...

После кончины Multics в 1969 году, Томпсон потратил часть своего времени на создание компьютерной игры под названием Космические путешествия, которая моделировала все крупные тела в Солнечной системе. Игроку требовалось провести космический корабль вокруг них, пытаясь приземлиться на планеты.

Игра, написанная для GE-645, была неуклюжа и очень дорогостояща - поиграть стоило примерно 75 долларов, потому как процессорное время стоило недёшево. Бродя по лаборатории, Томпсон наткнулся на PDP-7, мини-компьютер, созданный корпорацией Digital Equipment, и купленный его коллегами по Bell Labs.

PDP-7 выгодно отличался прекрасным видеовыводом, так что Томпсон переписал игрушку Космические путешествия для работы на PDP-7.

Это было куда сложнее, чем может показаться на первый взгляд. Так как отцы UNIX презирали всё существующее программное обеспечение, они должны были реализовать арифметику с плавающей точкой и полную спецификацию графических символов для подсистемы отображения и отладки, которые непрерывно отображают содержимое положений игрушечного корабля в углу экрана. Все это было написано на ассемблере, и запускалось на компьютере GECOS, выдавая бумажные ленты для PDP-7.

После этого небольшого упражнения в программировании, произошло ещё одно событие: летом 1969 года жена Томпсона, Бонни, уехала к родителям, чтобы показать их новорожденного сына. Кен Томпсон решил воспользоваться своим временным холостяцким положением и написал за это время отличный код, который потом превратится в Unix для заброшенного мини-компьютера PDP-7.

Название Unix связана с шуткой одного из коллег Томпсона: новая операционная система поддерживает только одного пользователя (собственно, Томпсона), и он рассматривал её как выхолощенную версию Multics - потому и нарёк новую операционную систему "Un-multiplexed Information and Computing Service". Это название позже превратилось в Unix.

Всё это непотребство творилось за спиной начальства, которое ничего не подозревало об этих игрищах.

Изначально Томпсон использовал GE-645 для создания и компиляции программного обеспечения, который он затем загружал на PDP-7. Вскоре Томпсон начал разработку файловой системы и пользовательских утилит: копирование, печать, удаление, правка файлов и, естественно, командный интерпретатор. Все программы писались на компьютере GECOS и переносились на PDP-7 на бумажной ленте. Как только Ассемблер на PDP-7 заработал к концу 1969 года, Томпсон был в состоянии писать код операционной системы собственно на самом PDP-7. Это был шаг в правильном направлении. Однако Томпсон и другие исследователи знали, что миникомпьютер PDP-7 уже был устаревшей моделью, как знали они и то, что руководство лаборатории не собиралось больше разрешать исследований по операционным системам.


Подпольная разработка UNIX и первые успехи

Так что Томпсону и Ритчи нужно было проявить изобретательность, которую они блестяще продемонстрировали: в заявке они попросили начальство купить одну из новых мини-ЭВМ DEC, а именно PDP-11. Запрос был сформулирован в очень кучерявых терминах: они написали, что целью является создание инструментов для редактирования и форматирования текста (то, что мы сейчас назвали бы текстовый процессор). Тот факт, что они также должны были написать операционную систему для новой машины, чтобы запускать текстовый редактор, был всего лишь сноской.

Менеджмент клюнул на приманку, и заказ на PDP-11 был размещён в мае 1970 года. Хотя сам компьютер доставлен быстро, носители данных для него привезли лишь через полгода. В этом время, Томпсон, Ритчи и другие продолжали разрабатывать Unix на PDP-7. После установки носителей данных в PDP-11, исследователи перенесли свою навороченную операционную систему на новую машину. Затем они перетащили туда текстовый редактор roff.

Первыми ходовыми испытаниями для Unix стал патентный отдел AT&T, где машинистки стали использовать Unix для набора, редактирования и оформления патентов. И это был успех! Патентное ведомство с удовольствием приняло новую систему, что дало исследователям достаточно авторитета, чтобы убедить руководство приобрести ещё одну машину, обновлённую и более мощную модель PDP-11, позволяющие продолжить их подпольные работы по Unix.

В первые дни Unix развивалась постоянно, так что идея выпуска именованных версий или релизов казалась неуместной. Но исследователи периодически выпускали новые издания руководства разработчика, так что ранние версии Unix назвались в честь каждого такого издания. Первое издание руководства было завершено в ноябре 1971 года.

Так что же предлагали первые версии Unix, сделавшие её столь привлекательной? Главным козырем Unix было то, что она предоставляла иерархическую файловую систему, позволявшую то, что мы сейчас принимаем как нечто само собой разумеющимся: файлы могут быть размещены в каталогах и подкаталогах.

Каждый файл мог содержать не более 64 килобайт, и его имя могло быть не длиннее шести символов. Эти ограничения, кажущиеся такими неуклюжими сейчас, в то время были более чем адекватными.

Хотя Unix якобы создавался для обработки текстов, единственным доступным редактором в 1971 году был ориентированный на строки ed. Сегодня, ed по-прежнему является текстовым редактором, гарантированно присутствующим на всех системах Unix. Помимо обработки текстов и общесистемных приложений, первая версия Unix включала такие игры, как блэкджек, шахматы и крестики-нолики. Утилиты системного администратора включали сохранение и восстановления образов дисков на магнитную ленту, утилиты чтения и записи на бумажные ленты, а также программы для создания, проверки, монтирования и размонтирования съемных дисков.

Самое замечательное заключалось в том, что система предлагала интерактивную среду, которая позволяла работать в режиме разделения времени (time-sharing). Это позволяло нескольким пользователям использовать одну машину одновременно. Были доступны различные языки программирования, в том числе BASIC, Fortran, ассемблер и язык B. Собственно, язык B является потомком BCPL (Basic Combined Programming Language, базовый комбинированный язык программирования), и в конечном итоге превратился в чрезвычайно популярный язык C, созданный Ритчи во время работы над Unix.


Влияние UNIX

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

Всё было примерно так: в течение многих лет Unix оставались лишь исследовательским проектом Bell Labs, но к 1973 году авторы Unix сочли, что система была достаточно зрелой для того, чтобы выступить с докладом о ней на конференции Ассоциации вычислительной техники (Association for Computing Machinery).

Статья была опубликована в 1974 году в трудах АСМ, и её появление принесло шквал запросов на копии программного обеспечения.

Это поставило AT&T в трудное положение. Дело в том, что в 1956 году AT&T пошло на соглашение с правительством США, по которому компании запрещалось продавать продукцию, не связанную напрямую с телефонами и телекоммуникациями, в обмен на её право монополии в междугородных телефонных услугах для всей страны. Так что Unix не мог быть продан в качестве продукта. Вместо этого AT&T выпустила исходные коды Unix под лицензией, позволяющей использовать их любому желающему по цене носителей. Важная деталь: по тому же соглашению, AT&T не могла оказывать поддержку Unix. На протяжении многих лет исследователи Bell Labs с гордостью демонстрировали это на Unix-конференциях слайдом, который гласил: "Без рекламы, без техподдержки, без багфиксов, деньги вперёд."

В отсутствии других источников техподдержки, первые пользователи Unix объединились для взаимопомощи, образуя свободную сеть групп пользователей во всем мире. У них были исходные коды, что было плюсом. Так что эти первые пользователи Unix сами исправляли ошибки, создавали новые утилиты, и улучшали систему по своему усмотрению.

Группа пользователей Usenix выступала в качестве центра по обмену программным обеспечением для Unix в США. Люди могли отправлять магнитные ленты с новым программным обеспечением или исправлениями и получать софт и исправления, которые Usenix получал от других. В Австралии, Университет Нового Южного Уэльса и Сиднейского университета, была создана более надежная версия Unix, Australian Unix Share Accounting Method, которая могла справиться с большим количеством одновременно работающих пользователей и отличалась более высокой производительностью.

К середине 1970-х годов, среда, возникшая вокруг Unix, напоминала движение Open Source, столь распространенное сегодня. Пользователи повсюду с энтузиазмом расширяли и улучшали систему, и многие из этих улучшений отправлялись обратно в Bell Labs для включения в будущие релизы. Однако с увеличением популярности Unix, стервятники из AT&T начали более пристально смотреть за тем, что пользователи делали с их системой.

Человеком, привлёкшим их внимание, был Jogn Lions, учёный, преподававший в Университете Нового Южного Уэльса в Австралии. В 1977 году он опубликовал книгу, ставшую самой известной в то время - A Commentary on the Unix Operating System, содержащую прокомментированный основной исходный код Unix.

Лицензионные условия Unix позволяли обмен исходным кодом, и изначально книга Лайонса продавалась лицензиатам Unix. Но к 1979 году адвокаты AT&T запретили распространение и использование книги в академических кругах. Сообщество Unix, будучи анти-авторитарным, отреагировало на это так, как и ожидалось: копии книги распространялись самиздатом со скоростью лесного пожара. Многие до сих пор держат почти нечитаемые фотокопии оригинальной книги тех лет.

Снующие всюду юристы AT&T стали привычным явлением, даже в Bell Labs. Например, между шестым релизом Unix в 1975 году и седьмым в 1979 году, Томпсон собрал множество важных исправлений ошибок. Он хотел исправить их для пользователей Unix, но юристы компании сочли, что это будет являться одной из форм техподдержки и запретили релиз. Тем не менее, эти исправления вскоре стали широко распространены по неофициальным каналам. Например, Lou Katz, основателю и президенту Usenix, позвонили в один прекрасный день и сказали, что если он придёт в определенное место на Mountain Avenue (где находилась Bell Labs) в 2 часа пополудни, он найдёт нечто интересное. Конечно же, Кац обнаружил магнитную ленту с исправлениями, которые быстро попали в руки бесчисленных пользователей.

К концу 1970-х годов, Unix, начавшаяся десять лет назад как бунт против потери комфортной среды программирования (Multics), росла, как сорняк, по всему научному миру и ИТ-индустрии. Unix расцвёл в начале 1980-х и достиг вершины своей популярности в начале 1990-х.

По многим причинам, Unix с тех пор уступил дорогу другим коммерческим и некоммерческим системам. Но его наследие, эта элегантная, хорошо продуманная и комфортная среда разработки программного обеспечения, продолжает жить по сей день. В знак признания достижений, Томпсон и Ритчи получили Japan Prize в начале 2011 года, увеличив коллекцию наград, которая включает National Medal of Technology and Innovation и Turing Award от Association of Computing Machinery.


UNIX жил, UNIX жив, UNIX будет жить.

Unix действительно является одной из наиболее влиятельных операционных систем, когда-либо изобретённых. Прямые потомки Unix в настоящее время исчисляются сотнями. С одной стороны родословной находятся различные коммерческие версии Unix, появившиеся на рынке в 1980-х годах после падения монополии Bell System. С другой стороны - различные Unix-подобные операционные системы, предком которых была версия Unix, разработанная в Университете Калифорнии, Беркли (University of California, Berkeley), в том числе используемая Apple - OS X. Именно Unix-подобные: разработчики Berkeley Software Distribution (BSD) Unix много работали над тем, чтобы удалить весь оригинальный код AT&T, чтобы их и основанное на нём программное обеспечение могло распространяться свободно.

Результаты этих усилий, однако, были поставлены под вопрос, когда филиал AT&T, Unix System Laboratories, подал иск против Berkeley Design Software в 1992 году за права интеллектуальной собственности на данное программное обеспечение. Университет, в свою очередь, подал встречный иск против AT&T. Последовавшая за этим судебная тяжба замедлила развитие свободных Unix-подобных систем, в том числе 386BSD, которая была разработана для Intel 386 - процессора, который использовался во многих компьютерах IBM.

Линус Торвальдс говорил, что если бы эта операционная система была доступна в то время, он вряд ли создал бы Linux. А вышло так, что Unix передал эстафету Linux в двадцать первый век, работая на самых разных устройствах: от беспроводных роутеров, телевизоров, настольных компьютеров и смартфонов Android до кластеров и суперкомпьютеров.

Хотя AT&T быстро уладили правовые споры с Berkeley Design Software и Университетом Калифорнии, юридические тяжбы на тему украденной Linux интеллектуальной собственности Unix продолжаются до сих пор. К 2004 году было подано не менее пяти крупных исков. Не далее как в августе 2011 года, компания TSG Group (ранее известная как SCO Group), проиграла в суде дело о владении авторскими правами Unix.

Судебные тяжбы по Unix - это, конечно, печально. С самого начала авторы и пользователи Unix делали всё возможное, чтобы создавать и делиться, даже если для этого требовалось бросить вызов власть предержащим. Такая самоотверженность резко контрастирует с жадностью, повлекшей последующие судебные баталии за обладание Unix.


Отдавая дань истории...

Мир компьютерного железа и программного обеспечения движется вперед поразительно быстро. Быстрый темп изменений для ИТ-специалистов, как правило, замечательная вещь. Но он приводит к тому, что мы забываем наше собственное прошлое, в том числе и важные уроки оного. Для решения этой проблемы, Warren Toomey [автор оригинального текста], в 1995 году начал почтовую рассылку по поиску старых поклонников Unix. Эта работа переросла в Сообщество Наследия Unix (Unix Heritage Society). Цель сообщества - не только сохранить историю Unix, но также собрать и сохранить эти старые системы, вернув их к жизни. С помощью многих талантливых участников общества Наследия Unix, Warren Toomey смог восстановить большую часть старого программного обеспечения Unix в рабочем состоянии, в том числе первый компилятор C, созданный Ритчи в 1972 году, и первый релиз Unix, написанный на C в 1973 году.

Долго ускользавшая от нас Чаша Грааля - первое издание Unix. Затем, в 2006 году, Al Kosso из Музея компьютерной истории в Mountain View, штат Калифорния, откопал печатную версию Unix от 1972 года, которая не только описывала внутреннюю работу Unix, но также включала полный ассемблерный код ядра. Это была удивительная находка, примерно как обнаружение первого автомобиля Ford Model T, пылящегося в углу сарая. Но мы не просто хотели полюбоваться на это издалека - мы хотели запустить первую версию Unix снова.

В 2008 году Tim Newsham, независимый программист, и я [Warren Toomey], собрали команду единомышленников-энтузиастов Unix, и решили воскресить эту древнюю систему. Работа была технически трудной и зачастую разочаровывающей, но в итоге мы создали копию первой версии Unix, и заставили её работать на эмуляторе PDP-11/20. Мы разослали сообщения, извещающие о нашем успехе всем, кому, как мы думали, это будет интересно. Томпсон, как всегда кратко, ответил: "Потрясающе". В самом деле, его детище удивительно, и я [Warren Toomey] был рад сделать всё от меня зависящее, чтобы история Unix стала более известной.


Оригинал статьи с фотографиями, видеороликами и прочей дополнительной информацией находится по адресу http://mydebianblog.blogspot.ru/2012/02/unix.html

[>] Ставим цезий на любой андроид за 5 минут
linux.14
vit01(mira, 1) — All
2015-11-18 00:43:03


Скачиваем 2 приложения, устанавливаем:

https://f-droid.org/repo/com.termux_19.apk
https://f-droid.org/repo/org.pocketworkstation.pckeyboard_1038002.apk

Ставим Hacker's Keyboard системной клавой по-умолчанию.

Запускаем termux, вводим:
apt update
apt upgrade
apt install python nano git
git clone https://github.com/spline1986/caesium
cd caesium
# правим конфиг
python caesium.py

[>] Re: Ставим цезий на любой андроид за 5 минут
linux.14
vit01(mira, 1) — vit01
2015-11-19 01:08:58


И ещё: если бы в цезии было vim-like управление, то дополнительную клавиатуру можно было бы не ставить.

А termux, как терминал, очень крут тем, что там есть интегрированные бинари apt и куча хорошего софта в репозиториях. Причём работает всё без рутов и дополнительных скачиваний.

[>] Re: Ставим цезий на любой андроид за 5 минут
linux.14
Difrex(mira, 14) — vit01
2015-11-19 14:34:57


>https://f-droid.org/repo/com.termux_19.apk
Спасибо тебе, хороший человек! Как отличная штука!

[>] Скриншотов-тред!
linux.14
Difrex(mira, 14) — All
2015-11-20 11:32:09


Собрал себе патченный i3wm -- теперь красотень ваще =)
http://storage6.static.itmages.ru/i/15/1120/h_1448019044_6416446_48a601512b.png

[>] Re: Скриншотов-тред!
linux.14
vit01(mira, 1) — Difrex
2015-11-20 11:40:17


Difrex> Собрал себе патченный i3wm -- теперь красотень ваще =)

Да, i3 хорош. А я вот до сих пор на авесоме сижу, причём не конфигурировал его очень и очень давно. Идеал достигнут =)

Кстати, недавно новая версия dwm вышла, пробовал кто?

[>] Re: Скриншотов-тред!
linux.14
Difrex(mira, 14) — vit01
2015-11-20 12:11:10


>Кстати, недавно новая версия dwm вышла, пробовал кто?
Это его надо пересобирать после правки конфига? :)

[>] Re: Скриншотов-тред!
linux.14
vit01(mira, 1) — Difrex
2015-11-20 12:15:55


Да, именно его =) Но там пересобирать-то нечего, он компилится несколько секунд.

Один из самых лучших WM, занимает меньше 100 кб в скомпилированном виде и имеет самый минимум зависимостей. При этом его вполне удобно использовать. На генте у меня стоял, как основной.

[>] ipfs
linux.14
Difrex(mira, 14) — All
2015-12-16 13:49:08


Что думаете на счет сабжа?

https://ipfs.io/

[>] Re: ipfs
linux.14
vit01(mira, 1) — Difrex
2015-12-16 14:42:46


Любопытная вещь по своей сути. Очень похожа на ii по идее и по возне с хэшами.

Однако смутило, что сабж дублирует файлы перед их раздачей. И ещё то, что разработчики планируют строить интернет и веб-приложения на такой технологии. Ведь ipfs запросто рискует зарасти мусором и устаревшими файлами в таком случае.

[>] Re: ipfs
linux.14
Andrew Lobanov(station13, 1) — Difrex
2015-12-17 04:25:39


Difrex> Что думаете на счет сабжа?
Difrex> https://ipfs.io/

Особо ничего не думаю, хотя читал про неё раньше. Знаю, что Мицгол в векторном фидонете её внедряет.

[>] Re: Скриншотов-тред!
linux.14
jmaks(station13, 12) — vit01
2016-01-15 18:56:41


Difrex>> Собрал себе патченный i3wm -- теперь красотень ваще =)
кажи давай свой i3wm...

vit01> Да, i3 хорош. А я вот до сих пор на авесоме сижу, причём не конфигурировал его очень и очень давно. Идеал достигнут =)
и ты свой осом кажи...

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

как будет дикое желание что-либо сделать, так вот и сразу займусь пожалуй

[>] Re: Скриншотов-тред!
linux.14
jmaks(station13, 12) — Difrex
2016-01-15 18:56:41


Difrex> Собрал себе патченный i3wm -- теперь красотень ваще =)
Difrex> http://storage6.static.itmages.ru/i/15/1120/h_1448019044_6416446_48a601512b.png
Все нашел ранее линк. Выглядит неплохо даже очень.

[>] Re: Ставим цезий на любой андроид за 5 минут
linux.14
jmaks(station13, 12) — vit01
2016-01-15 18:56:41


vit01> Скачиваем 2 приложения, устанавливаем:

vit01> https://f-droid.org/repo/com.termux_19.apk
vit01> https://f-droid.org/repo/org.pocketworkstation.pckeyboard_1038002.apk

@vit01, для какой версии андроида подходит termux_19 ревизии? И есть у кого
еще живой пакет если для версии <5.0?

[>] Re: Скриншотов-тред!
linux.14
vit01(alicorn-proxy, 1) — jmaks
2016-01-16 02:05:40


jmaks> и ты свой осом кажи...
В этом сообщении есть: ii://1x5khcNd0tm6zrDu6NWA

Вот этот скриншот http://ii-net.tk/screens/3.png за то время совсем не изменился.

ii-клиент теперь выглядит вот так: http://ii-net.tk/screens/5.png

[>] Re: Ставим цезий на любой андроид за 5 минут
linux.14
vit01(alicorn-proxy, 1) — jmaks
2016-01-16 02:05:40


jmaks> @vit01, для какой версии андроида подходит termux_19 ревизии? И есть у кого еще живой пакет если для версии <5.0?

Вроде бы только 5.0 и выше. Так что ошибся я с "любым" андроидом. И да, termux активно обновляется, 19 версия уже не актуальна.

[>] Re: Скриншотов-тред!
linux.14
Difrex(mira, 14) — jmaks
2016-01-18 07:16:43


>>Собрал себе патченный i3wm — теперь красотень ваще =)

>кажи давай свой i3wm...
Так тут же и ссылка на скриншот же была ii://z65LuvnvbvW70SH4TaPv

[>] Re: Немного фантазии
linux.14
Andrew Lobanov(station13, 1) — vit01
2016-01-19 04:36:36


vit01> http://ii-net.tk/ii/ii-web.php?msgid=d4AmGohAQMLs5ZzHSSrL

Надо вводить механизм форвардов и кросспостов =)

Идея забавная. Улынуло меня приятно. Правда я не люблю bossa nova jazz но такую песню бы послушал.

[>] Re: Немного фантазии
linux.14
vit01(mira, 1) — Andrew Lobanov
2016-01-19 13:42:22


Всё, тогда пора запасаться вдохновением и начать писать =)

AL> Надо вводить механизм форвардов и кросспостов =)

// А ещё можно загейтовать наши эхи. Там активность побольше будет, чем в ii://music.14

[>] mcabber
linux.14
btimofeev(station13, 13) — All
2016-02-01 19:29:48


Здесь кто-то пользуется mcabber? Установил я его попробовать, а в нем имена конференций в ростере почему-то пустые. Помогает команда "/rename -", но ее необходимо заново вводить при каждом запуске программы (притом для каждой конфы отдельно). Это у всех так или я что-то недонастроил?

[>] Re: mcabber
linux.14
Andrew Lobanov(station13, 1) — btimofeev
2016-02-02 01:54:24


btimofeev> Здесь кто-то пользуется mcabber? Установил я его попробовать, а в нем имена конференций в ростере почему-то пустые. Помогает команда "/rename -", но ее необходимо заново вводить при каждом запуске программы (притом для каждой конфы отдельно). Это у всех так или я что-то недонастроил?

Скажи дистрибутив и версию mcabber хоть. Конфиг на базе чего лепил? Я брал конфигурационный файл из архива с исходниками mcabber. Озвученной тобой проблемы вообще не наблюдал.

//А какой jabber-сервер у тебя?

[>] Re: mcabber
linux.14
btimofeev(station13, 13) — Andrew Lobanov
2016-02-02 06:26:35


AL> Скажи дистрибутив и версию mcabber хоть. Конфиг на базе чего лепил? Я брал конфигурационный файл из архива с исходниками mcabber. Озвученной тобой проблемы вообще не наблюдал.

AL> //А какой jabber-сервер у тебя?

Сервер jabber.ru. Пробовал на двух компьютерах в archlinux (mcabber 1.0.1) и debian (mcabber 0.10.2). Конфиг стандартный пример из /usr/share/mcabber/. В debian я в конфигe указал только свой jid, пароль и сервер, остальные настройки по-умолчанию. Все равно часть ростера с конференциями выглядит вот так http://i.yapx.ru/i55.png

[>] Re: mcabber
linux.14
Difrex(mira, 14) — btimofeev
2016-02-02 06:43:07


Я пытался им пользоваться и он сломал мне ростер.
Почти все люди из групп вида "Отдел безопасности", "Отдел вязания носков" переместились в группу "свалка". И это отстой полный.

Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19