エクスプローラーのコンテキストメニューを追加する
Windows 10 のエクスプローラーでも従来と同様にレジストリを編集することでコンテキストメニューを追加できる。
任意の拡張子のファイルに対しては HKEY_CLASSES_ROOT\.拡張子\shell
、フォルダーに対しては HKEY_CLASSES_ROOT\Directory\shell
にキーを追加すればよい。
たとえばフォルダーに「Visual Studio Code で開く (S)」というメニューを追加する場合は次のようなエントリを追加する。
[HKEY_CLASSES_ROOT\Directory\shell\VSCode] @="Visual Studio Code で開く (&S)" [HKEY_CLASSES_ROOT\Directory\shell\VSCode\command] @="\"C:\\Users\\userName\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe\" \"%L\""
xyzzy で上付き/下付き文字を入力するための Lisp
コードを書くためのエディタとしては Visual Studio Code に完全に移行したが、メモ書きや設定ファイルの変更、プロジェクトを作るまでもないちょっとしたコードの編集には xyzzy を引き続き使っている。
今日は xyzzy で SO₄²⁻ のようなイオンの化学式を記述したくなったので、簡単に入力するための関数を書いた。
まずは変換のための関数。
;; Superscript に変換 (defun map-to-superscript (str) (let ((from "0123456789+--=()") (to "⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁻⁼⁽⁾")) (loop for i from 0 below (length from) do (setq str (substitute-string str (subseq from i (1+ i)) (subseq to i (1+ i))))) str)) ;; Subscript に変換 (defun map-to-subscript (str) (let ((from "0123456789+--=()") (to "₀₁₂₃₄₅₆₇₈₉₊₋₋₌₍₎")) (loop for i from 0 below (length from) do (setq str (substitute-string str (subseq from i (1+ i)) (subseq to i (1+ i))))) str)) ;; loop の使い方 ;; http://www.nct9.ne.jp/m_hiroi/clisp/abcl27.html ;; ;; loop for x from 1 to 10 ... ; 1 から 10 まで ;; loop for x form 1 to 10 by 2 ... ; 1, 3, 5, 7, 9 ;; loop for x from 1 below 10 ... ; 1 から 9 まで (10 を含まない) ;; loop for x from 10 downto 1 ... ; 10 から 1 まで ;; loop for x from 10 downto 1 by 2 ... ; 10, 8, 6, 4, 2 ;; loop for x from 10 above 1 ... ; 10 から 2 まで (1 を含まない)
次にリージョンを変換するための interactive な関数。
;; リージョンを superscript にする (defun superscript-region (begin end) (interactive "r") (when (and begin end) (let ((replaced (map-to-superscript (buffer-substring begin end)))) (delete-region begin end) (insert replaced)))) ;; リージョンを subscript にする (defun subscript-region (begin end) (interactive "r") (when (and begin end) (let ((replaced (map-to-subscript (buffer-substring begin end)))) (delete-region begin end) (insert replaced)))) ;; (interactive "r") でリージョンの範囲を引数 begin end としてとる関数を定義できる
続いてカーソル位置から前の変換できる文字を変換する関数。
;; 現在の位置より前の変換できる文字を superscript にする (defun superscript-backward () (interactive) (let ((end (point)) (begin (progn (skip-chars-backward "0123456789+--=()") (point)))) (let ((replaced (map-to-superscript (buffer-substring begin end)))) (delete-region begin end) (insert replaced)))) ;; 現在の位置より前の変換できる文字を subscript にする (defun subscript-backward () (interactive) (let ((end (point)) (begin (progn (skip-chars-backward "0123456789+--=()") (point)))) (let ((replaced (map-to-subscript (buffer-substring begin end)))) (delete-region begin end) (insert replaced)))) ;; progn の使い方 ;; https://wiki.gz-labs.net/index.php/Progn ;; 各式を順に評価して最後の式の値を返す。 ;; ;; (progn (goto-bol) (point)) ; 式の値は行の先頭のポイントとなる ;; 指定した文字を含まない位置までカーソルを移動する ;; (skip-chars-backward "0123456789+--=()") ;; (skip-chars-forward "0123456789+--=()")
最後に superscript-backward と subscript-backward をそれぞれ C-c C-u と C-c C-l に割り当てた。
(global-set-key '(#\C-c #\C-u) 'superscript-backward) (global-set-key '(#\C-c #\C-l) 'subscript-backward)
これで SO4 (C-c C-l) 2- (C-c C-u) と入力することで SO₄²⁻ という文字列が得られる。
特定の URL のみ Basic 認証をかける・除外する (Apache 2.2)
Apache 2.2 を使用している Web サーバで、 .htaccess のみを使い特定の URL のみ Basic 認証を外す必要があり調べた。
特定の URL のみ Basic 認証をかける
## Allow と Require のいずれかの許可があればアクセス可能にする Satisfy Any ## /members/ で始まる URL へのアクセスを禁止する SetEnvIf REQUEST_URI "^/members/" restricted_url Order allow,deny Allow from all Deny from env=restricted_url ## /members/ 以下でも Basic 認証を通過すればアクセスできる AuthUserFile "/path/to/.htpasswd" AuthGroupFile /dev/null AuthName "Restricted Files" AuthType Basic require valid-user
ここで SetEnvIf に指定している "^/members/"
の部分は正規表現で記述する。単に "/members/"
と記述すると /sub/members/directory にもマッチするので注意。
特定の URL のみ Basic 認証を除外する
## Allow と Require のいずれかの許可があればアクセス可能にする Satisfy Any ## /images/ で始まる URL へのアクセスを常に許可する SetEnvIf REQUEST_URI "^/images/" allowed_url Order deny,allow Deny from all Allow from env=allowed_url ## それ以外の URL は Basic 認証を通過すればアクセスできる AuthUserFile "/path/to/.htpasswd" AuthGroupFile /dev/null AuthName "Restricted Files" AuthType Basic require valid-user
Homebrew で過去にインストールした MySQL の操作
MySQL のバージョン
% mysql --version mysql Ver 8.0.19 for osx10.14 on x86_64 (Homebrew)
サービス状態の確認
% mysql.server status
root パスワードのリセット
セーフモードでサービスを起動し、一旦パスワードを空にする
% mysqld_safe --skip-grant-tables & % mysql -u root > use mysql; > update mysql.user set authentication_string = null where user = 'root' ;
通常モードでサービスを起動したあと、空のパスワードでログインし、パスワードを設定しなおす
% mysql.server restart > alter user 'root'@'localhost' identified by 'パスワード';
パスワードポリシーの確認と設定
> show variables like '%validate_password%'; +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password.check_user_name | ON | | validate_password.dictionary_file | | | validate_password.length | 8 | | validate_password.mixed_case_count | 1 | | validate_password.number_count | 1 | | validate_password.policy | MEDIUM | | validate_password.special_char_count | 1 | +--------------------------------------+--------+ 7 rows in set (0.00 sec) > set global validate_password.mixed_case_count = 0; > set global validate_password.number_count = 0; > set global validate_password.special_char_count = 0;
PuTTY (.ppk) → OpenSSH 形式への変換とパスフレーズの変更
PuTTY → OpenSSH 形式への変換
% puttygen -O private-openssh id_dsa.ppk -o id_dsa.pem Enter passphrase to load key:
OpenSSH → PuTTY 形式への変換
% puttygen -O private id_dsa.pem -o id_dsa.ppk Enter passphrase to load key:
OpenSSH: パスフレーズの変更
% ssh-keygen -f id_dsa.pem -p Enter old passphrase: Enter new passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved with the new passphrase.