恥は/dev/nullへ by 初心者

プログラミング素人がのろのろと学んだことをつづっています♪

NotoSansCJKjp等の入手先

Googleが開発しているフォント「Noto」シリーズの中に「Noto Sans CJK JP」「Noto Serif CJK JP」があります。Sansの方がゴシック体で、Serifの方が明朝体です。

フォントの入手先

https://www.google.com/get/noto/

解凍時の注意点

HackGenと違って、何も考えずにunzipするとディレクトリ無しで解凍されます。
不便なので、 -dオプションをつけてunzipした方が良いです。

たとえば、以下のようにすると解凍されたファイル群はNotoSansCJKjpディレクトリに出力されます。

unzip  NotoSansCJKjp-hinted.zip -d NotoSansCJKjp


インストール方法

解凍したフォントのインストール方法は、以下の記事のとおりです。

Debianに「白源/ HackGen」をインストール - 恥は/dev/nullへ by 初心者

manページに色をつける

manページが白黒で寂しいなと感じたので、色をつけることにしました。

参考にしたページ

https://www.tecmint.com/view-colored-man-pages-in-linux/

2つの方法

参考にしたページでは、manページに色をつける方法として次の2つを紹介していました。

・ページャーをlessではなくmostにする  
・LESS_TERMCAP変数を設定する


ページャーmostにする方法

最初はmostを試してみました。
まず、mostをインストールします。

sudo apt install most


次に、.bashrcに以下の記述をして、ページャーをlessではなくmostにします。

export PAGER="most"


.bashrcの変更を反映させます。

source .profile

(.profileから.bashrcを読み込んでいるので、sourceの対象は.profileとなっています。)

これでmanページに色はついたものの、操作感がlessと違うのですぐにやめました^^;。

LESS_TERMCAP変数による方法

mostの使用はやめて、LESS_TERMCAP変数を設定することにしました。
(以下の内容は「参考にしたページ」からそのままコピペです。)

export LESS_TERMCAP_mb=$'\e[1;32m'
export LESS_TERMCAP_md=$'\e[1;32m'
export LESS_TERMCAP_me=$'\e[0m'
export LESS_TERMCAP_se=$'\e[0m'
export LESS_TERMCAP_so=$'\e[01;33m'
export LESS_TERMCAP_ue=$'\e[0m'
export LESS_TERMCAP_us=$'\e[1;4;31m'
# Following are the color codes that we used in the above configuration.
#     31 \u2013 red
#     32 \u2013 green
#     33 \u2013 yellow
# And here are the meanings of the escape codes used in the above configuration.
#     0 \u2013 reset/normal
#     1 \u2013 bold
#     4 \u2013 underlined

を.bashrcに追記して

source .profile

を実行しました。

実行結果

f:id:philojuan:20210829204011p:plain

fcitx-mozcの設定

先日(2021年8月27日)の記事においてxorgのインストールからウィンドウマネージャの設定までを行いましたが、fcitx-mozcの設定をしていなかったので、備忘録として残しておくことにしました。

先日行ったこと(再掲)

X window system、ウィンドウマネージャ、必要最低限のソフトのインストール。

apt install xorg
apt install i3
apt install fcitx-mozc
apt install sakura
apt install vim-gtk3
apt install sudo
apt install firefox-esr


.xinitrcの設定。

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
fcitx &
i3
# wmaker  ← 場合によってはWindowMakerを入れようかと。


fcitx-mozcの設定

fcitx-mozcの設定に使うツールとしては、以下のものがあります。

fcitx-config-gtk3
fcitx-configtool


自分が見た印象では、どちらのコマンドを実行しても同じものが起動しているように見えます(たぶん)。今回はfcitx-config-gtk3を使いました。

GUIの設定ツールが起動します。まずは「入力メソッド」タブを以下のようにしました。

画面下部に表示されているメッセージのとおり、1行目は直接入力時に関する項目となります。自分のキーボードは英語配列なので、「キーボード - 英語(US)」となっています。

2行目は変換時に関する項目なので、Mozcを使って日本語入力をすべく「Mozc」にして、右端は「日本語」にしました。

以上の操作に使ったのは、画面下部にあるボタンのうち次の2つです。

・プラスが描かれたボタン
・(右から2つ目の)工具マークのボタン


Mozcの行を作成するには次のようにします。

(1) プラスが描かれたボタンを押す
(2)「現在の言語のみ表示」のチェックを外す
(3)「入力メソッドの検索」欄に Mozc と入力
(4) Mozcという行が表示されたら、それを選んで「OK」を押す


なお、キーボードマークのボタンは「入力ウィンドウが無い場合の(既定の)キーボードレイアウト」を指定するためのものです。

次に「全体の設定」タブですが、こちらはデフォルトのまま触っていません。 私はWindowsでもLinuxでも「Ctrl + Space」でIMEのON / OFF を切り替えています。

最後に「外観」タブを開きます。 この中の項目で私が触るとすれば「状態パネルを隠すモード」くらいです。
この項目では、IMEのパネルを表示するか否かを選択できます。

パネルが表示された方が良い場合は「表示」か「自動」を選んでおけば良さそうです。

スクリーンショット

先日撮らなかったデスクトップ(という言い方でよいのか分かりませんが)のスクリーンショットを撮ってみました。

タイル型のウィンドウマネージャなので、隙間なくウィンドウが敷きつめられます。
(壁紙を設定した意味が無いかも・・・^^;)

MTF分析用のチャートを開くスクリプト

MT4でMTF分析(マルチタイムフレーム分析)をする時、以下の5チャートを開いてから「ウィンドウの整列」ボタンを押して並び変えるのですが、これが手間なのでスクリプトで行うことにしました。

・5分足チャート  
・15分足チャート  
・1時間足チャート  
・4時間足チャート  
・日足チャート  


やりたいこと

いま開いているチャートのうち1つをアクティブにして、そのチャートの通貨ペアを「分析したい通貨ペア」に変更します。
その上でスクリプトを実行すると、

・先述した5つの時間軸のチャートが開かれる  
・5つのチャートに普段自分が使っているテンプレートが適用される  
・5つのチャートが並び変えられる(ウィンドウの整列ボタンの代わり)  

という風にしたいと思います。

コード(スクリプト

早速コードを書いてみました。

#import "user32.dll"
   void keybd_event(int bVk,int bScan,int dwFlags,int dwExtraInfo);
#import

#define KEY_R 'R'
#define KEY_ALT 0x12
#define KEYEVENTF_KEYUP 0x0002

#property copyright "Copyright 2021, PHILOJUAN"
#property version   "1.00"
#property strict
// #property script_show_inputs  // スクリプトを実行する前にパラメーターを変更する場合はこの行を有効にする

input ENUM_TIMEFRAMES period_1 = PERIOD_M5;  // 1番ウィンドウの時間軸
input ENUM_TIMEFRAMES period_2 = PERIOD_M15; // 2番ウィンドウの時間軸
input ENUM_TIMEFRAMES period_3 = PERIOD_H1;  // 3番ウィンドウの時間軸
input ENUM_TIMEFRAMES period_4 = PERIOD_H4;  // 4番ウィンドウの時間軸
input ENUM_TIMEFRAMES period_5 = PERIOD_D1;  // 5番ウィンドウの時間軸

string tpl = "uhoho.tpl";    // ← チャートに適用したいテンプレートファイル名を記述

void OnStart()
{
    string cur_symbol = Symbol();  // 現在チャートのシンボルを取得

    //-------------------------------------------
    // 全てのチャートを閉じる
    //-------------------------------------------
    long next_chart = ChartFirst();
    ChartClose(next_chart);

    while(next_chart != -1) {
        next_chart = ChartNext(next_chart);
        ChartClose(next_chart);
    }

    //-------------------------------------------
    // パラメーターで指定した時間軸を配列に格納
    //-------------------------------------------
    ENUM_TIMEFRAMES periods[5];

    periods[0] = period_1;
    periods[1] = period_2;
    periods[2] = period_3;
    periods[3] = period_4;
    periods[4] = period_5;

    long charts[5];                // チャートIDを格納するための配列
    ArrayInitialize(charts, 0);    // 配列の初期化

    // 5つのチャートを開き、チャートIDをcharts[]配列に代入
    for(int i = 0; i < 5; i++)
        charts[i] = ChartOpen(cur_symbol, periods[0]);

    ArraySort(charts);            // 配列の中身を昇順に並び替え

    // 5つのチャートに対し、チャートIDの順番通りに時間軸とテンプレートを適用
    for(int j = 0, k = 4; k >= 0; k--) {
        ChartSetSymbolPeriod(charts[j], cur_symbol, periods[k]);
        ChartApplyTemplate(charts[j], tpl);
        j++;
    }

    // [失敗コード]
    // 以下は最初に書いたコード。ダメな例として。
    //
    //    long cur_chart = ChartID();
    //    string cur_symbol = Symbol();
    //
    //    ChartSetSymbolPeriod(cur_chart, cur_symbol, periods[0]);
    //    ChartApplyTemplate(cur_chart, tpl);
    //    
    //    for(int i = 1; i < 5; i++) {
    //        long chartID = ChartOpen(cur_symbol, periods[i]);
    //        ChartApplyTemplate(chartID, tpl);
    //    }

    SendVirtualKey(KEY_ALT, KEY_R); // ALT+R ウインドウを整列する
}

//--------------------------------------------------------------------
// キー入力を送信する関数(今回は ALT + R をMT4に送信するために使用)
//--------------------------------------------------------------------
void SendVirtualKey(int metakey, int keycode)
{
    keybd_event(metakey, 0, 0, 0);
    keybd_event(keycode, 0, 0, 0);
    keybd_event(metakey, 0, KEYEVENTF_KEYUP, 0);
    keybd_event(keycode, 0, KEYEVENTF_KEYUP, 0);
}

ウィンドウマネージャ環境の構築(i3wmの解像度変更と壁紙設定)

プログラミング学習のために、サブマシンにもDebianをインストールすることにしました。 ただ、サブマシンはストレージがそれほど大きくないので、インストールするものを少なめにする必要があります。

しかし、普段使用しているXfce環境を選ぶと、使う予定が無い様々なソフトもインストールされてしまいます。

考えた結果、デスクトップ環境は選ばずにウィンドウマネージャ環境にすることにしました。

大まかな作業内容

  • サブマシンにVirtualBoxをインストール
  • VirtualBox上にDebian 11(デスクトップ環境無し)をインストール
  • xorgをインストール
  • i3wm(タイル型のウィンドウマネージャ)をインストール
  • sakuraをインストール
  • その他(vimやsudoなど)をインストール

インストール作業

以下の内容は xorgのインストール時点からとなります。

apt install xorg
apt install i3
apt install fcitx-mozc
apt install sakura
apt install vim-gtk3
apt install sudo
apt install firefox-esr


.xinitrcの設定

最初にX Windowの設定です。当たり前ですが、基本的に一般ユーザーで作業しますから、一般ユーザーのホームディレクトリに.xinitrcを作成します。ファイルの内容はネット上からテキトーに拾ってきました(おぃ)。

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
fcitx &
i3
# wmaker  ← i3に慣れなかったらWindowMakerを入れようかと一応記述


i3wmの解像度を変更

ディスプレイマネージャをインストールしていないので、ログインしてから

startx

GUI環境をスタートさせました。

しかし、小さな解像度で表示されて見づらい・・・。そこで、解像度を変更することにしました。

最初に仮想ディスプレイが何という名称で認識されているのか調べます。
i3wm上でgnome-terminalを開き、

xrandr -q

というコマンドを実行した結果、「Virtual1」という名称で認識されていると分かりました。

これを使って、.config/i3/configファイルの最後に次の1行を追記しました。

exec --no-startup-id xrandr --output Virtual1 --mode 1920x1200


壁紙を変更

解像度は大きくなったものの、背景が真っ黒で寂しいので、壁紙を設定することにしました。 ネット検索したところ、fehというソフトを使えば良さそうです。

apt install feh

でfehをインストールしてから、壁紙に使う画像をfirefoxで拾ってきました。

どのディレクトリに入れておこうか迷いましたが、壁紙を頻繁に変更することは無いので、隠しディレクトリを作り、そこに入れることにしました。

mkdir .kabegami


作成した .kabegamiディレクトリにネットから拾ってきた画像ファイルを移動してから、次のコマンドを実行します。

feh -r <画像ファイルがあるディレクトリ>

私が行った実行例は次のとおりです。

feh -r .kabegami

これで壁紙に設定する予定の画像が開くので、画像の上で右クリックします。

「File」 → 「BackGround」 → 「Set Centered」を選ぶと、ホームディレクトリに.fehbgというシェルスクリプトファイルが出来上がります。

あとは「.config/i3/config」ファイルの末尾に次の行を追記しておけば、i3wmを起動するたびに同じ壁紙がセットされます。

exec --no-startup-id ~/.fehbg

sha512sumコマンドでハッシュを確認する

この記事は、たま〜にしかやらないので忘れることの1つであるsha512sumコマンドの話です(大したことは書いてありません)。

いつも遠のいている記憶

以下の文章を読んだら「アナタ、ナニシテルノ?」と思われるかもしれませんが、久しぶりにファイルをダウンロードすると、ハッシュ値の確認方法を忘れているんですよね。

もちろんsha512sumコマンドの存在を忘れるわけではないのですが、たとえば、

sha512sum xxxxx.iso

と入力して、ハッシュ値を調べ・・・、

その後で「えーと、ここからどうするんだっけ??」となり、毎回ネットを調べる・・・という流れになるわけです^^;。
そこで、備忘録としてブログに残しておくことにしました。

手順

まず、以下の2つを同じディレクトリに入れておきます。

・ハッシュ値が記述されているファイル
・ダウンロードしたファイル


あとは、以下のコマンドを実行するだけです。

sha512sum -c ハッシュ値が記述されているファイル


コマンド例

我が家のサブマシンにDebianをインストールするべく、Debian11のisoイメージをダウンロードしたので、それを使った実例になります。

ハッシュ値が記述されたファイルとisoイメージのファイル名は以下のとおりです。

SHA512SUMS
debian-11.0.0-amd64-DVD-1.iso


これらを同じディレクトリに入れておいて、そのディレクトリで以下のコマンドを実行します。

sha512sum -c SHA512SUMS


SHA512SUMSファイルの中身

先に「SHA512SUMS」ファイルの中身を見ておきましょう。 ファイルの中身は以下のとおりです。

b64f314c4b0fc948872afe4282402a3cac1e4a534895bd2359ce5ae67360b7f53163b7eb26cb40af6562001d53faa8e5fc12b5a65b6d59a59b5b24f8738d87af  debian-11.0.0-amd64-DVD-1.iso
0b16fb395a3ee61374e5cbed8c03d81df0ac08945ac15b3d1d79a0ba702e9d6aa77241834bc346af4a49624a68c7e1f29ed4d97b207d53426e8e28368b5bc8e4  debian-11.0.0-amd64-DVD-10.iso
739c758d29b96f12dcffa5869095870aa0a77a059a549ba4fc952e4bcd0c617d8e4b3bf95cfaa0a31ea9ae416faaa43a5a56f13ed48aef5226e222b2b0f3a136  debian-11.0.0-amd64-DVD-11.iso
cbd02191ca717b3d085692ae91ff2085faef1ff6e5776ea3a14e24b6f5d6ad5ef6eff53ce80f750d982db75439a6f19062a1891bf119ca8a9776cafd9ce6c369  debian-11.0.0-amd64-DVD-12.iso
c7c986bc7320cd0a8c279a1554414ac7451edb9176918be8781741cf9703b60498fef9fba9398c70a54fb332bee713c8a7ca72282050239bb3ca420810e51273  debian-11.0.0-amd64-DVD-13.iso
e25c4a7bfe5350efe28d070d0d3af8e7471bdeed1f9fd6ea42758b6838f2e6be09d09f0fcef462fe48cd1e13f7c570f468b23fc24eb3ab772527de55a13977b2  debian-11.0.0-amd64-DVD-14.iso
0269e04efb69d96475373e20a5b98a2a596feb081b2b6175d410f2d82e9627b68f4a85bef13e012509d60ba9c3ed611283b464e8fefb854bf38c0d82436fff15  debian-11.0.0-amd64-DVD-15.iso
6e1cbd1b3ad8668b24f2e447476c3b250f36792e3cbf3c063d55491fda1e717171061ea01fdf491726cf023094340b3737e786e1dcee9eaa719963e54ef20e59  debian-11.0.0-amd64-DVD-16.iso
6a35eaa4e3b4b449920662da95556e2db6568c39169bf43227ead3663aefeea71576e27b4a867ce58f9f0b8cffc736d6faa399c2d8ae02d47abfd1541304cdbe  debian-11.0.0-amd64-DVD-17.iso
92813bd6736c73f20bf1bd118a75a0d651c6e8e19c254ef40d3b7d130c1fc589656bb845ca31917159d37acc93e90079550fd56471df4e90b7634f95547c59c8  debian-11.0.0-amd64-DVD-18.iso
134ebd8541e4bf059ec584ec8252838bde229a09183899c4888c7f1133ab136229e99f4f1302b42734fe968ab2b851f976b386e9c9521759f7425de55c18a76a  debian-11.0.0-amd64-DVD-2.iso
a033fe29a056e448737e234936c16841089c6c6a56ad7e972787bd9f236cca4cd9b6f8253fde36973c5c409c5bafee717b9b113a09e7712d52176e81b55f247e  debian-11.0.0-amd64-DVD-3.iso
8861ced1bcef536d48aa3e24ff9385b769dbff41854fd9f3b498db2bc8ffee1106536b1cc36a08562aa0c1f47071e5a2f66910ec05828ed346759b0d6b5e5a3a  debian-11.0.0-amd64-DVD-4.iso
5884cac6462ddccaef51f4528f67b05a4a350ed798952441328d1c0a7952c811a1485973cc14f3111a70ea3280f1cbc39e30a5cb205d9bd29d1ae8928b693495  debian-11.0.0-amd64-DVD-5.iso
233f2704c1fc7fffa681a20a6c90b5500328079ade9fcd8f1a653a52610d7c5253bf98c62ad87308ebc1868223050130b4346ad5153ea8dac778d183a372b94a  debian-11.0.0-amd64-DVD-6.iso
2f97352ba5e8b3ee0010feadc417ef40cb5daac5dffe89f359977e3fe379e1f14caebf7d019f5b6647142c76d932a9a14078ed57fe4c53d6579fdaa22e3e7d8b  debian-11.0.0-amd64-DVD-7.iso
58514ee7cc794f697768554d80344cc17479405eef5393799c69c840bd595b7f81f4f7ab7316cc1a30d4e54a1ac7861452ed17fb549a082a455922b26f0ad9b3  debian-11.0.0-amd64-DVD-8.iso
d1c4d51fcc68ef844653868202a261757b1ea49b22e3522bb7aca96fd4551c8c776695c9158b94d805cc98fb52de867f9f1974530f1531cf459ae159a9ee550d  debian-11.0.0-amd64-DVD-9.iso


各行の右端を見ると分かるように、これらのハッシュ値は18個のisoイメージに対するものです。

実行結果

ディレクトリにあるisoイメージは1つだけです。
そのため、存在しないisoイメージについては「そのようなファイルやディレクトリはありません」となります。

一方、存在するisoイメージについては、無事「完了」と表示されました。
「完了」となっていますので、今回チェックしたisoイメージに破損は無いようです。

neofetch on Debian11

ネット上でneofetchコマンドを実行した際のスクリーンショットをよく見かけますよね。自分はまだやったことが無かったので、試しにやってみました。

neofetchのインストール

apt install neofetch


neofetch実行

neofetch


実行結果は以下のとおりです。 f:id:philojuan:20210818032438p:plain