How to Multi/Dual boot :: Windows and Linux MBR での実際例

3つの以上のOSを破綻なくブート可能にする::MBR編

さまざまなディストリビューションを入れまくってから、最後に決めるのが一番ですから、いろいろ試してみましょう。

マルチブートの実例です。今回は以前に書いた原稿をもとに、MBRの場合を改稿しました。
Windowsはないと困るけれど、Linuxも使ってみたい。Windows7とWindows10の併存のような誰でもできるカンタンなDualBootはできるけれど、Linuxが絡むと難しいと考えるような方向けにまとめてみました。

まだMBRの方も多いと思いますので、実例を報告しておきます。2-3年かそこらの断面です。 現在の当方は、EFIブートで、全ディスクがGPT です。MBRと違い制約がないので楽ちんですね。 機会をみて入れ替えるとよいかと思いますよ。 また、VirtualBoxなどの仮想マシンではどうしても遅くなりますから、RAW=つまり本物を使ってOSは評価するのがやはりよいと考えています。

SSD容量とパーティション計画 MBR時代の実例

分割容量適用
/20Gいろいろ入れて8GB。12GB空き。*1
/home50GB40GB。不足気味。/homeは長く使うなら分けるべきかも。
swap9GBメモリ容量プラスアルファで全9GBくらい確保しています。
古いSSDの空きに。
/tmptmpfs最初はデフォルトで良い。fstabは慣れるまで触らないを推奨
*1=2年前、25GBで作成しましたが、gpartedで20GBに減らしたところです。到底使いそうにないので。

SSD1号 /dev/sda MBR/ブートローダ/GRUBはここに

DISK/PART用途適用
sda1Win7/Win10ローダNTFS チェインロードでWindowsのどれかを起動
sda2mint CinnamonEXT4
sda3ubuntu MATEEXT4
ex1HOMEEXT4 /home どのlinuxでも共通に。
ユーザー名を変えると楽。
ex2DATANTFS
ex3ディストロ評価完全実験用、ときどき起動しなくなる。

SWAP は必ずしもパーティションを必要としない

Linuxをいくついれようがswapはひとつで困らないと思います。また、最近のカーネルではファイルをSWAPとして設定できますから、専用パーティションは必ずしも必要ではありません。覚えておくとハッピーになれるかも。

転ばぬ先の杖 GRUBのMBRへの書き込み

SSD2=/dev/sdb に時々予備的にGRUBを書き込んでいます。いろんなディストロをいれて「お試し」するためにおもに使っています。メインが壊れてしまったときでも、インストールUSBメモリなどなしで、すんなり復旧作業に入れますよ。快適。

その他のおせっかい

ちょっと使ってみたいならライブISOでもいいです。SSDでも15GBとっておけばだいじょうぶです。本格的に使う可能性があるなら最初からディストリビューションの推奨どおりに割り当てたほうがよいです。めんどくさいです。
/tmpが少なすぎると困ることがありますので、運用次第ですが注意してください。RAMに割り当てると小さいわけで。
メモリ合計8GBあれば通常余裕です。現在4000円位でしょうか。 4GBあればライトなデスクトップ用途は十分かなと。VirtualBoxなどを常時起動するのであれば、8GBほしいところですね。めんどくさいので16GBです。
Cinnamonに比較してMATEはメモリ消費は少ないです。ですが、Windowsに比べると他のフレイバーも少ないです。あんまり気にかける必要はないです。8GB積んでいる場合、起動状態で1GBとすこし消費ってのを目安に考えてください。軽いブラウジング程度では4GBを超えることはまったくないです。SWAPも発生していないのと同じです。

無精者のバックアップ

マルチブートで、パーテションスライスを分けすぎると、バックアップ計画がめんどうになります。/home を独立させるぐらいが楽でいいと思います。 ざくっとな!!です。/home は分割していますので当方は10年以上引き継いて使っています。細かい設定ファイルもそのまま軽い調整で継続できます。考え方次第です。/homeも含めて1パーテでも良いかもしれませんが、アップグレード時によりめんどうな作業が発生しますので、ゼロから環境を構築するのが苦にならない人、レストアしながらでいいやと思える人以外にはあまりおすすめしません。

おまけ::今日の私のメインSSDの構成/UEFIブート、現在GPTです。(上記のMRRではありません)



  • 2番目::/boot/efi Windows10と共用 FAT
  • 8番目::/home 各Linuxで共通のEXT4
  • 自分の結論:: UEFIブートがもっともシンプルに構成できていい。
  • BIOSでの uefi bootのセレクター"も"使いやすいので、なんとでもなるかんじです。

サンプルコードを一括改訂:: 退屈なことはPythonにやらせよう

退屈なことはPythonにやらせよう::準備レビュー

せっかくのサンプルの改行コードがDOSだったり、シェバンが何だったりします。そこをまず治します。

退屈なことはPythonにやらせよう ――ノンプログラマーにもできる自動化処理プログラミング」のレビューの前に

これではちょっとLinux環境(やたぶんMAC OS Xでも?!)並びにWSLではいささか扱いにくいので、

  • 改行コードを変更します。DOS改行をUnix改行に。
  • シェバンをLinux環境に合わせて書き直します。

するといいかもしれません。失敗してもまた展開すればいいです。
Windows向けの本だったのかぁ。そういえばドライブレターの記述が……。

以下、一括の呪文。配下のpyをぜんぶ書き換えて、オリジナルは残します。PerlのOneLinerってこういうがさらっとできるので大好きです。配下には書き換えたいファイルが47個ありますね。

新規端末 CTRL+ALT+T

#zip展開したディレクトリで、次のperl行を発行します。

~/Programming/py/Python_practice_projects <<ここに展開したとします。

$ perl -i.4Windows -lpe 's/\r// ; s|^#\! python3$|#! /usr/bin/env python3| if 1 ' **/*.py  Enter

一瞬で終わらなければ、切り貼りミスかも。

--
そのまま続けて::
実行属性を付与
$ chmod +x **/*.py Enter


$ grep -r '#! /usr/bin/env python3'  Enter
書き換わっていることが確認できます。

$ ./ch03/collatz.py  Enter

整数を入力してください:


何がおきるか。シェバンは1行目、改行はDOSという前提です。それを一括で書き換えます。


  • シェバンが、#! /usr/bin/env python3 に変更される。Linuxフレンドリー
  • 改行コードは、LFに変更されているはず。Linuxフレンドリー
  • オリジナルファイルは、.4Windows という拡張子付きで残る。安心です。




レビュー::
いまのところベッドでの寝酒代わりなので、そのうちちゃんと。



2配信チャンネル同時に。見逃さない、fujirock2018 automaton。timeshift 、ondemand で鑑賞するシンプルハック[改稿]

フジロック2018(fujirock2018)などストリーミング、ライブ配信を安定画質、タイムシフトで鑑賞する。パーフェクトらくらく技法

いうなれば、ライブ配信に関わるオートマトンを稼働させるということ。オンデマンドっぽくというか。ubuntuでうまくないので、manjaro での稼働にしました。

らくらくなのは結果であって試行錯誤は涙付きかもしれません。技術レベルは初心者より少しぐらい慣れたPC中級者でしょうか。
まったくの初心者でもじっくり読んで数行のコマンドを発行すれば使えるようには配慮したつもりであります。

ubuntuではうまくいかない場合があったため、テストを繰り返したmanjaroに戻しました。結果、非常にうまく動作しています。満足です。

エキスパート向け要約::本質はたったの1行です。オートマトンっぽくするためには2行です。

   $ at -t 201807281250
   timeout 4000 mpv  https://youtu.be/Rjrgz-lfcdQ -o 'The Birthday.mkv'
熟練ユーザーにはこの2行だけでご理解いただけるかと思いますので、ここまで読めばだいじょうぶです。
さて、本論です。

Linuxに含まれるコマンド、アプリでいろいろ試してみた結果::次の観点から選びました

  • 回線が不安定な環境でも可能な限り高画質でライブ一時保存しつつ鑑賞する。中断や停止がほとんど起きない。
  • タイムシフトで鑑賞できる。但し、生成ファイルは巨大になっていくので、ストレージに余裕がないとつらい。不要になったらどんどん削除していくほうがいい。
  • フジロックライブ配信タイムスケージュルを勘案して、時刻指定自動起動、自動終了させる。放置しておくとストレージ圧迫です。ジョブを停止するのを忘れないでください。

技術的おおざっぱ(結果だけ得たい場合は知らなくてもいいこと)

  • 結果的に mpvとyoutube_dl の機能を組み合わせている。当然だがプレイヤーはデコードしながら動いている。これはWMPでも同じである。ブラウザ内動画再生エンジンでも同じである。それをインターセプトしている。 
  • 都合、 atコマンドで自動化。リアルタイムでH.264/MKVにして自動的にキャッシュ保存する。
  • ちょっと期待していたWindowsW10のゲームモードではうまくいかない(マイクロソフトが悪いわけではありません。そういう用途です)。このLinuxオートマトンなら稼働中に何をしてもだいじょうぶ。タイムシフトでキャッシュファイルで観ることができる。
  • チャンネルを切り替えたりしてもOK。他のアプリも起動できる。ブラウザでニュース読んだりしてもだいじょうぶ。
  • 2ライブチャンネル同時でもだいじょうぶ。速いマシンが必要です。
この一連の流れは「オートマトン」録画マシン構築に見える人もいるかもしれませんが、キャッシュを明示的に指定して生成していける動画再生エンジンであるmpvの機能の応用です。不安定な回線でライブ配信に限らずyoutubeコンテンツを綺麗に、遅延や中断なく視聴する冴えた方法かと思います。

所要コマンド:: ubuntu でうまくないので、manjaroに戻しました(だいじなことなので繰り返します)

このライブ配信タイムシフト視聴技法が使える可能性のある人

  • UNIX系の仲間。Linux,MAC OS X,及び最近ではWindows10にWSLを導入している人。
  • (必要コマンドがインストールできる人なら、事実上世界の誰でもいける)
※LinuxでManjaro と ubuntu で実証実験を行ってみました。他の環境では深入りして試していません。WindowsNative に移植されたWinバイナリではうまく動作しませんでしたのでさくっと中断。WSLなら可能性はあると思います。ubuntuでうまくないので、ManjaroLinuxに戻しました。

実際に仕込んだコマンド例::Linuxではこうする。

以下はもちろん未来のことなので、何が起きるかわかりません。テストした範囲では、とてもうまく動作しました。タイムスケジュール は後ろめにずれがちみたいです。
たとえば、今日土曜日、The Birthday が12:50からライブ配信予定です。 Linuxのターミナルで、

土曜日の見本

   $ at -t 201807281250
   ついで、次の1行を貼り付けます。

   timeout 4000 mpv  https://youtu.be/Rjrgz-lfcdQ -o 'The Birthday.mkv'
そして、CTRL+D とします。最後のファイル名は必ず変えてください。上書きされますからね。
以上で、12:50から4000秒ライブ配信をキャッシュします。タイムシフトでみることができると思います。観る際は、VLC、TOTEMなどが良いかもしれません。 以下でも構いませんが、当方環境では多少不具合がでます。
$  mpv ./tmp/cache.mkv
$  vlc ./tmp/cache.mkv
でもいいし、たいていのひとはマウスクリックでしょうね。

確認します。atコマンドに登録されているjobをリスト表示します。

$ atq
1 Sat Jul 28 12:50:00 2018 a your_name

これでもむつかしいとお嘆きの貴兄に

$ mpv  https://youtu.be/Rjrgz-lfcdQ -o 'The Birthday.mkv'

$ mpv  https://youtu.be/Rjrgz-lfcdQ -o ./tmp/cache.mkv

とPCの前で時間になったら手動で起動してください。そして、1時間ぐらいしたらCTRL+C で終了します。これなら誰でもできそうです。スマホでアラームを 設定しておくなり、人間が頑張るのです。1行だけですけどね。苦にならない人はこれでもだいじょうぶですが、PCは自動化して使うものかと存じます。
保存ファイルは場所を指定できますが、/tmpなどストレージ残り容量には注意です。
キャッシュされるライブ配信のサイズ、概算で1時間あたり2GiBです。

間違えて登録した場合

$ at -l    #登録ジョブリストを表示、番号がわかります。
$ at -d 2  #間違えて登録した、不要になったジョブを番号2で削除します。

あまり遅い環境では安定した動作は見込めない可能性があります。

  • 検証している暇はないですが、おおむねメモリーは8GBはあったほうがいい。当方の環境では1セッションあたり1GiBを超えてますから、もっとあったほうがいいかもしれません。16GiB搭載しているシステムです。
  • 保存するストレージ空きは、1時間2GB程度の生成と見積もると良いです。
なお、日曜日はこんなかんじの例です。

例::日曜日 Sunday 7/29 Channel 1

11:30 - King Gnu
at -t 201807291130
timeout 3600 mpv https://youtu.be/0hjO3bCxUgE -o 'King Gnu.mkv'
13:20 - Suchmos
at -t 201807291320
timeout 3600 mpv https://youtu.be/0hjO3bCxUgE -o Suchmos.mkv

トラブルシューティング

  • atでスケジュールしたら電源管理でPCが勝手に眠らないようにします。
  • Windows10+WSL でうまく行かない場合は、Linuxをインストールしてもいいかも。
  • MAC OS X でうまく行かない場合は、Linuxをインストールしてもいいかも。
当方の感覚では、カジュアルに3日間だけOS変えるってのもありです。
ubuntu18.04LTSが、今現在のオススメ。当方のmanjaroでは負荷が高いです。HW支援が効いてないのか、全般にCPUが全力で働いてしまってます。ubuntuではCPU負荷は低いままです。mpv.confで HWアクセルを有効にしています。
ふたつのLinuxのmpv設定ファイルはハードリンクなので全く同じです(あまりこういうことはしないと思いますが)。
バージョンはもちろん違います。gitも追ってみたのですがmanjaroでは負荷が高いままですから、今回は時間の都合 ubuntuで済ませます。mesa絡みかも。


キャッシュディレクトリでのファイル生成状況を監視するコマンド行 以下の($は不要)、端末に貼り付けてリターン。5秒毎にファイルが増えていればたぶん成功しているっぽいと思いましょう。
$ cd /tmp
$ while true; do ls -l *.mkv| perl -alnE'say "$F[4]  \t $F[8]" ' ; sleep 5s ; clear ; done

余談::「今々変数」を使う、またはシェルのコマンド展開

$ TODAY_IMAIMA=`date +%Y-%m%d_%H%M` #今々変数

$ echo $TODAY_IMA
2018-0728_0124

なので、

$ TODAY_IMAIMA=`date +%Y-%m%d_%H%M` #今々変数

と打っておいて、

$  mpv  https://youtu.be/Rjrgz-lfcdQ -o ./tmp/$TODAY_IMAIMA.mkv

とすると、その都度の「年月日時刻」.mkv になりますから、

$  mpv  https://youtu.be/Rjrgz-lfcdQ -o $(date +%Y-%m%d_%H%M).mkv

より安全を期するなら

$  mpv  https://youtu.be/Rjrgz-lfcdQ -o /tmp/アーティスト名_$(date +%Y-%m%d_%H%M).mkv

とするとファイル名の競合は1分以内に同じコマンドを発行しない限り起きません。問い合わせなしで上書きされますから、注意してくださいね。空白はクォートしてください。忘れないでください。同じキャッシュファイル名を指定するとまるっと消えますよ。
今回の場合でいけば、アーティスト名がわかっているので、既述のようにバンドなどの名前を指定しておけば大丈夫です。コンテナ名(この場合、拡張子)を付けるのは忘れないでください。とても大事です。


動作確認環境 ➡ manjaroに変更しました。


System: Host: manjaro Kernel: 4.14.57-1-MANJARO x86_64 bits: 64 gcc: 8.1.1

System:    Host: ubuntu Kernel: 4.17.10-041710-generic x86_64 bits: 64 gcc: 8.1.0
           Desktop: Cinnamon 3.8.7 (Gtk 3.22.30-1ubuntu1) Distro: Ubuntu 18.04.1 LTS
Machine:   Device: desktop Mobo: ASUSTeK model: ROG STRIX B350-F GAMING v: Rev X.0x serial: N/A
           UEFI: American Megatrends v: 4011 date: 04/19/2018
CPU:       8 core AMD Ryzen 7 1700 Eight-Core (-MT-MCP-) arch: Zen
Graphics:  Card: Advanced Micro Devices [AMD/ATI] Tobago PRO [Radeon R7 360 / R9 360 OEM] bus-ID: 08:00.0
           

2セッションのリソース状況(びしばし食ってます)


プロセスの状況(片方はテストです)



キャッシュのVideo情報の例

カンタンにいうと当方の設定で、いわゆる H.264、コンテナMKVです。 FHDです。 早い話がこの動画コーデックに対応していない環境は事実上ありません。 標準です。Androidでも、iPhoneでも、なんでもOK。
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : High@L6.2
Format settings                          : CABAC / 4 Ref Frames
Codec ID                                 : V_MPEG4/ISO/AVC
Bit rate                                 : 5 305 kb/s
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Variable
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Stream size                              : 591 MiB (96%)

所要コマンド:: ubuntu でうまくないので、manjaroに戻しました。

※ubuntu系18.04LTSは、atコマンドが標準では導入されていません。 次のコマンドを発行してください。arch系Manjaroは標準で導入済みかと思います。もし不足していれば導入してください。manjaroも素に近いインストールで試してみたところ、atコマンドは追加導入ですね。pamac でatと検索、追加コミットしてください。そしてデーモン起動です。systemctl start atd

ubuntu系になぜか親切なメモ

#入ってなければ、at mpv youtube-dl をインストールします。導入済みなら何も起きませんので発行しても問題はありません。

$ sudo apt install at mpv youtube-dl


ファイル名の最大長を求める。UTF-8におけるNTFSとEXT4の運用 ちょっぴりZFS

ファイルシステムの限界を探る::
ファイル名長のバイト数を求める。

4年位まえに書いて公開するのを忘れていました。NTFSとEXT4で長い長いファイル名をどう扱っていけばいいのか?! についての調査研究です。

●ファイルシステム NTFS/EXT4でのファイル名最大数を実際に試して計測した。
●EXT4が意外に少ない結果になった。NTFSの勝ち?! 留意すべき事項。
●ファイル名長大化推進委員会としては由々しきこと。

ファイル名バイト数を求める呪文/Perl OneLiner

$ ls | perl -pe '{ chomp $_ ; my $FILELENGTH=(length) ; print "\n$FILELENGTH\t" }' | sort -n


$ ls | perl -wnE '{ chomp  ; my $FILELENGTH=(length) ; say "\n$FILELENGTH\t$_" }' | sort -n


適当なディレクトリで実行するとバイト数でソートされた結果が出力されます。

たとえば、以下1行を端末にコピペ。

$ cd ; ls | perl -pe '{ chomp ; my $FILELENGTH=(length) ; print "\n$FILELENGTH\t" }' | sort -n

6 公開
9 ビデオ
12 ピクチャ
18 ダウンロード
18 テンプレート
18 デスクトップ
18 ドキュメント
18 ミュージック

インストール直後のubuntu系ホームディレクトリは日本語ディレクトリなので、このようにカウントされます。ロケール LANG=ja_JP.UTF-8 が基本的にどのディストリビューションでもデフォルトの時代ですからね。とりあえずはそれに合わせると。

UTF-8ではワイドキャラクターは3バイト(大半)ですので、日本語文字列が入っている場合でもこれで正解です。いわゆる「全角2文字はx3で、6バイト」です。

但し、ほとんどの人は使いませんが日本人が使う可能性のある文字は4バイトのものもありますので、単純に勘では計算できません。だいたいx3で目安にはなります。追加文字は4バイト以上に割り当てられているというわけです。そこを記憶しておくと暗算できるようになります。(誰がするか)

バイト値で返ってくるのはいろいろと便利です。但し、原稿用紙換算の制限のある文書ではShift_JISの考え方で「文字数カウント」しないと経済社会に対応できませんのでご注意を。縦書き原稿と横書きでは組版の考え方も違いますからね。

無駄な検証::
相互運用を考慮すれば85文字以内に収めるように習慣づける。


さて、ベタに検証してみました::常に数えるわけではないし、ながければ怒られますが、スクリプトなどで処理する場合は注意です。

fuse経由NTFSは、どんな文字(アスキー領域でも、日本語でも)でも255文字分のファイルが作成できます。バイト値で755です。(RAW OSを絡めていえば「最近のWindowsでは」と条件付きになるようです。サポート切れXPなどは関係ないのでどうでもいいです)

以下のファイルはNTFSに作成できます。限界の765バイトにチャレンジしてみました。(三木清先生、青空文庫)すばらしい論考です。ぜひどうぞ。

touch してみるとすぐにわかります。仕様を超えた場合は、怒られますから。

哲學はどう學んでゆくかといふ問は、私のしばしば出會ふ問である。今またここに同じ題が私に與へられた。然るにこの問に答へることは容易ではないのである。これがもし數學や自然科學の場合であるなら、どういふものから入り、どういふ本を、どういふ順序で勉強してゆくべきかを示すことは、或ひはそんなに困難ではないかも知れない。それが哲學においては殆ど不可能に近いところに、哲學の特色があるともいへるであらう。哲學は何であるかの定義さへ、立場によつて異つてゐる。立場の異るに從つて、入口も異る筈である。しかも哲學的知識には、端初

EXT4では以下の例で限界近くになります。253バイトにしかなりませんでした。(夏目漱石、草枕、青空文庫)ちなみに私はこの「草枕」が大好きなんです。

住みにくき世から、住みにくき煩わずらいを引き抜いて、ありがたい世界をまのあたりに写すのが詩である、画えである。あるは音楽と彫刻である。こまかに云いえば写さないでもよい.txt

EXT4では、英数字なら255文字のファイルが作成できますが、「日本語」では不可能です=中国語も同じです。カナダ先住民族文字も不可能ですし、シュメール楔形文字もだめでした。めんどくさいのでファイル名は85文字以内と考えておくのが得策です。85x3は255です。安全な範囲が85文字です。ZFSでも同じようですが現在は仕様拡大したかもしれません。

ですから、バイト数で250以上を危険水域としてファイル名長をチェックしたほうがいいかもしれません。少なくともGnomeでは255バイトぎりぎりのファイルはゴミ箱には入れられません(なんてこったい!!)。拡張子付加とかそれ以上できないためなのかもしれません。リネームは促されません。端末で地味に作業しましょう。

※おまけ、または結論


NTFS上に作成した長大な名前のファイルは、仮想マシン(Windows)では見えませんでした。もちろんWineでは見えています。ファイル名長大化推進委員会の私としては、Linux EXT4の日本語で扱える文字数の少なさにがっかりです。笑)

一律に閾値255バイトで制限したほうがいいのでしょうね。ファイルシステムをまたがる場合、異機種間ネットワークを組む場合、可搬性を考慮した場合など。あー、コンピュータってめんどくさい。

追試::2018年7月24日、同じ結果でした。85文字以内にしないとうまくないのでしょう。

touch: `アル・ジャロウ,ウィリー・ネルソン,ウェイロン・ジェニングス,キム・カーンズ,クインシー・ジョーンズ(プロデューサー及び指揮),ケニー・ロギンス,ケニー・ロジャース,ジェフリー・オズボーン,ジェームス・イングラム,ジャッキー・ジャクソン,シンディ・ローパー,シーラ・E,スティーヴィー・ワンダー,スティーブ・ペリー,スモーキー・ロビンソン,ダイアナ・ロス,ダリル・ホール&ジョン・オーツ,ダン・エイクロイド,ディオンヌ・ワーウィック,ティト・ジャクソン,ティナ・ターナー,ハリー・ベラフォンテ,ヒューイ・ルイス&ザ・ニュース,ビリー・ジョエル,ブルース・スプリングスティーン,ベット・ミドラー,ポインター・シスターズ,ボブ・ゲルドフ,ボブ・ディラン,ポール・サイモン,マイケル・ジャクソン,マーロン・ジャクソン,ライオネル・リッチー,ラトーヤ・ジャクソン,ランディ・ジャクソン,リンジー・バッキンガム,レイ・チャールズ' に touch できません: ファイル名が長すぎます

なので、~/Music/アルバム名/演者/We Are The World.flac の演者の部分がつくれません。いや、作んなくていいから。^^; U.S.A. For Africa でいいんです。

コーラスなどの楽曲で演者を編集、全参加アーティストを列記するという野望が潰えた瞬間です。

Linux音楽プレイヤーを比較する。 楽曲管理で評価と手軽な再生で考える。

Linux音楽プレイヤー比較 楽曲管理視点と再生と。

あらたに、DeaDBeefとLollypopを追加しました。再生が使いやすいという観点だけではなく、楽曲管理ツールとしてどうなのだろうか?! という観点でも検討したものです。どれかひとつに絞る必要はありません。シーンに応じてお好きなものを選べば良いと思います。

タグの問題::略――個人的には、アプリ名はあげませんが、文字化けするソフトウェアは日本語ユーザーには時間の無駄です。とさえ思います。TAGも直しましたがちゃんと読み取れないのは現状の仕様(利用者像の設定)だと思います。Latinな世界の人中心の開発なので仕方ないですね。2.4でUTF-8で書き込んで、古い機材(昔のwalkmanなど)のことは忘れてしまうってのがいいかもしれません。結局、過去との互換性を考えるからいろいろ不都合も生じるわけでして。過去の機材に縛られる本人責任もあります。

ちなみにライブラリはCDから取り込みで、FLACにしています。基本的にはgracenoteです。

■シーンに応じてお好きなものを選べば良いのです。私の好みです




プレイヤー名称評点好感ポイントケースCue対応導入方式
高頻度
audacios90軽いクリックして再生。デフォルトに設定OK標準、PPA

クレメンタイン80見通しがよいライブラリ単位で再生。管理も任せる。OKPPAまたはdebダウンロード

mpv70軽いさくっと再生。コマンドラインからさっと再生、さっと終了。-PPAまたコンパイル

VLC audio CD Player50それなりそれなり。ほんとそれなり。-標準、PPA

DeaDbeef90簡潔で素敵jackと相性よし。音質重視派向け。OKPPAまたはdebダウンロード
低頻度
Lollypop90現代的現在評価中
再生に割り切ると素敵
NAPPA

Rythmbox
banshee
50特になし総合的だが好みに左右されるかも。NAほぼ標準

※DeaDbeefとLollypopの起動頻度が当方では多くなってきています。ArchLinux系は、いずれもGUI/ pamac で検索してインストールできます。ターミナルでももちろん。頻度は4年前の起動頻度がベースなので、現在とはかなり違いますね。

以下過去稿ですが、いまでも同じかと。

WINEでiTunesはバージョンも古い上、実用に耐えません。せめてVitualboxでしょうね。

管理と再生は別物なので、そこはわけて考えてよいかと思います。最近だと、購入や取り込みと管理と再生って区切ってもいいかもしれません。楽曲ファイルへの埋め込みアートワークを好みに変えたり、歌詞を埋め込んだり、タグを付け直したり、そういうのがここでいう楽曲管理です。

さらに凝っていくなら、楽曲毎にアートワークを変えるとか、gracenoteを参照して、ファイル化された名称は一部気にいらないのでぜんぶ付け替えたいとか (ファイルリネーム)など管理作業は、(本末転倒という意味では)やまほどあります。笑)  CDDBの違いも大きいですよね。ビリー・ジョエルのアルバムはアルファベットでタグ付けしたいとか。

全体には再生に関していえば、Nativeアプリで十分ではないかなと思います。Nativeを使うべきでしょう。いくらWindowsで好きなアプリでもWineではありえないです。Virtualboxでもだめです。遅延計測もしてみましたがBGMでは使えても鑑賞には無理があります。気にならない方もいると思うのですが、楽曲再生に関してはNativeアプリで使ってみてください。仮想環境+JACKについての当方の意見でした。

希望をいえば、Linuxにも WindowsのMusicBee並の管理と再生ソフトウェアがあれば\(^o^)/ですね。
Windows環境では、MusicBeeが最強じゃないかと思っています。ほとんど iTunesを凌駕しているといっても過言ではないのではないかな、と。私の好みは、ディスコンになってしまったSONY MediaGO なのですが。悲しい。

Winidowsはめったに起動しないので恩恵に預かれませんが。そういえば、MusicBee(Windows)はインターフェイスを変える検討をはじめた模様ですね。どうなるんだろう。ほぼひとりで開発している様子なので、すごいなぁ、です。(このパラグフフは数年前に書いたものです。現在まったく使っていませんので、当時の作者からの情報です)

■オススメリンク/EACのLinux活用をまとめました。
可逆圧縮完全マニュアル(への道) カバー率99.6%レベルで、FLACからTAK、APEまで様々な可逆圧縮フォーマットの取扱についてまとめました。OS問わず参考にしていただけると思います。

The backup GPT table is corrupt, but the primary appears OK, so that will be used.

"The backup GPT table is corrupt, but the primary appears OK, so that will be used."


新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T
#
sudo gparted /dev/sdd
#
sudo gparted /dev/sdd
======================
libparted : 3.2
======================
The backup GPT table is corrupt, but the primary appears OK, so that will be used.
#name partition
今まで           TOSHIBA_etcs
書き換えた。 TOSHIBA_E
#
結果エラーが収まった。

パーセントエンコードをさくっと処理 percentencode URI_Encode

さくっと、パーセントエンコード percentencode 3分クッキング 🐪

「はたらく細胞」がいまマイブームです。コミック原作のアニメです。AmazonVideoでも配信されていますね。さて、Perlコマンドですからほとんどの環境(MACとLinux)では事実上標準ではいっています。
貼り付けるだけ。すぐにそのまま使えます。Windows 10でLinuxを利用できるWSL(Windows Subsystem for Linux)のユーザが増えてきたと仮定すると同じくそのまま使えます。

●🐪モジュールは、https://metacpan.org/pod/URI::Escape 標準モジュールです。インストール不要です。入ってます。
●あまりにカンタンすぎるのでWEB上サービスはありますが、ローカルで処理できるとシェルスクリプトをはじめとするプログラムに組み込めるので便利かと思います。
●定義(RFC 3986)されるまでは用語が確立されていなかったので、先行したこのモジュールではURIエスケープと呼んでいるみたいですね。

はたらく細胞  ⇄  %E3%81%AF%E3%81%9F%E3%82%89%E3%81%8F%E7%B4%B0%E8%83%9E

%エンコード(percentencode)は16進ですからふつうの人間には読めない並びになります。空白なら覚えていますが。人間には全部おぼえるのは通常無理かと。

新規端末 CTRL+ALT+T

# OneLiner で文字列を埋め込む

$ perl -MURI::Escape -E 'say uri_escape("はたらく細胞");'Enter
%E3%81%AF%E3%81%9F%E3%82%89%E3%81%8F%E7%B4%B0%E8%83%9E

#OneLiner で文字列を引数の配列@ARGVで

$ perl -MURI::Escape -E 'say uri_escape("@ARGV");' "はたらく細胞"Enter
%E3%81%AF%E3%81%9F%E3%82%89%E3%81%8F%E7%B4%B0%E8%83%9E


#OneLiner で文字列を引数の番号$ARGV[0]で。コマンド置換の例

$ perl -MURI::Escape -E 'say uri_escape($ARGV[0]);' "はたらく細胞"Enter
%E3%81%AF%E3%81%9F%E3%82%89%E3%81%8F%E7%B4%B0%E8%83%9E



シェルでコマンド置換する例です。
1) 変数 hatarakusaibou に格納。
2) そして変数が有効になっているか調べる。

$ hatarakusaibou=$(perl -MURI::Escape -E 'say uri_escape("@ARGV");' はたらく細胞)Enter

$ echo $hatarakusaibouEn ter

%E3%81%AF%E3%81%9F%E3%82%89%E3%81%8F%E7%B4%B0%E8%83%9E

上の結果と一致しているのでOK。




引数を「+」で連続させる文字列を一発で取得するには

$ perl -MURI::Escape -E '$escape=uri_escape("@ARGV"); $escape =~ s/%20/+/g ;say $escape' はたらく細胞 公式 アニメEnter

%E3%81%AF%E3%81%9F%E3%82%89%E3%81%8F%E7%B4%B0%E8%83%9E+%E5%85%AC%E5%BC%8F+%E3%82%A2%E3%83%8B%E3%83%A1


完成かなと思います。bash関数にするなり、バッチファイルにするなりしておくと便利かも。bash履歴から呼び出すってのも王道のひとつです。

以上の雛型があれば、スクリプトにするのは容易です。というか動いていればそれで完成なので、以上で、既にできていますね。
  • Python3 + BeautifulSoap さんで、グーグル様にちょっと投げてみる時などに使えますし、そもそもPythonなのだから標準ライブラリで処理せよという話。
  • [Python3] 
    percentencode=urllib.parse.quote('はたらく細胞') ⬅ これでも解決します。
  • -E で、say を使っています(改行が自動でつくと困る場合はprintでどうぞ)。
  • 標準モジュールURI::ESCAPEをワンライナーでも使えるように組み込む。
    -MURI::Escape 
uri_escape_utf8($ string)という使い方のほうが、UTF-8を扱う場合はよいのかもしれません。特に長い文字列を扱う場合。

# OneLiner 上記のリバース(戻し方)

$ perl -MURI::Escape -E '$unescape=uri_unescape("@ARGV"); ;say $unescape' %E3%81%AF%E3%81%9F%E3%82%89%E3%81%8F%E7%B4%B0%E8%83%9E+%E5%85%AC%E5%BC%8F+%E3%82%A2%E3%83%8B%E3%83%A1
はたらく細胞+公式+アニメ ⬅戻りました。

#bash 関数に組み込む:: たとえば .bashrcなどの末尾に貼り付け(これだけもっていけばだいじょうぶ!!) 

function URIESCAPE () {
  #引数を「+」で連続させる文字列取得
  perl -MURI::Escape -E '$escape=uri_escape("@ARGV"); $escape =~ s/%20/+/g ;say $escape' $@
}


その後は、次のコマンドで呼び出せるようになります。source .bashrc や .bash関数定義をまとめたファイル。わからない場合は、再起動すればいいです。


そうすると、次のように呼び出せば、便利になるかと思います。


$ URIESCAPE はたらく細胞 

こうして出力された文字列をコピーして使います。背後で誰がはたらいていようが、それがPerlだろうが、AWKだろうが、使う側からみれば関係ないですよね。「はたらく細胞」の世界と同じで、白血球の働きを知らなくても、私たちは生きていけるのです。がんばれ、血小板のナンバー2。

Python のスクリプトをPerlで修正する。Python2をPython3対応にするプチ事例

PythonソースコードをPerlでさくっと修正してみる

新規にターミナル(端末)。CTRL+ALT+T

2to3 という、 「Python 2.x のソースコードを読み込み、一連の 変換プログラム を適用して Python 3.x のコードに変換するプログラム」がありますので、本来の目的用ではなく、Perlのワンライナー活用例です。

元のファイル、python000.py Python2用 3行のファイル。

# coding: utf-8
print "パイソン世界2から3への代表的な例::2to3が用意されている\n覚えておくといいかも。"

exit()

実行

$ python2 python000.py
パイソン世界2から3への代表的な例::2to3が用意されている
覚えておくといいかも。

Python3で実行しようとすると怒られる。
$ python3 python000.py
                                          ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print

なるほど、printの扱いが変わったのですね。これを修正します。修正の仕方も教えてくれる親切Pythonです。

$ perl -wlpe 's/\b(print)\b.*\"(.*)\"/$1 ("$2")/;s/\# coding: utf-8//' ./python000.py

1)プリント行を()で囲む仕様変更。
2) # coding: utf-8 は当方では不要なので削除する。Windows環境では必要なのかも。UTF-8でしか書かないし、IOは全部UTF-8なので。

まとめて実行、1ライナーで修正して保存、そのまま実行
perl -wlpe 's/\b(print)\b.*\"(.*)\"/$1 ("$2")/;s/\# coding: utf-8//' ./python000.py | tee python003.py && echo "終 実行"; python3 python003.py 
print ("パイソン世界2から3への代表的な例::2to3が用意されている\n覚えておくといいかも。")
exit()
終 実行
パイソン世界2から3への代表的な例::2to3が用意されている
覚えておくといいかも。

$ python3 python003.py

としても当然同じなので、これでOK。

まとめ::結局bash上の使い方事例なのです

perl -wlpe 's/\b(print)\b.*\"(.*)\"/$1 ("$2")/;s/\# coding: utf-8//' ./python000.py |\
 tee python003.py \ 
 && echo "終 実行";\
 python3 python003.py 
パイプ、接続をばらして説明すると
1行目、PerlでPrintする内容をキャプチャしておいて、Python3仕様に変換。不要なUTF-8行削除
2行目、Tee で結果(Python3で動く内容)を出力しつつ新たなファイル(python003.py)に保存
3行目、作業が終わった目印を出力して(冗長)
4行目で、Python3で新規に生成されたスクリプトファイル(python003.py)を引数として実行
こういう流れですね。teeはなくても困らないけれど、ないとめんどくさいコマンドかなと思います。結局便利ですね。


範囲指定、行指定、行番号で日本語文書を扱う。perl 1 liner(ワンライナー)

テキスト整形:: Perl でちょろく範囲指定、範囲を置換加工、そのバリエーション 

🐪 Perl使いだして25年、相変わらずタコユーザーですが、日常よく使うパターンを五月雨式に投稿しております。すごいユーザーさんたちは何でもわかるのでしょうが、ふつうなので、誰にでもわかるように説明していきたいと思います。数学は理学部数学科よりもややできなかった人が教えたほうがいいからと思うのです。

さて、sedより便利。PCREはなんだかんだといって標準。自分の使い方ではPythonの正規表現との違いはほんの数カ所だった気がします。なのでPython使っても違和感はないです。sedは挙動がほんの少し異なるので、いまどきのLinuxやMACならPerlで書いたほうが、同じに動作しますから楽ちんです。Perlは派生品がないから基本的に同じ動作をするためですね。

新規端末。CTRL+ALT+T

#10行目から15行目までを出力

まずテストファイル2つを作ります。次のコマンドまたは環境に応じたパスでOK。
だいたい42行のファイルが標準構成で出力されると思います。Perl標準モジュールなのでたぶん名前の重複はないです。末尾に実際のファイルを添付しておきます。

ナンバリングなし。
find /usr/lib/perl5 -type f -name '*x*pm' -exec basename {} \; >text.txt
ナンバリングあり。
find /usr/lib/perl5 -type f -name '*x*pm' -exec basename {} \; | cat -n >text_n.txt 

実践テスト

好きな方/両方で試してみると良いです。

perl -lne 'if ( 10 .. 15 ) {print}'  text.txt
perl -lne 'if ( 10 .. 15 ) {print}'  text_n.txt

これだけで便利さはご理解いただけるかと。

応用 範囲内の文頭のみ置換
perl -lne 'if ( 10 .. 15 ) {s/^/文頭置換/; print}'  text.txt

範囲内の文頭のみ置換し、範囲外はそのまま出力(あえてクドく。範囲内と範囲外での処理を変えてみる場合)
perl -lne 'if ( 28 .. 40 ) {s/^/文頭置換/; print}else{print}'  text.txt 


#Perl 範囲指定でおぼえておくべきこと。Perlの癖みたいなもの。記憶法

  1. . ドットひとつは前後の文字列を連結(この投稿とは無関係の基礎知識)
  2. .. は範囲演算子
  3. ... も範囲、同一行マッチ(同一行の2番目以降のマッチ)はスルーする。あまり知られていない。
そのせいか、不毛なサンプルコードが検索されてしまいます。
基礎であるPerlDocを職業プログラマーでも読まない人が多すぎるからでしょうね。
3つまとめて覚えるとよいです。特に3番めはきっと役に立ちます。これを知らないと10行ぐらい余計なコードを書くはめになります。そして動かないとか。たぶん。

数字で行番号、// で囲えば正規表現で範囲指定できます。
行番号指定との組み合わせも可能です。
/\Q( 文字列 )\E/ で囲えばメタ文字をリテラル文字としてそのまま使えます。
クォートの略でしょうね。全文字列をふつうの文字として扱う際は、
最初\Qだけ必要で
最期の\Eは付けなくてもだいじょうな、ものぐさ仕様です。
サンプルの数字10,15は、お気づきでしょうが行数です。
Perlの特殊変数としては、「$.」 になります。 ワンライナーで
なくeval 使うような場合にはおぼえておくと捗ります。

以上程度の知識と応用で、だいたいのニーズには対応できるかと思います。

#正規表現で範囲出力、応用

perl -lne 'if ( /Tk/ .. /Camel/ ) {print}'  text_n.txt

範囲内の文頭のみ置換 正規表現と行番号のコンビ
perl -lne 'if ( /Exporter\.pm/ .. 15 ) {s/^/文頭置換/; print}'  text_n.txt

結果的に2行目から15行目まで置換して出力します。

範囲内の文頭のみ置換し、範囲外はそのまま出力(あえてクドく。範囲内と範囲外での処理を変えてみる場合) 1ライナーに改行をいれて掲載しています。

perl -lne '
  if ( /オレンジ/ .. /グレープ.*?ス$/ )  {
  s/^/文頭置換/;
  print;
  }
  else{
   print;
}
'  text.txt

実行ファイル(スクリプト)にしてもたったの10行。
GNU nano 2.9.8                                               tikan.plx
#!/usr/bin/perl -ln
if ( /Exporter\.pm/ .. 15 ) {
    s/^/文頭置換/;
    print;
}
else{
    print;
}
__END__


$ tikan.plx text.txt
などとして実行属性つけて叩いてみてください。同じ結果が得られます。

長くなりすぎましたが、ついでに::

結局はPerlでGrepする構文と同じと考えてもいいです。


$ perl -lne 'if ( /xpm$/ ) { print ;$i++}END{print $i . " 個あります"}' text_n.txt

こうすると、リストから xpm だけ抜き出して、その個数を教えてくれます。数える作業なんて人間がやるもんじゃないですから。

さらに簡潔っぽく & 人間らしく。

perl -lne ' /xpm$/ and  print and $i++ ; END{print $i .  "  個あります"}'  text_n.txt

読みこなし:: これもれっきとした制御構造です。最近確信しまた。こういう簡便な書き方で改修が捗るなら使えばいい。ラクダ本にもあります。カンタンなことはカンタンに!!

アンドとORさえ知っていれば英語はOKです。職業的な使い手ではなく道具としてプログラミングツールと向き合うひと向けですかね。

全般にこの書き方だと 単純構造なら、if や 1文字で実現できるお得なwhile を明示的に使わずに短く書けます。複雑になると and/orが複数回登場します。そうなると一般制御構造で書いたほうが圧倒的に人間的です。というかアメリカ人+州立大学で高等数学を教えているような先生でも読めない醜い(=読む気になれない)コードになります。
  1. 1行(1名)づつ地道に処理する前提です。 パール委員長のデフォルトな振る舞い。
  2. /正規表現RE/ に一致したら、その行を出力するだけのカンタンなお仕事。 
  3. ついで、カウンターを1個増やす。(パール委員長が「正」の字を黒板にかいていくイメージです)
  4. END{最期にまとめて「正」字の画数合計を委員長がお知らせ}

手抜きと短さが重要なのでカウンター初期化は省略。正しく動けば正義。初期値が未定義だとゼロなのでいいのです。このサンプルの応用でテキスト処理では相当高度なことはできちゃうと思いますよ。当職の脳内雛型000番の紹介でした。あと99個投稿します。

テストに用いたファイルの生成とリスト

find /usr/lib/perl5 -type f -name '*x*pm' -exec basename {} \;  | cat -n > text_n.txt

     1 ProxyObject.pm
     2 Exporter.pm
     3 Libproxy.pm
     4 wintext.xpm
     5 TextUndo.pm
     6 TextEdit.pm
     7 Text.pm
     8 QuitPBa.xpm
     9 QuitPB.xpm
    10 ned.xpm
    11 file.xpm
    12 Reindex.pm
    13 TextList.pm
    14 FBox.pm
    15 Spinbox.pm
    16 Tk.xpm
    17 ReindexedROText.pm
    18 ColorEdit.xpm
    19 srcfile.xpm
    20 act_folder.xpm
    21 Listbox.pm
    22 TixGrid.pm
    23 Camel.xpm
    24 MsgBox.pm
    25 openfolder.xpm
    26 winfolder.xpm
    27 folder.xpm
    28 DialogBox.pm
    29 ReindexedText.pm
    30 Pixmap.pm
    31 ROText.pm
    32 textfile.xpm
    33 LinkExtor.pm
    34 Proxy.pm
    35 ExampleP.pm
    36 Execute.pm
    37 ProxyServer.pm
    38 gettext.pm
    39 XPathContext.pm
    40 Expat.pm
    41 Showlex.pm
    42 Unix.pm