Без темы...

Творчество, творчество...
Без музы - не хочется.
Ваше высочество,
Теплая ночь -
Вроде зима уже,
И снега хочется,
А его все нету,
Ешкина мать...
Пива стакан,
Сигаретная пачка,
Да, истукан.
И пельмени еще...
Бляха!
Хочется.
Ночью.
Творчества?
А может снега?
А может спать?..
А может сурком,
Непробудным
До вечера,
Завтра продрыхнуть?
Или все же встать?
Скажем, к обеду?
А может к полднику?
А может быть ну его на фиг?
Как знать?
И тишина...
С балкона зодчество
Столичное видится.
Благодать...
Пиво выпито,
Все искурено.
Тишина первозданная.
...
Пойду-ка спать...


Web Audio Player with Audio Visualizer

Вотъ.
Понадобилось тут для одного моего сайта встроенный мини веб аудио плеер сделать.
Простенький.
Ну я так не умею.
Добавил Audio Visualizer.
А пусть тоже будет ;)

Гармоника рисуется на канве (canvas).



var IS_RADIO = false;

var analyzer;
var canvas;
var ctx;
var audio;
var source;
var audioContext;


audio = document.getElementById("player");
audio.volume = 0.1;
audio.addEventListener('ended', AudioEnded, false);
audio.addEventListener('playing', AudioPlaying, false);
audio.crossOrigin="anonymous";


audioContext = new AudioContext();
source = audioContext.createMediaElementSource(audio);


function av() {
 canvas = document.getElementById('canvas');
 canvas.width = window.innerWidth;
 canvas.height = 250; //window.innerHeight;
 ctx = canvas.getContext('2d');

 analyzer = audioContext.createAnalyser();
 analyzer.fftSize = 4096; //2048;
 source.connect(analyzer);
 analyzer.connect(audioContext.destination);
 draw();
};

function draw() {
 requestAnimationFrame(draw);
 var spectrum = new Uint8Array(analyzer.frequencyBinCount);
 analyzer.getByteFrequencyData(spectrum);
 ctx.clearRect(0,0,canvas.width, canvas.height);
 var prev = {
      x: 0,
      y: 0
    };
 var w = 20;
 ctx.beginPath();
 ctx.moveTo(0, canvas.height);
 ctx.lineTo(0,canvas.height - spectrum[0]);

 for(var i = 0; i < spectrum.length; i += w) {
   var curr = {
      x: i,
      y: canvas.height - spectrum[i]
   };
   
   var next = {
      x: i + w,
      y: canvas.height - spectrum[i + w]
   };
   
   var xc = (curr.x + next.x) / 2;
   var yc = (curr.y + next.y) / 2;
   ctx.quadraticCurveTo(curr.x, curr.y, xc, yc);
   
   prev = {
      x: curr.x,
      y: curr.y
   };
   
 };
 
 ctx.quadraticCurveTo(prev.x, prev.y, canvas.width, canvas.height);
 ctx.fillStyle = '#212121';
 ctx.closePath();  
 ctx.shadowColor = 'rgba(0,0,0,.2)';
 ctx.shadowBlur = 20;
 ctx.shadowOffsetX = 2;
 ctx.shadowOffsetY = -5;
 ctx.fill();
};

function AudioEnded() {
 if (IS_RADIO) {
  NewRSrc();
 } else {
  NewSrc();
 }
}
function AudioPlaying() {
 av();
}
// Запрос URL для нового встроенного в сайт трека
function NewSrc() {
 $.ajax({
  url: "/get.php?newmp3=1",
  cache: false,
  success: function(doc) {
    IS_RADIO = false;
    audio.src = doc;
    audio.load();
    audio.play();
    $("#rt").html('');
    $("#mt").html('');
    delete doc;
  }
 });
}
// Запрос URL для новой радиостанции
function NewRSrc() {
 $.ajax({
  url: "/get.php?newrt=1",
  cache: false,
  success: function(doc) {
    IS_RADIO = true;
    var res = JSON.parse(doc);
    audio.src = res.src;
    audio.load();
    audio.play();
    $("#rt").html(' ' + res.name);
    $("#mt").html('');
    delete doc;
  }
 });
}




Что из этого вышло:


Согласитесь - ничего сложного ;)

Эгоизм заложен в нас эволюцией

Как и зачем эволюция сделала нас эгоистами? Почему люди так много думают о себе и действуют в своих интересах? Отвечает наука!

Отрывок из книги Андрея Курпатова "Быть эгоистом"

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

Представьте себе такую картину. Милую шим­панзе посадили в клетку, а напротив по­ставили два ящика. В один из ящиков на глазах у шимпанзе клали банан, а другой оставляли пустым. Дальше в процессе эксперимента к ящикам подходил человек и открывал тот ящик, на который ему показывала обезьяна. Если в нём был банан, то этот человек благородно отдавал его мартышке, если же она показывала на пустой ящик, то, соответственно, оставалась без банана.

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

Read more...Collapse )

***

Мне известно, что было в этом.
Но не знаю, что будет в новом,
Здесь - оставь свои гадости.
В новом - не лишайся святости.
И быть может тогда от крайности
До желанной дойдём бескрайности.
Осмотрите свои окрестности -
Все границы от нашей робости.
Не лишай себя светлой радости,
Не глуши в себе муки совести,
Раздели с другим его сладости,
Преломи и чужие горести.
Разгляди в суете праздности
Чудеса и иные странности...

(с) 2018

С наступающим Новым годом!

Парадокс парадоксов

Мир учёных — странный мир. Как и сами учёные. Порой, в этом мире рождаются парадоксы, каких свет раньше не видел. Но ниже речь пойдёт не только о парадоксах, но и том... собственно читайте и сами поймёте о чём. Возможно, поймёте ;)


Парадокс Тахионного убийства (Ричард Мюллер, профессор Калифорнийского университета в Беркли).


Read more...Collapse )

Python #3.0 yt_dl.py

Итак, в первом приближении, вот такой скрипт получается.



Для чего этот скрипт?
Скрипт предназначен для облегчения загрузки видео с очень большого количества известных сайтов, таких, как youtube, vimeo, vk, facebook.com и т.п.
Загрузка возможна, как отдельных видео файлов, так и видео плейлистов.
В некоторых случаях поддерживается загрузка потоков трансляции (прямых эфиров).
Кроме того, возможна загрузка обложек, описаний, субтитров.
Скрипт так же позволяет извлекать из видео только аудиодорожки и сохранять их в аудиофайлах.

Скрипт, по сути своей, это простая обёртка для youtube-dl и ffmpeg.
Чтобы упростить пользователю работу с этим программным обеспечением, я и создал этот скрипт, сократив набор возможных параметров до минимума. Скрипт объединяет в себе возможности упомянутых ранее программных средств.


Для работы скрипта необходим Python версии 3.6 или выше, ffmpeg и ряд зависимостей.

Python брать здесь: https://www.python.org/downloads/release/python-371/
Для 64-битных Windows: https://www.python.org/ftp/python/3.7.1/python-3.7.1-amd64.exe
Для 32-битных Windows: https://www.python.org/ftp/python/3.7.1/python-3.7.1.exe

Для Linux Python 3 обычно установлен уже по-умолчанию. Если нет, то ставим примерно так (для разных версий Linix существует множество способов установки):
# Ubuntu:
$ sudo apt update
$ sudo apt -y upgrade
$ sudo apt install -y python3.7
$ sudo apt install -y python3-pip

# CentOS 6: https://www.2daygeek.com/3-methods-to-install-latest-python3-package-on-centos-6-system/
$ sudo yum install -y epel-release
$ sudo yum --disablerepo="*" --enablerepo="epel" -y install python37
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ /usr/bin/python3.7 get-pip.py

# CentOS 7
$ sudo yum install -y epel-release
$ sudo yum -y upgrade
$ sudo yum install -y python37
$ sudo yum install -y python37-pip

# Fedora
$ sudo dnf -y upgrade
$ sudo dnf install python37
$ sudo dnf install -y python37-pip

# Manjaro 
$ sudo pacman -S python
# или
$ yaourt -S python

# Установка зависимостей (модулей Python)
$ pip3 -m user install package_name







Для Mac OS X: https://www.python.org/ftp/python/3.7.2/python-3.7.2rc1-macosx10.9.pkg

FFMPEG: https://ffmpeg.zeranoe.com/builds/


Для 64-битных Windows: https://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-20181215-011c911-win64-static.zip
Для 32-битных Windows: https://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-20181215-011c911-win32-static.zip

После установки ffmpeg, необходимо добавить путь до ffmpeg.exe в переменную PATH системного окружения.
Как это сделать, смотрим здесь:
https://github.com/adaptlearning/adapt_authoring/wiki/Installing-FFmpeg
Ну или тыканием так:


Mac OS X: https://ffmpeg.zeranoe.com/builds/macos64/static/ffmpeg-20181215-011c911-macos64-static.zip

Для Linux:
# Для Ubuntu:
$ sudo add-apt-repository ppa:mc3man/trusty-media
$ sudo apt update && sudo apt upgrade
$ sudo apt install ffmpeg

# Для RHEL/CentOS/Fedora:
# FFmpeg уже включён в официальные репозитории RPM в таких дистрибутивах, как RHEL, Fedora и CentOS.
# В некоторых случаях, понадобится подключить дополнительный репозиторий или EPEL или RPMFusion.

# Для RHEL 6.x/CentOS 6.x:
$ sudo yum install epel-release
$ sudo yum install ffmpeg ffmpeg-devel

# Для RHEL 7.x/CentOS 7.x/Fedora 22 и новее:
# Прежде добавьте репозиторий EPEL или RPMFusion.
$ sudo dnf install ffmpeg ffmpeg-devel

# Для Arch/Manjaro:
$ sudo pacman -S ffmpeg
# или
$ yaourt -S ffmpeg-full-git







Установка зависимостей (модулей Python):
# Предварительно, возможно понадобится обновить сам pip (установщик модулей Python)
python -m pip install --upgrade pip

# Установка зависимостей
pip install youtube_dl
pip install colorama

# Обновление зависимостей
pip install --upgrade youtube_dl
pip install --upgrade colorama







Собственно, на этом подготовительные работы завершены.
Теперь можно использовать мой скрипт.

Я создал два варианта задания параметров.
1. Классический только через опции командной строки
2. Классический сокращённый через конфигурационный файл, который необходимо задать в командной строке всего одним соответствующим параметром (-c).

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

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

e:\>yt_dl.py
        Python  : 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)]
        Node    : ak545-work
        Home    : C:\Users\Andre
        OS      : Windows
        Release : 10
        Version : 10.0.17763
        Arch    : AMD64
        CPU     : Intel64 Family 6 Model 60 Stepping 3, GenuineIntel

        The ffmpeg found in: c:\ffmpeg\bin\ffmpeg.exe
        Ошибка: необходимо использовать один из параметров: -l, -i или -c.


        usage:
               yt_dl.py [-h] [-u] [-v] [-c FILE]
               или
               yt_dl.py [-h] [-u] [-v] [-l URL] [-i FILE] [-o DIR] [-x TXT] [-m EXT]
                        [-f EXT] [-e] [-a] [-t] [-s] [-d] [-y URL]
                        [-u LOGIN] [-p PSWD]

        Скрипт для загрузки видео с очень большого количества известных сайтов, таких,
        как youtube, vimeo, vk, facebook.com и т.п.
        Загрузка возможна как отдельных видео файлов, так и видео плейлистов.
        В некоторых случаях поддерживается загрузка потоков трансляции (прямых эфиров).
        Кроме того, возможна загрузка обложек, описаний, субтитров.


        Параметры:
        -h, --help            Справка
        -g, --usage           Показать примеры использования
        -v, --version         Вывести номер версии
        -c FILE, --config-file FILE
                              Ссылка на файл конфигурации, содержащий параметры запуска скрипта.
                              В этом файле могут содержаться все нижеследующие параметры:
        ------------------------------------------------------------------------------------------------
        -l URL, --link URL    Ссылка на http(s) ресурс
        -i FILE, --file FILE  Ссылка на файл, содержащий список http(s) ресурсов
        -l и -i               Взаимно-исключающие параметры

        -o DIR, --out DIR     Корневая папка для сохранения загруженного материала,
                              например: e:\Downloads
        -x TXT, --prefix TXT  Подпапка 1 уровня (имя задаётся значением параметра).
                              Если параметр не задан или пустой, его место занимает
                              подпапка 2-го уровня.
        -m EXT, --merge-output-format EXT
                              Формат выходного файла, например: mp4, mkv, avi.
                              По-умолчанию: mkv
        -f EXT, --format EXT  Формат исходных данных,
                              например: 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio'.
                              По-умолчанию: 'bestvideo+bestaudio/best'
        -e, --extractor       Подпапка 2 уровня (имя задаётся по типу сайта
                              источника, например: Youtube)
        -a, --uploader        Подпапка 3 уровня (имя задаётся значением автора
                              загрузки на сайте источнике)
        -t, --thumbnail       Загружать обложки
        -s, --subtitles       Загружать субтитры
        -d, --description     Загружать описание
        -y URL, --proxy URL   Ссылка на прокси, например: socks5://127.0.0.1:9150
        -u LOGIN, --username LOGIN
                             Username for authentication purposes
        -p PSWD, --password PSWD
                             Password for authentication purposes

        (c) AK545 (Andrey Klimov) 2018, e-mail: ak545@mail.ru

e:\_@Python>







e:\_@Python>yt_dl.py -g
        Python  : 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)]
        Node    : ak545-work
        Home    : C:\Users\Andre
        OS      : Windows
        Release : 10
        Version : 10.0.17763
        Arch    : AMD64
        CPU     : Intel64 Family 6 Model 60 Stepping 3, GenuineIntel

        The ffmpeg found in: c:\ffmpeg\bin\ffmpeg.exe

Примеры использования:
*******************************************************************************
E:\yt_dl.py [Параметры]
или
python{3} E:\yt_dl.py [Параметры]
*******************************************************************************
E:\yt_dl.py -l https://www.youtube.com/watch?v=V_VztHT5BzY -o e:\Downloads
E:\yt_dl.py -l ytuser:user -o e:\Downloads
E:\yt_dl.py -l http://vimeo.com/channels/keypeele/75629013 -o e:\Downloads
E:\yt_dl.py -l https://vk.com/videos-46252034 -o e:\Downloads
E:\yt_dl.py -i e:\src-video.txt -o e:\Downloads
E:\yt_dl.py -i e:\src-audio.txt -o e:\Downloads
E:\yt_dl.py -x '(ru)' -i e:\src-audio.txt -o e:\Downloads
E:\yt_dl.py -e -i e:\src-audio.txt -o e:\Downloads
E:\yt_dl.py -e -a -i e:\src-audio.txt -o e:\Downloads
E:\yt_dl.py -e -a -t -s -d -i e:\src-audio.txt -o e:\Downloads
E:\yt_dl.py -e -a -t -s -d -l https://vk.com/videos-46252034 -u 'login' -p 'password' -o e:\Downloads
E:\yt_dl.py -e -a -t -s -d -l https://www.youtube.com/watch?v=V_VztHT5BzY -y 'socks5://127.0.0.1:9150' -o e:\Downloads
E:\yt_dl.py -e -a -t -s -d -m mkv -i e:\src-audio.txt -o e:\Downloads
E:\yt_dl.py -e -a -t -s -d -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio' -i e:\src-audio.txt -o e:\Downloads
E:\yt_dl.py -r "[{'key': 'FFmpegExtractAudio','preferredcodec': 'mp3','preferredquality': '192',}]" -i e:\src-audio.txt -o e:\Downloads
E:\yt_dl.py -c e:\video.cfg
E:\yt_dl.py -c e:\audio.cfg
E:\yt_dl.py -c e:\audio.cfg -o e:\Downloads
*******************************************************************************

# Пример конфиг файла

{
#-------------------------------------
# Файл со списком источников
"file": "e:\src-audio.txt",

# Ссылка на источник
#"link": "https://www.youtube.com/watch?v=EVkodhicZps",

# Допускается использовать или только link или только file

#-------------------------------------
# Корневая папка для записи загруженного контента
"out": "e:\audio",
#-------------------------------------
# Далее, от корневой папки, создаются подпапки в следующем порядке:
#-------------------------------------
# Префикс подпапки
"prefix": "( ru ) ",
# Тип источника (если есть)
"extractor": True,
# Автор источника
"uploader": True,
#-------------------------------------
# Предпочитаемый формат исходных данных
"format": "bestaudio/best",

#-------------------------------------
# Пытаться загрузить так же:
# Загружать обложки к видео (если есть)
"thumbnail": True,

# Загружать субтитры к видео (если есть)
#"subtitles": True,

# Загружать описания к видео (если есть)
#"description": True,

#-------------------------------------
# ПОСТОБРАБОТКА
#-------------------------------------
# Формат финального файла
# (если не используется параметр postprocessors)
#"merge-output-format": "mkv",

# Задаёт постпроцессор для извлечения из видео
# аудиодорожки и конвертации её в финальный аудио файл
# параметр merge-output-format при этом игнорируется
"postprocessors": [
        {
                "key": "FFmpegExtractAudio",
                "preferredcodec": "mp3",
                "preferredquality": "192",
        }],

# Загруженные части видео после слияния их в финальное видео
# не будут удаляться
# "keepvideo": True,

# Создаёт в папке загрузки файл истории загруженных видео.
# Видео из этой истории повторно загружаться не будут
# Этот параметр полезно задавать, если вы извлекаете аудио из видео
"download_archive": True,

#-------------------------------------
# ДАННЫЕ ДЛЯ АУТЕНТИФИКАЦИИ
#-------------------------------------
#"username": "login",
#"password": "password",

}

*******************************************************************************
Для корректного завершения скрипта в процессе работы на платформе win32
нажмите: [ CTRL+BREAK ]
*******************************************************************************
e:\>







Формат файла-источника очень простой:
*******************************************************************************
# Яндекс.Музыка - Трек
https://music.yandex.ru/album/11570/track/122698
https://music.yandex.ru/album/11570/track/122697
https://music.yandex.ru/album/11570/track/122699
https://music.yandex.ru/album/11570/track/122703
https://music.yandex.ru/album/11570/track/122695
https://music.yandex.ru/album/11570/track/122700
https://music.yandex.ru/album/11570/track/122702
https://music.yandex.ru/album/11570/track/122701
https://music.yandex.ru/album/11570/track/122696

# Модель для сборки
https://www.youtube.com/channel/UC-TmwyyefjjM9fZdRX7xIWQ/playlists






*******************************************************************************

Для обхода различных блокировок можно использовать браузер Tor.
Запускаем браузер Tor, и не закрывая его добавляем к скрипту опцию:
-y "socks5://127.0.0.1:9150"






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

Если для загрузки каких-то видео с сайта источника требуется авторизация, добавляем необходимые опции:
-u "login" -p "password"









Исходники скрипта

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

Валюта иерархии

Потом он обнял меня: человек, умеющий обнимать, – хороший человек.

ОРХАН ПАМУК

Будем считать, что с физиологией инстинкта самосохранения нам всё более-менее понятно. Всё-таки это биология, инстинкты, рефлексы… А какова, в таком случае, психофизиология нашей с вами социальности? Тут, наверное, странно нечто подобное обнаружить.

Но нет, и тут всё то же самое – физиология, рецепторика и тренировка мозга.

То, что мы с вами приматы, надеюсь, понятно. А каким образом наши ближайшие родственники – шимпанзе, бонобо и прочие гориллы – выстраивают свои социальные связи?

Учёные-этологи пролили свет на этот вопрос: главный инструмент создания и регулировки социальных отношений в группе приматов играет груминг (то есть – взаимное вычёсывание).

«Груминга без какой-либо цели просто не существует, – пишет выдающийся приматолог Франс де Вааль, и добавляет: – Всякий груминг имеет политический подтекст».

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

И не думайте, что причина последующего взаимного расположения потёршихся друг о друга обезьян – это некое абстрактное и рациональное чувство благодарности за вычесанных блох: мол, спасибо, друг сердечный, что вычесал, а то совсем закусали! Нет, конечно.

Read more...Collapse )