Railsの勉強中にひっかかったこと,それを解決するために参照したところ

後々のために,手順や参考にしたウェブページをメモしておく
随時更新する予定

Rubyのインストール

Rubyは,Homebrewを使ってrbenvを導入してインストールする.
普通にbrewでインストールするだけだが,一応次のウェブページをメモしておく.

qiita.com

$ brew install rbenv ruby-build
$ rbenv install -l

PATHに $HOME/.rbenv/bin:$PATH を追加したり,シェルのプロファイルに if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi を追加したりする.

$ rbenv install 2.4.1
$ rbenv global 2.4.1

この段階では2.4.1が最新版だったのでとりあえずそのままインストールする.これでrubyは使えるようになった.

Ruby on Railsのインストール

続いてRailsをインストールする.
先のウェブページにもインストール方法は書いてあるが,Bundlerの使い方・使う意味は次のWebページを参考にした.

qiita.com
qiita.com

ただし,Bundlerのインストールはそのままではうまくいかなかった.
Rubyのバージョンが不適切だというエラーメッセージがでてきたが,これはなぜかデフォルトでインストールされていたRubyがgemで使われていたのが原因らしい.
きちんとrbenvからインストールしたものを使うために,

$ rbenv exec gem install bundler

とする.バージョンに問題がなければrbenv execは除いてしまってかまわない(はず).

今は練習中なので,意味がきちんとわかるまではできるだけ復元しやすい状態にしておきたい.
そのため,Railsもローカルにインストールする.
次のWebページを参考にした.
qiita.com

プロジェクトのフォルダを作成後,そこへ移動して

$ rbenv exec bundle init

でGemfileが作成される.それを編集して(中にgem "rails"がコメントアウトされていると思うので,それを解除して)

$ bundle install --path vendor/bundle

Railsをインストールする.
※なかなか時間がかかるが,自分のネット環境のせいかもしれない
※先に述べたように,rbenv execはrubyのバージョンの問題だった.面倒なので以降では省略する.

Railsの使い方

新規にプロジェクトを作るには,

$ bundle exec rails new xxx --skip-bundle

とする.xxxにプロジェクト名を入れる.これでxxxというフォルダが作成される.
今はvender/bundleのなかにrailsが入っており,これを使うためにbundle execを最初につける.
同時に--skip-bundleをつけることで,installが実行されるのを防ぐ.

これでxxxというRailsプロジェクトができたので,ローカルにインストールしたRailsは不要になった.
それを消しておいてもよい.

$ rm -f Gemfile
$ rm -f Gemfile.lock
$ rm -rf .bundle
$ rm -rf vendor/bundle

続いて,

$ cd xxx
$ bundle install --path vendor/bundle
$ echo '/vendor/bundle' >> .gitignore

として,フォルダxxxの中に必要なGemをインストールする.
Gemfileは先のrails newコマンドで生成されているので,必要に応じて編集する.
最終行は,Gitで管理しなければ何の関係もないが,もし管理するならその対象からvendor/bundleを除くため.Gemfileが同期されれば問題なく環境も揃う.

ここまでがうまくいっていれば,

$ bundle exec rails server

Railsが起動する.Listening on tcp:...以降の部分をブラウザで表示して,きちんと Yay! You’re on Rails! という画面が表示されれば問題なし.

jfontmaps が見つからない(後継:ptex-fontmaps)

iMac (El Capitan) に TeX Live を再インストールしたらいくつかつまづいた部分があったので自分用にメモしておく.

まず brew cask から mactex の最新版をインストールして,そのあとに tlmgr update --self --all したらエラーが発生.
エラーメッセージに (not verified: gnupg not available) とでるが,brew から gnupg はインストールしてあったのでどういうことかとなった.
これは brew から gnupg2 をインストールして解決.
一応 gnupg を削除してからインストールしたが,削除の必要があるのか,1 と 2 の共存はできるのかなど疑問点はあるが今は無視.

次に TeX Wiki などに記載されている El Capitan 以降向けの案内に従って jfontmaps のバージョンを確認しようとするも,そもそもこいつが見つからない.
tlmgr info jfontmaps を実行すると

Packages containing `jfontmaps' in their title/description:
ptex-fontmaps - Font maps and configuration tools for Japanese/Chinese/Korean fonts with (u)ptex

Packages containing files matching `jfontmaps':
00texlive.image:
	tlpkg/tlpsrc/jfontmaps.tlpsrc

というメッセージが出た.
tlmgr info ptex-fontmaps を実行すると

package:     ptex-fontmaps
category:    Package
shortdesc:   Font maps and configuration tools for Japanese/Chinese/Korean fonts with (u)ptex
longdesc:    This package provides font maps and setup tools for Japanese, Korean, Traditional Chinese, and Simplified Chinese. It is the successor of the jfontmaps package. The files in this package contain font maps for dvipdfmx to make various Japanese/Chinese/Korean fonts available for (u)ptex and related programs and formats.
installed:   Yes
revision:    43012
sizes:       src: 1037k, doc: 53k, run: 757k, bin: 25k
relocatable: No
cat-version: 20170114.0
cat-date:    2017-01-16 04:30:56 +0100
cat-license: pdgpl3
cat-topics:  font-use japanese chinese korean
collection:  collection-langjapanese

と表示された.jfontmaps の後継で,中国語と韓国語も含まれているらしい.
ptex-fontmaps で検索したら
http://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=2123
https://okumuralab.org/bibun7/
が見つかった.きっとそのうち TeX Wiki も更新されるのだろう(人任せ).
しかし第7版が出る直前にこんな更新があったとは不運としかいいようがない(買ったわけじゃないけど).

【解決】Windows10のbashでapt-get updateができない(+α)と思っていたらカスペルスキーのせいだった件

[10/26追記]
カスペルスキーの最新版(カスペルスキーセキュリティ2017)へ更新することで解決できます.以前のOSと異なり,リリースの1週間前にならないと入手できないのですぐに開発ができなかったとのこと.つまりカスペルスキーに限らず,使えなくなると困るソフトウェアがあるなら今後もすぐにはアップデートはしないほうがいいということですね.

ちなみに以前のカスペルスキーはアンインストールしてあったのですが,何かファイルが残っていたらしく,削除ツールで完全に削除しないとインストールに失敗しました.環境に依存すると思いますが.

カスペルスキー製品のWindows 10 Anniversary Update対応 | Kaspersky Daily - カスペルスキー公式ブログ

KarabinerがmacOSに対応していなかったり,最新版のOSはWindowsでもMacでも様子見が大事ですね.

[追記ここまで]


Let's note S10にWindows10をインストールしてノリノリでアップデートしてbashを使おうとしたのにドツボにハマったということ.
bashをインストール後にとりあえずapt-get updateで更新しようとするも,Connection failedが大量発生した.

ネットとか見てると/etc/resolv.confに nameserver 8.8.8.8 を追加しろとかそのやり方は古い(resolv.confは自動更新されるため)とかいろいろあるけど,うまくいかない.

カスペルスキーの保護を停止しても同じだったが,カスペルスキーを終了させると動いた.
調べてみると同様の現象が多々報告されているらしい.
さらには,bashをexitしてからまた起動しようとすると反応しなかったのだが(Bash on ...から起動すると黒い画面のみで,cmdからbashで起動すると反応無し),これもカスペルスキーのせいだったようだ.

Bash shell for Win 10, Linux Subsystem for Windows - Kaspersky Lab Forum
Bash.exe hangs and the bash is unusable · Issue #703 · Microsoft/BashOnWindows · GitHub
Black Screen when running Bash on Ubuntu on Windows · Issue #705 · Microsoft/BashOnWindows · GitHub

運動量写像

数式を使ってなにか書いてみようと思い,ちょうどいいので運動量写像について自分の理解をまとめてみることにした.数学の内容ではあるが,物理屋の言葉で補足するようにする.そのため逆に数学的な厳密さはほとんど考えていない.

基本ベクトル場

 (P,\omega) をシンプレクティック多様体とする.Lie群  G がこれに作用しているとして,そのLie環を  \mathfrak{g} と書く.
 G の元  g は変換  P \times G \ni (x, g) \mapsto g \cdot x をもたらす(空間並進・空間回転など). \mathfrak{g} の元  \xi は無限小変換で,指数写像  \exp で撃ち出すことで  G の元になる.
その微分  \xi_P(x) = \left. \dfrac{d}{dt} \exp(t \xi) \cdot x\right|_{t=0} で定められるベクトル場  \xi_p \xi の基本ベクトル場という.つまり, \xi という無限小変換が生成する  P 上のベクトル場が基本ベクトル場である.

Hamiltonベクトル場

シンプレクティック多様体では, P 上の関数  f に対してHamiltonベクトル場  X_f = \{f, \cdot\} を作ることができる.物理屋にわかりやすいようにPoisson括弧で書いたが,シンプレクティック形式で書けば  \omega(X_f, \cdot) = df となる.
(注:シンプレクティック多様体を含む概念として,Poisson括弧に退化性=核の存在を許すPoisson多様体が存在する.Hamiltonベクトル場をPoisson括弧で定義することで,同じ議論がPoisson多様体に対して適用できる.)

運動量写像

 \xi \in \mathfrak{g} の生成する基本ベクトル場  \xi_p がHamiltonベクトル場 X_f になるような関数  f はもちろん存在するとは限らない.しかし仮に存在したとして,それを  J_\xi と書こう.つまり,無限小変換を生み出す関数=物理量である.この関数に  P の元=系の状態  x を与えることで物理量の値  J_\xi(x) が得られる.
さて,この関数  J_\xi には「無限小」という情報が入ってしまっているが,厳密には物理量として見るには余分だ.それをなくすために,Lie環  \mathfrak{g} とその双対  \mathfrak{g}^* の間のpairing  \langle \cdot, \cdot \rangle を使って  \langle J(x), \xi \rangle = J_\xi(x) となるような  J : P \to \mathfrak{g}^* を構成しよう.この  J を運動量写像と呼ぶ.

例:空間並進と運動量

シンプレクティック多様体に余接束  T^* \mathbb{R}^3 を考える.物理の言葉で言えば  (q_1,q_2,q_3,p_1,p_2,p_3) の属する相空間である.Lie群  G に空間並進を与える( q のみをずらし, p はそのまま)と,基本ベクトル場は  \xi_P(q,p) = \sum_i \xi_i \dfrac{\partial}{\partial q_i} で,対応する関数は  J_\xi(q,p) = \sum_i \xi_i p_i である.すなわち,運動量写像は運動量そのものになっている:  J(q,p) = p,  \langle J(q,p), \xi \rangle = \sum_i p_i \xi_i

他にも空間回転には角運動量が対応する.

Computer Modern絡みのエラーが起こったので解決を試みた

Windows 7TeXをアップデートしようと思っていつものようにTeXインストーラ 3で更新したらcmr関連のフォントエラーが発生しまくった.
具体的には,cmr10.tfmが見つからないといったもの.しかもamssymb.styも見つからないとのたまう.

原因を探していると,どうやら元々はあったはずのcmr10.tfmやamssymb.styがたしかに消えている.
AMS本家(http://www.ams.org/publicatins/authors/tex/amsfonts)からダウンロードして突っ込んでもあまりうまくいかない.

引き続き探していると

といった情報を発見した.
要するに必要なファイルがきちんとダウンロードされていないということ.

しかし2番目のウェブサイトでTeXのダウンロード先に指定されている
http://eplang.jp/w32tex/archive/2014/07/01/current/
は既に空.

ここでよく調べてみると,web2c-lib.tar.xz自体はダウンロードされていてC:\w32tex\downloadに存在していた.
こいつを解凍してみると,中身はtexmf-distだった(知らなかった...).
というわけでそのまますでにあるtexmf-distへ統合コピーすると,結構な割合が重複せずコピーされていった.
(半分くらいは同名ファイルが存在すると言われた)

これでコンパイルすると上手くPDFが作れた.

結論としては,web2c-lib.tar.xzのダウンロードをしているくせに解凍・コピーができていなかったのだろう.
そのうち忘れそうなのでここに書いておくことにした.

WindowsとMacでファイルを共有するときの注意

あけましておめでとうございます.

今までの記事を見返してみると「です・ます」と「である」が入り混じっていますが,その場の気分で書いているのでとくに修正しない予定です.

新年明けましたが相変わらずMacを購入したことによって起きた問題です.

最近ではDropbox,OneDrive,GoogleDriveなどのクラウドサービスを使っている人が多いと思いますが,この類のサービスを使うときに(USBメモリでファイルを移動させるときも同じかもしれませんが)文字コードの違いが原因でトラブルが発生しました.

日本語での「が」などの濁点が付いている場合に,Windows(やLinux)では「が」で1文字とするのですが,どうやらMacでは「か」+「゛」と分割した文字を結合させて表示しているのです.
他にはドイツ語などのウムラウトや,ハングル文字でも同様の問題が起こるようです.
これはWindowsMacで採用している「Unicode正規化」の手法が異なるのが原因のようです.

WindowsではNFC (Normalization Form Canonical Composition),MacではNFD (Normalization Form Canonical Decomposition)の変種を使っているとのことです.
前者がComposition=結合,後者がDecomposition=分解なので先の事例と
詳しいことはWikipedia (Unicode正規化 - Wikipedia)や少し検索するとヒットする他のブログなどを見てください(他人任せ).

上に挙げた3つのクラウドサービスでは,WindowsではNFCで処理し,MacではNFD(もどき)で処理しているようで,普通に使っていて特に問題は起こりませんでした.(Copyなど他のサービスは使っていないのでわかりません.)
ですが私はこれらの無料サービスでは容量が足りず,かと言って定期的にお金をとられるのも嫌だったので自前でQNAPというメーカーのNASを購入し,それのサービスの1つであるQsyncというソフトウェアを使ってきました.
www.qnap.com

速度は正直遅いものの,モバイル端末でもアクセスできるので非常に重宝していたのですが,これが上記のUnicode正規化の処理をきちんとしてくれませんでした.
起こる現象は以下のような流れです.

・まず,私は元々Windowsを使っていたところにMacを追加しました.
・すると,Macにファイルがコピーされていきます.
・ところが,このファイルは名前がNFDもどきで保存されるため,Qsyncは別のファイルが作られたとしてコピーします.
・最終的にWindows上にもNFDもどきで名付けられたファイルがコピーされます.
エクスプローラーでは見分けがつかないので,一見すると同じ名前のファイルが2つできます.
コマンドプロンプトで確認すると濁点が1文字として表示され,またバックスペースでは濁点だけが先に削除されます)

幾つか検索してみても解決策は見当たらず,ファイル名を英語に整えたり,エンコードを変更しようにもファイルが多すぎで途中で挫折したという話でした.

未解決のことばかり書き連ねていますが,ちゃんと解決したらまた書きますよ.きっと.

TeXstudio (in Mac OS X)でsh: makeindex: command not foundが起こるとき

再びMacを使っている時に起きた問題点の解決法について.

LaTeX複数の索引を作るときに使うスタイルファイルとして imakidx というものがある.これはtexファイルをコンパイルするときに同時にmakeindex(ほかのプログラムも選択可能)を実行させるように処理させるので非常に便利なのだが,記事のタイトルにあるようにMacで使おうとしたところ
sh: makeindex: command not found
とエラーが起きた.
パス自体は問題なく通っているのでターミナルから処理するとこのエラーは起こらないし,そもそも以前のWindowsではこんなことは起きなかった.

あれこれ設定を見ていると,「設定」→「ビルド」の中に「追加の検索パス」という項目があった(高度なオプションを有効にしないと現れないので注意).
その中の「コマンド($PATH)」が /usr/local/texlive/2012/bin/x86_64-darwin となっていたが,インストールしたのはTeXLive2015なので間違っていたわけだ.これを2012から2015に変えると無事エラーなしでコンパイルすることができた.

WindowsではW32TeXでインストールしているのでこの問題は起こらなかったのだろう(多分).