Author Archives: AKIYAMA

2020-04-06

星表を使って星空を描く

ESAのHipparcosGaiaのデータを使用して星空を描いてみました。

  • js_hoshizora:

    JavaScript+WebGLで10万個くらいの星空を描いてみたもの。実行はこちら

  • drawstars:

    Gaiaのデータを使って精巧な天の川まで描いてみたもの。あまりに天体の数が多いのでリアルタイムは不可能。C++でコマンドラインツールに仕立てました。去年の夏に撮影した天の川と比較してみたところほとんど一致しました。

昔から一度星空を描いてみたかったのです。小学生の頃図書館にBASICで書かれたグラフィックスの本があってその中に星空・星座を描くものがあったのですが当時の私にはさっぱり理解出来ませんでした。

天体の位置計算 増補版やWebの情報で勉強してみると精度を求めないのであればそれほど難しくないようでした。基本的に赤経・赤偉で星の位置が与えられているので、それを地球のある地点から見た座標系に変換すればOKです。言葉の定義などをしっかり学んで考えてみれば3Dグラフィックスでおなじみの行列での座標変換でした。

一番困ったのは色の計算。一般に星の観測は複数の異なる帯域(赤とか青とか)に反応するセンサーを用い、色はその差分で表されるのですが、そこから画面のRGB値にするのに苦労しました。今でも適当です。

恒星時の計算もひっかかりました。年々式が変わっているようなのですが原理をあまり理解していないのでよく分かりません。精度を求めないのであれば適当でもなんとか。

歳差やら章動やら天体の固有運動、視差、光行差等はまだろくに学んでいないので考慮していません。色についても赤方偏移や減光など色々な要因で変わるみたいですが後々の課題と言うことで。

正距円筒図法で描かれた天の川
図1: 正距円筒図法で描かれた天の川
テクスチャにして投影した天の川
図2: テクスチャにして投影した天の川
現実の天の川
図3: 現実の天の川
描画された天の川
図4: 描画された天の川
2020-01-23

2020年冬の新番組

今期はどうでしょうね。1話切りを連発したわりには案外残っているような気もします。

あたりですかね。

01/03(金) 22:30~ TOKYO MX 恋する小惑星
× 01/03(金) 24:00~ TOKYO MX ダーウィンズゲーム
01/04(土) 24:00~ TOKYO MX マギアレコード 魔法少女まどか☆マギカ外伝
01/05(日) 21:30~ TOKYO MX りばあす
01/05(日) 24:00~ TOKYO MX ID:INVADED
01/05(日) 24:10~ NHK総合 映像研には手を出すな!
× 01/05(日) 25:00~ TOKYO MX おーばーふろぉ
01/06(月) 21:54~ TOKYO MX へやキャン△
01/06(月) 22:00~ TOKYO MX pet-ペット-
× 01/06(月) 24:30~ TOKYO MX 群れなせ!シートン学園
01/06(月) 25:00~ TOKYO MX 八十亀ちゃんかんさつにっき 2さつめ
01/06(月) 25:35~ TOKYO MX なつなぐ!
01/07(火) 07:30~ テレビ東京系 LALALACOCO
01/07(火) 18:45~ NHK Eテレ ブレーカーズ
01/08(水) 07:30~ テレビ東京系 フライングベイビーズ☆プチ
01/08(水) 22:00~ TOKYO MX 魔術士オーフェンはぐれ旅
× 01/08(水) 22:30~ TOKYO MX number24
01/08(水) 24:55~ フジテレビ 空挺ドラゴンズ
× 01/08(水) 25:05~ TOKYO MX プランダラ
× 01/08(水) 25:35~ TOKYO MX 痛いのは嫌なので防御力に極振りしたいと思います。
01/09(木) 19:30~ BS4K ムーミン谷のなかまたち シーズン2
01/09(木) 22:00~ TOKYO MX ネコぱら
01/09(木) 22:30~ TOKYO MX SHOW BY ROCK!! ましゅまいれっしゅ!!
× 01/09(木) 23:30~ TOKYO MX インフィニット・デンドログラム
01/09(木) 24:00~ TOKYO MX 宝石商リチャード氏の謎鑑定
01/09(木) 24:30~ TOKYO MX ソマリと森の神様
01/09(木) 24:55~ フジテレビ うちタマ?! ~うちのタマ知りませんか?~
× 01/09(木) 25:28~ TBS 推しが武道館いってくれたら死ぬ
01/09(木) 25:58~ TBS 地縛少年 花子くん
01/10(金) 24:30~ TOKYO MX 理系が恋に落ちたので証明してみた。
01/10(金) 25:05~ TOKYO MX とある科学の超電磁砲T
× 01/10(金) 25:23~ テレビ東京 織田シナモン信長
01/10(金) 25:25~ TBS系 ハイキュー!! TO THE TOP
× 01/10(金) 25:35~ TOKYO MX ケンガンアシュラ
× 01/10(金) 26:05~ TOKYO MX はてな☆イリュージョン
× 01/10(金) 26:25~ TBS ランウェイで笑って
× 01/11(土) 23:00~ TOKYO MX 22 / 7
× 01/11(土) 25:30~ TOKYO MX 異種族レビュアーズ
01/11(土) 25:30~ テレビ朝日 虚構推理
01/12(日) 22:00~ TOKYO MX ぼくのとなりに暗黒破壊神がいます。
01/12(日) 24:00~ TOKYO MX ドロヘドロ
× 01/13(月) 23:00~ TOKYO MX ARP Backstage Pass
× 01/13(月) 24:00~ TOKYO MX A3! -SPRING & SUMMER-
× 01/14(火) 23:00~ TOKYO MX 7SEEDS
01/14(火) 24:30~ TOKYO MX 異世界かるてっと 第2期
01/15(水) ~ YouTube ポケットモンスター ソード&シールド「薄明の翼」
01/23(木) 23:00~ TOKYO MX BanG Dream! 3rd Season
01/23(木) ~ Netflix 聖闘士星矢: Knights of the Zodiac パート2

継続:

  • ちはやふる3
  • 耐え子の日常
2019-12-08

Windows用のEmacs26.3をMSYS2でビルドする方法(IMEパッチ、ImageMagick-6)

rzl24ozi’s gistsにIMEパッチが公開されている。README.txtに詳細なビルド方法が書いてあるのでよく読むこと。

1次情報としてはソースコードツリー内の nt/INSTALLnt/INSTALL.W64 にWindowsでのビルド方法が書いてある。

Emacs 26.2以降は最低限のIMEサポートがなされているらしいのでIMEパッチを適用しなくても公式ビルドで十分な場合もある。私の場合、ATOK使用時にCtrl+Nで部分確定した文字が正しく入力されなかった(Ctrl+各確定した文字…と解釈されてそんなキーバインドは無いと言われた)のでIMEパッチを使うことにした。

また、ImageMagickサポートがあると画像の拡大縮小ができて大きな画像も無理なく埋め込み表示出来るのでImageMagickパッチも適用することにした。

作業概要

MSYS2環境を構築(後述)してから、MinGW64のシェルから次の作業を行う。各ステップについての詳細は後述する。

# 作業用ディレクトリを作る
mkdir emacsbuild
cd emacsbuild
WORK_DIR=$(pwd)

# ImageMagickをダウンロードして展開してビルドする
IMAGEMAGICK_VER=ImageMagick-6.9.10-77
wget http://www.imagemagick.org/download/releases/$IMAGEMAGICK_VER.tar.gz
tar xvfz $IMAGEMAGICK_VER.tar.gz

IMAGEMAGICK_DIR=$WORK_DIR/ImageMagick-6
cd $IMAGEMAGICK_VER
./configure --host=x86_64-w64-mingw32 --enable-hdri --with-rsvg --prefix=$IMAGEMAGICK_DIR
make install
cd ..

# Emacsをダウンロードして展開する
EMACS_VER=emacs-26.3
wget http://ftp.gnu.org/gnu/emacs/$EMACS_VER.tar.gz
tar xvfz $EMACS_VER.tar.gz

# IMEパッチを当てる
wget https://gist.githubusercontent.com/rzl24ozi/ee4457df2f54c5f3ca0d02b56e371233/raw/16794e5883211049aed08c681f71240fa32cc28f/emacs-26.1-rc1-w32-ime.diff
patch -p0 -d $EMACS_VER <./emacs-26.1-rc1-w32-ime.diff

# ImageMagickパッチを当てる
wget https://gist.githubusercontent.com/rzl24ozi/2b6dd502f3e0fa5083fb87c808287370/raw/a56d6c576d3f4ca24f87ff7510498f588a67c236/emacs-26.1-rc1-mingw-imagemagick.diff
patch -p0 -d $EMACS_VER <./emacs-26.1-rc1-mingw-imagemagick.diff

# ImageMagick関連dllファイル名をビルドしたバージョンに合わせて書き替える
mv $EMACS_VER/lisp/term/w32-win.el $EMACS_VER/lisp/term/w32-win.el.orig_patched
sed 's/-6\.Q16HDRI-5\.dll/-6.Q16HDRI-6.dll/g; s/-6\.Q16-5\.dll/-6.Q16-6.dll/g;' $EMACS_VER/lisp/term/w32-win.el.orig_patched > $EMACS_VER/lisp/term/w32-win.el

# Emacsをビルドする
EMACS_INSTALL_DIR=/c/app/$EMACS_VER
cd $EMACS_VER
./autogen.sh
PKG_CONFIG_PATH=$IMAGEMAGICK_DIR/lib/pkgconfig:$PKG_CONFIG_PATH ./configure --without-dbus --with-gnutls --prefix=$EMACS_INSTALL_DIR
make -j4
make install-strip
cd ..

# dllをコピーする
cp /mingw64/bin/*.dll $EMACS_INSTALL_DIR/bin
cp $IMAGEMAGICK_DIR/bin/libMagickCore*.dll $EMACS_INSTALL_DIR/bin
cp $IMAGEMAGICK_DIR/bin/libMagickWand*.dll $EMACS_INSTALL_DIR/bin

Cygwin使用者への注意

Cygwinを使用している場合はCygwinの設定がMSYSと混ざらないように注意すること。

  • 環境変数HOMEが指している場所に.bashrcや.bash_profile等の設定ファイルがある場合は、それが読み込まれないようにする。そこにPKG_CONFIGやLIBRARY_PATH等の設定があるとうまくビルド出来ない。
  • PATHがCygwinのツールを参照していると問題を起こす場合がある(特にテキストマウントによる改行コードの問題)ので、PATHからCygwin関連へのパスを外す等する。

環境変数HOMEがCygwinの設定ファイルがあるディレクトリを指している場合、例えば次のようにして対処する。

  • MSYSを使う前に一時的に環境変数HOMEを削除する
  • msys2_shell.cmdの先頭に「set HOME=」を追加する
  • cmd.exeから set "HOME=" && (msysインストール先)\msys2_shell.cmd -mingw64 でMinGW64シェルを起動する
  • .bashrcや.bash_profileにCygwin以外(MSYS等)で実行した場合に対応するコードを追加する。例えば次のコードをファイルの先頭に入れるとCygwin以外は何もせず終了する

    [[ "$OSTYPE" != "cygwin" ]] && return
    

MSYS2環境の準備

MSYS2のインストール

MSYS2 homepageからMSYS2(x86_64)のインストーラをダウンロードして実行しインストールする。

MSYS2シェルの起動

スタートメニューから「MSYS2 MSYS」を選ぶとMSYS2シェルが起動する。

MSYS2の更新

すでにMSYS2をインストール済みの場合、ビルドの前に各種パッケージの更新を行う(古いバージョンのMSYS2の場合は入れ直した方が早いかも)。

スタートメニューから「MSYS2 MSYS」を選んで以下を入力。

pacman -Syuu

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

のようなメッセージが出たらAlt+F4で終了してスタートメニューからMSYS2 MSYSを起動して再度 pacman -Syuu を実行する。

何度か繰り返して更新されなくなったらOK。

以前追加したパッケージはここで更新される。

必要なパッケージの追加

必要なパッケージについては nt/INSTALLnt/INSTALL.W64 を参照のこと。

nt/INSTALL.W64では次のパッケージをインストールしている(2019-12-07現在)。

pacman -S --needed base-devel \
  mingw-w64-x86_64-toolchain \
  mingw-w64-x86_64-xpm-nox \
  mingw-w64-x86_64-libtiff \
  mingw-w64-x86_64-giflib \
  mingw-w64-x86_64-libpng \
  mingw-w64-x86_64-libjpeg-turbo \
  mingw-w64-x86_64-librsvg \
  mingw-w64-x86_64-lcms2 \
  mingw-w64-x86_64-jansson \
  mingw-w64-x86_64-libxml2 \
  mingw-w64-x86_64-gnutls \
  mingw-w64-x86_64-zlib

不要なパッケージ(ImageMagick-7)が入っている場合は削除すること。

pacman -Rs mingw-w64-x86_64-imagemagick

MinGW64シェルに移る

スタートメニューから「MSYS2 MinGW 64-bit」を選ぶ。

Cygwinを使用している場合はCygwin使用者への注意を参照のこと。

作業用ディレクトリを用意する

mkdir emacs_build
cd emacs_build
WORK_DIR=$(pwd)

以降作業ディレクトリへのパスを $WORK_DIR とする。

ImageMagickのビルド

ImageMagickのソースコードの取得

http://www.imagemagick.org/download/releases/ から6系の最新のソースコードを取得する。

IMAGEMAGICK_VER=ImageMagick-6.9.10-77
wget http://www.imagemagick.org/download/releases/$IMAGEMAGICK_VER.tar.gz
tar xvfz $IMAGEMAGICK_VER.tar.gz

ImageMagickのビルド

MinGW64シェルから展開したディレクトリへ移動して

IMAGEMAGICK_DIR=$WORK_DIR/ImageMagick-6
cd $IMAGEMAGICK_VER
./configure --host=x86_64-w64-mingw32 --enable-hdri --with-rsvg --prefix=$IMAGEMAGICK_DIR
make install
cd ..

$WORK_DIR/ImageMagick-6 にビルド結果が格納される。そのディレクトリを以降 $IMAGEMAGICK_DIR とする。

Emacsのビルド

Emacsのソースコードの取得

Emacsの公式サイトからソースコードをダウンロードして展開する(Cygwinの場合テキストマウントに注意すること)。

http://ftp.gnu.org/gnu/emacs/

EMACS_VER=emacs-26.3
wget http://ftp.gnu.org/gnu/emacs/$EMACS_VER.tar.gz
tar xvfz $EMACS_VER.tar.gz

Gitで取得することもできる。

which gitしてgitが見えなければgitへのパスを通す(Git for WindowsなどMSYS2の外でインストールしている場合は見えないと思う)。

export PATH="/c/app/dev/Git/cmd":"$PATH"

emacs.git - Emacs source repository より好きなブランチを選んで入手する。

git clone --depth=1 -b $EMACS_VER git://git.savannah.gnu.org/emacs.git --config core.autocrlf=false

改行コードに注意すること。Windowsだとautocrlfで使っている人もいると思うので、改行コードが変換されないようにオプションを付ける。

IMEパッチを適用

rzl24ozi’s gists より最新のものを入手する。

emacs-26.3にはemacs26.1-rc1用のパッチがそのまま適用できた。

wget https://gist.githubusercontent.com/rzl24ozi/ee4457df2f54c5f3ca0d02b56e371233/raw/16794e5883211049aed08c681f71240fa32cc28f/emacs-26.1-rc1-w32-ime.diff
patch -p0 -d $EMACS_VER <./emacs-26.1-rc1-w32-ime.diff

注意: Cygwinをテキストマウントで使っている場合、Cygwinのpatchを使うと改行コードがCR+LFになることがあるので、その場合はMinGWのpatchを使うこと。

(msys2インストール先)/usr/bin/patch -p0 -d $EMACS_VER <./emacs-26.1-rc1-w32-ime.diff

ImageMagickパッチを適用(+一部手動修正)

ImageMagickを使うときは次のパッチを使う。

wget https://gist.githubusercontent.com/rzl24ozi/2b6dd502f3e0fa5083fb87c808287370/raw/a56d6c576d3f4ca24f87ff7510498f588a67c236/emacs-26.1-rc1-mingw-imagemagick.diff
patch -p0 -d $EMACS_VER <./emacs-26.1-rc1-mingw-imagemagick.diff

した上で

lisp/term/w32-win.el 内の次の場所をDLLのファイル名に合わせて変更する。

       '(magickwand "libMagickWand-6.Q16HDRI-5.dll" "libMagickWand-6.Q16-5.dll"
                    "libMagickWand-6.Q16HDRI-2.dll" "libMagickWand-6.Q16-2.dll")
       '(magickcore "libMagickCore-6.Q16HDRI-5.dll" "libMagickCore-6.Q16-5.dll"
                    "libMagickCore-6.Q16HDRI-2.dll" "libMagickCore-6.Q16-2.dll")

例えばImageMagick-6.9.10-77をビルドすると libMagickCore*-6.dll や libMagickWand*-6.dll ができるので、上の-5.dllを-6.dllへ修正する。

mv $EMACS_VER/lisp/term/w32-win.el $EMACS_VER/lisp/term/w32-win.el.orig_patched
sed 's/-6\.Q16HDRI-5\.dll/-6.Q16HDRI-6.dll/g; s/-6\.Q16-5\.dll/-6.Q16-6.dll/g;' $EMACS_VER/lisp/term/w32-win.el.orig_patched > $EMACS_VER/lisp/term/w32-win.el

Emacsのビルド

MinGW64シェルから

EMACS_INSTALL_DIR=/c/app/$EMACS_VER
cd $EMACS_VER
./autogen.sh
PKG_CONFIG_PATH=$IMAGEMAGICK_DIR/lib/pkgconfig:$PKG_CONFIG_PATH ./configure --without-dbus --with-gnutls --prefix=$EMACS_INSTALL_DIR
make -j4 #4コアで
make install-strip
$EMACS_INSTALL_DIR/bin/runemacs.exe -Q

DLLのコピー

msys64/mingw64/bin/*.dll をEmacsのbinディレクトリへコピーする。

cp /mingw64/bin/*.dll $EMACS_INSTALL_DIR/bin

ビルドして生成されたImageMagick用のdllもコピーする。

cp $IMAGEMAGICK_DIR/bin/libMagickCore*.dll $EMACS_INSTALL_DIR/bin
cp $IMAGEMAGICK_DIR/bin/libMagickWand*.dll $EMACS_INSTALL_DIR/bin

その他の注意

MSYS2のライブラリパッケージがバージョンアップするとビルドが通らなくなったり通っても正しく動かなくなったりする場合があります。 emacs-26.2の時はlibgnutlsのバージョンアップに伴いSSL接続が正しく動かなくなった時がありました。 上記手順は2019-12-08にビルドが通ることを確認しました。