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 ! " # $ % はコード順になっていることに留意。

(iOS) Facebook アプリ内ブラウザはこんなに仕様が違う

Facebook アプリ内ブラウザきらい! さっさと Safari で開け!

User Agent

通常は次の文字列。Twitter などほかのアプリでもこのような文字列になっている。

Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_1 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C153 Safari/604.1

しかし Facebook のアプリ内でリンクを開くと次のように改変されている。

Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_1 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Mobile/15C153 [FBAN/FBIOS;FBAV/153.0.0.53.87;FBBV/84268146;FBDV/iPhone9,1;FBMD/iPhone;FBSN/iOS;FBSV/11.2.1;FBSS/2;FBCR/&#12489-&#12467-&#12514-;FBID/phone;FBLC/ja_JP;FBOP/5;FBRV/0]

(続きはまた来週)

macOS をアップデートしたときにしたこと(Sierra → High Sierra)

新年なのでめでたく macOS Sierra を High Sierra にアップデートした。そのときのメモ。

Dnsmasq の設定

まずは Web を快適に見るため、広告ブロックツールとして使っている Dnsmasq の設定を行う。

デーモンの plist などはそのまま残っているのでネットワークのプロキシ設定のみを行えばよい。

sudo networksetup -setdnsservers Wi-Fi 127.0.0.1

Apache の設定

macOS をアップデートすると同時に Apache が更新され httpd.conf がデフォルト状態になる。以前の設定は /etc/apache2/httpd.conf~previous として残っているので差分を更新する。

また High Sierra では PHP のバージョンが 7 になったので、モジュール名が php7_module になっていることに注意。

基本的にデフォルトの httpd.conf を使うようにし、モジュールのロードおよびローカル環境固有の項目をロードする。

LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule php7_module libexec/apache2/libphp7.so

Include /etc/apache2/myconf/*.conf

apachectl configtest してから apachectl gracefulApache を再起動。

Adobe Creative Suite CS6 の設定

Adobe Creative Suite CS6 は正式には High Sierra に対応していないが、次の方法で使うことができる。詳細は元記事を参照。

  1. リカバリーモードでの起動 → Rootless の一時無効化
  2. ディレクトリの作成
    sudo mkdir -p /System/Library/Java/JavaVirtualMachines/1.6.0.jdk /System/Library/Java/Support/Deploy.bundle
  3. リカバリーモードでの起動 → Rootless の再有効化

macOS Sierra (10.12) で Photoshop CS6 / Illustrator CS6 を使う - TeX Alchemist Online