Windows で Atom Commander を使うとドライブのルートに移動できない問題を解消する

WindowsAtom Commander を使用していたところ、ユーザのホームディレクトリのあるドライブで次々と親ディレクトリに移動していくと、 C:\ に移動しようとした途端に C:\Users\ユーザ名\AppData\Local\atom\app-1.23.3 というディレクト(新規インストール時のバージョンにより数字が異なる)に移動してしまう。

これは node の fs パッケージの realpathSync メソッドに由来する問題のようだが、これを変更するには影響範囲が大きいのでなんとか Atom 側で対応したい。

ちなみに atom-commander < atom/node-pathwatcher < atom/fs-plus < fs という依存関係になっている。

どうやら C:\ に移動しようとしたときに Atom の実行ディレクトリに移動するようなので、実行ディレクトリを変更してしまおう。 Atom を起動するためのショートカットのプロパティを開き、作業フォルダを C:\ に設定する。

これで Atom Commander で C ドライブのルートへ移動できるようになった。

Windows 7 で Git Bash も zsh も使いたい

Windows 7コマンドライン版 Git を使用するには Git for Windows をインストールし、 Git Bash を使うのが簡単だWindows 10 には Windows Subsystem for Linux があるのでもう少し簡単にできるらしい)

ところがこの Git Bash では他のシェルは使用できず、bash のみしかサポートしていない。そのため MSYS2 というソフトウェアパッケージを使用し、シェルの設定から行う。

以下 Git Bash がインストールされているものとして話を進める。

MSYS2 を使用する

MSYS2 は簡単にいうと bash 等の PC UNIX 用ソフトウェアを Windows で動かすためのソフトウェアの寄せ集めだ。

インストーラをダウンロード・起動し、インストールが完了したらスタートメニューから MSYS2 MinGW 64-bit(環境によっては 32-bit を選択)を開く。これで bash が起動するが、まずはパッケージのアップデートを行う。

MSYS2 のパッケージマネージャは pacman という名前で、MSYS2 用に独自に作られたものだ。次のコマンドでアップデートができる。

pacman -Suy

次のメッセージが表示されたらアップデートが完了した合図なので MinGW x64 のウィンドウを閉じ、もう一度起動する。

terminate MSYS2 without returning to shell and check for updates again
for example close your terminal window instead of calling exit

そして再び pacman を使用し、必要な、あるいは使いそうなソフトウェアをインストールしていく。パッケージのインストールは pacman -S パッケージ名 で行える。

pacman -S vim sed tar unzip zsh

MSYS2 のログインシェル設定

MSYS2 には chsh コマンドが含まれていない。そのため起動のための Windows コマンド スクリプトから直接シェルの指定を行う。

また標準の状態では Windows 側の環境変数 PATH が引き継がれないので、それを引き継ぐ設定をしておこう。

ここでは MSYS2 をインストールしたディレクトリにある msys2_shell.cmd を terminal.cmd という名前でコピーし、次の箇所を編集した。

15行目:
set MSYS2_PATH_TYPE=inherit

79行目:
  start "%CONTITLE%" "%WD%mintty" -i /msys2.ico -t "%CONTITLE%" /usr/bin/zsh --login %1 %2 %3 %4 %5 %6 %7 %8 %9

これで terminal.cmd を開けば zsh が起動する。

zsh の補完設定

zsh の設定は通常通り ~/.zshrc で行える。普段のように補完設定を行う。

autoload -U compinit
compinit

# 補完時に大小文字を区別しない
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
zstyle ':completion:*' menu select=1

ところが MSYS2 上のディレクトリ(例えば /mingw64)では補完が効くが、 Windows 上のドライブ(例えば /c/Windows)では補完ができない問題が発覚した。

どうやら Windows 上のドライブは automount のような仕組みでマウントされているため、次のような fake-files の設定が必要なようだ。

drives=$(mount | sed -rn 's#^[A-Z]: on /([a-z]).*#\1#p' | tr '\n' ' ')
zstyle ':completion:*' fake-files /: "/:$drives"
unset drives

Git を使用する

ここまで設定すれば which git コマンドを叩くと Git for Windows でインストールされた git コマンドの場所が出力されるはずだ。

あとは Git Bash と同様に使用すればよい。


3D モデリングができるソフト

Sculptris (Pixologic)

有償の ZBrush の簡易版という位置付けか

Blender

オープンソース。最近のバージョンはいろいろと機能が増えている。
2013年時点では WebGL 向けの出力(Three.js 使用)にまともに対応している数少ないソフトだった。
Python ですべての機能を制御可能

Fusion 360 (Autodesk)

PythonC#スクリプトやアドインが書ける

3ds Max (Autodesk)

WebGL 向けの出力(Three.js 使用)には有償プラグインが必要

Maya (Autodesk)

CPI のレンタルサーバで SCP を使う方法

CPI のレンタルサーバのプランのひとつ「共用レンタルサーバー ACE01」では SSH は使用できるが、SCP は使用できない。

SSH でログインして scp コマンドを実行してみると、どうやら scp コマンドがインストールされていないので使えるようにしておこう。

設定方法

  1. CPI のウェブコントロールパネルから SSH の設定を有効にする。
  2. SSH の鍵を生成し、秘密鍵をダウンロードする。ここで設定テストサイト、本番サイトどちらから設定しても共通の設定となる。
    (ここでダウンロードできる秘密鍵は OpenSSL 形式なので、PuTTY 等で使う場合は PuTTYgen で変換する)
  3. SSH でログインし、 uname -a コマンドでアーキテクチャを調べる。例えば FreeBSD 10.1-RELEASE-14 AMD64FreeBSD 8.4-RELEASE-p11 AMD64 だということが分かる。
  4. 前の手順で調べたアーキテクチャで使用できる scp のバイナリを入手する。FreeBSD の場合は 8.x 以前では *-livefs.iso を、 9.x 以降の場合は *-disc1.iso から入手するのがよい。
  5. SFTP で接続し、ホームディレクトリに bin というディレクトリを作成する。幸い ~/bin にパスは通っている。
  6. 作成した bin の中に scp のバイナリをアップロードし、SFTP または chmod 755 ~/bin/scp で実行権限を与える。

他に入れておくと便利なコマンド

  • du: 容量が逼迫してきたときに、どのディレクトリのサイズが大きいか調べるのに便利
  • nslookup: たまに nslookup したくなったときに端末を意識しなくてよいので便利
  • whois: たまに whois したくなったときに端末を意識しなくてよいので便利
  • gcc, cc1, cc1plus, as, ld など: include や lib も持ってくれば C/C++ で書いたプログラムをコンパイルできるので癒されたいときに

読みがなを正しい50音順(辞書順)にソートする

読みがなを持つデータを、辞書のような順序に並べ替えたいとする。

ところが辞書の配列は意外と複雑だ。Wikipedia の索引の配列として次の規則が提示されている。

  1. 読みの五十音順とする。
  2. 清音・濁音・半濁音は、この順に並べる。
  3. 促音「っ」、拗音「ゃ」「ゅ」「ょ」はそれぞれ「つ」「や」「ゆ」「よ」の後に並べる。
  4. 小文字「ァ」「ィ」「ゥ」「ェ」「ォ」はそれぞれ「あ」「い」「う」「え」「お」の後に並べる。
  5. 長音符「ー」は直前の母音を表すものとし、それぞれ仮名の後に並べる。
    例: 「コーヒー」は「こおひい」と見なす。
  6. ひらがなとカタカナは、この順に並べる。
プロジェクト‐ノート:索引/配列順 - Wikipedia

成果物

PHP で Composer から使用できるライブラリを作成した。次のコマンドでプロジェクトに追加できる。

composer require sharapeco/kana-order

次のように KanaOrder::get メソッドを使用して既存のデータに並べ替え用のデータを付加し、 usort 関数を使って並べ替えを行うことができる。

<?php
require_once 'vendor/autoload.php';
use sharapeco\KanaOrder\KanaOrder;

$items = [
	['name' => '進め', 'kana' => 'すすめ'],
	['name' => 'スズメ', 'kana' => 'スズメ'],
	['name' => '鈴なり', 'kana' => 'すずなり'],
	['name' => 'ススキ', 'kana' => 'ススキ'],
	['name' => 'すり抜け', 'kana' => 'すりぬけ'],
];

$items = array_map(function($item) {
	$item['sort_key'] = KanaOrder::get($item['kana']);
	return $item;
}, $items);

usort($items , function($x, $y) {
	return strcmp($x['sort_key'], $y['sort_key']);
});

リポジトリおよび Packagist のページはこちら。

別の方法:ICU ライブラリを使用する

ICU は International Components for Unicode の略で、ロケール関連のさまざまな操作ができるライブラリだ。PHP からは intl 拡張モジュールとして使用できる。

PHP ではその中にある Collator クラスでロケール固有の並び順を考慮した文字列の比較、ソートができる。

単純に項目を並べ替える場合は sort メソッドが使用できる。

<?php
$items = ['すすめ', 'すずめ', 'すずなり', 'すすき', 'すりぬけ'];

$collator = new Collator('ja_JP');
$collator->sort($items);

また日本語では読みがな単体を並べ替える場合は少ないだろうから、 getSortKey メソッドを使い、次のように書ける。

<?php
$items = [
	['name' => '進め', 'kana' => 'すすめ'],
	['name' => 'スズメ', 'kana' => 'スズメ'],
	['name' => '鈴なり', 'kana' => 'すずなり'],
	['name' => 'ススキ', 'kana' => 'ススキ'],
	['name' => 'すり抜け', 'kana' => 'すりぬけ'],
];

$collator = new Collator('ja_JP');
$items = array_map(function($item) use ($collator) {
	$item['sort_key'] = $collator->getSortKey($item['kana']);
	return $item;
}, $items);

usort($items , function($x, $y) {
	return strcmp($x['sort_key'], $y['sort_key']);
});

ところがこのライブラリを使った方法では一般的に使われている規則と違い、次のような差異がある。

  • ひらがなよりカタカナが先に来る
  • 促音、拗音、小文字、長音符が通常のかなより先に来る

そのため新しくライブラリを作成した。

アイディア

ひらがなとカタカナに関するソートキーを得る方法として、各かなを「清音 + 付加情報」として表す方法を考えた。はじめに清音でソートし、清音が等しい場合は付加情報を付加した文字列を比較する。ラテン文字や算用数字、記号については考慮していない。

  1. ひらがな清音の場合は付加情報としてスペースを足す(すすめ→すすめ SP SP SP; 見えないので SP と表記)
  2. ひらがな濁音は " (すずめ→すすめ SP " SP)
  3. ひらがな半濁音および拗促音は $ (ぴゅっ→ひゆつ$$$)
  4. カタカナ清音は ! (ススメ→すすめ!!!)
  5. カタカナ濁音は # (スズメ→すすめ!#!)
  6. カタカナ半濁音および拗促音は % (ピュッ→ひゆつ%%%)

このとき SP ! " # $ % はコード順になっていることに留意。