Разворачивание syslog-сервера с веб-интерфейсом

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

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

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

Итак, скрипт писался и проверялся на Debian 10 «Buster», его актуальная версия находится на гитхабе, а текущую я оставлю здесь:

loganalyzer_install.sh
 
#!/bin/bash
# Syslog server with web interface for Debian 10
# LAMP + phpmyadmin + rsyslog + Log Analyzer
PHPMYADMINUSER="pma"
PHPMYADMINPASS="321"
SYSLOGDBPASSWORD="Qwerty"
PMAVER="4.9.2"
LAVERSION="4.1.7"
export LANG="en_US.UTF-8"
function check_packages {
    notinstalled=""
    if [ $# -eq 0 ]; then echo "Package name(s) required"; fi
    if [ $# -gt 0 ]; then
        for packagename in $@; do
            if [[ "" == $(dpkg-query  -W --showformat='${Status}\n' ${packagename}  2>&1 | grep "install ok") ]]; then
                notinstalled=${notinstalled}${packagename}" "
            fi
        done
    fi
    if [[ "" == ${notinstalled} ]]; then
        echo "true"
    else
        echo "${notinstalled}"
    fi
}
######## MARIA DB
function check_sql {
    if [[ "true" != $( check_packages  mariadb-server ) && "true" != $( check_packages  mysql-server) ]]; then
        echo "false"
    fi
    if  [[ "true" == $( check_packages  mariadb-server ) ]]; then echo "mariadb"; fi
    if  [[ "true" == $( check_packages  mysql-server ) ]]; then echo "mysql"; fi
}
function install_sql {
    apt -y install mariadb-server
#    mysql -uroot -e "UPDATE mysql.user SET Password=PASSWORD('${MYSQLROOTPASS}') WHERE User='root';\
#    DELETE FROM mysql.user WHERE User='';\
#    DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');\
#    DROP DATABASE test;\
#    DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%';\
#    FLUSH PRIVILEGES;"
}
######### PHP
function check_php {
    phpnotinstalled=$( check_packages php libapache2-mod-php php-mysql php-common php-cli  php-json php-gd php-opcache php-readline php-mbstring )
    if [[ "true" != ${phpnotinstalled} ]]; then
        echo "${phpnotinstalled}"
    else
        echo "true"
    fi
}
######### PHPMYADMIN
function check_phpmyadmin {
    if [[ ! -d /usr/share/phpmyadmin/ ]]; then
        echo "false"
    fi
}
function install_phpmyadmin {
IFS='' read -r -d '' SITECONFIG  <<"EOF"
Alias /phpmyadmin /usr/share/phpmyadmin
<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
    <IfModule mod_php5.c>
        <IfModule mod_mime.c>
            AddType application/x-httpd-php .php
        </IfModule>
        <FilesMatch ".+\.php$">
            SetHandler application/x-httpd-php
        </FilesMatch>
        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
        php_admin_value mbstring.func_overload 0
    </IfModule>
    <IfModule mod_php.c>
        <IfModule mod_mime.c>
            AddType application/x-httpd-php .php
        </IfModule>
        <FilesMatch ".+\.php$">
            SetHandler application/x-httpd-php
        </FilesMatch>
        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
        php_admin_value mbstring.func_overload 0
    </IfModule>
</Directory>
# Authorize for setup
<Directory /usr/share/phpmyadmin/setup>
    <IfModule mod_authz_core.c>
        <IfModule mod_authn_file.c>
            AuthType Basic
            AuthName "phpMyAdmin Setup"
            AuthUserFile /etc/phpmyadmin/htpasswd.setup
        </IfModule>
        Require valid-user
    </IfModule>
</Directory>
# Disallow web access to directories that don't need it
<Directory /usr/share/phpmyadmin/templates>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
    Require all denied
</Directory>
EOF
if [ ! -f phpMyAdmin-${PMAVER}-all-languages.tar.gz ]; then wget https://files.phpmyadmin.net/phpMyAdmin/${PMAVER}/phpMyAdmin-${PMAVER}-all-languages.tar.gz; fi
tar -xf phpMyAdmin-${PMAVER}-all-languages.tar.gz
mkdir /usr/share/phpmyadmin
cp -r phpMyAdmin-${PMAVER}-all-languages/* /usr/share/phpmyadmin
mkdir -p /var/lib/phpmyadmin/tmp
chown -R www-data:www-data /var/lib/phpmyadmin
mkdir /etc/phpmyadmin/
cp /usr/share/phpmyadmin/config.sample.inc.php  /usr/share/phpmyadmin/config.inc.php
ln -s /usr/share/phpmyadmin/config.inc.php /etc/phpmyadmin/
echo "\$cfg['TempDir'] ='/var/lib/phpmyadmin/tmp';" >> /usr/share/phpmyadmin/config.inc.php
r="\$cfg\['blowfish_secret'\] = '"
sed -i  "s/${r}/${r}$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)/g" /usr/share/phpmyadmin/config.inc.php
echo "$SITECONFIG" >  /etc/apache2/sites-available/phpmyadmin.conf
ln -s /etc/apache2/sites-available/phpmyadmin.conf /etc/apache2/sites-enabled/
service  apache2 restart
mysql -uroot -e "use mysql; CREATE USER ${PHPMYADMINUSER}@localhost IDENTIFIED BY '${PHPMYADMINPASS}'; GRANT ALL ON *.* TO ${PHPMYADMINUSER}@localhost WITH GRANT OPTION;"
service mysql restart
}
######### SYSLOG
function install_rsyslog_mysql {
debconf-set-selections << END
rsyslog-mysql      rsyslog-mysql/mysql/admin-pass      password
# MySQL application password for rsyslog-mysql:
rsyslog-mysql      rsyslog-mysql/mysql/app-pass      password ${SYSLOGDBPASSWORD}
rsyslog-mysql      rsyslog-mysql/password-confirm      password ${SYSLOGDBPASSWORD}
rsyslog-mysql      rsyslog-mysql/app-password-confirm      password ${SYSLOGDBPASSWORD}
# MySQL username for rsyslog-mysql:
rsyslog-mysql      rsyslog-mysql/db/app-user      string      rsyslog@localhost
# Back up the database for rsyslog-mysql before upgrading?
rsyslog-mysql      rsyslog-mysql/upgrade-backup      boolean      true
# Host running the MySQL server for rsyslog-mysql:
rsyslog-mysql      rsyslog-mysql/remote/newhost      string
# MySQL database name for rsyslog-mysql:
rsyslog-mysql      rsyslog-mysql/db/dbname      string      Syslog
# Reinstall database for rsyslog-mysql?
rsyslog-mysql      rsyslog-mysql/dbconfig-reinstall      boolean      false
rsyslog-mysql      rsyslog-mysql/missing-db-package-error      select      abort
rsyslog-mysql      rsyslog-mysql/remote/port      string
# Perform upgrade on database for rsyslog-mysql with dbconfig-common?
rsyslog-mysql      rsyslog-mysql/dbconfig-upgrade      boolean      true
# Host name of the MySQL database server for rsyslog-mysql:
rsyslog-mysql      rsyslog-mysql/remote/host      select      localhost
# Deconfigure database for rsyslog-mysql with dbconfig-common?
rsyslog-mysql      rsyslog-mysql/dbconfig-remove      boolean      true
# Database type to be used by rsyslog-mysql:
rsyslog-mysql      rsyslog-mysql/database-type      select      mysql
rsyslog-mysql      rsyslog-mysql/upgrade-error      select      abort
rsyslog-mysql      rsyslog-mysql/remove-error      select      abort
rsyslog-mysql      rsyslog-mysql/install-error      select      abort
rsyslog-mysql      rsyslog-mysql/passwords-do-not-match      error
rsyslog-mysql      rsyslog-mysql/internal/skip-preseed      boolean      false
# Delete the database for rsyslog-mysql?
rsyslog-mysql      rsyslog-mysql/purge      boolean      false
# Connection method for MySQL database of rsyslog-mysql:
rsyslog-mysql      rsyslog-mysql/mysql/method      select      Unix socket
rsyslog-mysql      rsyslog-mysql/mysql/admin-user      string      root
rsyslog-mysql      rsyslog-mysql/internal/reconfiguring      boolean      false
# Configure database for rsyslog-mysql with dbconfig-common?
rsyslog-mysql      rsyslog-mysql/dbconfig-install      boolean      true
END
DEBIAN_FRONTEND=noninteractive apt-get install -y rsyslog-mysql
echo "Creating /etc/rsyslog.d/enable-remote.conf"
echo "module(load=\"imudp\")" > /etc/rsyslog.d/enable-remote.conf
echo "input(type=\"imudp\" port=\"514\")" >> /etc/rsyslog.d/enable-remote.conf
echo "module(load=\"imtcp\")" >> /etc/rsyslog.d/enable-remote.conf
echo "input(type=\"imtcp\" port=\"514\")" >> /etc/rsyslog.d/enable-remote.conf
service rsyslog restart
echo "17 2     * * *     root mysql -uroot -e 'use Syslog; DELETE FROM SystemEvents WHERE ReceivedAt < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 365 DAY);'" > /etc/cron.d/rsyslog_mysql
#mysql -uroot -e "CREATE DATABASE Syslog_template;"
#mysqldump -uroot Syslog > /tmp/sql.sql
#mysql -uroot Syslog_template < /tmp/sql.sql
#mysql -uroot -e "TRUNCATE TABLE Syslog_template.SystemEvents"
}
######### LOG ANALYZER
function install_loganalyzer {
if [ ! -f loganalyzer-${LAVERSION}.tar.gz ]; then wget http://download.adiscon.com/loganalyzer/loganalyzer-${LAVERSION}.tar.gz; fi
tar -xf loganalyzer-${LAVERSION}.tar.gz
cp -r loganalyzer-${LAVERSION}/src/* /var/www/html/
rm -rf ./loganalyzer-${LAVERSION}/
rm /var/www/html/index.html
chown www-data:www-data -R /var/www/html/
#create new db for loganalyzer user and settings with rsyslog user as admin
mysql -uroot -e "create database loganalyzer; grant all privileges on loganalyzer.* to rsyslog@localhost"
#disable new version check during logon into admin panel
r="\$content\['UPDATEURL'\] = \"http://loganalyzer.adiscon.com/files/version.txt\";"
sed -i  "s|${r}|\$content\['UPDATEURL'\] = \"\";|g"  /var/www/html/include/functions_common.php
}
####
## MAIN
####
instaldebconf="false"
installmariadb="false"
installapache="false"
installphp="false"
instalphpmyadmin="false"
installrsyslog="false"
printf "Checking debconf-utils..."
check=$( check_packages debconf-utils )
if [[ $check != "true" ]]; then
    echo "......will be installed"
    instaldebconf="true"
else
    echo "......found!"
fi
printf "Checking sql..."
check=$( check_sql )
case ${check} in 
    false)
        echo "................will be installed: MariaDB"
        installmariadb="true"
        ;;
    mysql)
        echo "................MySQL found, it will be used during installation"
        ;;
    mariadb)
        echo "................MariaDB found, it will be used during installation"
        ;;
esac
printf "Checking apache..."
check=$( check_packages apache2 )
if [[ $check != "true" ]]; then
    echo ".............will be installed"
    installapache="true"
else
    echo ".............found!"
fi
printf "Checking php..."
check=$( check_php )
if [[ $check != "true" ]]; then
    echo "................will be installed: ${check}"
    installphp="true"
    phptoinstall=${check}
else
    echo "................found!"
fi
printf "Checking rsyslog-mysql..."
check=$( check_packages rsyslog-mysql )
if [[ $check != "true" ]]; then
    echo "......will be installed"
    installrsyslog="true"
else
    echo "......found!"
fi
printf "Checking phpmyadmin..."
check=$( check_phpmyadmin )
if [[ $check == "false" ]]; then
    echo ".........not found in /usr/share/phpmyadmin/"
    echo
    while true; do
        read -p "Do you wish to install phpmyadmin? (y/n): " yn
        case $yn in
            [Yy] ) instalphpmyadmin="true"; break;;
            [Nn] ) break;;
            * ) echo "Please answer [y]es or [n]o.";;
        esac
    done
else
    echo ".........found!"
fi
echo
echo "This file(s) should be downloaded:"
if [[ ${instalphpmyadmin} != "false" ]]; then echo "https://files.phpmyadmin.net/phpMyAdmin/${PMAVER}/phpMyAdmin-${PMAVER}-all-languages.tar.gz" ; fi
echo "http://download.adiscon.com/loganalyzer/loganalyzer-${LAVERSION}.tar.gz"
echo "You can place this file(s) into current directory manually if you have not an Internet connection."
echo "Debian repository must be accessible!"
echo
read -p "Ok, let's do it. Press ENTER to install, CTRL-C - to abort."
# INSTALL
apt update
if [[ ${instaldebconf} != "false" ]]; then apt -y install debconf-utils ; fi
if [[ ${installmariadb} != "false" ]]; then install_sql ; fi
if [[ ${installapache} != "false" ]]; then apt -y install apache2 ; fi
if [[ ${installphp} != "false" ]]; then  apt -y install ${phptoinstall} ; fi
if [[ ${installrsyslog} != "false" ]]; then  install_rsyslog_mysql  ; fi
installrsyslog
if [[ ${instalphpmyadmin} != "false" ]]; then install_phpmyadmin ; fi
install_loganalyzer
serverip=$(ip addr show | grep -o "inet [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" | grep -o "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" | grep -v "^127.0.0.1" | head -n 1)
echo
echo
echo Installation complete
echo
if [[ ${instalphpmyadmin} != "false" ]]; then 
    echo "phpmyadmin address: http://${serverip}/phpmyadmin"
    echo "             login:${PHPMYADMINUSER}"
    echo "          password:${PHPMYADMINPASS}"
    echo
fi
echo "Open IP address of this server in web-browser (http://${serverip}/)"
echo and use next settings for wizard:
echo
echo "User Database Options (optional)"
echo "Enable User Database: Yes"
echo "       Database User: rsyslog"
echo "   Database Password: ${SYSLOGDBPASSWORD}"
echo
echo "First Syslog Source"
echo "                        Source Type: MYSQL Native"
echo "     Database Name (case-sensitive): Syslog"
echo "Database Tablename (case-sensitive): SystemEvents"
echo "                      Database User: rsyslog"
echo "                  Database Password: ${SYSLOGDBPASSWORD}"
echo "                Enable Row Counting: No"

 

Лучше всего использовать его на свежеустановленном дебиане в минимальной конфигурации. Перед запуском нужно его отредактировать, изменив пароль для создаваемого в процессе пользователя (базы данных) rsyslog, а также логин и пароль дополнительного администратора БД, который будет создан в случае установки (опциональной) PhpMyAdmin.  Всего скрипт установит:

  1. mariadb в качестве сервера баз данных,
  2. rsyslog с коннектором rsyslog-mysql в качестве сислог сервера, и создаст конфиг для приема логов по сети
  3. веб-сервер apache
  4. опционально phpmyadmin для управления базой данных
  5. LogAnalyzer.

После завершения работы скрипта останется пройти мастера настройки LogAnalyzer, перейдя в браузере по адресу вашего сервера. Так что если вы решите его использовать, то можете листать к разделу «Настройка LogAnalyzer», а также посмотреть наглядное видео:

Настройка сервера syslog с веб-интерфейсом и хранением логов в базе данных (на Debian 10 «buster»)

Установка debian

Для наших целей подойдет установленный в минимальной конфигурации дебиан. Идеально сразу при установке поставить LAMP-набор, отметив опцию web server

Но можно обойтись пунктом standard system utilities, а все остальное установить самостоятельно. Я буду исходить из этого варианта.

Установка базы данных MariaDB

 
 
apt update && apt -y install mariadb-server

Установка веб-сервера apache

 
 
apt -y install apache2

Установка необходимых модулей PHP

 
 
apt -y install php libapache2-mod-php php-mysql php-common php-cli php-json php-gd php-opcache php-readline php-mbstring

Установка rsyslog

 
 
apt -y rsyslog-mysql

В процессе установки соглашаемся сконфигурировать базу данных

Придумываем и подтверждаем пароль для пользователя «rsyslog» БД

После того как сислог будет установлен, его нужно сконфигурировать так, чтобы он мог принимать события с сетевого оборудования. Создаем файл /etc/rsyslog.d/enable-remote.conf с таким содержанием:

/etc/rsyslog.d/enable-remote.conf
 
  1. module(load="imudp")
  2. input(type="imudp" port="514")
  3. module(load="imtcp")
  4. input(type="imtcp" port="514")

И перезагружаем сервис

 
 
service rsyslog restart

Установка веб-интерфейса (LogAnalyzer)

Скачиваем и распаковываем файлы в директорию веб-сервера:

 
 
wget http://download.adiscon.com/loganalyzer/loganalyzer-4.1.7.tar.gz
tar -xvf loganalyzer-4.1.7.tar.gz
rm loganalyzer-4.1.7.tar.gz
cp -r loganalyzer-4.1.7/src/* /var/www/html/
rm /var/www/html/index.html
chown www-data:www-data -R /var/www/html/

Перед тем как перейти мастеру настройки, создадим еще одну одну базу, в которой лог аналайзер будет хранить свои настройки, и дадим пользователю rsyslog полные права на нее

 
 
mysql -uroot -e "create database loganalyzer; grant all privileges on loganalyzer.* to rsyslog@localhost"

Настройка LogAnalyzer

Теперь к мастеру. Перейдя в браузере по адресу сервера мы должны увидеть его приглашение создать конфиг

Первые два шага пропускаем, интересное  начинается с третьего. Здесь нужно выбрать Enable User Database и ввести имя пользователя (rsyslog)  и пароль с которыми будет производиться подключение к созданной нами базе «loganalyzer». Остальные настройки можно оставить по умолчанию.

На шестом шаге создаем внутреннего администратора лог аналайзера

На следующем шаге выбираем источник данных — базу rsyslog\’а. Важные пункты, которые будет нужно здесь изменить:

  1. Source Type — MYSQL Native
  2. Database Name — Syslog (была создана при установке rsyslog-mysql)
  3. Database Tablename — SystemEvents (именно так — с большими буквами, а не как по дефолту)
  4. Database User — rsyslog
  5. Database Password — пароль юзера rsyslog
  6. Enable Row Counting — No (при объеме логов в несколько гигабайт этот подсчет приводит к более чем минутным запросам к БД)

Next, Finish и перед нами интерфейс лог аналайзера

Тюнинг

Теперь остается сделать две довольно важные вещи.

Во-первых, при попытке логина в админку, лог аналайзер пытается проверить свое собственное обновление, и это приводит к длительному ожиданию, если сервер не имеет выхода в интернет. Чтобы этого не происходило — нужно отредактировать файл /var/www/html/include/functions_common.php, изменив строку

 
 
$content['UPDATEURL'] = "http://loganalyzer.adiscon.com/files/version.txt";

на

 
 
$content['UPDATEURL'] = "";

Второе, и не менее важное. Со временем база сислога будет опухать, поэтому ее стоит периодически очищать от старых записей. Для этого нужно создать файлик /etc/cron.d/rsyslog_mysql с содержимым

 
 
23 2     * * *     root mysql -uroot -e 'use Syslog; DELETE FROM SystemEvents WHERE ReceivedAt < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 365 DAY);'

С ним каждый день из базы будут удаляться записи старше 365 дней (разумеется это количество можно поправить на необходимое)

 

Почему российская локализация фильмов сосет

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

Если вкратце: один из пунктов, который относится непосредственно к озвучке, и который меня неимоверно раздражает — особая стилистика озвучания, выраженная в каком-то… как бы выразиться… голосе-в-вакууме. Голоса в нашей озвучке очень часто звучат именно так — словно текст произносится в вакууме, отрезанном от окружающего мира. Словно актер озвучания находится в комнате увешанной коврами. И это, может быть, хорошо для записи голоса, но когда это в таком виде втыкают в итоговую звуковую дорогу, то начинает казаться, что все окружение вокруг персонажей — иллюзия, а они вещают из гробовой тишины космоса. И в сочетании с тембрами голосов это напрочь убивает и погружает в сон спустя полчаса просмотра фильма.

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

Оригинал (с 1:18):

Локализация:

vSphere Launch Remote Console — сменить Workstation на Player в Linux

После переустановки VMware Workstation возникла проблема — ссылка «Launch Remote Console» в web-интерфейсе vSphere стала открываться при помощи основного Workstation вместо более легкого и не требующего аутентификации Player-приложения. Чинится в линуксе очень просто:

 
 
xdg-mime default vmware-player.desktop  x-scheme-handler/vmrc

 

Не проверял, но по идее аналогично можно переключить на непосредственно VMware Remote Console, поставив название его ярлыка вместо «vmware-player.desktop» (ярлыки искать в /usr/local/share/applications/)

Было ли на самом деле обещано построить коммунизм к 1980-му году?

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

Что ж, пришлось порыться в «Правде» за 61-й год, чтобы выяснить, что верны оба мнения.

В номере 211 от 30-го июля, на странице 9, опубликованный проект программы партии заканчивается словами:

Аналогично выглядит конец опубликованной резолюции съезда компартии — номер 306 от 1-го ноября, страница 4:

Это единственное упоминание сроков в каком бы то ни было виде, и таким образом в официальных документах, по крайней мере этих двух, действительно нет конкретных дат. Однако, в номере 293 от 19го октября опубликован доклад Хрущева «О программе коммунистической партии советского союза». На третьей странице (вторая колонка, 4-й абзац) приводятся сроки реализации обсуждаемой программы:

Вот из этого срока в 20 лет, вероятно, и взялось убеждение что в 80-м году (на самом деле в 81-м) будет построен коммунизм (на самом деле: построено «в основном коммунистическое общество»).

  • Правда, 1961 , № 211 (pdf) — Газета Правда. Программа коммунистической партии советского союза
  • Правда, 1961 , № 293 (pdf) — Газета Правда. О программе коммунистической партии советского союза — доклад товарища Хрущева на XXII съезде коммунистической партии советского союза 18 октября 1961 года
  • Правда, 1961 , № 306 (pdf) — Газета Правда. Резолюция XXII съезда коммунистической партии советского союза по отчету центрального комитета КПСС

Девятая планета — интервью с Батыгиным и комментарий астронома

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

Вересаев, «Записки врача» — окно в дореволюционную Россию

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

Какое же старое произведение!  Именно при таком прочтении ощущается эта старость — романъ «Борьба мiровъ»… круть!

Так вот, «Записки врача» — это не только автобиографические заметки и мысли Вересаева о состоянии медицины на пороге веков, но и в принципе — весьма увлекательное окно в ту эпоху, так как нельзя говорить о медицине, не упоминая условий жизни пациентов. Хотя и о медицине Вересаев рассказывает увлекательно, поднимая довольно неочевидные, на первый взгляд, проблемы — часто морально-этического характера. Делает это он сквозь призму своих собственных ощущений от работы, которые у него менялись с течением времени.

Странно читать о плацебо — таком, вроде бы, современном и «на слуху» термине — в книге столетней давности.

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

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

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

А добавить к этому недоверие пациентов, вызванное не 100% гарантированным исцелением? Усугубляющим это недоверие появлением массы новых непроверенных лекарств, рекламой в газетах обещающих верное исцеление. Да и сами газетчики, ради громких заголовков высмеивающие врачей медицину в принципе — также упомянуты. И, конечно, проблема денег — медицине еще далеко до госфинансирования, и врачу самому нужно как-то зарабатывать. Здесь Вересаев  снова рассматривает и морально-этические вопросы, вроде «брать деньги с человека которому не смог помочь, или голодать?», и упоминает тяжелое положение медицины в деревнях, где нет пациентов, которые могли бы прокормить врача

 

В общем отличная книга — я остался крайне доволен возможностью немного ознакомиться с этим, так сказать, слоем жизни столетней давности. Какие-то вещи сейчас кажутся почти дикими, какие-то — на удивление почти не изменились, и это рождает ощущение связанности эпох. Обычно кажется что «тогда» — это какое-то очень далекое прошлое, в котором жили какие-то совсем другие люди, которые совершенно никак не относятся ни к нам, ни к нашей жизни сейчас. А читаешь такую книгу, и понимаешь что все те люди и их жизнь — не какой-то прям миф, а что-то буквально вчерашнее, с чем есть куча точек соприкосновения. Рекомендую.

Хорошо забытое старое?

«Столица идет в авангарде повышения уровня жизни». На «России 24» рассказали о достоинствах 11-метровых квартир

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

Ох щи… Да это же…

Дома хрущёвской постройки (разговорное «хрущёвки») — советские типовые панельные или кирпичные жилые дома, обычно 5-этажные, с малогабаритными квартирами.

С началом строительства хрущёвок советское домостроение стало преимущественно индустриальным. Хрущёвки в сравнении со сталинками, возводившимися только из кирпича, имели квартиры меньших размеров, архитектура домов была предельно проста и функциональна. (с) вики

Интересно, качество этих построек будет тоже аналогичным? Лет на 20, а там будь что будет.

В Нью-Йорке запретили фуа-гра

Читаю новость:

Законодатели обосновали запрет на фуа-гра тем, что производство деликатеса зачастую предполагает жестокое обращение с птицами: они подвергаются принудительному кормлению через трубку в горле, из-за чего их печень увеличивается до 10 раз. (c) meduza.io

Странная хреновина. Где проходит граница между жестоким обращением путем принудительного кормления, и жестоким обращением путем забоя животных в принципе? Почему закармливать — жестоко, а убивать буренку чтобы сожрать — норм? Можно же и просто забойных животных содержать так, что захочется воскликнуть: «Это же жестоко!», но все эти разговоры о жестокости базируются не на каких-то объективных параметрах, не на мнении животных, а тупо на каких-то субъективных оценках какой-то части общества, которая решает что сегодня жестоко, а что — нет. А при таких раскладах завтра можно будет сказать что разводить скот для жратвы и меха — жестоко и надо запретить. Но если это бред, то чем менее бредово запрещать фуа-гра?

Аладдин / Aladdin (2019)

Чтоооож-ж-ж…. Только что посмотрел очередной римейк от диснея. И, пожалуй, придется признать, что стоило мне больше верить в Гая Ричи. Понравилось =) Постараюсь без спойлеров.

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

Конечно, любые нововведения могут быть удачными и неудачными, оправданными и не очень, так что будет справедливо сказать о том — что же не удалось. На мой взгляд, в фильме есть только один… скажем так косячок, который довольно незначителен на самом деле, но при этом, что забавно, таки связан с курсом на феминизацию. Речь про первое желание Джаффара, который, в отличие от мультфильма, здесь желает стать султаном Аграбы. Сама реализация этого желания джинном — совершенно странная и непонятная, сводящаяся к переодеванию Джаффара в новые шмотки — приводит к конфронтации с начальником стражи, и именно развязка этой конфронтации — явно та сцена, ради которой вообще все затевалось, все чтобы принцесса вышла и толкнула речь. И проблема здесь, как ни странно, не в финале этой сцены, не в феминизации, ни в том что Жасмин хочет быть сильной и независимой более чем в мультфильме — нет! Проблема именно в сцене «я хочу быть султаном», в том, что такое желание, будучи исполнено правильно и логично, не привело бы к такой развязке. На мой взгляд.

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

По касту. Многие ругают Джаффара, мол молодой, не сильно уж страшный… Ну, не могу как-то однозначно выразить свое отношение к этому персонажу. Думаю, в основном, его ругают все же за непохожесть на оригинальный образ. Но здесь и султан сильно отличается от мультяшного, и отношения между персонажами подаются немного в другом, более «реалистичном» ключе. Возможно, местному Джаффару не помешало бы быть постарше, но, с другой стороны, его амбиции, как мне показалось, вполне подходят человеку его возраста. Здесь он тоже бывший бедняк, и понятно его желание стать «номером один» в расцвете своих сил. Что до Аладдина и Жасмин — они… довольно приятные для мьюзикла, я бы так сказал. На мой взгляд обоим им не хватает харизмы, чтобы их образы врезались в память, и их поведение, особенно Аладдина, здесь менее яркое. Это опять же идет на пользу сюжету — Аладдин не такой энергичный и уверенный в себе пройдоха, каким был в мультфильме, здесь у него больше препятствий на пути к Жасмин, новые проблемы — новые решения, наблюдать за этим интересно. Но тот яркий образ из оригинала новому вряд ли удастся переплюнуть. Что же касается Жасмин — она здесь, пожалуй, более умная и сообразительная, чем в оригинале, и ее желания, я бы сказал, слегка переоформлены. Не радикально отличаются от «достал дворец, хочу сама чего-то решать», но тем не менее мне показалось что ее новый образ слегка недожат. Ее амбиции все ж таки требуют какой-то основы, предъявляют повышенные требования к личности и, может быть, тут бы стоило поработать чуть получше. А может быть и так сойдет — честно говоря какого-то дикого возмущения во время просмотра у меня не было, да и сама Жасмин показана не просто мечтающей о чем-то там принцессой, которая нифига не знает, не умеет, и целыми днями только и занята что своей большой кисой и забегами по рынку.

В общем, к актерам у меня больших претензий нет. Из Уилла Смита — со многими тут согласен — вышел очень добротный джинн. Спецэффекты — хороши для размашистого театрального действа, коим фильм по-моему и является. Сюжет — базируется на старой истории, но при этом достаточно сильно отличается, то там то тут, чтобы не заскучать и не начать от скуки сравнивать сцены покадрово. Лучше ли этот фильм, чем оригинальный мульт? Хрен знает как их сравнивать — все равно что пытаться сравнить фильм и спектакль, или мультфильм и книгу. И там и тут есть однозначно хорошие моменты, оба произведения вызывали у меня приятные, но при этом совершенно разные ощущения. На мой взгляд новый Аладдин достоин просмотра ничуть не менее Аладдина старого, но его способность понравиться, как мне кажется, во многом будет зависеть как от ожиданий смотрящего, так и от правильного восприятия жанра этого произведения. Я же поставлю 8 из 10.