はとのーと

エジソンノート(アイデア、思い付き、メモ)として使っています。誰かの役に立つかもしれないので公開しています。

メモ 2019-10

2019-10-02

EmacsでreStructuredTextを書く(rst-mode)

C-c C-a C-aで見出し文字が挿入される。 繰り返すと文字が変わる。

書いている最中に変なインデントが入ったらTABキーで是正できる。

参考:

Emacsについては GNU Emacsについてのメモ - はとのーと にまとめました。

EmacsにGo言語用go-modeをインストールする

基本的にはemacsで快適なGo言語ライフを送るための設定 - Qiitaに従う。

ただしgolintの取得で次のエラーが出たのでURLを変更して取得した。

go get github.com/golang/lint/golint
package github.com/golang/lint/golint: code in directory /home/paz/.go/src/github.com/golang/lint/golint expects import "golang.org/x/lint/golint"

go get golang.org/x/lint/golint

Emacsについては GNU Emacsについてのメモ - はとのーと にまとめました。

PHPのシングルクォート文字列とダブルクォート文字列の違い

What is the difference between single-quoted and double-quoted strings in PHP? - Stack Overflowによると以下の4種類ある。

  1. シングルクォートされた文字列はほとんどそのまま表示される。変数もエスケープシーケンスも展開されない。中でシングルクォートを使いたい時は\'、バックスラッシュを使いたいときは\\と書く。
  2. ダブルクォートされた文字列はエスケープ処理され、変数も展開される。$type$typesという変数がある時、"echo The $types are"と書くと$typesが展開されるが、波括弧でecho This ${type}s are"と書けば$typeの方が展開される。
  3. ヒアドキュメント<<<識別子はダブルクォートされた文字列として扱われる。各行の最後には改行がつく。
  4. Nowdoc構文<<<'識別子'はシングルクォートされた文字列として扱われる。各行の最後には改行がつく。

2019-10-03

初めてGitHubでPullRequestを出した

サンプルで学ぶ Go 言語:Multiple Return Valuesの「両方」が「療法」にtypoしていたのでPullRequestを出すことにしました。 初めてやったので次回以降用に手順を記録します。

GitHub上で上記ページのソースをFork。

ローカルにチェックアウトする。

git clone https://github.com/myname/go-by-example.git

修正用のブランチを作成して切り替える。

git checkout -b fix-typo-for-multiple-return-value

docs/multiple-return-values.htmlを修正し、ローカルでコミットする。

リモートにブランチを送信する。

git push origin fix-typo-for-multiple-return-value

GitHubの自分のプロジェクト上で"New Pull Request"をクリックする。

base repositoryはFork元、baseはmasterにする。 head repositoryはForkした自分のプロジェクト、compareはfix-typo-for-multiple-return-valueにする。

"Create pull request"をクリックする。 タイトルと内容を入力し、再び"Create pull request"をクリックする。

2019-10-04

Leszynski命名規則(Microsoft Access用アプリケーションハンガリアン)

テーブルはtbl、クエリーはqryなどの接頭辞をつけたキャメルケースのオブジェクト名とする。

2019-10-05

Googleで一時的に英語サイトのみ検索する方法

次のURLを開く。

https://www.google.com/?hl=en

検索の途中だったらURLに&hl=enを付ければよい。

VBAでスタンダードっぽい書き方

2019-10-10

ALGOLが解決したFORTRANの問題とは何か?

WikipediaのALGOLのページ には次のように書かれている。

FORTRANで明らかとなった問題を防ぐよう設計され

このFORTRANで明らかになった問題とは一体何か? Programming Language Design Issues | JoeQuery に次のような記述がある。

The success of FORTRAN caused fear of IBM's industry dominance.

つまり、FORTRANで明らかになった問題とは、IBMによる業界への支配なのではないだろうか?

端的な証拠として The History of the ALGOL Effort (pdf) にはFORTRANを排除したいヨーロッパ陣営とFORTRANを認めさせたいバッカス率いるアメリIBM陣営との攻防が描かれている。 (ここでいう "Zürich meeting" とは The Zurich ACM-GAMM Conference のこと)

In 1958, at the Zürich meeting, FORTRAN was not considered to be the ideal universal algorithmic language

(中略)

FORTRAN is chosen because it would become the de facto standard and J.W. Backus, the leader of the group developing FORTRAN, also participated in the creation of IAL at the Zürich meeting.

2019-10-11

トップレベルが配列であるJSON

RFC 準拠的な JSON 形式について - Qiita によるとJSONのトップレベルは配列でもよいらしい。

次のようになる。

[
  {
    "name": "睦月",
    "month": 1
  },
  {
    "name": "師走",
    "month": 12
  }
]

VBA-tools/VBA-JSON: JSON conversion and parsing for VBA では次のようなコードで解析・アクセスできる。

Dim Json As Object

Set Json = JsonConverter.ParseJson("[{""name"":""睦月"",""month"":1},{""name"":""師走"",""month"":12}]")
    
Debug.Print "Count:" & Json.Count
Debug.Print Json(1)("name") & ":" & Json(1)("month")
Debug.Print Json(2)("name") & ":" & Json(2)("month")

' Count:2
' 睦月:1
' 師走:12

サーバーからHTTPで取得する方法は エクセルVBAでHTTPリクエストをする最も簡単なプログラム を参照。

2019-10-12

PHPから人間が読みやすいJSONを返すには json_encode にオプションを付ける

PHPにおけるJSONエンコード整形 - Qiita

PHPから人間が読みやすいJSONを返すには json_encode に以下のオプションを付ける。

  • JSON_UNESCAPED_UNICODE - UNICODEエスケープシーケンスを使わない
  • JSON_PRETTY_PRINT - 整形する
<?php
echo json_encode($a, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);

2019-10-14

Arch Linuxのパッケージマネージャ pacman の削除オプション

pacmanのコマンドとオプション - Qiita

  • -R --remove - パッケージを削除
  • -n --nosave - 設定ファイルをバックアップしない
  • -s --recursive - 指定したパッケージと依存パッケージが削除される
  • -u --unneeded - 他のパッケージによって必要とされていないターゲットを削除する

2019-10-15

XFceWindowsキーを押すとメニューが出るようにする

XfceでWindowsキーを押すとメニューが出るようにする設定 - Qiita

設定>キーボード>アプリケーションショートカットキーに "xfce4-popup-whiskermenu" を追加する。 「起動に使用するキーボードキーを押してください」と表示されるので Windows キーを押して登録する。

この設定をすると Windows キーを使う他のショートカットキーが効かなくなるため、自分は次のように設定した。

  • 設定>キーボード>アプリケーションショートカットキー
    • "xfce4-popup-whiskermenu" -> Ctrl+ESC
  • 設定>ウィンドウマネージャー>キーボード
    • ウィンドウを最大化 - Super+Up
    • ウィンドウを画面左にタイル表示 - Super+Left
    • ウィンドウを画面右にタイル表示 - Super+Right

2019-10-16

Emacsで単語やリージョンを大文字/小文字/キャピタライズする
  • 後続の単語を
    • M-l - 小文字に変換する
    • M-u - 大文字に変換する
    • M-c - 大文字で始める
  • リージョンを
    • C-x C-l - 小文字にする
    • C-x C-u - 大文字にする

Emacsについては GNU Emacsについてのメモ - はとのーと にまとめました。

2019-10-18

X Window SystemのSynapticsで右クリックを2本指タップ→3本指タップに変更する

2本指でスクロールしている時にいきなり右クリックメニューが表示される時があるため右クリックを3本指タップに変更した。

まずは xinput list でデバイスIDを調べる。

xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=11   [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                     id=12   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Sleep Button                              id=8    [slave  keyboard (3)]
    ↳ Integrated Camera: Integrated C           id=9    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=10   [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                    id=13   [slave  keyboard (3)]

SynPS/2 Synaptics TouchPad が id=11 で表示されたので、xinput list-props でその詳細を表示する。

xinput list-props 11
Device 'SynPS/2 Synaptics TouchPad':
        Device Enabled (161):   1
        Coordinate Transformation Matrix (163): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        libinput Tapping Enabled (298): 1
〜 中略 〜
        libinput Tapping Button Mapping Enabled (304):  1, 0
        libinput Tapping Button Mapping Default (305):  1, 0
〜 中略 〜
        Device Product ID (287): 2, 7
        libinput Drag Lock Buttons (322): <no items>
        libinput Horizontal Scroll Enabled (323): 1

"libinput Tapping Button Mapping Enabled (304): 1, 0" について libinput - libinput-based X.Org input driver - man page には次のように書かれている。

libinput Tapping Button Mapping Enabled

2 boolean value (8 bit, 0 or 1), in order "lrm" and "lmr". Indicates which button mapping is currently enabled on this device.

上記で "1, 0" と表示されたので、「lrm 有効」「lmr 無効」という意味になる。 (lrm はタッチした時の指が1本は左ボタン、2本は右ボタン、3本は真ん中ボタンという意味。lmr は左ボタン、真ん中ボタン、右ボタン)

これを変更するには Arch Linux では /etc/X11/xorg.conf.d/70-synaptics.conf を書き換える (はずだが自分の環境では /etc/X11/xorg.conf.d//50-synaptics.conf になっていた)。

次の行を書き換える。

(書き換え前)
Option "TapButton1" "1"
Option "TapButton2" "2"
Option "TapButton3" "3"

(書き換え後)
Option "TappingButtonMap" "lmr"

X Window System を再起動し、きちんと "0, 1" に書き換わっているか以下で確認した。

xinput list-props 11 | grep "Tapping Button Mapping Enabled"
        libinput Tapping Button Mapping Enabled (304):  0, 1

2019-10-21

ソースコードは横○○カラムで折り返すべき?

ソースコードは横80カラム以内で折り返すべき? - QA@IT

  • 折り返さないよ派
    • if文の条件中に改行するとぶら下がりのインデントが気持ち悪いよ派
      • 条件は別の行や関数にくくり出せばいいのに派
    • 改行でプログラムのまとまりを認識している派
  • 折り返すよ派
    • メールで送ったりコメント付きで印刷しやすく派
    • if文の条件中に改行したら行頭を演算子にすればOKだよ派
    • 横に長すぎる行は「いやな臭い」の一種だよ派
  • 折り返すよ派が推奨する折り返し文字数

2019-10-21

バッテリーの過充電を避けるためのスクリプト

How to Remind Unplug a Charging Laptop on Arch Linux

バッテリーの状態をチェックし、指定 % 以上になったら notify-send でメッセージを表示している。

このスクリプトを参考に、自分の ThinkPad X220 の Arch Linux 用にスクリプトを作成した。

Battery overcharge notification script for my ThinkPad X220 under Arch Linux - Gist

2019-10-24

Apacheで各ユーザーのホームディレクトリ以下を公開するにはUserDir機能を使う
mkdir ~/public_html
sudo a2enmod userdir
sudo systemctl restart httpd

参考資料:

2019-10-26

CPU周波数を制限するにはcpupower frequency-set

Arch LinuxでCPU周波数の上限を制限するには cpupower frequency-set 周波数 とする。

たとえば 2GHz にするには次のようにする。

sudo cpupower frequency-set -u 2GHz

現在の状態を確認するには cpupower frequency-info を実行する。

参考資料: CPU 周波数スケーリング - ArchWiki

それぞれのCPUコアの速度を表示するには cat /proc/cpuinfo で "cpu MHz" の行を見ればよい。 継続して表示するには以下のように watch で監視するとよい。

watch grep \"cpu MHz\" /proc/cpuinfo