Fedora 32 Install

Fedora 32 が二日前に出ました。
いつもは速攻アップグレードしていたけど今回はのんびり。
というか今回は iso から新規で入れ直しする。

Fedora fwupd | Paepoi Blog

で現在ファームウエアの更新を止めていることと。
Macbook Air 2011 に入れた奴を放置しすぎてアップグレードできないので入れ直しする為に iso が必要なので 2 回も同じものを落としたくないことと。
単純に中身を整理したい、等々理由があるけれど。
仕事が今日から 10 連休なのにコロナのせいで、が一番の理由。

必要分をバックアップして iso をとっととダウンロード。
1.8 GB か、これでも macOS アップグレードの四分の一サイズという凄い時代に。。。。。

Fedora Workstation のダウンロード

USB メモリをパソコンに差す。
iso ファイルを選択し右クリック。
「別のアプリケーションで開く」メニューを選択。
ディスクイメージライターで開く。

image_writer

後は書き込みする USB メモリを選択して指示に従う、書き込み終了。
別途アプリは不要だしコマンドも打たなくていい、今時の Linux は超簡単。

マシンを終了し SSD を取り替えてバイオスで起動を USB 優先に変更。
起動、マシンチェックが始まるけど不要なら Esc でキャンセルできる。
Live 起動するけど速攻インストールを選択、後は誰でも解ると思う。
筆者は US 配列の RealForce なのでココだけ変更して後はおまかせ。
完了をクリック、Live のままなので普通に終了させる。

USB メモリを抜いてバイオスの設定を戻して再起動。
ユーザー名とパスワードを設定、インストール終わり。
オンラインアカウントは Google を設定しないと gmail 送受信ができないけど後から設定できる。

さて、なんかデフォルトアプリが少ないな。
Evolution が無くなったようだ、いや使っていないんだけど。
GNOME mobile-shell のメーラーが Geary だし役目を終えたのかも。

GNOME Shell is moving towards a convergent, mobile-friendly UI

動画や音声は mp3 や MotionJpeg の avi なんかはデフォルトで有効。
H.264 はオープンソース版であるからか再生できないファイルもある。
結局 RPMFusion に頼ることに。

f32_h264

Gedit 超変わった!
と思ったらデフォルトのカラースキームが Tango になっていただけ。
クラシックに変更して Noto Mono フォントにするとあら元通り。
#!/usr/bin/env python3
のシバンを入れないと Python3 と認識しないまま。
Wayland では Ctrl+F9 が動作しないのもそのまんま。
筆者が公開しているプラグインもそのまま何事もなく動く。
変わったといえば「開く」ボタンから履歴の部分が分離したことくらい。
筆者は Ctrl+O しか使わないから実質何も変わらない。

他チビチビ変わっているけど見た目だけって感じ。
問題も特に起こらないのでサードパーティアプリを入れる。

dconf-editor をソフトウエアからインストールすると起動できない。
dnf コマンドでインストールすれば使えるようになった。
ghex もだ、何だこのバグ?

Celluloid は検索しても出てこない。
コレも dnf コマンドで。

Geary
メーラー、今はコレに落ち着いている。

Password Safe
Keepass クローンの GTK+ 版。

DarkTable
デジイチの raw 画像編集、今はひたすら修行中。

Google Chrome, Gimp
説明不要

自作アプリを入れようと思ったら make が入っていなかった。
gcc はデフォルトで入っているのに何で無いんだよ。。。。。

sudo dnf install make

これでいい。
ghex 等のインストール失敗はコレが原因か?

Fedora Tips – Paepoi

最初から日付け表示されるようになったこと以外そのままだな。
書き換えの必要は無いようだ、よかったよかった。
又何か気が付いたら後日に。

mp4 mov rotate

スマホ動画の回転情報を得て我が Y901x にて正しい回転表示をさせる。
と随分前に書いてずっとサボッていたけどいいかげんに本気出そうと思う。
検索ワードを mov バイナリ 回転 とか mov に決め打ちして探したら。

バイナリエディタで .mov を回転 ? マキシマ文庫

おぉ多分コレだ!
回転情報書き換えなら Mac の QuickTime だけで簡単にできるのは置いておいて。
そこのバイナリを取得すれば回転情報は得られるってことね。

バイナリ取得や書き換えなら C や Python 等で簡単にできるのに。
てか既に沢山ありそう、参考用に探してみよう。

GitHub – danielgtaylor/qtrotate: Tools for handling rotated Quicktime/MP4 files

ズバリをあっさり見つけた。
mdat や trac アトムも取得しているし他にもやることあるみたい。
mov の構造は下記に、ソースコメントのリンク先はもう古いので。

Movie Atoms

試すならサポート終了の Python2 コードなので Python3 に書き換えてね。
print に括弧を付加と割り算を二重スラッシュにするのは毎度のこととして。
atom 比較の所の文字列には全部 b を付けてバイナリ比較に変更するのを忘れずに。
よく解らない人用に筆者が書き換えしたものを一応置いておきます。

qtrotate_py3.zip

どうやら mov と mp4 は同じ回転情報を使うようで mp4 にも適用できる。
とりあえず筆者が iPhone で撮影したり編集した動画は回転情報が得られた。

qtrotate

書き換えも問題無く可能だった。
Nautilus のサムネイルには即時繁栄されないので一旦コピペ。
ただ手持ち mp4 の中には正しくない情報が出るものもあった。
ここらをもう少し調べて Y901x に適用し。。。。。

しまった、Y901x は Gjs で作っていたんだった!
JavaScript はバイナリ編集なんてできないぞ。
GLib を使っても多分 Uint8Array に変換されて劇遅になるだけだ。

ClutterImage PyGObject/Gjs | Paepoi Blog

本気で困った。
Comipoli 同様コイツも PyGObject に書き換えることになりそう。

Python3 socket

Python からの socket アクセス。
http だけなら urllib.request で充分なんですけど。
ssh 等の通信にも使えるようなので使い方は勉強しておこう。

#!/usr/bin/env python3

'''
    http:// version
'''

import socket

HOST = 'palepoli.skr.jp'
FILE = '/suzuki/katana.html'
PORT = 80 # http

output = []

#with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
with socket.socket() as sock:
    sock.connect((HOST, PORT))
    msg = f'GET {FILE} HTTP/1.1\r\nHost: {HOST}\r\nConnection: close\r\n\r\n'
    s.sendall(msg.encode('utf-8'))
    while True:
        res = ssock.recv(4096)
        if not res: break
        output.append(res.decode())

print(''.join(output))

よく見かけるコードを fstring で今っぽく。
AF_INET 等は python3.7 ではデフォルト引数で指定されているので不要。
コピペだけで動くようにファイルは筆者のこのサーバーに置いています。

でもコレでは https でアクセスできないことに気が付いた。
https のポートを調べると 443 番だ、そりゃ 80 番では弾かれる。
でもポートを変更しただけでは駄目、ssl モジュールを使う必要あり。

#!/usr/bin/env python3

'''
    https:// version
'''

import socket, ssl

HOST = 'palepoli.skr.jp'
FILE = '/suzuki/v-strom.html'
PORT = 443 # https

output = []

with socket.socket() as sock:
    context = ssl.SSLContext(ssl.PROTOCOL_TLS)
    with context.wrap_socket(sock, server_hostname=HOST) as ssock:
        ssock.connect((HOST, PORT))
        msg = f'GET {FILE} HTTP/1.1\r\nHost: {HOST}\r\nConnection: close\r\n\r\n'
        ssock.send(msg.encode('utf-8'))
        while True:
            res = ssock.recv(4096)
            if not res: break
            output.append(res.decode())

print(''.join(output))

できた。

ところで実は GNOME ならこんなことができる。

#!/usr/bin/env python3

'''
    GNOME only
'''
 
from gi.repository import Gio
 
f = Gio.file_new_for_uri("https://palepoli.skr.jp/suzuki/burgman.html")
ok, contents, etag_out = f.load_contents()
if ok:
    print(contents.decode());
else:
    print('File not Found')

Gio は Gvfs という仮想ファイルでアクセス可能な URI なら全部扱える。
GNOME 標準アプリは全部 Gio アクセスなので以下みたいなことも。

sasikae

sftp でアクセスしてリモート編集が可能だったりする。
解りやすいようにコマンドで書いたけど Nautilus から sftp でアクセスして W クリックすればコレと同じことになる。
自分でアプリを作る時も Gio を使うだけ、これが GNOME の魅力。
SNS くらいしか使っていないショボイ人だとこの魅力は解らないだろうな。

追記
2020.04.22 添付画像の差し替え。

CRLF

何を今頃だけど JavaScript の replace について。

String.prototype.replace() – JavaScript | MDN

第一引数を正規表現にすればすべてのマッチした箇所を置換できるのか。
最初に一致した箇所だけだとずっと勘違いしていた筆者であった。

JXA: doShellScript Line feed code | Paepoi Blog

これを試しに書き換えしてみよう。

#!/usr/bin/osascript

let app = Application.currentApplication();
app.includeStandardAdditions = true;

res = app.doShellScript('ls -l');
console.log(res.replace(/\r/g, '\n'));

いけた。

ついでに。
よく考えたらコマンドの中で tr を使って変換すりゃいいじゃん。
と思ってやってみたら上手くいかなかった。

#!/usr/bin/osascript

let app = Application.currentApplication();
app.includeStandardAdditions = true;

// no...
//res = app.doShellScript('ls -l | tr "\r" "\n"');

// test
res = app.doShellScript('ls -l | tr "\n" "|"');
console.log(res);

となる。

つまりコマンド実行の時点では改行コードは LF のまま。
doShellScript が値を戻す時に CR へ変換しているようです。
LF のまま戻すオプションって無いのかな?

lf

#!/usr/bin/osascript

let app = Application.currentApplication();
app.includeStandardAdditions = true;

res = app.doShellScript('ls -l', {alteringLineEndings:false});
console.log(res);

あった、今後はコレで。

ついでに、doShellScript は bash の POSIX 互換モードです。
zsh やフル状態の bash ではないので注意、macOS って本当に色々面倒臭い。
プログラミングするならやっぱり Linux だよ、某サル専用を除く。

関係ないけど Macbook Air 2020 が出たね、かなり良さげ。
でも筆者はこんな使い方ばかりだから 2018 モデルで何の不満も無いのよね。
ペチペチキーボードにもすっかり慣れてしまったし、うるさいけど。
さて 10.15.4 にアップデートするか。

echo hyphen

ポータブルな echo 代替、reverb コマンド – 拡張 POSIX シェルスクリプト Advent Calendar 2013 – ダメ出し Blog

そうか、echo はオプションとまったく同じ文字列を出力できなかったのか。
でもそんなの — を使えばいいんでね?

先頭にハイフンが付くファイルを削除できない – ITmedia エンタープライズ

echo

だめジャン、これ echo には通用しないのか。
先頭にハイフンがあるだけなら普通に表示できるし関係なかったか。
でも何か手段が他にあるはず、と思って探してみた。

Bashで文字列をエスケープをする – Qiita

printf %q “$value”
こんな手段があるとは。

printf

イケた、オプションと同じ文字列は case 文で振り分けすれば使えそう。
って zsh だと \n を入れなくても強制改行してしまうんだね。
そんなことより gnome-terminal で zsh を使うと Home/End キーでカーソル移動ができないことのほうが気になるぞ!
こんな所でも bash と zsh の違いがあるのがなんとも。