月別アーカイブ: 2019年12月

Gstreamer Aspect Rate

新規アプリも作らなきゃだけど既存アプリのメンテナンスも。

動画によっては原寸とアスペクト比が異なっている場合がある。
Totem や Celluloid はファイル中にある情報を見て適切なアスペクト比になる。
筆者の自作の奴も同じようにしたい。

ClutterGst.VideoResolution – Structures – ClutterGst 3.0

ためしに par_d と par_n の値を見てみた。
アスペクト比が原寸どおりな場合は常にどちらも 1 になる。
アスペクト比がおかしいものは 1 にならない。
なるほど、コレを使って単純計算できる。

ClutterGst 3.0 Get Media Width, Height | Paepoi Blog

ついでに昔書いた古い GstPad での書き換え方も判明。
Gst を直接使う人はコッチしかできないので併記しとく。

var Y901xWindow = GObject.registerClass({
    GTypeName: 'Y901xWindow'
}, class Y901xWindow extends Gtk.ApplicationWindow {
    _init(app) {
        super._init({application: app});
        //
        // etc...
        //
        this.player.connect('ready', (playbin)=> {
            this.player.set_playing(false);
            // Get Origin size
            let vsink = playbin.get_video_sink();
            // Only ClutterGst
            let frame = vsink.get_frame();
            let d = frame.resolution.par_d;
            let n = frame.resolution.par_n;
            this.src_width = frame.resolution.width * n / d;
            this.src_height = frame.resolution.height;
            /* or GstPad
            vsink.foreach_pad((sink, pad) => {
                let caps = pad.get_current_caps();
                let struct = caps.get_structure(0);
                //print(struct.to_string()); // check
                let [,w, h] = struct.get_fraction('pixel-aspect-ratio');
                this.src_width = struct.get_int('width')[1] * w / h;
                this.src_height = struct.get_int('height')[1];
            });
            */

でイケた。

後はスマホ動画では必須の回転情報を得たいんだけーが。
GstStructure に入っていると思ったけどドコにも無かった、残念。
Totem は再生開始と同時にグルッと回ってカッッチョイイんだよな。

ptmx

sftp アプリを PyObjC で作るって話。
やってます、上手くいかないだけです。
とりあえず今やっていること。

sshpass/main.c at master ? bauruine/sshpass ? GitHub

sshpass のソースってたったコレだけなんだよね。
これなら Python3 の標準モジュールだけで模写できそうだと考えた。
UNIX の中身の勉強にもなるし一石二鳥。

/dev/ptmx って何だ?

Ubuntu Manpage: ptmx, pts – 擬似端末のマスタとスレーブ

たしかに sudo や ssh は stdin やパイプからの入力はできない。
/dev/ptmx を利用すればなんとかなるってことね。

#!/usr/bin/env python3

import os, signal, fcntl

# Ctrl+C
signal.signal(signal.SIGINT, signal.SIG_DFL)

# ptmx
masterpt = os.open('/dev/ptmx', os.O_RDWR)

# not macOS
#fcntl.fcntl(masterpt, fcntl.F_SETFL, os.O_NONBLOCK)
#name = os.ttyname(masterpt)

childpid = os.fork()
if childpid == 0:
    os.setsid()
    #os.execvp('ssh', ['ssh', 'sasakima-nao@mba2.local'])
    os.execvp('python3', ['python3'])
    # Error
    print(f'{__file__}: Failed to run command')

#slavept = os.open(name, os.O_RDWR|os.O_NOCTTY)

os.close(masterpt)
#os.close(slavept)
print(f'{__file__}: EOL')

とりあえず fork して execvp することはできた。
呼び出し側のプロセスを終了して子プロセスに置き換える。
ほぼ os モジュールだけでなんとかなるのようで。

Man page of EXEC

起動すると EOL が表示され Python3 インタプリタが始まる。
Ctrl+D すると bash はもう破棄されているので gnome-terminal が終了する。
macOS では「プロセスが完了しました」と出る。

で、ssh のほうの現状。

こんなになってしまう。
sshpass.c をトレースしているつもりだけどまだ何か間違っているっぽい。
上手くいったらまた今度。

MySQL 5.1 to 5.7

MySQL 5.1 のメンテというメールがさくらから届く。
そういえば前回 MySQL の更新をしたのっていつだったかな?

WordPress の [ツール]、[サイトヘルス] を見る。
MySQL 5.1 は古いからアップデートしろ、って出て来た。

さくらインターネットのレンタルサーバで WordPress 2.9 へアップグレードできない方へ ? BambooStudio*blog™
前回はこの方法で以降した、十年前の情報カヨ。
同じ手段でイケるだろうと試したら。。。。。

#1071 – 索引のキーが長すぎます。最大 1000 バイトまでです。

とエラーが出て投稿分のデータが適用されない。

MySQLのインデックスサイズに767byteまでしかつかえない問題と対策 – ハマログ

こんなのを見つけたけど 5.7 だから関係なさそう。
phpMyAdmin から変数を見ると全部定義されていた。
設定を色々弄ったけど駄目、違う方法を探す。

WordPress MySQL 移行メモ (5.5 → 5.7) ? さくらサーバー | てまりうた

ホストが同じなら Synchronize でイケるのね。
まったく同じ手段であっさり 5.7 へ以降できました。

ただ一つ違うところ、筆者は Fedora を使っているということで。
sftp 接続して Gedit で普通に wp-config.php を編集しました。

通な御仁や macOS なら ssh で vi でもいいですけど。
何もインストールせずにこれが普通にできるから GNOME は便利。

5.7 へ移行完了。

WordPress Redirect

前回サイトの https 化を行った。
自動ジャンプするはずだけど Blog アクセスが全部 http だ、あれ?

「http://」から「https://」に自動転送させる方法 | ヘテムルブログ

WordPress は設定を変更しなきゃいけなかったのか!
早速サイトアドレス設定を https に変更。
でもアドレスを直打ちすると相変わらず http アクセスのまま。

常時SSL化後は必須!httpからhttpsへ自動転送する方法 | ビギナーズハイ

あぁ WordPress 用の index.php がある位置に置かないと駄目なのね。
って、デフォルト状態で既にあるんですけど初期から使っているからかな。
多分デフォルトに追記すればいいんだろう。
mod_rewrite.c ディレクティブ指定って実は必要無いみたいだけど一応書くか。

そんなこんなでサイトのトップページ用。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

WordPress 用。

# BEGIN WordPress
# `BEGIN WordPress` から `END WordPress` までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wp/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wp/index.php [L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

# END WordPress

に書き換え、よし狙ったとおりにリダイレクトされるようだ。

サイトを全部 WordPress に変更すればこんなへましないんだろうけどさ。
我がサイトは筆者自身の覚書をまとめただけなんだよね。
Blog 以外はローカルで動かないと困るんです。

Shared SSL

共有SSL – レンタルサーバーはさくらインターネット
こんなのあったんだ。
これで筆者のページも https 化できるのか。
さっそくやってみよう。

コンパネにログイン。
[ドメイン設定] の [ドメイン/SSL設定] をクリック。
このドメイン名の所にある [変更] ボタンをクリック。
[SSLの利用をお選びください] の [共有SSLを利用する] を選択。
[送信] ボタン、で設定完了!

30 秒だけ一応待って https でアクセス。
アクセスできた、https 化完了!

http から https へ自動ジャンプさせたいな。
httpからhttpsにリダイレクトする方法と注意点について | キーワードファインダー

せっかくなのでいつかやろうと思っていたサイト名変更。
サイト名を Paepoi に。
ブログを Paepoi Blog に。
やっぱり統一したほうがいいよね。

追記

自サイトだけ変更したら Google AdSense が表示されなかった。
show_ads.js への URL も https に変更しないと弾かれるようです。