恥は/dev/nullへ by 初心者

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

Debian 11にアップグレード (bullseye用の/etc/apt/sources.list)

Debian 11が先日リリースされたと知ったので、我が家のDebianもアップグレードすることにしました。

/etc/apt/sources.listの設定

/etc/apt/sources.listをDebian 11(bullseye)用に書き換えました。

# Security updates
deb http://security.debian.org/debian-security bullseye-security main contrib non-free
deb-src http://security.debian.org/debian-security bullseye-security main contrib non-free

# Base repository
deb http://ftp.riken.jp/Linux/debian/debian bullseye main contrib non-free
deb-src http://ftp.riken.jp/Linux/debian/debian bullseye main contrib non-free

# Stable updates
deb http://ftp.riken.jp/Linux/debian/debian bullseye-updates main contrib non-free
deb-src http://ftp.riken.jp/Linux/debian/debian bullseye-updates main contrib non-free

# Stable backports
deb http://ftp.riken.jp/Linux/debian/debian bullseye-backports main contrib non-free
deb-src http://ftp.riken.jp/Linux/debian/debian bullseye-backports main contrib non-free


aptコマンドを実行

あとは管理者権限でaptコマンドを実行するだけです。

apt update
apt full-upgrade


こういう雑なアップグレードではなく、真面目に(?)アップグレードする場合は、以下の文書を必ずお読みください。

https://www.debian.org/releases/bullseye/amd64/release-notes/ch-upgrading.ja.html


ランチャーのサイズ調整

デスクトップの下部にランチャーがあるのですが、そのサイズ(高さ)がおかしかったので調整することにしました。 しかし、設定画面を開いてもそれらしきものが見当たりません。

しばらくいじった結果、以下の場所で調整できると分かりました。

デスクトップ下部のランチャーを右クリック → 「パネル」 → 「パネルの設定」

f:id:philojuan:20210816203218p:plain

DebianにChromeをインストール and マウスのホイール感度を調整(imwheel)

DebianにインストールしたChromeの画面をマウスのホイールでスクロールしてみたら、 スクロール量が少ないと感じました。そこで、スクロール量を調整しました。



DebianGoogle Chromeをインストール

まず、以下の場所から.debファイルをダウンロードします。
https://www.google.com/chrome/?platform=linux

そして、ダウンロードしたファイルを以下のコマンドでインストールして終了です。

sudo apt install ./google-chrome-stable_current_amd64.deb


マウスホイールの感度を調整(imwheel)

(1) imwheelをインストールします。

sudo apt install imwheel

(2) ホームディレクトリに.imwheelrcファイルを作成します。

# .imwheelrcファイルの中身
"^google-chrome"
None, Up,   Button4, 5
None, Down, Button5, 5

今回はChromeを使用する時のホイール感度だけを調整するので、1行目が "^google-chrome" となっています。 なお、5という値を大きくするとホイールを動かした時のスクロール量が大きくなります。

(3) デスクトップ画面からログアウトします。

(4) 再ログインし、imwheelを起動します。 単に起動する場合は以下のようにします。

imwheel


すでにシステム上でimwheelが動いている場合は以下のようにします。

imwheel -k

私の環境ではDebianを起動した時点でimwheelが動いていますので、-k オプションを付けて使用しています。

ログイン時にimwheelコマンドを自動的に実行する

手動で毎回imwheelコマンドを実行するのは面倒なので、デスクトップにログインすると自動的にimwheelコマンドを実行するようにしておきます。

私はXfceを使用していますので、以下のようにしました。

  1. 「アプリケーション」→「設定」→「「設定マネージャー」→「セッションと起動」を開きます。

  2. 「自動開始アプリケーション」タブを開き、「追加」ボタンをクリックします。

  3. 名前欄に「imwheel」と記述し、コマンド欄に「imwheel -k」と記述して、OKボタンをクリックします。


.imwheelrcファイルに記述するアプリ名の調べ方

imwheelの設定について参考にしたページでは .imwheelファイルの1行目にあるアプリ名が"chrome"となっていたので、私もそのように記述しました。しかし、それでは動きませんでしたので、アプリ名を調べることにしました。

手順は簡単です。以下のコマンドを実行し、マウスでGoogle Chromeのウィンドウをクリックするだけです。

xprop WM_CLASS | grep -o '"[^"]*"' | head -n 1

その結果、ターミナルに

"google-chrome"

と表示されたので、これを.imwheelrcファイルの1行目に記述しました。

進む・戻るボタンへの対応

imwheelを使用するとマウスの「進む」ボタンや「戻る」ボタンが反応しないことに気づいたのでネット検索をしたら、以下のページがありました。

https://ratelog.net/ubuntu-imwheel-backbutton-enabled/

どうやら、-bオプションを使うことで解決できるようです。
上記ページに「-bオプションによってimwheelの影響を受けるボタンを指定しています。」という説明があり、以下の例が載っていました。

imwheel -b "4 5"


私の場合は、-kオプションも使用しているので

imwheel -k -b "4 5"

という風にしました。

困ったこと等

当初はネット上の記事を参考に.imwheelrcファイルを作成したのですが、エラーが出て困りました。 そこで、/etc/X11/imwheelディレクトリにある設定ファイルをコピペしたものを編集することにしました。その結果、エラーは出なくなりました。何か余計な制御文字でも入っていたのかもしれません。

話が飛びますが、/etc/X11/imwheel/startup.conf で以下のようにするとX window開始時にimwheelが起動します。

# Set this to "1" to have imwheel start along with your X session.
IMWHEEL_START=1


参考にしたページ等

Pythonコードの実行結果を表示するためのショートカット(Vim)

Python学習をする時に実行結果をすぐ確認できるよう、vimに以下のショートカットを作成しました。
F8を押すとすぐに実行結果が分かるので助かります。

nmap <F8> :bo terminal "python3.9" "%"<CR>


Pythonとは関係ありませんが、日本語の文章を書く時に便利なので以下の設定もしておきました。

" F11 で禅モード / Shift + F11 で折返し表示
nnoremap <F11> :Goyo<CR>
nnoremap <S-F11> :set wrap<CR>

ちなみに、Goyoはプラグインです。

Debianに「白源/ HackGen」をインストール

Windows上でコードを書く場合、「白源 / HackGen」というフォントを使用しています。 Debian上でコードを書く場合にも同じフォントを使用したいなと思い、Debianにもこのフォントをインストールすることにしました。


白源 / HackGenの入手先

以下の場所からフォントをダウンロードします。
https://github.com/yuru7/HackGen/releases

参考にしたサイト

以下のページを見て作業しました。
https://www.randynetwork.com/blog/hackgen-introduce/

インストール手順

(1) ダウンロードしたzipファイルを解凍します。
(2) mvコマンドでディレクトリ名を「HackGen」に変更します。

mv HackGen_v2.4.0/ HackGen

(3)「HackGen」ディレクトリを /usr/share/fonts/ に移動します。

sudo mv ./HackGen /usr/share/fonts/

(4) フォントのキャッシュを更新します。

fc-cache -fv


ターミナルの設定

フォントのインストールができましたので、最後にvimを使うターミナルの設定を変更しました。

(1) ターミナルの「編集」→「設定」→「外観」を開きます。  
(2) フォントを指定する項目で「HackGen」を選択します。  


(追記)
フォントを指定する項目で「セル間隔」の設定もできます。
私は「高さ」を「1.05」にしています。個人的にはこの設定値がしっくりきます。

[Python]スライスによるリストの操作

スライスについて学習しました。


スライスの基本形

まずはコード例から見てみます。

watches = ['f.p.journe', 'seiko', 'lange', 'patek', 'omega']
print(watches[0:3])

2行目のwatchesに続く[ ]内がスライスの例です。
この例では、0が始点のインデックスで、3が終点のインデックスです。
インデックスにはリストの要素番号を指定します。

終点のインデックスには注意が必要です。
[0:3]と記述した場合、0番目から3番目の要素ではなく「0番目から2番目の」要素を取り出します。

実行結果

['f.p.journe', 'seiko', 'lange']


今度は、5つの要素のうち、真ん中の3つを取り出してみます。
通常の日本語だと「2番目から4番目の要素」ですが、要素番号で 記述すると「1番目から3番目の要素」です。
よって、スライス範囲は[1:4]となります。

watches = ['f.p.journe', 'seiko', 'lange', 'patek', 'omega']
print(watches[1:4])       # [1:5]としないように注意する。

実行結果

['seiko', 'lange', 'patek']


インデックスを省略した場合

(1) 終点を示すインデックスを省略した場合、最終要素までスライスします。

watches = ['f.p.journe', 'seiko', 'lange', 'patek', 'omega']
print(watches[2:])

実行結果

['lange', 'patek', 'omega']


(2) 始点を示すインデックスを省略した場合、先頭要素からスライスします。

watches = ['f.p.journe', 'seiko', 'lange', 'patek', 'omega']
print(watches[:3])

実行結果

['f.p.journe', 'seiko', 'lange']


要素をスキップする方法

スライスに3番目の値を指定するとスライス対象をスキップできます。

watches = ['f.p.journe', 'seiko', 'lange', 'patek', 'omega']
print(watches[0::2])     # 2つ後ろの要素へとスキップ

実行結果

['f.p.journe', 'lange', 'omega']


マイナスのインデックスも使用可能

マイナスのインデックスも使用できます。
たとえば、後ろから3つ目の要素番号は「-3」です。以下の例ではリストの最後にある3つの要素を取り出します。

watches = ['f.p.journe', 'seiko', 'lange', 'patek', 'omega']
print(watches[-3:])

実行結果

['lange', 'patek', 'omega']


スライスを使用してリストをコピーする(注意点あり)

インデックスを記述せずにスライスを使用することで、全ての要素を取り出します。

リストのコピー例

watches_a = ['f.p.journe', 'seiko', 'lange', 'patek', 'omega']
watches_b = watches_a[:]    # 全ての要素を取り出す

print(watches_b)

実行結果

['f.p.journe', 'seiko', 'lange', 'patek', 'omega']


思わず自分もやってしまいそうなので、ダメな例を書いておきます。
以下のコードでは別々のリストが作成されません。

watches_a = ['f.p.journe', 'seiko', 'lange', 'patek', 'omega']
watches_b = watches_a       # これはダメなやり方

このようにすると、watches_bは、watches_aが関連付けられているリスト に関連付けられます。
つまり、watches_aもwatches_bも同じリストを指している状態になってしまいます。

スライスを使ったループ

スライスを使うことで、リストの一部だけをループ対象にすることができます。

watches = ['f.p.journe', 'seiko', 'lange', 'patek', 'omega']

for watch in watches[1:4]:
    print(watch.upper())

実行結果

SEIKO
LANGE
PATEK

[Python]リスト内包表記の基本

リスト内包表記の基本形は次のとおりです。

[変数 for 変数 in イテレーター]

これだと分かりにくいですね。コード例で書いてみます。

コード

hoge = [number * 2 for number in range(1, 6)]
print(hoge)

このコード例を見ると、forから右側は普通のfor文になっています。
そして、forの右側に記述した変数を、forの左側の領域で使用できるようです。

実行結果

[2, 4, 6, 8, 10]


リスト内包表記を使わないで冗長に書くと以下のようになります。

hoge = []                     # 空のリストを作成
for number in range(1, 6):    # 1〜5を生成
    hoge.append(number * 2)   # 値を2倍したものをリストに追加

print(hoge)


もう少し複雑なリスト内包表記

以下のページを見ると、if文と組み合わせたリスト内包表記の例などが載っていて勉強になります。

pythonの内包表記を少し詳しく - Qiita

[Python]range関数の使い方

range関数について学習しました。


range関数の基本

まずはコード例から見てみます。

コード

for number in range(1, 11):
    print(number)

実行結果

1
2
3
4
5
6
7
8
9
10


range関数の1番目に指定した値からスタートして、2番目に指定した値 に到達すると処理を停止します。 上記のコードにおいて、2番目の値である11に到達するとprint文は実行 されないので、実行結果は「1から10」となります。

range関数に引数を1つだけ指定した場合

range関数の引数を1つだけにした場合、0からスタートして、指定した値 に到達すると処理を停止します。

コード

for number in range(11):
    print(number)

実行結果

0
1
2
3
4
5
6
7
8
9
10

0からスタートするので生成される値は11個となります。

数値を生成する時にステップ数を指定する

range関数に3番目の引数を指定することで、ステップ数を指定できます。

コード

for number in range(1, 11, 2):
    print(number)

実行結果

1
3
5
7
9

このコード例ではステップ数が2となっているので、1の次は3となっています。
なお、11となった時点で処理が停止するためprint文で出力されるのは9までです。

range関数から数値リストを作成する

list関数を使用するとrange関数の結果をリストにすることができます。

コード

hoge = list(range(1, 11))
print(hoge)

実行結果

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]