2021年10月21日木曜日

AlmaLinux 8にApache SupersetとPostgreSQL 14をインストールする

Apache SupersetはPython製のBIツールです。

〇Apache Supersetの画面

インストール方法

1. firewallでhttpの8088番ポートを開けます
sudo firewall-cmd --add-port=8088/tcp --permanent

sudo firewall-cmd --reload

2. SELinuxの無効化
sudo setenforce 0
sudo getenforce
sudo sed -i -e 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

3. PostgreSQL14をインストール
wget https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

sudo rpm -Uvh pgdg-redhat-repo-latest.noarch.rpm

sudo dnf -qy module disable postgresql

sudo dnf -y update

sudo dnf -y install postgresql14-server postgresql14-devel postgresql14-contrib

sudo systemctl enable postgresql-14

sudo /usr/pgsql-14/bin/postgresql-14-setup initdb

echo "listen_addresses='*'" | sudo tee -a /var/lib/pgsql/14/data/postgresql.conf

sudo sed -i 's/host.*all.*all.*127.0.0.1/#host    all             all             127.0.0.1/g' /var/lib/pgsql/14/data/pg_hba.conf

sudo sed -i 's|^host.*all.*all.*::1/128|#host    all             all             ::1/128|g' /var/lib/pgsql/14/data/pg_hba.conf

echo "host    all         all         127.0.0.1/32          password" | sudo tee -a /var/lib/pgsql/14/data/pg_hba.conf

echo "host    all         all         ::1/128          password" | sudo tee -a /var/lib/pgsql/14/data/pg_hba.conf

echo "host    all         all         192.168.1.0/24          password" | sudo tee -a /var/lib/pgsql/14/data/pg_hba.conf
※ネットワークアドレスは適宜変更してください

sudo systemctl start postgresql-14.service

sudo su - postgres << EOF
psql -c "
alter user postgres with password 'postgres';
create user superset with password 'superset';
"
psql -c "
create database superset owner superset encoding 'UTF8' lc_collate 'ja_JP.UTF-8' lc_ctype 'ja_JP.UTF-8' template 'template0';
"
EOF
※ユーザー名・パスワードは適宜変更してください

4.pipenvのインストール
sudo dnf -y install python3 python3-devel python3-pip

sudo pip3 install --upgrade pip

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

echo "export PYTHONPATH=/home/alma/superset" >> ~/.bashrc
※この例ではalmaユーザのホームディレクトリ下のsupersetディレクトリにsuperset_config.pyを配置することを想定しています。適宜パスを変更してください。

source ~/.bashrc

5.Apache Supersetのインストール
sudo dnf -y install gcc gcc-c++ libffi-devel python3-wheel openssl-devel cyrus-sasl-devel openldap-devel

mkdir -p ~/superset

cd ~/superset

pipenv --python 3

pipenv install apache-superset

pipenv install psycopg2-binary

pipenv install dataclasses

SECRET_KEY=`echo -e "import os; print(os.urandom(24).hex())" | python3`

cat << EOF > superset_config.py
# Superset specific config
ROW_LIMIT = 5000

BABEL_DEFAULT_LOCALE='ja'

SUPERSET_WEBSERVER_PORT = 8088

# Flask App Builder configuration
# Your App secret key
#SECRET_KEY = '\2\1thisismyscretkey\1\2\e\y\y\h'
SECRET_KEY = '#####'

# The SQLAlchemy connection string to your database backend
# This connection defines the path to the database that stores your
# superset metadata (slices, connections, tables, dashboards, ...).
# Note that the connection information to connect to the datasources
# you want to explore are managed directly in the web UI
#SQLALCHEMY_DATABASE_URI = 'sqlite:////path/to/superset.db'
SQLALCHEMY_DATABASE_URI = 'postgresql://superset:superset@localhost/superset'

# Flask-WTF flag for CSRF
WTF_CSRF_ENABLED = True
# Add endpoints that need to be exempt from CSRF protection
WTF_CSRF_EXEMPT_LIST = []
# A CSRF token that expires in 1 year
WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 365

# Set this API key to enable Mapbox visualizations
MAPBOX_API_KEY = ''
EOF
※データベースのパスワードなど、適宜変更してください。

sed -i "s/#####/$SECRET_KEY/" superset_config.py

pipenv shell

superset db upgrade

superset fab create-admin --username admin --firstname admin --lastname user --email admin@localhost.localdomain --password admin

※管理者のユーザ名やパスワードなど適宜変更してください。

superset load_examples

superset init

superset run -h 0.0.0.0 -p 8088 --with-threads --reload
※動作の確認。Ctrl+Cで止めます。

6. サービス化
cat << EOF | sudo tee /etc/systemd/system/superset.service
[Unit]
Description=superset
[Service]
Type=simple
Environment=PYTHONPATH=/home/alma/superset
ExecStart=/home/alma/superset/.venv/bin/superset run -h 0.0.0.0 -p 8088 --with-threads --reload
User=alma
Group=alma
WorkingDirectory=/home/alma/superset
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
※この例ではalmaユーザでサービスを実行し、supersetをインストールした仮想環境は/home/alma/supersetにあることを想定しています。適宜変更してください。

sudo systemctl enable superset.service

sudo systemctl start superset.service

ブラウザでhttp://<サーバ名またはIPアドレス>:8088/ にアクセスします。adminユーザ、パスワードadminでログインします。

関連情報

・Apache Supersetのインストール方法、ダッシュボードやチャートの作成方法は以下のページを参照してください。
Apache Supersetのまとめ

PySimpleGUIでグラフ要素を作成して直線を描画する

PySimpleGUIでグラフ要素を作成して直線を描画するには、 draw_lineメソッドを使用します。
引数は、以下の様に指定します。線の色はcolor、線太さはwidthで指定できます。
・第1引数のタプルに始点のX座標・Y座標
・第2引数のタプルに終点のX座標・Y座標

サンプル実行手順

以下のファイルを保存して、実行します。
graph_line.py
import PySimpleGUI as sg

sg.theme('SystemDefault')
graph = sg.Graph(canvas_size=(300,200), graph_bottom_left=(0, 0), graph_top_right=(150,100))
layout = [ [graph] ]


window = sg.Window('グラフ:直線', layout=layout, finalize=True)

point_from=(10, 10)
point_end=(90, 90)
graph.draw_line(point_from, point_end, color='red', width=3)


graph.update()
# イベントループ
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

・実行コマンド
python graph_line.py

〇実行結果

関連情報

PySimpleGUIでグラフ要素を作成して楕円を描画する

PySimpleGUIでグラフ要素を作成して点を描画する

PySimpleGUIでグラフ要素を作成してポリゴンを描画する

PySimpleGUIでグラフ要素を作成して四角形を描画する

PySimpleGUIでグラフ要素を作成して画像を描画する

PySimpleGUIでグラフ要素を作成してテキストを描画する

PySimpleGUIでグラフ要素を作成して円弧を描画する

PySimpleGUIでグラフ要素を作成して円を描画する

・PySimpleGUIに関する他の記事はこちらを参照してください。

2021年10月20日水曜日

Shutter Encoderに動画上に文字列を描画する

Shutter Encoderで動画上に文字列を描画するには、以下の手順を実行します。

操作手順

1. Shutter EncoderでBrowseボタンをクリックして変換元動画ファイルを選択し、Choose Functionで出力動画ファイルのコーデックを選択します。次に「Overlay」をクリックして、「Display timecode/file name/text」をクリックします。

2. Overlayダイアログ内のFontを選択します。日本語を描画する場合は、日本語のフォントを選択します。Colorで文字色、Backgroudの右側のColorで背景色を設定します。次に画面右の「Display a text」をクリックして描画する文字列を入力します。画面下のPreviewボタンでフルスクリーン表示で変換した状態を確認することが出来ます。ESCキーでフルスクリーン表示を抜けることが出来ます。変換を適用するには、画面下の「Apply」ボタンをクリックします。Applyボタンを押すとダイアログが閉じるので、「Start function」ボタンをクリックして変換とエンコードを行います。

関連情報

Shutter Encoderのまとめ

・様々な動画に関するアプリケーションについては、以下のまとめを参照してください。
動画関連アプリケーションのまとめ

AlmaLinux 8に動画変換アプリケーションHandBrakeをインストールする

HandBrakeは動画ファイルを様々な形式に変換することのできるアプリケーションです。

〇HandBrakeの画面(AlmaLinux 8)

インストール方法

以下のコマンドを実行します。
sudo dnf -y install flatpak

sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

sudo flatpak -y install fr.handbrake.ghb

Rocky Linux 8.4にFontBaseをインストールする

FontBaseで様々なフォントの表示・管理を行うことができます。

〇FontBaseの画面

インストール方法

以下のコマンドでFontBaseをインストールする事ができます。
sudo mkdir -p /opt/fontbase

cd /opt/fontbase

sudo wget https://releases.fontba.se/linux/FontBase-2.16.6.AppImage

sudo chmod +x FontBase-2.16.6.AppImage

cat << EOF | sudo tee /usr/share/applications/fontbase.desktop
[Desktop Entry]
Type=Application
Version=1.0
Name=FontBase
Exec=/opt/fontbase/FontBase-2.16.6.AppImage
Categories=Graphics;
EOF

関連情報

・FontBaseのウェブサイト
https://fontba.se/

2021年10月19日火曜日

Shutter Encoderで動画の画面の端を暗くする・明るくする

Shutter Encoderで動画の画面の端を暗くする・明るくするには、以下の手順を実行します。

操作手順

1. Shutter EncoderでBrowseボタンをクリックして変換元動画ファイルを選択し、Choose Functionで出力動画ファイルのコーデックを選択します。次に「Colority」をクリックして、「Image adjustment...」をクリックします。

2. Image Adjustmentダイアログが表示されます。

3. 左側のVignettingスライダーを左右に動かして調整します。左側に移動させるとより明るく、右側に移動させるとより暗くなります。画面下のPreviewボタンでフルスクリーン表示で変換した状態を確認することが出来ます。ESCキーでフルスクリーン表示を抜けることが出来ます。変換を適用するには、画面下の「Apply」ボタンをクリックします。Applyボタンを押すとダイアログが閉じるので、「Start function」ボタンをクリックして変換とエンコードを行います。

関連情報

Shutter Encoderのまとめ

・様々な動画に関するアプリケーションについては、以下のまとめを参照してください。
動画関連アプリケーションのまとめ

FFmpegとpythonで指定範囲の動画を切り取る

FFmpegとpythonで指定時間範囲の動画を切り取るには、以下のサンプルプログラムのようにvideo/audioでそれぞれtrim/atrimしてsetpts/asetptsを実行します。

サンプルプログラム

ffmepg-pythonがインストールされた仮想環境の作成方法は「FFmpegをPythonから操作できるffmpeg-pythonをインストールした仮想環境を作成し、動画形式変換する」を参考にしてください。
以下の例では動画の10秒目から1秒間の動画を切り取ります。

ffmpeg_trim.py
import ffmpeg

input = ffmpeg.input('./lake.mp4')
video = (
    input
    .trim(start=10, end=11)
    .setpts('PTS-STARTPTS')
)
audio = (
    input
    .filter('atrim', start=10, end=11)
    .filter('asetpts', 'PTS-STARTPTS')
)
ffmpeg.output(video, audio, './lake_1sec.mp4').run()

・実行方法
以下のコマンドを実行して、サンプルプログラムを実行します。
python ffmpeg_trim.py