にせねこメモ

はてなダイアリーがUTF-8じゃないので移ってきました。

完全食Compを試す

以前からアメリカで発売されているソイレントなる完全栄養食が気になって居たものの日本への発送はできず歯痒い思いをしていたのだが、最近日本でも同様のものが販売されていることを知った。その名をCOMPという。
www.comp.jp

食事が面倒で普段の食事が壊滅的になりがちなので、完全栄養食なら何も考えずに栄養摂取できるのではないかと思っていたということもあり、とりあえず、お試しパックとシェーカーを注文した。 ver. 3.0というやつだと思う。

雑感

商品自体は粉状で、水に溶かして飲むというもの。水以外のものに溶かしてもいいとのこと。
お試しパックは400kcal分のパックが3つ入っている。よくある質問のページからリンクされているページによると、私の基礎代謝が1400kcal、一日に消費するカロリーは2450kcal程度であるらしい。そのため、一日3食とすると、一食に400kcal一パックではエネルギーが足りない計算になる。

すべて水に溶かして飲んだ。シェーカーに粉を入れ、水を注ぎ、振る。底の部分がなかなか溶けないので、しばらくそこを重点的に振る必要があった。

一杯目。

寝起きに。
豆乳の感じがするので、豆乳の風味が苦手な自分にはあまりおいしいとは感じず、やや苦手な味。ほんのり甘く、飲めなくはない。
水に溶かして400ml程度あったので、全部飲み終えると満腹というか、やや苦しい感じがする。一気に飲むより少しずつ飲んだ方がいいのかもしれない。
飲んだ後は特にお腹が空いた感じもない。謳われていた通り腹持ちはいいのかもしれない。

二杯目。

一杯目と同日、夜。
印象としては、案外飲めるという感じ。あまり味わわなければ飲みやすいのかもしれない。しかし一杯飲み切る頃にはやや苦しい感じがする。

三杯目。

翌日夜。
味わわなければ気にならない、すんなり飲める感じ。味わうと豆乳味がちょっと気になる。

全体を通して

なんだかんだ言って続けられそうな味だったので、本格的に導入してみても良さそう。それだと少し値段がネックになる。Compだけで必要カロリーを摂取しようとすると、一日2000円強になってしまい、自分には少々割高に感じる。一日当たり1500円位なら常食(飲?)を検討したい。
一日2千円で健康が買えるとするなら、高いものではないかもしれないが……。そういう意味では、手の出ない価格ではない。
シェーカー洗うの面倒臭い。やれば一分ですむことだが。


もう少し続けてみようかな。

『ロシアの文字の歴史』

サークル“ヒュアリニオス”として頒布した『ロシアの文字の歴史』(初出: コミックマーケット88)を公開します。現在ロシアで使われているキリル文字の簡単な歴史をまとめた漫画です。

サポートページ


ダウンロード

PDFファイルのダウンロードはこちらから: istorija_kirillitsy.pdf (5.51MB)

こちらもどうぞ

文字の対応を見ながら、ギリシャ文字からキリル文字が作られた過程をラテン文字を絡めて説明している感じの漫画です。

本文

f:id:nixeneko:20160731201840p:plain

続きを読む

Python 3でcp932コマンドプロンプトに非cp932文字を含む文字列をprintする

Windowsバッチ処理用にPythonスクリプトを組んでいる。ドラッグ&ドロップで処理できるように、まず.batファイルを作成しそこからPythonスクリプトにドロップされたファイル名が渡される様にしている。

ここで、厄介なのが、コマンドプロンプトエンコーディングがcp932(Shift_JISWindows拡張)だということである。このため、Python 3からcp932外の文字をprint関数で出力しようとした場合、UnicodeEncodeErrorを吐いて終了する。
これをどうにかしたい。

なお、Python2系と3系では文字列型が大きく変更されているため、Python 2系の方法を3系で使うことはできないし、逆もまた然りである。これは3系用のもの。

対策

環境


Python 3系にのみ対応する。

次のコードをプログラムの最初に書く。

import io, sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,
                              encoding=sys.stdout.encoding, 
                              errors='backslashreplace', 
                              line_buffering=sys.stdout.line_buffering)

io.TextIOWrapperはバイナリバッファをテキストIOストリームとして扱えるようにするものらしい。ここでは標準出力のバッファ(sys.stdout.buffer)を指定している。
encodingオプションに標準出力のエンコーディング(sys.stdout.encoding)を指定している。
今回大事なのはerrorsオプションで、encodingで指定されたエンコーディングに含まれない文字の扱いを指定する。ここが標準の'strict'だとエラーを吐いて停止する。'\u2049'の様に表示される'backslashreplace'か、全く無視する'ignore'、'?'などで置き換える'replace'、'⁉'の様になる'xmlcharrefreplace'、'\N{EXCLAMATION QUESTION MARK}'の様になる'namereplace'のいずれかを指定する。
line_bufferingはデフォルトでFalseだが、これをTrueにしないとプログラムの最後にまとめて出力されたりするので、もとの値を継承するようにした。


これはちょっとした確認用なので、表示できないデータが失われても問題ない場合だからこの方法でいいが、それで困る場合は素直にコマンドプロンプトエンコーディングを変えた方がよさそう。

おまけ: cp932外文字判別

ある文字列が、cp932に含まれない文字を含むか判定するには、

def iscp932encodable(s):
    return s.encode('cp932', errors='ignore').decode('cp932') == s

とか。要するに一度cp932に変換してもとに戻してcp932に変換できない文字を消してしまって、それと元の文字列を比較しているというもの。

cp932に含まれない文字の集合を抽出するには、

def notcp932encodable(s):
    return set(s) - set(s.encode('cp932', errors='ignore').decode('cp932'))

とか。

“Momodora: 月下のレクイエム”を遊ぶ: 普通のゲームコントローラを使う

最近は専ら「Momodora: 月下のレクイエム」を遊んでます。アクションゲームで操作感も軽快で、サクッとプレイできて楽しい。攻略サイト等見ずともクリアまで6~9時間位。洞窟物語好きな人ならプレイすべき。アクション好きにはお勧めです。

普通のUSBゲームコントローラを使う

さて、プレイしようとした時に問題が起こった: ゲームコントローラを認識しない。

このゲーム、ゲームコントローラの認識にXInputという新しい規格を使用しているため、プレイにはXbox 360コントローラ(あるいはXInput対応コントローラ)が必要なのだが、手持ちのコントローラはBUFFALO BSGP801で、これは古いDirectInput規格用のものである。

ここによると、x360ceを使ったらいいとのことだったが、それでもゲームは無反応だった。

という訳で、調べていたところ、代りにxoutputという360コントローラエミュレータを使うといいらしかった。

インストール等はREADME.txtに書かれてる通り、

  1. (Win8以降はこの手順は不要)次のページから自分のOSに対応したXbox 360 Controllerドライバをダウンロードし、インストールする。
  2. xoutputの中のScpDriver/ScpDriver.exeを実行し、installをクリックしてインストールし、終わったらウィンドウを閉じる。
  3. XOutput.exeを起動する
  4. 歯車ボタンをクリックし、マッピングを指定し、マッピング画面を閉じる。
  5. Startボタンをクリック

一応今使っているキーマップはこんな感じ。
f:id:nixeneko:20160703204704p:plain
物理ボタンの対応はたぶんこう。
f:id:nixeneko:20160703205805j:plain
XBoxコントローラとスーファミコントローラでAとB、およびXとYの位置が逆になっている。XBox側に合わせた。

既知の問題

マップを開くと十字キーを何も押してないのに画面が左上に動いていく。右下を入力すると止まるので、マップを開くと同時に右下を入力してなんとか防いでいる。

そんなことより

JoyToKey使ってキーボードのキーを割り当てた方が便利かもしれませんね。

Photon 2を買った

Photon 2、以前から気になってはいたのだが、ついに日本版通販サイトがオープンしたので早速買ってしまった。

キーボードカバーつきで29900円。安い。

ファーストインプレッション

届いたときの印象。

  • キーボードカバーが結構重い。
  • 付属のmicroUSBオス-USB-Aメス変換コネクタが、本体に刺すとACアダプタのプラグと干渉しそうで怖い。
  • キーボードカバーの配列がちょっと特殊。
    • 基本日本語配列だけどエンター周りが英語キーボードの様になって居り、円“¥”キーがBSの下に、“]”(む)キーが“/”(め)の右に、バックスラッシュ“\”(ろ)キーがエンターの下の右端に来て、“]”(む)との間に矢印“↑”が挟まっている。右Shift, 右Ctrlなし。変換無変換はFn同時押し。

セットアップ

設定を行っていく。初期ではWindows 8.1が入っている。

  1. Windows 8.1のセットアップ
    • ここでは日本語表示に設定
  2. Windows 10へアップグレード
    • なんか知らんが英語表示になる(他のPCとMicrosoftアカウントを共用してるのが原因か)
    • BlueTooth効かない
  3. http://www.bungbungame.com/JP/support/download_drive.aspx から「Photon 2 AMD Drivers (AMD Drivers for WIN10/Win8.1 64bit)」をダウンロードしてきてインストール
    • これを入れないと暗転するらしい
  4. 同様にBT_8821AE(WIN10 64bit)をインストール
    • BlueToothが使えるようになり、キーボードカバーのキーボードが使えるようになる
  5. 他にもWin10向けのドライバ類をインストール。必要ないかもしれないけど
    • Realtek Audio(WIN 10 64bit)
    • RealtekCardReader(WIN10 64bit)
    • NFC_Bridge(WIN10 64bit)
    • NFC(WIN10 64bit)
    • WLAN_8821AE(WIN10 64bit)
  6. Windows Updateで最新に更新
    • スタートメニュー→設定→更新とセキュリティ から
  7. 古いOSの削除
    • スタート→設定→システム→ストレージ→Cドライブ→一時ファイル→Windowsの以前のバージョン「以前のバージョンの削除」
  8. 同じMicrosoftアカウント間の設定の同期の解除
    • スタート→設定→アカウント→設定の同期→設定の同期の設定をオフに
  9. IMEの状態をsystem-wideで共有しないようにする

お絵描き回り

  • Clip Studio Paint
    • 指によるタッチ操作でキャンバスの拡縮・回転ができる。素晴らしい。キーボードがない状態だとショートカット類が使えないのでやや使い辛い(もしかしたら使う方法を知らないだけかもしれないが)。

その他ソフト類のインストール

セキュリティ
マルチメディア・ユーティリティ等

キーボードのカスタマイズ

しかし変な配列である。



台湾版はまともな102キーボードベースの配列のようであるし、無理やり日本語キーボード化した感が拭えない。
キーの形は英語キーボードと同じ様であるし、英語キーボードベースの配列として使えばいいのではないか。

日本語キーボードとして認識させる

同じMSアカウントで別のPCにログインし設定してたためかキーボード周りの設定がおかしくなっていた。
キーボードカバーのキーボードが英語キーボードとして認識されてたので日本語キーボードに変更。

配列を変える

方針
  • 英語配列をベースとする。バッククォートやチルダはあまり使わないので上矢印キーの右に押しやる。
  • せっかくなのでDvorak配列にする。

こんな感じ。
f:id:nixeneko:20160620012407p:plain

remapkeyを使ったモディファイヤキーの変更

Windows Server 2003 Resource Kit Toolsをダウンロードしインストール。
C:\Program Files (x86)\Windows Resouce Kits\Tools\remapkey.exe を管理者権限で起動。
上のベースキーボードから下のリマップキーボードにキーをドラッグ&ドロップすると設定できる。間違えたキーはクリックで取り消せる。
カタカナひらがなキーにはアプリケーションキーを、Appキーには右Ctrlキーを、“]”キーには右シフトを割当て、設定を保存し再起動する。
f:id:nixeneko:20160620004351p:plain
この状態では“]”“}”が入力できないことに注意する。

DvorakJを使ってDvorak配列に変更

US配列にしたければ「QWERTY 配列 (ASCII 配列版).txt」を直接入力の配列として指定すればよい。

今回はDvorakにしたいので、次のような配列定義ファイルを用意し、直接入力の配列として設定する。

同時に打鍵する配列

/*
 * Dvorak 配列
 *
 * Photon 2 キーボードカバーのキーボード用
 */

[
1|2|3|4|5|6|7|8|9|0|[|]|\|
'|,|.|p|y|f|g|c|r|l|/|=|
a|o|e|u|i|d|h|t|n|s|-|`|
;|q|j|k|x|b|m|w|v|z|\|
]

-shift[
{!}|@ |{#}|$ |% |{^}|{&}|* |( |) |{{}|{}}|@@@|
"  |< |>  |P |Y |F  |G  |C |R |L |?  |{+}|
A  |O |E  |U |I |D  |H  |T |N |S |_  |~  |
:  |Q |J  |K |X |B  |M  |W |V |Z |@@@|
]

ただ、これだと英語(直接入力)や日本語入力の場合は問題ないものの、他言語のキーボードに切替えた場合に問題が生じる可能性がある。ロシア語キーボードも必要なので、後で検討する。

また、ログイン画面ではDvorakJは動作しない。これも要検討。

方針転換(2016-09-05追記)

上記のRemapkeyのやり方だと、別言語(英語、ロシア語等)のキーボードに切り替えた場合、キーが本来とは異なった位置にマップされてしまう。そのため、通常の物理キーボードと配列が同じになるようにremapkeyの設定を変更した。
f:id:nixeneko:20160905195515p:plain
なお、この状態では縦棒“|”が入力できないことに注意。入力言語・キーボードを「英語(米国) Dvorak」に切り替えたりして対処している。これはログイン画面でも(切り替えれば)使用できる。
DvorakJPやAutohotkeyなどを使ってキーの変更を行うのであればこの設定をベースにするとよいかもしれない。

漢直Win

日本語入力用に漢直Winを入れる。Windows 8.1のときはソフトによっては入力に反応しないときもあったのだが、10ではどうか。
DvorakJでDvorak配列にしたのでキーボードはDvorakに設定した。

×

  • Notepad++
    • 英数字そのまま直接入力、DvorakJすら効いてない
outputMethod=4

を設定することでNotepad++は入力を受け付けるようになった。
とりあえず様子見。キーボード周りは後で何とかする。

その他

キーボードカバーのペン置きの位置があまり良くなく、カバーにしまうときや画面を立てるときに直撃し、2日持ち運んだらネジが外れてしまった。瞬間接着剤で補修。

2016-10-22追記

  • スタイラスの電池が、大して使わなくても1ヶ月もたないっぽい(Amazonの安いやつを使用)。単6電池なので入手性に難がある。いざというときに使えないと困るので予備を確保しておくのが吉か。
  • スタイラスの電池ホルダーにひびが入ってきていて、油断すると折れそう。接着剤でくっつければ何とかなるものではあるが、だましだまし使うしかないか。
  • キーボードカバーのキーボードの電池が微妙な頻度で切れるので、定期的な充電が必要。たまに気づいたら入力できなくなってたり。

Unicodeモンゴル文字フォント一覧

モンゴル文字Unicodeフォントに関する情報が見つけづらいので、リストを作ってまとめておく。暫定公開。抜けや間違い等ありましたら情報提供お願いいたします。


(2018-03-28 追記)

↑この記事で述べた理由により、フォント間の互換性があるとは限りませんので気を付けてください。あるフォントで正しい表示になっても別のフォントでは正しく表示されない可能性があります。
下記のフォントについてはすべて同一の文字列を与えているため、正しい表示になっていないものもあるはずです。ご留意ください。
(追記終)

例文

モンゴル文字フォントの表示例を作成するのに使用した例文は、Mongolian alphabets, pronunciation and languageに倣い、世界人権宣言の文章(ここからとった)の一部を表記変換器を使ってモンゴル文字に直したものである。フォント見本については、Microsoft Word 2013によりフォントの表示を行った。

間違い等あればご指摘願います。また、さらに良い例文をご存知であればご教授ください。

Mongolian Baiti

f:id:nixeneko:20160617015731p:plain
Copyright holder: Microsoft
Author: Founder(方正), Beijing China
Availability: Bundled with Microsoft Windows Vista and later
URL: https://www.microsoft.com/typography/fonts/font.aspx?FMID=2144

Windows (Vista以降)に標準搭載されているフォント。

MongolianScript

f:id:nixeneko:20160617015758p:plain
Copyright holder: Myataviin Erdenechimeg
Availability: free download from http://www.openmn.org/index.php?nav=4&pageId=6 (included in Mongolian Script tools) or Mongolian Script - Хэрэглэгчийн горим (from Фонт татах)
URL: http://mongol.openmn.org
License: SIL OPEN FONT LICENSE Version 1.1

Mongol Tolbo (MT-Tolbo)

f:id:nixeneko:20160617015808p:plain
Copyright holder: Amarjargal Zeerd-Aduun Lkhamsuren
Availability: free download from the URL
URL: http://mongoltolbo.com

Mongol Sudar

f:id:nixeneko:20160617015818p:plain
Copyright holder: Amarjargal Zeerd-Aduun Lkhamsuren
Availability: free download from the URL
URL: http://mongoltolbo.com/sudar/

Almas fonts

URL: http://www.mongolfont.com/en/font/index.html
Fonts are available in ATT (only on Mac) and OpenType format.

Mongolian White

f:id:nixeneko:20160617015831p:plain
Copyright holder: Almas Inc.
URL: http://www.mongolfont.com/en/font/mnglwhiteotf.html
License: “Free for individuals to use, It is not allowed to sale or provide in terms of any kinds of charges.”

Mongolian Art

f:id:nixeneko:20160617015840p:plain
Copyright holder: Almas Inc.
URL: http://www.mongolfont.com/en/font/mnglartotf.html
License: “Free for individuals to use, It is not allowed to sale or provide in terms of any kinds of charges.”

Mongolian Writing

f:id:nixeneko:20160617015848p:plain
Copyright holder: Almas Inc.
URL: http://www.mongolfont.com/en/font/mnglwritingotf.html
License: “Free for individuals to use, It is not allowed to sale or provide in terms of any kinds of charges.”

Mongolian Title

f:id:nixeneko:20160617015857p:plain
Copyright holder: Almas Inc.
URL: http://www.mongolfont.com/en/font/mngltitleotf.html
License: “Free for individuals to use, It is not allowed to sale or provide in terms of any kinds of charges.”

Noto Sans Mongolian

f:id:nixeneko:20160617015906p:plain
Copyright holder: Google Inc.
Author: Monotype Imaging Inc.
Availability: free download from the URL
URL: https://www.google.com/get/noto/#sans-mong
License: SIL OPEN FONT LICENSE Version 1.1

Menksoft fonts

Copyright holder: Menksoft Co.,Ltd.
Availability: free download from the URL
URL: http://www.menksoft.com/site/alias__menkcms/2791/Default.aspx
License: “You may use this font to display and print content as permitted by the license terms for the product in which this font is included. You may only (i) embed this font in content as permitted by the embedding restrictions included in this font; and (ii) temporarily download this font to a printer or other output device to help print content.”

Menk Amglang Tig

f:id:nixeneko:20160617015920p:plain

Menk BudunTig

f:id:nixeneko:20160617015954p:plain

Menk Doroge Tig

f:id:nixeneko:20160617020005p:plain

Menk Egulen Tig

f:id:nixeneko:20160617020234p:plain

Menk Erihe Tig

f:id:nixeneko:20160617020243p:plain

Menk Garqag Tig

f:id:nixeneko:20160617020252p:plain

Menk Har_a Tig

f:id:nixeneko:20160617020302p:plain

Menk Hawang Tig

f:id:nixeneko:20160617020309p:plain

Menk Hvlvsvn Tig

f:id:nixeneko:20160617020317p:plain

Menk Lhundb Tig

f:id:nixeneko:20160617020330p:plain

Menk Mcdvnbar Tig

f:id:nixeneko:20160617020338p:plain

Menk Narin Tig

f:id:nixeneko:20160617020346p:plain

Menk OnqaHar_a Tig

f:id:nixeneko:20160617020353p:plain

Menk Qagan Tig

f:id:nixeneko:20160617020400p:plain

Menk Qimed Tig

f:id:nixeneko:20160617020409p:plain

Menk Qimig Tig

f:id:nixeneko:20160617020417p:plain

Menk Qingming Tig

f:id:nixeneko:20160617020423p:plain

Menk Scnin Tig

f:id:nixeneko:20160617020430p:plain

Menk Sidam Tig

f:id:nixeneko:20160617020439p:plain

Menk Svgvnag Tig

f:id:nixeneko:20160617020448p:plain

Menk Svlbiya Tig

f:id:nixeneko:20160617020456p:plain

Menk Tegus Tig

f:id:nixeneko:20160617020503p:plain

Menk Tenigun Tig

f:id:nixeneko:20160617020512p:plain

Menk Tvgvrai Tig

f:id:nixeneko:20160617020519p:plain

Menk Ujug Tig

f:id:nixeneko:20160617020526p:plain

Menk Vran Tig

f:id:nixeneko:20160617020534p:plain

Menk Vyangga Tig

f:id:nixeneko:20160617020541p:plain

Menk Xvsiga Tig

f:id:nixeneko:20160617020549p:plain

Mongol Usug

f:id:nixeneko:20160617020804p:plain
Copyright holder:
Availability: bundled in VertNote, can be downloaded for free from http://www.dusal.net/downloads/vertNote.rar
URL: http://mongol-bichig.dusal.net/243/mongol-bichgeer-bichdeg-vertnote-program.html
License:

モンゴル文字メモ帳VertNoteをインストールするとついてくる。

Code2000

f:id:nixeneko:20160617020850p:plain
Copyright holder:
Availability: A shareware demo, can be downloaded for from http://www.alanwood.net/downloads/index.html. Original web site disappeared.
License: Shareware

Unicodeフォント。公式サイト消滅。

Orhon fonts

Copyright holder:
Availability: bundled in VertNote, can be downloaded for free from https://github.com/orhoncms/orhoncms/tree/master/wp-content/languages/fonts
URL: http://www.orhoncms.org/
License:

OrhonChaganTig

f:id:nixeneko:20160617020904p:plain
モンゴル文字CMSシステムの付属書体。詳細不明。

おまけ

Abkai fonts

Abkai Xanyan (太清白体)

f:id:nixeneko:20160617020653p:plain
Copyright holder: Abkai.net?
Availability: free download from 满文字体 « 太清网
URL: http://abkai.net/core/zh/
License: “Abkai fonts and keyboards are offered free of charge to everybody for personal non-commercial use.”

満州文字・シベ文字・ダウール文字用フォント。
MS Word 2013ではうまく表示されなかった。他にもいくつかフォントがあるがそれも同様。どのようにすれば正しく表示されるのだろうか? あるいは、満州文字・シベ文字・ダウール文字用フォントのため、モンゴル文字には対応していない?
(20150701追記: 覗いてみたら、モンゴル文字でしか使わない文字にはモンゴル文字のグリフが入ってなかったので、モンゴル文字には対応してないようだ)

HTMLのある要素の直下のテキストだけを取り出す

JavaScriptで、HTMLの要素の直下(つまり、子供)のテキストだけをとりだしたかった。
例をあげると、

<div id="test"><b></b>楽しい人生<small>第一回</small></div>

みたいなhtmlがあったとき、<div>の中の直下のテキストだけ取り出し、「楽しい人生」を得たいという欲求があった。

ここで、

div = document.getElementById("test");
console.log(div.textContent);

とすると、「新楽しい人生第一回」が出力される。これは望むものではない。

あるいは .innerHTML でdivの内部のHTMLを得て自分でタグ要素を正規表現などを利用して消去するということも可能だろうが、ブラウザがすでにタグをパースしてあるのだからそこを自前でやりたくない。

コード

というわけで、作ってみた。

div = document.getElementById("test");
var result = "";
for(elem of div.childNodes){
    if(elem.nodeName == "#text"){
        result += elem.nodeValue;
    }
}
console.log(result);

実行すると、「楽しい人生」が出力される。

説明

Node.childNodes はテキストも含めた子要素を返す。
テキストノードはその要素の .nodeName が "#text" となっている。
子要素をループで一つ一つ見ていって、テキストノードと判別されるもののみその文字列を連結している。

他に何かいい方法があるかもしれない。

メモ

Node.childNodes は NodeList を返す。 Array であれば .forEach() や .filter() が使えるのだが、NodeListでは使うことが出来ない。必要であれば Array.from(NodeList) の様にして一度 Array に変換するといいらしい。