fork 先で、upstream での変更を取ってきて merge したい
Python2系なのに Blockly のビルドができない
(追記:2020年1月時点ですでに blockly は python 3 に対応しているようです。このページの情報は古い可能性があります。)
Blockly をローカル環境にクローンしてきて、ビルドしようとすると以下のようなエラーが出たのですが、 これはローカル環境に複数の python がインストールされていることが原因だったようです。
$ python2.7 build.py Traceback (most recent call last): File "i18n/create_messages.py", line 25, in <module> from common import read_json_file File "/Users/(略)/blockly/i18n/common.py", line 62 except ValueError, e: ^ SyntaxError: invalid syntax ... (以下略)
Blockly のコードは python2.7.x 系で動くことになっているので、2.7.10 と 2.7.16 の両方で試したのですが、同じエラーが出てしまいました。
エラーそのものは「except
を使うときにカンマが含まれているのがおかしい」というものですが、
2.7.x 系ではこのシンタックスはサポートされていることになっています。…謎です。
ネットを検索したら全く同じような状況に陥っている人がいて、その人は自分のローカル環境が原因だったと書いているので、 私も自分の環境の python たちを泣く泣くアンインストールすることにしました。
私の環境は以下のようになっています。
- MacOS Mojave 10.14.5
- Homebrew と anaconda の両方を使っています
- Homebrew で python2.x 系と python3.x 系を両方インストール済みで、それぞれ
python2.7
python3.6
というコマンドで動かすことができる
とにかく何が原因なのかわからないので、anaconda を uninstall し、その後 homebrew でインストールされている python を消します。
Homebrew では複数のパッケージで python に依存しているので、普通に brew uninstall
しようとすると warning が出てきます。
そこで --ignore-dependencies
というオプションをつけて強制的に uninstall してみます…。
$ conda install anaconda-clean $ anaconda-clean $ brew uninstall python3 --ignore-dependencies $ brew uninstall python@2 --ignore-dependencies
ひとまずこの状態で python という名前を含むコマンドを探すと以下のようになります。
$ python [tab] [tab] python python2.7 pythonw python-config python2.7-config pythonw2.7
このとき、python コマンドの指すものは /usr/bin
にあるもの(もともと MacOS に入っているもの)になっています。
$ which python /usr/bin/python $ which python2.7 /usr/bin/python2.7 $ python --version Python 2.7.10 $ python2.7 --version Python 2.7.10
この状態でもう一度 blockly のビルドをすると成功しました!(ここまで頑張って uninstall してもうまくいかなかったら逆に悲しい)
uninstall してしまった python たちはまたあとで少しずつ install してあげようと思います…。
Apple 製品の購入日を調べたい
Agda のモジュール読み込みのエラー
Agda のモジュール読み込みのエラー
Agda 2.5.2 で import my-module-file as M
のようにしてファイルを開こうとすると、
Module cannot be imported since it has open interaction points when scope checking the declaration import my-module-file as M
というエラーが出ますが、これは元ファイル (my-module-file.agda
) に示すべき Goal が残っているのが
原因のようです。
Hole を埋めてあげて、*All Done*
の状態にしてあげればモジュールとして読み込めました。
Bibtex 備忘録
文章を書いた TeX ファイルに何を加えれば参考文献を表示できるか、忘れないようにメモしておきます。
[更新 2020-01-28: @misc
の使い方を補足しました]
手順
1. TeX ファイルに参考文献を付け加える
メインの .tex ファイルの \begin{document}
と \end{document}
で挟まれてる部分に、
\bibliographystyle{jplain} \bibliography{paper} % paper.bib というファイル名なら paper とかく
を加える。jplain
は日本語論文でABC順で文献を並べるという意味。
詳しくは http://ideas.paunix.org/latex/latex_6_bib.htm#bibstyle をみるべし。
2. Makefile を編集
Makefile をこんな感じにする。すると、make ファイル名.pdf
で組版できる。
.SUFFIXES: .tex .pdf all : @echo usage: make filename.pdf / make clean .tex.pdf : platex $< pbibtex $* platex $< platex $< dvipdfmx $* clean : rm -f *.ps *.bak *.dvi *.aux *.log *.toc *.bbl *.blg *.out *.ptb
3. Bib ファイルを作る
英語論文の引用の場合、タイトルの中でアルファベットを大文字にしたいところを {}
で囲ってあげればよい。
@InProceedings{文献, title={{T}itle {O}f {T}he {P}ublication}, author={著者}, journal={ジャーナル}, pages={227--238}, year={2000} }
このフォーマットを自分で書くのは時間の無駄なので、Google Scholar の Chrome 拡張が非常に便利。 chrome.google.com
@InProceedings
,@article
,@book
,@phdthesis
などはよく使う。ウェブサイトなどの引用は@misc
が便利。
@misc{BibTex, author={{Alexander Feder}}, title={{Using BibTeX}}, howpublished="\url{http://www.bibtex.org/Using/}", year=2006, note={[Online; accessed 28-Jan-2020]} }
pages
,author
などはPAGES
,AUTHOR
と大文字で書いても問題ない。- 自分の過去の論文を引用したいが、これから収録される場合は
note={to appear, 11 pages}
などとすればいいらしい。
4. 引用する
.tex ファイル中で \cite{文献名}
とする。引用が一つもないと、次のように「一つも引用してませんよ!」
とエラーを出してくれるので、とりあえずダミーの引用でも入れておけばよい。
This is pBibTeX, Version 0.99d-j0.33 (utf8.euc) (TeX Live 2017) The top-level auxiliary file: sample.aux The style file: jplain.bst I found no \citation commands---while reading file sample.aux Database file #1: paper.bib (There was 1 error message)
stack build でエラーが出る
Haskell のパッケージ管理システム便利版の stack というものをいじっていてビルドしようとした際に出たエラーの対処法です。
cabal の他に新しくできた stack というものは、パッケージ依存性の問題(cabal hell
)を解決するようにできているそうです。便利。
stack build できない
stack では、YAML形式の設定ファイルを読み込んでビルドしていくのですが、それを行おうとすると構文解析に失敗します。
Could not parse '(略)/stack.yaml': Aeson exception: Error in $['extra-deps'][0]: failed to parse field 'extra-deps': expected PackageIdentifier, encountered Object See http://docs.haskellstack.org/en/stable/yaml_configuration/
エラーによれば、extra-deps
の一つ目で詰まったようです。私のファイルでは
extra-deps: - git: [リポジトリのURL] commit: [特定のコミット]
という部分の - git:
と書いているところが怒られていて、ここにはパッケージの名前が入るべきだと言われていますが、ネットで調べた限りはこれは一応書き方としては間違っていないようですね…
stack のバージョンをあげる
原因は stack のバージョンがあまりにも古いことにあったようです。調べたところ私の stack はなんと version 1.3.2 (2016年12月) でした。 version 1.5.1 よりも古いと上記のエラーが出てしまうみたいです。
$ stack upgrade Current Stack version: 1.3.2, available download version: 1.9.1 Newer version detected, downloading Querying for archive location for platform: osx-x86_64-static Querying for archive location for platform: osx-x86_64 Downloading from: https://github.com/commercialhaskell/stack/releases/download/v1.9.1/stack-1.9.1-osx-x86_64.tar.gz Download complete, testing executable Version 1.9.1, Git revision f9d0042c141660e1d38f797e1d426be4a99b2a3c (6168 commits) x86_64 hpack-0.31.0 New stack executable available at (ホームディレクトリ)/.local/bin/stack
新しい stack がダウンロードできたので、/usr/local/bin
の stack のリンクを貼り替えます。
リンク先のパスを知るには readlink
コマンドが使えます。
$ readlink stack /Library/Haskell/ghc-8.0.2-x86_64/bin/stack
正しくリンクを貼り替えられたようです。この後、stack build
もうまくいきました。
$ stack --version Version 1.9.1, Git revision f9d0042c141660e1d38f797e1d426be4a99b2a3c (6168 commits) x86_64 hpack-0.31.0